Appearance
Solidity API
PaymentCommitment
The Payment Commitment Contract facilitates collateral-backed commitments between a committer and a committee using tokenized assets. Underpinned by token exchange protocol, this allows deposits, withdrawals, and refutations over the payment cycle with custom data-driven conditions governing finer details.
referenceId
solidity
string referenceId
committee
solidity
address committee
COMMITTER
solidity
address COMMITTER
CommitmentStatus
solidity
enum CommitmentStatus {
DRAFTING,
INITIATED,
ACCEPTED,
CONTINGENT,
EFFECTIVE,
DISCHARGING,
DISCHARGED
}
status
solidity
enum PaymentCommitment.CommitmentStatus status
DischargeStatus
solidity
enum DischargeStatus {
OPEN,
DISCHARGE_INITIATED,
DISCHARGE_REFUTED,
DISCHARGED
}
dischargeStatus
solidity
enum PaymentCommitment.DischargeStatus dischargeStatus
tradeTokenAddress
solidity
address tradeTokenAddress
tradeTokenValue
solidity
uint256 tradeTokenValue
commitmentDate
solidity
uint256 commitmentDate
dueDate
solidity
uint256 dueDate
ConditionStatus
solidity
enum ConditionStatus {
NULL,
UNFULFILLED,
FULFILLMENT_INITIATED,
FUlFILLMENT_REFUTED,
FULFILLED
}
ConditionRequiredFields
solidity
enum ConditionRequiredFields {
COMPLETE_COLLATERAL_DEPOSIT,
TRADE_TOKEN_ADDRESS,
TRADE_TOKEN_VALUE
}
ChangeRequestTypes
solidity
enum ChangeRequestTypes {
TRADE_TOKEN_VALUE,
DUE_DATE
}
Condition
solidity
struct Condition {
enum PaymentCommitment.ConditionStatus status;
struct PaymentCommitment.FieldRequirement[] requiredFields;
address fulfiller;
uint256 fulfillmentRequestTimestamp;
}
FieldRequirement
solidity
struct FieldRequirement {
enum PaymentCommitment.ConditionRequiredFields field;
bytes value;
}
conditions
solidity
mapping(uint256 => struct PaymentCommitment.Condition) conditions
conditionIds
solidity
uint256[] conditionIds
refutationWindow
solidity
uint256 refutationWindow
disputeResolver
solidity
address disputeResolver
collateralOwners
solidity
address[] collateralOwners
PaymentCommitmentInvalidAddress
solidity
error PaymentCommitmentInvalidAddress(address receivedAddress)
PaymentCommitmentConditionAlreadyExists
solidity
error PaymentCommitmentConditionAlreadyExists(uint256 conditionId)
PaymentCommitmentInvalidConditionStatus
solidity
error PaymentCommitmentInvalidConditionStatus(enum PaymentCommitment.ConditionStatus conditionStatus)
PaymentCommitmentTransferFailed
solidity
error PaymentCommitmentTransferFailed(address token, address to, uint256 value)
Custom error for failed ERC-20 token transfers
PaymentCommitmentInvalidStatus
solidity
error PaymentCommitmentInvalidStatus(enum PaymentCommitment.CommitmentStatus status)
Custom error for invalid deposit state
PaymentCommitmentUnauthorizedCaller
solidity
error PaymentCommitmentUnauthorizedCaller(address sender)
PaymentCommitmentInvalidConditionId
solidity
error PaymentCommitmentInvalidConditionId(uint256 conditionId)
PaymentCommitmentInvalidDischargeStatus
solidity
error PaymentCommitmentInvalidDischargeStatus(enum PaymentCommitment.DischargeStatus dischargeStatus)
PaymentCommitmentUnauthorizedCollateralWithdrawal
solidity
error PaymentCommitmentUnauthorizedCollateralWithdrawal(uint256 dueDateTill, enum PaymentCommitment.CommitmentStatus status)
PaymentCommitmentDueDateNotPassed
solidity
error PaymentCommitmentDueDateNotPassed(uint256 currentTime, uint256 dueDate)
PaymentCommitmentActiveRefutationWindow
solidity
error PaymentCommitmentActiveRefutationWindow(uint256 currentTime, uint256 refutationWindowTill)
PaymentCommitmentUnauthorizedResolver
solidity
error PaymentCommitmentUnauthorizedResolver(address sender, address disputeResolver)
PaymentCommitmentUnauthorizedCollateralTransfer
solidity
error PaymentCommitmentUnauthorizedCollateralTransfer()
StatusUpdated
solidity
event StatusUpdated(enum PaymentCommitment.CommitmentStatus newStatus)
TradeTokenValueUpdated
solidity
event TradeTokenValueUpdated(uint256 oldValue, uint256 newValue)
DueDateUpdated
solidity
event DueDateUpdated(uint256 oldValue, uint256 newValue)
DischargeStatusUpdated
solidity
event DischargeStatusUpdated(enum PaymentCommitment.DischargeStatus newValue)
TokensWithdrawn
solidity
event TokensWithdrawn(address from, address token, uint256 value, address to)
TokensDeposited
solidity
event TokensDeposited(address depositor, address token, uint256 value, uint256 tokenId)
ConditionFulfillmentInitiated
solidity
event ConditionFulfillmentInitiated(address fulfiller, uint256 conditionId)
ConditionFulfilled
solidity
event ConditionFulfilled(uint256 conditionId)
ConditionFulfillmentRefuted
solidity
event ConditionFulfillmentRefuted(address refuter, uint256 conditionId)
ConditionFulfillmentCancelled
solidity
event ConditionFulfillmentCancelled(address sender, uint256 conditionId)
DischargeRefuted
solidity
event DischargeRefuted(address refuter)
DischargeCancelled
solidity
event DischargeCancelled()
DischargeInitiated
solidity
event DischargeInitiated()
DischargeCompleted
solidity
event DischargeCompleted()
constructor
solidity
constructor(address _initialOwner, address _committer, string _erc1155uri) public
initiate
solidity
function initiate(string _referenceId, address _committee, address _tradeTokenAddress, uint256 _tradeTokenQty, uint256 _commitmentDate, uint256 _dueDate, uint256 _refutationWindow, address _disputeResolver) external
addCondition
solidity
function addCondition(uint256 _conditionId, enum PaymentCommitment.ConditionRequiredFields[] _requireFieldsField, bytes[] _requireFieldsValue, address _fulfiller) external
getConditionRequiredFields
solidity
function getConditionRequiredFields(uint256 _conditionId) external view returns (struct PaymentCommitment.FieldRequirement[])
Retrieves the required fields for a given condition.
Returns an array of FieldRequirement
structs for the specified condition.
Parameters
Name | Type | Description |
---|---|---|
_conditionId | uint256 | The ID of the condition. |
Return Values
Name | Type | Description |
---|---|---|
[0] | struct PaymentCommitment.FieldRequirement[] | An array of FieldRequirement structs containing the required fields. |
getConditionCount
solidity
function getConditionCount() public view returns (uint256)
getAllConditionIds
solidity
function getAllConditionIds() public view returns (uint256[])
accept
solidity
function accept() external
deposit
solidity
function deposit(address _token, uint256 _value, address _to) external
Allows depositing ERC-20 tokens into the contract.
Mints ERC-1155 tokens equivalent to the deposited ERC-20 tokens and moves the status to contingent/effective when complete collateral value has been deposited.
Parameters
Name | Type | Description |
---|---|---|
_token | address | The address of the ERC-20 token to deposit. |
_value | uint256 | The amount of the token to deposit. |
_to | address |
changeRequest
solidity
function changeRequest(enum PaymentCommitment.ChangeRequestTypes _changeRequestType, bytes newValue) external
initiateConditionFulfillment
solidity
function initiateConditionFulfillment(uint256 _conditionId) external
completeConditionFulfillment
solidity
function completeConditionFulfillment(uint256 _conditionId) external
refuteConditionFulfillment
solidity
function refuteConditionFulfillment(uint256 _conditionId) external
cancelConditionFulfillment
solidity
function cancelConditionFulfillment(uint256 _conditionId) external
initiateDischarge
solidity
function initiateDischarge() external
completeDischarge
solidity
function completeDischarge() external
refuteDischarge
solidity
function refuteDischarge() external
cancelDischarge
solidity
function cancelDischarge() external
withdraw
solidity
function withdraw(address _token, uint256 _value, address _to) external
Withdraw owner ERC-1155 tokens from the contract to original ERC-20.
_The caller must own equivalent ERC-1155 tokens for the same ERC-20 contract being withdrawn.
- for the tradeToken used as collateral, this ensures that the due date has passed_
Parameters
Name | Type | Description |
---|---|---|
_token | address | The address ERC-20 to be withdrawn from ERC-1155 deposited balances. |
_value | uint256 | The amount of tokens to withdraw. |
_to | address | The address to credit the withdrawn ERC-20 tokens. |
safeTransferFrom
solidity
function safeTransferFrom(address from, address to, uint256 id, uint256 value, bytes data) public
See {IERC1155-safeTransferFrom}.
safeBatchTransferFrom
solidity
function safeBatchTransferFrom(address from, address to, uint256[] ids, uint256[] values, bytes data) public
See {IERC1155-safeBatchTransferFrom}.
_isCompatibleERC20
solidity
function _isCompatibleERC20(address token) internal returns (bool, string)
Verifies if the given address is a valid ERC20 token by checking the presence of the transfer, transferFrom, and allowance functions using staticcall.
Parameters
Name | Type | Description |
---|---|---|
token | address | The token address to verify. |
Return Values
Name | Type | Description |
---|---|---|
[0] | bool | _isCompatibleERC20 True if the address is a valid ERC20 token (with the required functions). |
[1] | string |
_deleteCondition
solidity
function _deleteCondition(uint256 _conditionId) internal
_addCollateralOwner
solidity
function _addCollateralOwner(address _owner) internal
_removeCollateralOwner
solidity
function _removeCollateralOwner(address _owner) internal
_isCollateralOwner
solidity
function _isCollateralOwner(address _owner) internal view returns (bool)