Skip to content

IStakingService 质押服务

代币质押操作(可选服务)


职责

管理代币质押、解除质押、领取奖励等操作。

注意:此服务为可选服务,仅支持质押功能的链需要实现。


接口定义

IStakingService {
  // 获取质押信息
  getStakingInfo(address: Address): StakingInfo
  
  // 获取可用验证者列表
  getValidators(options?: ValidatorOptions): Validator[]
  
  // 质押
  stake(params: StakeParams): UnsignedTransaction
  
  // 解除质押
  unstake(params: UnstakeParams): UnsignedTransaction
  
  // 领取奖励
  claimRewards(address: Address, validator?: Address): UnsignedTransaction
  
  // 重新委托(更换验证者)
  redelegate(params: RedelegateParams): UnsignedTransaction
  
  // 获取质押 APY
  getStakingAPY(): number
}

数据结构

StakingInfo

StakingInfo {
  // 总览
  totalStaked: bigint           // 总质押量
  totalRewards: bigint          // 待领取奖励
  
  // 委托详情
  delegations: Delegation[]
  
  // 解绑中
  unbonding: UnbondingEntry[]
  
  // 汇总
  availableBalance: bigint      // 可用余额
  stakingRatio: number          // 质押占比
}

Delegation {
  validator: ValidatorInfo
  amount: bigint
  rewards: bigint
  startTime: number
}

UnbondingEntry {
  validator: ValidatorInfo
  amount: bigint
  completionTime: number        // 完成时间戳
  remainingTime: number         // 剩余秒数
}

Validator

Validator {
  address: Address
  name: string
  description?: string
  website?: string
  logoUri?: string
  
  // 状态
  status: 'active' | 'inactive' | 'jailed'
  
  // 指标
  commission: number            // 佣金比例 (0-1)
  votingPower: bigint           // 投票权重
  delegatorCount: number        // 委托人数
  uptime: number                // 在线率 (0-1)
  
  // APY(扣除佣金后)
  estimatedAPY: number
}

ValidatorOptions {
  status?: 'active' | 'all'
  sortBy?: 'votingPower' | 'commission' | 'apy'
  limit?: number
}

StakeParams

StakeParams {
  from: Address
  validator: Address
  amount: bigint
}

UnstakeParams {
  from: Address
  validator: Address
  amount: bigint
}

RedelegateParams {
  from: Address
  srcValidator: Address
  dstValidator: Address
  amount: bigint
}

质押流程

质押

1. 用户选择验证者


2. 输入质押金额


3. stake() 构建交易


4. 签名并广播


5. 等待确认


6. 质押生效(下一个 epoch)

解除质押

1. 选择要解除的委托


2. 输入解除金额


3. unstake() 构建交易


4. 签名并广播


5. 进入解绑期(通常 7-28 天)


6. 解绑完成,资金可用

解绑期规范

解绑期说明
BFM7 天
Cosmos 系21 天
Ethereum可变取决于退出队列

验证者选择建议

向用户展示时 SHOULD 排序和过滤:

推荐验证者 = 
  status == 'active' &&
  commission < 10% &&
  uptime > 99% &&
  sortBy(estimatedAPY, desc)

风险提示

质押操作 MUST 向用户展示以下风险:

风险说明
解绑期解除质押需等待 X 天
惩罚风险验证者作恶可能导致本金损失
价格风险质押期间代币价格可能波动

错误码

错误码说明
VALIDATOR_NOT_FOUND验证者不存在
VALIDATOR_INACTIVE验证者不活跃
INSUFFICIENT_STAKE质押金额不足最小要求
UNBONDING_LIMIT解绑数量达到上限
ALREADY_DELEGATED已委托给该验证者
REDELEGATE_COOLING重新委托冷却中

Released under the MIT License.