Skip to main content

On-chain contracts

Sentico matches orders off-chain and uses contracts on Arbitrum One (chain ID 42161) for collateral custody and state commitments.

Private beta, not a public launch

These contracts are live on a public chain, but the venue remains a capped, whitelisted private beta. The contracts and the complete system have not yet completed the external audit required for a public launch.

Current deployment​

ContractNetworkAddressCurrent role
MultiCollateralVaultArbitrum One0xd1f0fffb736d75fd402121eb14bdc46bfe80ca02Holds supported collateral and executes the withdrawal/emergency paths
StateCommitmentArbitrum One0xf88424085805b55ac6ad584aa9bb8e1f8eb6cf89Stores publisher-quorum state checkpoints; owner() is the TimelockController below
TimelockControllerArbitrum One0x4e2b7ac35b42dac4266ff375799db7409ae1916248-hour governance timelock; owner of StateCommitment, admin and governor of the vault

Never obtain an address from a direct message or search result. Compare it with this page and verify the bytecode and current roles on Arbiscan.

What is live​

  • Checkpoints require a 7-of-10 publisher quorum.
  • The production scheduler targets one checkpoint per hour.
  • At the 2026-09-04 review latestCheckpointId() returned 1005, requireExitRoot() was true, and the contract was unpaused.
  • Registered collateral (checked in GET /api/v1/public/assets on 2026-09-14): USDC, USDT, WETH (listed as ETH in the asset registry), WBTC, ARB, CKT, TCO, and FYT — all with deposits, withdrawals, and trading enabled. TCO and FYT are Launchpad assets flagged unaudited: true.
  • USDC is native Arbitrum USDC 0xaf88d065e77c8cC2239327C5EDb3A432268e5831, not bridged USDC.e. Each asset's assetId is keccak256(abi.encode(token, decimals, chainId)); the assets route publishes the current ids.
  • deposit(assetId, amount) and depositWithPermit credit msg.sender only; there is no deposit-for-another-account. A deposit sent from a custodian or exchange address credits that address, not yours.
  • Engine credit arrives about 15–20 minutes after the on-chain deposit, once the vault listener has seen the required confirmations. The engine credits an asset only when its vault listener is configured for it; confirm a credit in GET /api/v1/accounts/{account}/bootstrap (engine truth). The lighter GET /api/v1/accounts/{account} read can omit recently added assets.

The dynamic protocol endpoints under /api/v1/protocol/* and the chain itself override copied checkpoint numbers or status values on this page.

Current authority model​

Verified on-chain on 2026-09-04 with read-only eth_calls:

PowerHolder today
StateCommitment.owner()TimelockController 0x4e2b…9162 (48-hour delay). It is a contract, so renounceOwnership and EOA transfers are blocked by the contract rules.
Vault DEFAULT_ADMIN_ROLETimelockController and the pre-timelock governor EOA 0x3352…9491
Vault GOVERNOR_ROLETimelockController and the same EOA
Vault GUARDIAN_ROLEThe same EOA (emergency pause)
Vault WITHDRAW_EXECUTOR_ROLEOperational executor signer
Checkpoint publishersFixed 10-slot set, 7 signatures required

The Timelock is driven by a 3-of-4 governance Safe whose signers include two cloud-HSM keys; the Safe holds no direct vault role, so every parameter change passes the 48-hour delay. The residual EOA roles are the open item. As long as 0x3352…9491 still holds DEFAULT_ADMIN_ROLE, a compromise of that key bypasses the timelock. Revoking it is itself a timelocked governance action and must be proven on-chain before public launch. Read the current state as "timelock governance live, legacy admin not yet revoked", not as the finished target model.

Custody flow​

See MultiCollateralVault, StateCommitment, and the Trust Model for mechanics and limitations.