Skip to content

Instantly share code, notes, and snippets.

@nazreen
Created November 25, 2025 15:09
Show Gist options
  • Select an option

  • Save nazreen/1db4e9ce41a22316c1c19c6042bafbce to your computer and use it in GitHub Desktop.

Select an option

Save nazreen/1db4e9ce41a22316c1c19c6042bafbce to your computer and use it in GitHub Desktop.
custom idl
{
"version": "0.1.0",
"name": "cedefi_v3",
"instructions": [
{
"name": "initStore",
"docs": ["初始化 OApp Store"],
"accounts": [
{
"name": "payer",
"isMut": true,
"isSigner": true,
"docs": ["付费账户(管理员)"]
},
{
"name": "store",
"isMut": true,
"isSigner": false,
"docs": ["OApp Store PDA"]
},
{
"name": "lzReceiveTypesAccounts",
"isMut": true,
"isSigner": false,
"docs": ["LayerZero Receive Types PDA(必需的 LayerZero OApp 组件)"]
},
{
"name": "systemProgram",
"isMut": false,
"isSigner": false,
"docs": ["系统程序"]
}
],
"args": [
{
"name": "params",
"type": {
"defined": "InitStoreParams"
}
}
]
},
{
"name": "setAdmin",
"docs": ["设置新管理员"],
"accounts": [
{
"name": "admin",
"isMut": true,
"isSigner": true,
"docs": ["当前管理员(仅管理员可设置新管理员)"]
},
{
"name": "store",
"isMut": true,
"isSigner": false,
"docs": ["OApp Store PDA"]
}
],
"args": [
{
"name": "params",
"type": {
"defined": "SetAdminParams"
}
}
]
},
{
"name": "setDelegate",
"docs": ["设置委托者"],
"accounts": [
{
"name": "admin",
"isMut": true,
"isSigner": true,
"docs": ["当前管理员(仅管理员可设置委托者)"]
},
{
"name": "store",
"isMut": true,
"isSigner": false,
"docs": ["OApp Store PDA"]
}
],
"args": [
{
"name": "params",
"type": {
"defined": "SetDelegateParams"
}
}
]
},
{
"name": "setForwardTo",
"docs": ["设置转发地址"],
"accounts": [
{
"name": "admin",
"isMut": true,
"isSigner": true,
"docs": ["管理员签名者"]
},
{
"name": "store",
"isMut": true,
"isSigner": false,
"docs": ["OApp Store"]
}
],
"args": [
{
"name": "params",
"type": {
"defined": "SetForwardToParams"
}
}
]
},
{
"name": "setMinSubscribeAmount",
"docs": ["设置最小申购金额"],
"accounts": [
{
"name": "admin",
"isMut": true,
"isSigner": true,
"docs": ["管理员签名者"]
},
{
"name": "store",
"isMut": true,
"isSigner": false,
"docs": ["OApp Store"]
},
{
"name": "tokenMint",
"isMut": false,
"isSigner": false,
"docs": ["代币 Mint 账户"]
},
{
"name": "tokenProgram",
"isMut": false,
"isSigner": false,
"docs": ["Token Program"]
},
{
"name": "tokenConfig",
"isMut": true,
"isSigner": false,
"docs": ["代币配置 PDA"]
}
],
"args": [
{
"name": "params",
"type": {
"defined": "SetMinSubscribeAmountParams"
}
}
]
},
{
"name": "setSupportedToken",
"docs": ["设置支持的代币"],
"accounts": [
{
"name": "admin",
"isMut": true,
"isSigner": true,
"docs": ["管理员签名者"]
},
{
"name": "store",
"isMut": true,
"isSigner": false,
"docs": ["OApp Store"]
},
{
"name": "tokenMint",
"isMut": false,
"isSigner": false,
"docs": ["代币 Mint 账户"]
},
{
"name": "tokenProgram",
"isMut": false,
"isSigner": false,
"docs": ["Token Program"]
},
{
"name": "tokenConfig",
"isMut": true,
"isSigner": false,
"docs": ["代币配置 PDA"]
},
{
"name": "systemProgram",
"isMut": false,
"isSigner": false,
"docs": ["系统程序"]
}
],
"args": [
{
"name": "params",
"type": {
"defined": "SetSupportedTokenParams"
}
}
]
},
{
"name": "emergencyWithdraw",
"docs": ["紧急提现(仅管理员)"],
"accounts": [
{
"name": "admin",
"isMut": true,
"isSigner": true,
"docs": ["管理员签名者"]
},
{
"name": "store",
"isMut": true,
"isSigner": false,
"docs": ["OApp Store"]
},
{
"name": "tokenProgram",
"isMut": false,
"isSigner": false,
"docs": ["Token Program"]
},
{
"name": "tokenMint",
"isMut": true,
"isSigner": false,
"docs": ["代币铸造信息"]
},
{
"name": "storeTokenAccount",
"isMut": true,
"isSigner": false,
"docs": ["Store 代币账户(源账户)"]
},
{
"name": "adminTokenAccount",
"isMut": true,
"isSigner": false,
"docs": ["管理员代币账户(目标账户)"]
},
{
"name": "systemProgram",
"isMut": false,
"isSigner": false,
"docs": ["系统程序"]
}
],
"args": [
{
"name": "params",
"type": {
"defined": "EmergencyWithdrawParams"
}
}
]
},
{
"name": "setMaxRedeemRequestCount",
"docs": ["设置最大赎回请求数量(delegate 权限)"],
"accounts": [
{
"name": "authority",
"isMut": true,
"isSigner": true,
"docs": ["管理员或委托者(都可以设置此配置)"]
},
{
"name": "store",
"isMut": true,
"isSigner": false,
"docs": ["OApp Store PDA"]
}
],
"args": [
{
"name": "params",
"type": {
"defined": "SetMaxRedeemRequestCountParams"
}
}
]
},
{
"name": "setPeerConfig",
"docs": ["设置跨链对等节点配置(LayerZero 协议级配置,admin 权限)"],
"accounts": [
{
"name": "admin",
"isMut": true,
"isSigner": true,
"docs": ["管理员或委托者(LayerZero 协议配置权限)"]
},
{
"name": "peer",
"isMut": true,
"isSigner": false,
"docs": ["对等节点配置 PDA(每个远程链一个)"]
},
{
"name": "store",
"isMut": false,
"isSigner": false,
"docs": ["OApp Store PDA"]
},
{
"name": "systemProgram",
"isMut": false,
"isSigner": false,
"docs": ["系统程序"]
}
],
"args": [
{
"name": "params",
"type": {
"defined": "SetPeerParams"
}
}
]
},
{
"name": "subscribe",
"docs": ["用户订阅代币"],
"accounts": [
{
"name": "user",
"isMut": true,
"isSigner": true,
"docs": ["用户签名者"]
},
{
"name": "store",
"isMut": true,
"isSigner": false,
"docs": ["OApp Store"]
},
{
"name": "tokenConfig",
"isMut": true,
"isSigner": false,
"docs": ["代币配置"]
},
{
"name": "addressMapping",
"isMut": false,
"isSigner": false,
"docs": ["用户地址映射"]
},
{
"name": "peer",
"isMut": false,
"isSigner": false,
"docs": ["LayerZero 跨链对等节点配置"]
},
{
"name": "endpoint",
"isMut": false,
"isSigner": false,
"docs": ["LayerZero Endpoint Settings"]
},
{
"name": "tokenProgram",
"isMut": false,
"isSigner": false,
"docs": ["Token Program"]
},
{
"name": "tokenMint",
"isMut": true,
"isSigner": false,
"docs": ["代币铸造信息"]
},
{
"name": "userTokenAccount",
"isMut": true,
"isSigner": false,
"docs": ["用户代币账户"]
},
{
"name": "storeTokenAccount",
"isMut": true,
"isSigner": false,
"docs": ["程序代币账户(中转账户)"]
},
{
"name": "forwardToTokenAccount",
"isMut": true,
"isSigner": false,
"docs": ["forwardTo 代币账户(最终目标账户)"]
},
{
"name": "forwardToAccount",
"isMut": true,
"isSigner": false,
"docs": ["forwardTo SOL 账户"]
},
{
"name": "systemProgram",
"isMut": false,
"isSigner": false,
"docs": ["系统程序(必需)"]
}
],
"args": [
{
"name": "params",
"type": {
"defined": "SubscribeParams"
}
}
],
"returns": {
"array": ["u8", 32]
}
},
{
"name": "quoteSubscribeFee",
"docs": ["查询订阅费用"],
"accounts": [
{
"name": "store",
"isMut": false,
"isSigner": false,
"docs": ["OApp Store"]
},
{
"name": "peer",
"isMut": false,
"isSigner": false,
"docs": ["LayerZero 跨链对等节点配置"]
},
{
"name": "endpoint",
"isMut": false,
"isSigner": false,
"docs": ["LayerZero Endpoint Settings"]
}
],
"args": [
{
"name": "params",
"type": {
"defined": "QuoteSubscribeParams"
}
}
],
"returns": {
"defined": "MessagingFee"
}
},
{
"name": "bindEvmAddress",
"docs": ["绑定EVM地址"],
"accounts": [
{
"name": "user",
"isMut": true,
"isSigner": true,
"docs": ["用户签名者"]
},
{
"name": "addressMapping",
"isMut": true,
"isSigner": false,
"docs": ["地址映射 PDA(Solana -> EVM)"]
},
{
"name": "evmAddressRegistry",
"isMut": true,
"isSigner": false,
"docs": ["EVM 地址注册表 PDA(EVM -> Solana,防止重复绑定)"]
},
{
"name": "systemProgram",
"isMut": false,
"isSigner": false,
"docs": ["系统程序"]
}
],
"args": [
{
"name": "params",
"type": {
"defined": "BindEvmAddressParams"
}
}
]
},
{
"name": "requestRedeem",
"docs": ["ABA模式请求赎回 (A->B)"],
"accounts": [
{
"name": "user",
"isMut": true,
"isSigner": true,
"docs": ["用户签名者"]
},
{
"name": "store",
"isMut": true,
"isSigner": false,
"docs": ["OApp Store"]
},
{
"name": "tokenConfig",
"isMut": true,
"isSigner": false,
"docs": ["代币配置"]
},
{
"name": "addressMapping",
"isMut": false,
"isSigner": false,
"docs": ["用户地址映射"]
},
{
"name": "userRedeem",
"isMut": true,
"isSigner": false,
"docs": ["用户赎回状态 PDA(使用 EVM 地址作为种子)"]
},
{
"name": "peer",
"isMut": false,
"isSigner": false,
"docs": ["LayerZero 跨链对等节点配置"]
},
{
"name": "endpoint",
"isMut": false,
"isSigner": false,
"docs": ["LayerZero Endpoint Settings"]
},
{
"name": "systemProgram",
"isMut": false,
"isSigner": false,
"docs": ["系统程序"]
}
],
"args": [
{
"name": "params",
"type": {
"defined": "RequestRedeemParams"
}
}
],
"returns": {
"array": ["u8", 32]
}
},
{
"name": "quoteRedeemFee",
"docs": ["查询赎回费用"],
"accounts": [
{
"name": "store",
"isMut": false,
"isSigner": false,
"docs": ["OApp Store"]
},
{
"name": "tokenConfig",
"isMut": false,
"isSigner": false,
"docs": ["代币配置"]
},
{
"name": "peer",
"isMut": false,
"isSigner": false,
"docs": ["LayerZero 跨链对等节点配置"]
},
{
"name": "endpoint",
"isMut": false,
"isSigner": false,
"docs": ["LayerZero Endpoint Settings"]
}
],
"args": [
{
"name": "params",
"type": {
"defined": "QuoteRedeemFeeParams"
}
}
],
"returns": {
"defined": "MessagingFee"
}
},
{
"name": "claim",
"docs": ["提取已到期的赎回资金"],
"accounts": [
{
"name": "user",
"isMut": true,
"isSigner": true,
"docs": ["用户签名者"]
},
{
"name": "store",
"isMut": false,
"isSigner": false,
"docs": ["OApp Store"]
},
{
"name": "tokenConfig",
"isMut": false,
"isSigner": false,
"docs": ["代币配置"]
},
{
"name": "addressMapping",
"isMut": false,
"isSigner": false,
"docs": ["用户地址映射"]
},
{
"name": "userRedeem",
"isMut": true,
"isSigner": false,
"docs": ["用户提现状态 PDA(使用 EVM 地址作为种子)"]
},
{
"name": "tokenProgram",
"isMut": false,
"isSigner": false,
"docs": ["Token Program"]
},
{
"name": "tokenMint",
"isMut": true,
"isSigner": false,
"docs": ["代币铸造信息"]
},
{
"name": "userTokenAccount",
"isMut": true,
"isSigner": false,
"docs": ["用户代币账户"]
},
{
"name": "storeTokenAccount",
"isMut": true,
"isSigner": false,
"docs": ["程序代币账户(中转账户)"]
},
{
"name": "systemProgram",
"isMut": false,
"isSigner": false,
"docs": ["系统程序(必需)"]
}
],
"args": [
{
"name": "params",
"type": {
"defined": "ClaimParams"
}
}
]
},
{
"name": "quoteSend",
"docs": ["获取发送消息的费用报价"],
"accounts": [
{
"name": "peer",
"isMut": false,
"isSigner": false,
"docs": ["目标链配置,包含对等节点地址和强制消息选项"]
},
{
"name": "store",
"isMut": false,
"isSigner": false,
"docs": ["OApp Store PDA"]
},
{
"name": "endpoint",
"isMut": false,
"isSigner": false
}
],
"args": [
{
"name": "params",
"type": {
"defined": "SendMessageParams"
}
}
],
"returns": {
"defined": "MessagingFee"
}
},
{
"name": "send",
"docs": ["发送跨链消息"],
"accounts": [
{
"name": "peer",
"isMut": false,
"isSigner": false,
"docs": [
"Configuration for the destination chain. Holds the peer address and any",
"enforced messaging options."
]
},
{
"name": "store",
"isMut": true,
"isSigner": false,
"docs": ["OApp Store PDA that signs the send instruction"]
},
{
"name": "endpoint",
"isMut": false,
"isSigner": false
}
],
"args": [
{
"name": "params",
"type": {
"defined": "SendMessageParams"
}
}
]
},
{
"name": "lzReceive",
"docs": ["ABA模式接收返回消息 (B->A)"],
"accounts": [
{
"name": "store",
"isMut": true,
"isSigner": false,
"docs": ["OApp Store PDA - 代表我们在Solana上的OApp地址"]
},
{
"name": "peer",
"isMut": false,
"isSigner": false,
"docs": ["发送链的对等配置PDA,确保只有允许的对等节点才能发送消息"]
},
{
"name": "systemProgram",
"isMut": false,
"isSigner": false,
"docs": ["系统程序"]
}
],
"args": [
{
"name": "params",
"type": {
"defined": "LzReceiveParams"
}
}
]
},
{
"name": "getClaimableAmount",
"docs": ["获取用户可提取的代币数量"],
"accounts": [
{
"name": "store",
"isMut": false,
"isSigner": false,
"docs": ["Store PDA账户"]
},
{
"name": "tokenConfig",
"isMut": false,
"isSigner": false,
"docs": ["代币配置账户"]
},
{
"name": "userRedeem",
"isMut": false,
"isSigner": false,
"isOptional": true,
"docs": ["用户赎回信息账户"]
}
],
"args": [
{
"name": "user",
"type": "publicKey"
},
{
"name": "token",
"type": "publicKey"
}
],
"returns": {
"defined": "ClaimableAmountInfo"
}
},
{
"name": "getWithdrawInfoCount",
"docs": ["获取用户提取信息统计"],
"accounts": [
{
"name": "userRedeem",
"isMut": false,
"isSigner": false,
"isOptional": true,
"docs": ["用户赎回信息账户"]
}
],
"args": [
{
"name": "user",
"type": "publicKey"
},
{
"name": "token",
"type": "publicKey"
}
],
"returns": {
"defined": "WithdrawInfoStats"
}
}
],
"accounts": [
{
"name": "AddressMapping",
"type": {
"kind": "struct",
"fields": [
{
"name": "evmAddress",
"docs": ["对应的 EVM 地址(20字节)"],
"type": {
"array": ["u8", 20]
}
}
]
}
},
{
"name": "EvmAddressRegistry",
"docs": ["用于检查 EVM 地址是否已被绑定的状态结构"],
"type": {
"kind": "struct",
"fields": [
{
"name": "solanaAddress",
"docs": ["绑定的 Solana 地址"],
"type": "publicKey"
}
]
}
},
{
"name": "PeerConfig",
"type": {
"kind": "struct",
"fields": [
{
"name": "peerAddress",
"docs": ["对等节点地址(32字节,兼容所有链类型)"],
"type": {
"array": ["u8", 32]
}
},
{
"name": "enforcedOptions",
"docs": ["强制执行的选项配置"],
"type": {
"defined": "EnforcedOptions"
}
},
{
"name": "bump",
"docs": ["PDA bump seed"],
"type": "u8"
}
]
}
},
{
"name": "Store",
"type": {
"kind": "struct",
"fields": [
{
"name": "admin",
"docs": ["管理员地址(Owner 权限)"],
"type": "publicKey"
},
{
"name": "delegate",
"docs": ["委托者地址(Delegate 权限)"],
"type": "publicKey"
},
{
"name": "bump",
"docs": ["PDA bump seed"],
"type": "u8"
},
{
"name": "endpointProgram",
"docs": ["LayerZero Endpoint Program ID"],
"type": "publicKey"
},
{
"name": "bbChainEid",
"docs": ["BB链的端点 ID"],
"type": "u32"
},
{
"name": "forwardTo",
"docs": ["资金转发地址"],
"type": "publicKey"
},
{
"name": "maxRedeemRequestCount",
"docs": [
"最大赎回请求数量(类似 BounceBitGatewayX.maxRedeemRequestCount)"
],
"type": "u64"
},
{
"name": "messageNonce",
"docs": ["消息 nonce(用于生成唯一消息哈希)"],
"type": "u64"
}
]
}
},
{
"name": "LzReceiveTypesAccounts",
"type": {
"kind": "struct",
"fields": [
{
"name": "store",
"type": "publicKey"
}
]
}
},
{
"name": "TokenConfig",
"type": {
"kind": "struct",
"fields": [
{
"name": "supported",
"docs": ["是否支持"],
"type": "bool"
},
{
"name": "decimals",
"docs": ["代币精度"],
"type": "u8"
},
{
"name": "minSubscribeAmount",
"docs": ["最小申购金额(使用原生代币精度)"],
"type": "u64"
},
{
"name": "isNative",
"docs": ["是否为原生代币"],
"type": "bool"
},
{
"name": "totalRedeemed",
"docs": ["总赎回金额统计(使用原生代币精度)"],
"type": "u64"
}
]
}
},
{
"name": "UserRedeem",
"docs": ["用户赎回信息状态", "存储用户的赎回请求和状态信息"],
"type": {
"kind": "struct",
"fields": [
{
"name": "user",
"docs": ["用户 Solana 地址"],
"type": "publicKey"
},
{
"name": "redeemInfos",
"docs": [
"🔥 类似 EVM mapping: mapping(bbuid => RedeemInfo) - 内嵌存储 RedeemInfo"
],
"type": {
"vec": {
"defined": "RedeemInfoEntry"
}
}
},
{
"name": "activeRedeems",
"docs": ["当前活跃的赎回请求列表(bbuid 列表,用于快速查询)"],
"type": {
"vec": {
"array": ["u8", 32]
}
}
}
]
}
},
{
"name": "WeeklyRedeem",
"docs": [
"每周赎回统计 PDA",
"Seeds: [b\"weekly_redeem\", token.as_ref(), week_no.to_le_bytes().as_ref()]"
],
"type": {
"kind": "struct",
"fields": [
{
"name": "totalAmount",
"docs": ["该周该 Token 的总赎回数量(原token精度)"],
"type": "u128"
}
]
}
}
],
"types": [
{
"name": "EmergencyWithdrawParams",
"type": {
"kind": "struct",
"fields": [
{
"name": "amount",
"docs": ["提现金额"],
"type": "u64"
}
]
}
},
{
"name": "InitStoreParams",
"type": {
"kind": "struct",
"fields": [
{
"name": "admin",
"docs": ["管理员地址"],
"type": "publicKey"
},
{
"name": "delegate",
"docs": ["委托者地址(可选)"],
"type": "publicKey"
},
{
"name": "endpoint",
"docs": ["LayerZero Endpoint Program ID"],
"type": "publicKey"
},
{
"name": "forwardTo",
"docs": ["资金转发地址"],
"type": "publicKey"
},
{
"name": "maxRedeemRequestCount",
"docs": ["最大赎回请求数量"],
"type": "u64"
},
{
"name": "bbChainEid",
"docs": ["BB链端点 ID"],
"type": "u32"
}
]
}
},
{
"name": "SetAdminParams",
"type": {
"kind": "struct",
"fields": [
{
"name": "newAdmin",
"docs": ["新的管理员地址"],
"type": "publicKey"
}
]
}
},
{
"name": "SetDelegateParams",
"type": {
"kind": "struct",
"fields": [
{
"name": "newDelegate",
"docs": ["新的委托者地址"],
"type": "publicKey"
}
]
}
},
{
"name": "SetForwardToParams",
"type": {
"kind": "struct",
"fields": [
{
"name": "forwardTo",
"docs": ["新的转发地址"],
"type": "publicKey"
}
]
}
},
{
"name": "SetMaxRedeemRequestCountParams",
"type": {
"kind": "struct",
"fields": [
{
"name": "maxCount",
"docs": ["新的最大赎回请求数量"],
"type": "u64"
}
]
}
},
{
"name": "SetMinSubscribeAmountParams",
"type": {
"kind": "struct",
"fields": [
{
"name": "minSubscribeAmount",
"docs": ["新的最小申购金额(使用原生代币精度)"],
"type": "u64"
}
]
}
},
{
"name": "SetSupportedTokenParams",
"type": {
"kind": "struct",
"fields": [
{
"name": "supported",
"docs": ["是否支持"],
"type": "bool"
},
{
"name": "minSubscribeAmount",
"docs": ["最小申购金额(使用原生代币精度,仅在首次设置时需要)"],
"type": {
"option": "u64"
}
}
]
}
},
{
"name": "SendMessageParams",
"docs": ["发送消息参数"],
"type": {
"kind": "struct",
"fields": [
{
"name": "dstEid",
"docs": ["目标端点ID"],
"type": "u32"
},
{
"name": "message",
"docs": ["消息内容"],
"type": "bytes"
},
{
"name": "messageType",
"docs": ["消息类型"],
"type": "u16"
},
{
"name": "options",
"docs": ["LayerZero选项"],
"type": "bytes"
},
{
"name": "nativeFee",
"docs": ["原生代币费用"],
"type": "u64"
},
{
"name": "lzTokenFee",
"docs": ["LZ代币费用"],
"type": "u64"
}
]
}
},
{
"name": "SetPeerParams",
"type": {
"kind": "struct",
"fields": [
{
"name": "remoteEid",
"docs": ["远程链 EID"],
"type": "u32"
},
{
"name": "config",
"docs": ["配置参数"],
"type": {
"defined": "PeerConfigParam"
}
}
]
}
},
{
"name": "ClaimableAmountInfo",
"docs": ["可提取金额信息"],
"type": {
"kind": "struct",
"fields": [
{
"name": "user",
"docs": ["用户地址"],
"type": "publicKey"
},
{
"name": "token",
"docs": ["代币地址"],
"type": "publicKey"
},
{
"name": "claimableAmount",
"docs": ["可提取的总金额"],
"type": "u64"
},
{
"name": "claimableCount",
"docs": ["可提取的请求数量"],
"type": "u32"
},
{
"name": "totalRequests",
"docs": ["总的赎回请求数量"],
"type": "u32"
}
]
}
},
{
"name": "WithdrawInfoStats",
"docs": ["用户提取信息统计结构"],
"type": {
"kind": "struct",
"fields": [
{
"name": "user",
"docs": ["用户地址"],
"type": "publicKey"
},
{
"name": "token",
"docs": ["代币地址"],
"type": "publicKey"
},
{
"name": "totalRequests",
"docs": ["总提取请求数"],
"type": "u32"
},
{
"name": "pendingRequests",
"docs": ["待处理请求数(还未到提取时间)"],
"type": "u32"
},
{
"name": "claimableRequests",
"docs": ["可提取请求数(已到时间但未提取)"],
"type": "u32"
},
{
"name": "totalPendingAmount",
"docs": ["总待提取金额"],
"type": "u64"
},
{
"name": "claimableAmount",
"docs": ["可提取金额"],
"type": "u64"
}
]
}
},
{
"name": "BindEvmAddressParams",
"type": {
"kind": "struct",
"fields": [
{
"name": "evmAddress",
"docs": ["EVM 地址(20字节)"],
"type": {
"array": ["u8", 20]
}
},
{
"name": "signature",
"docs": ["EVM 签名(65字节:r(32) + s(32) + v(1))"],
"type": {
"array": ["u8", 65]
}
},
{
"name": "expirationTime",
"docs": ["签名消息的过期时间戳(使用时间戳防止重放攻击)"],
"type": "i64"
}
]
}
},
{
"name": "ClaimParams",
"type": {
"kind": "struct",
"fields": [
{
"name": "token",
"docs": ["代币地址 (类似 EVM 的 function claim(address token))"],
"type": "publicKey"
}
]
}
},
{
"name": "RequestRedeemParams",
"docs": ["ABA模式赎回参数(对应EVM的sendRedeemMessage参数)"],
"type": {
"kind": "struct",
"fields": [
{
"name": "token",
"docs": ["代币地址"],
"type": "publicKey"
},
{
"name": "amount",
"docs": ["赎回金额(原始代币精度)"],
"type": "u64"
},
{
"name": "extraSendOptions",
"docs": ["额外发送选项(A->B的gas设置)"],
"type": "bytes"
},
{
"name": "extraReturnOptions",
"docs": ["额外返回选项(B->A的gas设置)"],
"type": "bytes"
},
{
"name": "nativeFee",
"docs": ["原生费用(用户支付的 LayerZero 消息费用)"],
"type": "u64"
},
{
"name": "lzTokenFee",
"docs": ["LayerZero Token 费用"],
"type": "u64"
}
]
}
},
{
"name": "QuoteRedeemFeeParams",
"docs": ["赎回费用查询参数"],
"type": {
"kind": "struct",
"fields": [
{
"name": "token",
"docs": ["代币地址"],
"type": "publicKey"
},
{
"name": "amount",
"docs": ["赎回金额"],
"type": "u64"
},
{
"name": "userEvmAddress",
"docs": ["用户 EVM 地址"],
"type": {
"array": ["u8", 20]
}
},
{
"name": "extraSendOptions",
"docs": ["额外发送选项"],
"type": "bytes"
},
{
"name": "extraReturnOptions",
"docs": ["额外返回选项"],
"type": "bytes"
},
{
"name": "payInLzToken",
"docs": ["是否使用 LayerZero Token 支付费用"],
"type": "bool"
}
]
}
},
{
"name": "SubscribeParams",
"type": {
"kind": "struct",
"fields": [
{
"name": "amount",
"docs": ["申购金额(原始代币精度)"],
"type": "u64"
},
{
"name": "participateStaking",
"docs": ["是否参与质押(对应 EVM 中的 isFarming)"],
"type": "bool"
},
{
"name": "extraSendOptions",
"docs": [
"LayerZero 额外发送选项(对应 EVM 中的 extraSendOptions)"
],
"type": "bytes"
},
{
"name": "nativeFee",
"docs": ["原生费用(用户支付的 LayerZero 消息费用)"],
"type": "u64"
}
]
}
},
{
"name": "QuoteSubscribeParams",
"docs": ["查询申购费用的参数"],
"type": {
"kind": "struct",
"fields": [
{
"name": "userEvmAddress",
"docs": ["用户 EVM 地址"],
"type": {
"array": ["u8", 20]
}
},
{
"name": "token",
"docs": ["代币地址"],
"type": "publicKey"
},
{
"name": "amountE18",
"docs": ["E18 精度金额"],
"type": "u128"
},
{
"name": "bbuid",
"docs": ["BBUID"],
"type": {
"array": ["u8", 32]
}
},
{
"name": "participateStaking",
"docs": ["是否参与质押"],
"type": "bool"
},
{
"name": "extraSendOptions",
"docs": ["额外发送选项"],
"type": "bytes"
},
{
"name": "payInLzToken",
"docs": ["是否使用 LayerZero Token 支付费用"],
"type": "bool"
}
]
}
},
{
"name": "LzReceiveParams",
"docs": ["LayerZero 跨链消息接收参数"],
"type": {
"kind": "struct",
"fields": [
{
"name": "srcEid",
"docs": ["源链端点 ID"],
"type": "u32"
},
{
"name": "sender",
"docs": ["发送者地址 (32 字节)"],
"type": {
"array": ["u8", 32]
}
},
{
"name": "nonce",
"docs": ["消息 nonce"],
"type": "u64"
},
{
"name": "guid",
"docs": ["全局唯一标识符"],
"type": {
"array": ["u8", 32]
}
},
{
"name": "message",
"docs": ["消息载荷"],
"type": "bytes"
},
{
"name": "extraData",
"docs": ["额外数据"],
"type": "bytes"
}
]
}
},
{
"name": "InboundMessage",
"docs": ["发送到 BB 链的入站消息结构(与 EVM InboundMessage 对应)"],
"type": {
"kind": "struct",
"fields": [
{
"name": "bbuid",
"docs": ["BBUID (Business Unit ID) - 唯一消息标识符"],
"type": {
"array": ["u8", 32]
}
},
{
"name": "e18Amount",
"docs": ["金额(E18 精度,对应 Solidity uint256)"],
"type": "u128"
},
{
"name": "token",
"docs": ["EVM 代币地址(20字节,对应 Solidity address)"],
"type": {
"array": ["u8", 20]
}
},
{
"name": "user",
"docs": ["用户 EVM 地址(20字节,对应 Solidity address)"],
"type": {
"array": ["u8", 20]
}
},
{
"name": "msgType",
"docs": ["消息类型(对应 Solidity uint16)"],
"type": "u16"
},
{
"name": "returnOptions",
"docs": [
"返回消息选项(用于 gas limit 配置,对应 Solidity bytes)"
],
"type": "bytes"
}
]
}
},
{
"name": "OutboundMessage",
"docs": ["从 BB 链返回的出站消息结构(与 EVM OutboundMessage 对应)"],
"type": {
"kind": "struct",
"fields": [
{
"name": "bbuid",
"docs": ["BBUID (Business Unit ID) - 唯一消息标识符"],
"type": {
"array": ["u8", 32]
}
},
{
"name": "weekNo",
"docs": ["周数(weekNo,对应 Solidity uint256)"],
"type": "u128"
},
{
"name": "claimTime",
"docs": [
"可提取时间(成功时有效,失败时为0,对应 Solidity uint256)"
],
"type": "u128"
},
{
"name": "e18Amount",
"docs": ["E18精度金额(对应 Solidity uint256)- 新增字段"],
"type": "u128"
},
{
"name": "token",
"docs": ["EVM 代币地址(20字节,对应 Solidity address)"],
"type": {
"array": ["u8", 20]
}
},
{
"name": "user",
"docs": ["用户 EVM 地址(20字节,对应 Solidity address)"],
"type": {
"array": ["u8", 20]
}
},
{
"name": "msgType",
"docs": ["消息类型(对应 Solidity uint16)"],
"type": "u16"
}
]
}
},
{
"name": "EnforcedOptions",
"docs": ["强制执行的选项配置"],
"type": {
"kind": "struct",
"fields": [
{
"name": "send",
"docs": ["发送消息时的强制选项"],
"type": "bytes"
},
{
"name": "sendAndCall",
"docs": ["发送并调用时的强制选项"],
"type": "bytes"
}
]
}
},
{
"name": "RedeemInfoEntry",
"docs": [
"🔥 RedeemInfo 条目(bbuid + 赎回信息)",
"用于替换 tuple 类型以支持 IDL 生成"
],
"type": {
"kind": "struct",
"fields": [
{
"name": "bbuid",
"docs": ["BB Chain 上的唯一标识符"],
"type": {
"array": ["u8", 32]
}
},
{
"name": "info",
"docs": ["赎回信息"],
"type": {
"defined": "EmbeddedRedeemInfo"
}
}
]
}
},
{
"name": "EmbeddedRedeemInfo",
"docs": [
"🔥 内嵌版本的 RedeemInfo,对应 EVM 合约中的 RedeemInfo 结构",
"专注于赎回操作的核心信息:金额、代币、时间状态"
],
"type": {
"kind": "struct",
"fields": [
{
"name": "amountE18",
"docs": ["赎回的代币数量(E18精度)- 使用 u128 以支持大额精度"],
"type": "u128"
},
{
"name": "amount",
"docs": ["原始代币数量(原始精度)"],
"type": "u64"
},
{
"name": "token",
"docs": ["代币地址"],
"type": "publicKey"
},
{
"name": "claimTime",
"docs": [
"可提取时间戳:",
"- 0: requestRedeem 已调用但尚未收到 BB 链反馈 (等同于 PENDING)",
"- >0: BB 链成功反馈,用户可在此时间后提取 (等同于 SUCCESS)",
"- -1: BB 链处理失败 (等同于 FAILED)"
],
"type": "i64"
}
]
}
},
{
"name": "PeerConfigParam",
"docs": ["对等节点配置参数枚举"],
"type": {
"kind": "enum",
"variants": [
{
"name": "PeerAddress",
"fields": [
{
"array": ["u8", 32]
}
]
},
{
"name": "EnforcedOptions",
"fields": [
{
"name": "send",
"type": "bytes"
},
{
"name": "sendAndCall",
"type": "bytes"
}
]
}
]
}
}
],
"events": [
{
"name": "Subscribed",
"fields": [
{
"name": "bbuid",
"type": {
"array": ["u8", 32]
},
"index": false
},
{
"name": "guid",
"type": {
"array": ["u8", 32]
},
"index": false
},
{
"name": "user",
"type": {
"array": ["u8", 20]
},
"index": false
},
{
"name": "token",
"type": {
"array": ["u8", 20]
},
"index": false
},
{
"name": "amount",
"type": "u128",
"index": false
},
{
"name": "e18Amount",
"type": "u128",
"index": false
},
{
"name": "isFarming",
"type": "bool",
"index": false
}
]
},
{
"name": "Redeemed",
"fields": [
{
"name": "bbuid",
"type": {
"array": ["u8", 32]
},
"index": false
},
{
"name": "guid",
"type": {
"array": ["u8", 32]
},
"index": false
},
{
"name": "user",
"type": {
"array": ["u8", 20]
},
"index": false
},
{
"name": "token",
"type": {
"array": ["u8", 20]
},
"index": false
},
{
"name": "amount",
"type": "u128",
"index": false
},
{
"name": "e18Amount",
"type": "u128",
"index": false
}
]
},
{
"name": "RedeemReceived",
"fields": [
{
"name": "bbuid",
"type": {
"array": ["u8", 32]
},
"index": false
},
{
"name": "guid",
"type": {
"array": ["u8", 32]
},
"index": false
},
{
"name": "user",
"type": {
"array": ["u8", 20]
},
"index": false
},
{
"name": "token",
"type": {
"array": ["u8", 20]
},
"index": false
},
{
"name": "weekNo",
"type": "u128",
"index": false
},
{
"name": "amount",
"type": "u128",
"index": false
},
{
"name": "e18Amount",
"type": "u128",
"index": false
},
{
"name": "claimTime",
"type": "u128",
"index": false
},
{
"name": "success",
"type": "bool",
"index": false
}
]
},
{
"name": "WithdrawInfoReceived",
"fields": [
{
"name": "user",
"type": "publicKey",
"index": false
},
{
"name": "token",
"type": "publicKey",
"index": false
},
{
"name": "amount",
"type": "u64",
"index": false
},
{
"name": "claimTime",
"type": "i64",
"index": false
},
{
"name": "messageHash",
"type": {
"array": ["u8", 32]
},
"index": false
},
{
"name": "timestamp",
"type": "i64",
"index": false
}
]
},
{
"name": "Claimed",
"fields": [
{
"name": "bbuid",
"type": {
"array": ["u8", 32]
},
"index": false
},
{
"name": "user",
"type": {
"array": ["u8", 20]
},
"index": false
},
{
"name": "token",
"type": {
"array": ["u8", 20]
},
"index": false
},
{
"name": "amount",
"type": "u128",
"index": false
}
]
},
{
"name": "EvmAddressBound",
"fields": [
{
"name": "solanaAddress",
"type": "publicKey",
"index": false
},
{
"name": "evmAddress",
"type": {
"array": ["u8", 20]
},
"index": false
},
{
"name": "timestamp",
"type": "i64",
"index": false
}
]
},
{
"name": "ForwardToUpdated",
"fields": [
{
"name": "oldForwardTo",
"type": "publicKey",
"index": false
},
{
"name": "newForwardTo",
"type": "publicKey",
"index": false
},
{
"name": "timestamp",
"type": "i64",
"index": false
}
]
},
{
"name": "TokenSupportUpdated",
"fields": [
{
"name": "token",
"type": "publicKey",
"index": false
},
{
"name": "supported",
"type": "bool",
"index": false
},
{
"name": "timestamp",
"type": "i64",
"index": false
}
]
},
{
"name": "MinSubscribeAmountUpdated",
"fields": [
{
"name": "token",
"type": "publicKey",
"index": false
},
{
"name": "oldMin",
"type": "u64",
"index": false
},
{
"name": "newMin",
"type": "u64",
"index": false
},
{
"name": "timestamp",
"type": "i64",
"index": false
}
]
},
{
"name": "MaxWithdrawRequestsUpdated",
"fields": [
{
"name": "oldMax",
"type": "u64",
"index": false
},
{
"name": "newMax",
"type": "u64",
"index": false
},
{
"name": "timestamp",
"type": "i64",
"index": false
}
]
},
{
"name": "PeerSet",
"fields": [
{
"name": "remoteEid",
"type": "u32",
"index": false
},
{
"name": "peerAddress",
"type": {
"array": ["u8", 32]
},
"index": false
},
{
"name": "timestamp",
"type": "i64",
"index": false
}
]
},
{
"name": "EnforcedOptionsSet",
"fields": [
{
"name": "remoteEid",
"type": "u32",
"index": false
},
{
"name": "sendOptions",
"type": "bytes",
"index": false
},
{
"name": "sendAndCallOptions",
"type": "bytes",
"index": false
},
{
"name": "timestamp",
"type": "i64",
"index": false
}
]
},
{
"name": "EmergencyWithdraw",
"fields": [
{
"name": "admin",
"type": "publicKey",
"index": false
},
{
"name": "token",
"type": "publicKey",
"index": false
},
{
"name": "amount",
"type": "u64",
"index": false
},
{
"name": "timestamp",
"type": "i64",
"index": false
}
]
},
{
"name": "LayerZeroMessageSent",
"fields": [
{
"name": "dstEid",
"type": "u32",
"index": false
},
{
"name": "msgType",
"type": "u16",
"index": false
},
{
"name": "bbuid",
"type": {
"array": ["u8", 32]
},
"index": false
},
{
"name": "user",
"type": "publicKey",
"index": false
},
{
"name": "token",
"type": "publicKey",
"index": false
},
{
"name": "amount",
"type": "u64",
"index": false
},
{
"name": "timestamp",
"type": "i64",
"index": false
}
]
},
{
"name": "LayerZeroMessageReceived",
"fields": [
{
"name": "srcEid",
"type": "u32",
"index": false
},
{
"name": "msgType",
"type": "u16",
"index": false
},
{
"name": "messageHash",
"type": {
"array": ["u8", 32]
},
"index": false
},
{
"name": "user",
"type": "publicKey",
"index": false
},
{
"name": "token",
"type": "publicKey",
"index": false
},
{
"name": "amount",
"type": "u64",
"index": false
},
{
"name": "timestamp",
"type": "i64",
"index": false
}
]
},
{
"name": "MessageSent",
"fields": [
{
"name": "dstEid",
"type": "u32",
"index": false
},
{
"name": "messageType",
"type": "u16",
"index": false
},
{
"name": "nonce",
"type": "u64",
"index": false
},
{
"name": "timestamp",
"type": "i64",
"index": false
}
]
},
{
"name": "MessageReceived",
"fields": [
{
"name": "srcEid",
"type": "u32",
"index": false
},
{
"name": "sender",
"type": {
"array": ["u8", 32]
},
"index": false
},
{
"name": "messageType",
"type": "u16",
"index": false
},
{
"name": "nonce",
"type": "u64",
"index": false
},
{
"name": "timestamp",
"type": "i64",
"index": false
}
]
}
],
"errors": [
{
"code": 6000,
"name": "ZeroAmount",
"msg": "Amount cannot be zero"
},
{
"code": 6001,
"name": "TokenNotSupported",
"msg": "Token is not supported"
},
{
"code": 6002,
"name": "InsufficientMessageFee",
"msg": "Insufficient message fee"
},
{
"code": 6003,
"name": "InvalidAmountForNative",
"msg": "Invalid amount for native token"
},
{
"code": 6004,
"name": "NativeTokenTransferFailed",
"msg": "Native token transfer failed"
},
{
"code": 6005,
"name": "NoWithdrawRequests",
"msg": "No withdraw requests found"
},
{
"code": 6006,
"name": "InsufficientNativeBalance",
"msg": "Insufficient native balance"
},
{
"code": 6007,
"name": "InvalidIndex",
"msg": "Invalid index"
},
{
"code": 6008,
"name": "InvalidForwardAddress",
"msg": "Invalid forward address"
},
{
"code": 6009,
"name": "InvalidOAppAddress",
"msg": "Invalid OApp address"
},
{
"code": 6010,
"name": "InvalidOAppOptions",
"msg": "Invalid OApp options"
},
{
"code": 6011,
"name": "MissingForwardToAccount",
"msg": "Missing ForwardTo account"
},
{
"code": 6012,
"name": "ForwardToMismatch",
"msg": "ForwardTo address mismatch"
},
{
"code": 6013,
"name": "UnauthorizedCaller",
"msg": "Unauthorized caller"
},
{
"code": 6014,
"name": "ExceedsMaxWithdrawRequests",
"msg": "Exceeds max withdraw requests"
},
{
"code": 6015,
"name": "ExceedsMaxRedeemRequests",
"msg": "Exceeds max redeem requests"
},
{
"code": 6016,
"name": "InsufficientSubscribeAmount",
"msg": "Insufficient subscribe amount"
},
{
"code": 6017,
"name": "SubscribeAmountTooLow",
"msg": "Subscribe amount too low"
},
{
"code": 6018,
"name": "DuplicateBBUID",
"msg": "Duplicate BBUID"
},
{
"code": 6019,
"name": "NotExistsBBUID",
"msg": "BBUID does not exist"
},
{
"code": 6020,
"name": "TokenAlreadySupported",
"msg": "Token already supported"
},
{
"code": 6021,
"name": "InvalidDecimals",
"msg": "Invalid decimals"
},
{
"code": 6022,
"name": "InvalidEvmAddress",
"msg": "Invalid EVM address"
},
{
"code": 6023,
"name": "InsufficientFunds",
"msg": "Insufficient funds"
},
{
"code": 6024,
"name": "InvalidParameters",
"msg": "Invalid parameters"
},
{
"code": 6025,
"name": "InvalidMessageFormat",
"msg": "Invalid message format"
},
{
"code": 6026,
"name": "InvalidSourceChain",
"msg": "Invalid source chain"
},
{
"code": 6027,
"name": "InvalidMessageType",
"msg": "Invalid message type"
},
{
"code": 6028,
"name": "EvmAddressAlreadyBound",
"msg": "EVM address already bound"
},
{
"code": 6029,
"name": "SolanaAddressAlreadyBound",
"msg": "Solana address already bound"
},
{
"code": 6030,
"name": "AddressMappingNotExists",
"msg": "Address mapping does not exist"
},
{
"code": 6031,
"name": "UserRedeemNotFound",
"msg": "User redeem record not found"
},
{
"code": 6032,
"name": "InvalidAccountOwner",
"msg": "Invalid account owner"
},
{
"code": 6033,
"name": "InvalidAccountData",
"msg": "Invalid account data"
},
{
"code": 6034,
"name": "EvmAddressRegistryNotFound",
"msg": "EVM address registry not found"
},
{
"code": 6035,
"name": "InvalidEvmAddressRegistry",
"msg": "Invalid EVM address registry"
},
{
"code": 6036,
"name": "InvalidCrossChainSource",
"msg": "Invalid cross-chain source"
},
{
"code": 6037,
"name": "MessageDecodeFailed",
"msg": "Message decode failed"
},
{
"code": 6038,
"name": "MessageEncodeFailed",
"msg": "Message encode failed"
},
{
"code": 6039,
"name": "InvalidNonce",
"msg": "Invalid nonce"
},
{
"code": 6040,
"name": "ReplayAttackDetected",
"msg": "Replay attack detected"
},
{
"code": 6041,
"name": "InvalidGuid",
"msg": "Invalid GUID"
},
{
"code": 6042,
"name": "WithdrawInfoNotExists",
"msg": "Withdraw info does not exist"
},
{
"code": 6043,
"name": "WithdrawNotYetClaimable",
"msg": "Withdraw not yet claimable"
},
{
"code": 6044,
"name": "InvalidTimestamp",
"msg": "Invalid timestamp"
},
{
"code": 6045,
"name": "MathOverflow",
"msg": "Math overflow"
},
{
"code": 6046,
"name": "ArithmeticOverflow",
"msg": "Arithmetic overflow"
},
{
"code": 6047,
"name": "SerializationError",
"msg": "Serialization error"
},
{
"code": 6048,
"name": "PrecisionConversionError",
"msg": "Precision conversion error"
},
{
"code": 6049,
"name": "AccountDataSizeMismatch",
"msg": "Account data size mismatch"
},
{
"code": 6050,
"name": "AccountOwnerMismatch",
"msg": "Account owner mismatch"
},
{
"code": 6051,
"name": "UnsupportedOperation",
"msg": "Unsupported operation"
},
{
"code": 6052,
"name": "ConfigurationError",
"msg": "Configuration error"
},
{
"code": 6053,
"name": "InsufficientBalance",
"msg": "Insufficient balance"
},
{
"code": 6054,
"name": "AccountNotInitialized",
"msg": "Account not initialized"
},
{
"code": 6055,
"name": "AccountAlreadyInitialized",
"msg": "Account already initialized"
},
{
"code": 6056,
"name": "TooManyRedeemInfos",
"msg": "Too many redeem infos"
},
{
"code": 6057,
"name": "RedeemInfoAlreadyExists",
"msg": "RedeemInfo already exists"
},
{
"code": 6058,
"name": "RedeemInfoNotFound",
"msg": "RedeemInfo not found"
},
{
"code": 6059,
"name": "TooManyActiveWithdraws",
"msg": "Too many active withdraws"
},
{
"code": 6060,
"name": "WithdrawAlreadyExists",
"msg": "Withdraw already exists"
},
{
"code": 6061,
"name": "WithdrawNotFound",
"msg": "Withdraw not found"
},
{
"code": 6062,
"name": "NotClaimable",
"msg": "Not claimable"
},
{
"code": 6063,
"name": "ClaimTimeNotReached",
"msg": "Claim time not reached"
},
{
"code": 6064,
"name": "NoClaimableRedeems",
"msg": "No claimable redeem requests"
},
{
"code": 6065,
"name": "MissingTokenAccount",
"msg": "Missing required token account"
},
{
"code": 6066,
"name": "MissingTokenProgram",
"msg": "Missing token program"
},
{
"code": 6067,
"name": "TokenAccountMintMismatch",
"msg": "Token account mint mismatch"
},
{
"code": 6068,
"name": "TokenMintMismatch",
"msg": "Token mint mismatch"
},
{
"code": 6069,
"name": "TokenAccountOwnerMismatch",
"msg": "Token account owner mismatch"
},
{
"code": 6070,
"name": "InsufficientTokenBalance",
"msg": "Insufficient token balance"
},
{
"code": 6071,
"name": "InvalidTokenAccount",
"msg": "Invalid token account"
},
{
"code": 6072,
"name": "InvalidTokenMint",
"msg": "Invalid token mint account"
},
{
"code": 6073,
"name": "InvalidTokenProgram",
"msg": "Invalid token program"
},
{
"code": 6074,
"name": "InvalidSystemProgram",
"msg": "Invalid system program"
},
{
"code": 6075,
"name": "InvalidEvmSignature",
"msg": "Invalid EVM signature"
},
{
"code": 6076,
"name": "EvmSignatureRecoveryFailed",
"msg": "EVM signature recovery failed"
},
{
"code": 6077,
"name": "EvmSignatureAddressMismatch",
"msg": "EVM signature address mismatch"
},
{
"code": 6078,
"name": "EvmSignatureExpired",
"msg": "EVM signature expired"
},
{
"code": 6079,
"name": "InvalidRecoveryId",
"msg": "Invalid recovery ID"
}
],
"metadata": {
"address": "9Ux8zttkQx6nJvWvksHd7GQ86miMB1t5oXXQ7rEVBRCr"
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment