Skip to main content

ClayMatic.sol

Main csMATIC contract for Ethereum staking.

getExchangeRate()​

Returns the current exchange rate accounting for any slashing or donations and a boolean value indicating whether a slashing event has occurred (Note: Slashing is not currently enabled on Polygon).

function getExchangeRate() returns (uint256, bool)

getNodes()​

Returns Information regarding nodes that protocol supports and respective staked amount on each node.

function getNodes() returns (StakingNode[], uint256[])

StakingNode Structure:​

NameTypeDescription
iduint256Validator node Id
validatorAddressaddressValidator node address
pointsuint256Points allocated to validator
stakeduint256Total amount of stake on validator

getLiquidityCsToken()​

Returns total liquidity of csToken available for Flash Exit without considering external pools.

function getLiquidityCsToken() returns (uint256)

getMaxWithdrawAmountCs()​

Returns maximum amount of csToken that can be withdrawn in a given transaction.

function getMaxWithdrawAmountCs() returns (uint256)

getEpoch()​

Returns current epoch in Polygon's StakeManager contract & Withdrawal delay.

function getEpoch() returns (uint256, uint256)

funds()​

Returns all protocol's funds.

function funds() returns (Funds)

Funds Structure:​

NameTypeDescription
currentDeposituint256Total number of tokens deposited by users
stakedDeposituint256Total number of tokens currently staked on nodes
accruedFeesuint256Total fees accrued by protocol

fees()​

Returns all types protocol's fees. Protocol uses 2 point decimal precision(i.e base unit is 10000)

function fees() returns (Fees)

Fees Structure:​

NameTypeDescription
depositFeeuint256Fee percent on deposit
withdrawFeeuint256Fee percent on withdraw
instantWithdrawFeeuint256Fee percentage on instant withdraw
rewardFeeuint256Fee percent on accrued rewards

withdrawOrders()​

Returns information regarding withdraw order for given user address and oderId.

function withdrawOrders(address, uint256) returns (WithdrawOrder)

WithdrawOrder Structure:​

NameTypeDescription
amountuint256Total amount of tokens unstaked from validators by user
feeuint256Fee percentage to be paid by the user
orderIdsuint256[]List of order ids from the validators
nodeIdsuint256[]List of corresponding nodeIds

deposit()​

Sends underlying tokens to contract and mints csToken to msg.sender.

function deposit(uint256 amountToken) returns (bool)

Note: Requirements:

  • msg.sender must have approved amountToken of Token to this contract.

Parameters:​

NameTypeDescription
_amountTokenuint256Amount of underlying tokens sent from msg.sender to this contract

Returns:​

Bool confirmation of transaction.

depositDelegate()​

Sends Token to contract and mints csToken to delegator.

function deposit(uint256 amountToken, uint256 delegator) returns (bool)

Note: Requirements:

  • msg.sender must have approved amountToken of Token to this contract.

Parameters:​

NameTypeDescription
amountTokenuint256Amount of Token sent from msg.sender to this contract
delegatoraddressAddress of entity receiving csToken

Returns:​

Bool confirmation of transaction.

withdraw()​

Burns csToken from user, un-stake respective amounts of tokens from validator node(s) and creates a withdraw order.

function withdraw(uint256 amountCs) returns (uint256)

Note: Requirements:

  • msg.sender must have approved amountCs of csToken to this contract.

Parameters:​

NameTypeDescription
amountCsuint256Amount of csToken to be withdrawn

Returns:​

Withdraw Order ID.

claim()​

Checks the validity of given orderIds, claims tokens from the corresponding validators nodes and transfers the amount to user.

function claim(uint256[] orderIds) returns (bool)

Note: Requirements:

  • All orderIds must have fulfilled the un-bonding period.

Parameters:​

NameTypeDescription
orderIdsuint256[]Array of withdraw order ids issued at withdraw()

Returns:​

Bool confirmation of transaction.

instantWithdraw()​

Burns csToken from user and instantly returns Token to user.

function instantWithdraw(uint256 amountCs) returns (bool)

Note: Requirements:

  • msg.sender must have approved amountCs of csToken to this contract.
  • Contract must have sufficient liquidity.

Parameters:​

NameTypeDescription
amountCsuint256Amount of csToken to be withdrawn

Returns:​

Bool confirmation of transaction.

autoBalance()​

Claims rewards, transfers fees to vault and stakes into nodes

function autoBalance() returns (bool)

Returns:​

Bool confirmation of transaction.

Revert Codes​

Deposit Codes (D)​

  • CD01: Deposit amount cannot be zero
  • CD02: Deposit limit reached
  • CD03: Minting csToken failed
  • CD04: Delegator can not be zero address
  • CD05: Token not supported for swap
  • CD06: minOutputAmount cannot be zero
  • CD07: clayExchange deposit failed

Withdraw Codes (W)​

  • CW01: Withdraw amount cannot be zero
  • CW02: Insufficient csToken user balance
  • CW03: Invalid token amount
  • CW04: csToken burning failed

Claim Codes (C)​

  • CC01: Invalid order ID
  • CC02: Insufficient balance of Token in contract
  • CC03: Unbonding period ongoing, claim not available

Instant Withdraw (Flash Exit) Codes (I)​

  • CI01: Flash exit amount cannot be zero
  • CI02: Flash exit is deactivated
  • CI03: Insufficient csToken user balance
  • CI04: Insufficient liquidity in contract
  • CI05: csToken burning failed on Flash Exit

Migrations Codes (M)​

  • CM01: Amount to migrate cannot be zero
  • CM02: Target validator is a foundation node
  • CM03: Target validator is locked
  • CM04: Migrated amount greater than staked amount

Staking Codes (S)​

  • CS01: Insufficient amount in contract for staking
  • CS02: Token approval to stakeManager failed
  • CS03: Transfer to ClayStaker failed

Balancing Codes (B)​

  • CB01: Unbalanced contract
  • CB02: Change is exchange rate is above allowed limit

Operations Codes (O)​

  • CO00: Invalid Admin credentials
  • CO01: csToken can not be zero address
  • CO02: Token address cannot be zero address
  • CO03: vaultManager cannot be zero address
  • CO04: roleManager contract cannot be zero address
  • CO05: stakeManager cannot be zero address
  • CO06: Invalid percentage value
  • CO07: Invalid fee type
  • CO08: Validator list and points list are not consistent
  • CO09: Validator address cannot be zero address
  • CO10: Invalid validator
  • CO11: Invalid array lengths updating nodes
  • CO12: Deactivating a node with an active stake is not allowed
  • CO13: Node not in active like, invalid deactivation
  • CO14: Max nodes to withdraw can not be zero
  • CO15: Over-staking threshold can't be higher than 20%
  • CO16: Deposit fee above max limit
  • CO17: Withdraw fee above max limit
  • CO18: Instant Withdraw fee above max limit
  • CO19: Reward fee above max limit
  • CO20: Staking fee above max limit
  • CO21: Node id list and amounts are not consistent
  • CO22: clayExchange cannot be zero address
  • C023: swapRouter cannot be zero address
  • CO24: wrappedToken cannot be zero address
  • CO25: deadlineDelay cannot be less than current timeStamp
  • CO26: epochManager cannot be zero address

Token Transfer Codes (T)​

  • CT01: transferTo address cannot be zero
  • CT02: amount cannot be zero
  • CT03: Insufficient liquidity
  • CT04: Token transfer failed
  • CT05: Insufficient balance
  • CT06: Insufficient allowance