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
collateralToken
solidity
address collateralToken
collateralValue
solidity
uint256 collateralValue
commitmentDate
solidity
uint256 commitmentDate
dueDate
solidity
uint256 dueDate
ConditionStatus
solidity
enum ConditionStatus {
NULL,
UNFULFILLED,
FULFILLMENT_INITIATED,
FUlFILLMENT_REFUTED,
FULFILLED
}
ChangeTypes
solidity
enum ChangeTypes {
COLLATERAL_VALUE,
DUE_DATE
}
Condition
solidity
struct Condition {
enum PaymentCommitment.ConditionStatus status;
address fulfiller;
uint256 fulfillmentRequestTimestamp;
}
conditions
solidity
mapping(uint256 => struct PaymentCommitment.Condition) conditions
conditionIds
solidity
uint256[] conditionIds
refutationWindow
solidity
uint256 refutationWindow
disputeResolver
solidity
address disputeResolver
dischargeInitiateTimestamp
solidity
uint256 dischargeInitiateTimestamp
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()
PaymentCommitmentInvalidValueChange
solidity
error PaymentCommitmentInvalidValueChange(uint256 current, uint256 newValue, uint256 lowerBound, uint256 upperBound)
StatusUpdated
solidity
event StatusUpdated(enum PaymentCommitment.CommitmentStatus newStatus)
CollateralValueUpdated
solidity
event CollateralValueUpdated(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)
ConditionAdded
solidity
event ConditionAdded(uint256 conditionId, address fulfiller)
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 _collateralToken, uint256 _tradeTokenQty, uint256 _commitmentDate, uint256 _dueDate, uint256 _refutationWindow, address _disputeResolver) external
addCondition
solidity
function addCondition(uint256 _conditionId, address _fulfiller) external
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 |
requestChange
solidity
function requestChange(ChangeTypes _changeType, 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)