Suzaku Protocol
Curator Guide

Curator Guide

🚧
This section is under construction.

Collateral Class Selection

When setting up a Vault, one of the key decisions is selecting the Collateral token. This token must match one of the Collateral classes supported by the L1 chain(s) the Curator wants to delegate to.

Each Collateral token belongs to exactly one Collateral class (primary or secondary) for each L1. For detailed information on Collateral classes, see Collateral Classes.

  • Primary Collateral: The L1's native token or a derivative. Required for validators to meet the L1's requirement.
  • Secondary Collateral: Additional tokens (such as stablecoins or other assets) required in L1s using dual-staking for additional security.

A Vault can only hold one type of Collateral. Curators need to choose which class they want to support based on market availability, liquidity, and the L1 requirements they want to meet.

Vault Configuration

Vaults can be created with the DeployVaultFull.s.sol script, which ultimately calls IVaultTokenized.initialize(). The key parameters to set are:

  1. collateral
    • The Collateral stakable into the Vault. This will be matched with L1 staking requirements that have this Collateral in one of their asset class (primary or secondary).
  2. epochDuration
    • Time (in seconds) for each vault epoch (e.g., 604800 = 7 days).
  3. Deposit Settings
    • depositWhitelist: Whether to restrict Collateral deposits to addresses in the allowlist.
    • isDepositLimit / depositLimit: These parameters determine whether to cap the total Vault deposit.
  4. Admin Roles
    • defaultAdminRoleHolder: The top-level admin (can be 0x0 if Vault needs to be immutable).
    • Whitelist/limit roles if needed.
  5. Delegator
    • L1RestakeDelegator is set on deployment. Once chosen, it cannot be replaced.

Because Suzaku's principal slashing is unimplemented, Curators should pass address(0) for the slasher—no actual token burn will occur.


Delegator Module: L1RestakeDelegator

When a Vault is deployed, the L1RestakeDelegator controls how the stake is distributed among L1s/operators:

  • setL1Limit(l1, collateralClassId, amount)
    • Declares how much total stake goes to that L1 (up to amount). This is set by the curator and should be lower than the maxL1Limit set by the Avalanche L1.
  • setOperatorL1Shares(l1, collateralClassId, operator, shares)
    • Attributes shares of the Vault to an operator.
  • The operator's final stake is:
    operator_stake = (operator_shares / total_shares_for_L1) * min(vault_active_stake, l1Limit)

Allocations can be updated by the OPERATOR_L1_SHARES_SET_ROLE role.


Deposit & Withdrawal Mechanics

Deposits

  • vault.deposit(onBehalfOf, amount)
    • Mints "active shares" representing the Curator's stake portion.
    • Checks whitelist/limits if enabled.

Withdrawals

  • Epoch Delay:
    • vault.withdraw(claimer, amount) burns active shares, mints "withdrawal shares," claimable next epoch.
  • vault.claim(recipient, epoch)
    • After that epoch boundary, claim to finalize the withdrawal.

The Vault updates activeStake each epoch. Delegated stake is derived from activeVaultBalance.


Slashing Policy

  • No principal slashing currently. A misbehaving operator merely loses rewards or gets undelegated.
  • If a "slasher" address is set to 0, no tokens are actually burned.

Detailed Parameter Explanations

  1. collateral

    • The ERC-20 token for staking. Must appear in the L1's Collateral class.
  2. burner

    • Address for slashed tokens.
  3. epochDuration

    • Epoch length in seconds.
  4. depositWhitelist (bool)

    • true → deposit only from whitelisted addresses.
  5. isDepositLimit (bool)

    • true → enforce global deposit cap.
  6. depositLimit (uint256)

    • The max total deposit if isDepositLimit is true.
  7. defaultAdminRoleHolder

    • Address with DEFAULT_ADMIN_ROLE.
  8. depositWhitelistSetRoleHolder

    • Admin to enable/disable depositWhitelist.
  9. depositorWhitelistRoleHolder

    • Admin to manage whitelisted addresses.
  10. isDepositLimitSetRoleHolder

    • Admin to enable/disable deposit cap.
  11. depositLimitSetRoleHolder

    • Admin to change numeric depositLimit.
  12. name and symbol

    • For the ERC-20 Vault share token.