Skip to content

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

NameTypeDescription
_tokenaddressThe address of the ERC-20 token to deposit.
_valueuint256The amount of the token to deposit.
_toaddress

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

NameTypeDescription
_tokenaddressThe address ERC-20 to be withdrawn from ERC-1155 deposited balances.
_valueuint256The amount of tokens to withdraw.
_toaddressThe 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

NameTypeDescription
tokenaddressThe token address to verify.

Return Values

NameTypeDescription
[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)