From 687cf29a2939a7ffc0ff8fede909d6e771880760 Mon Sep 17 00:00:00 2001 From: A5 Pickle Date: Wed, 7 Feb 2024 15:56:18 -0600 Subject: [PATCH] solana: fix after cctp upgrade; uptick 0.1.0-alpha.1 --- solana/Cargo.lock | 4 +- solana/Cargo.toml | 2 +- .../receive_message/token_messenger_minter.rs | 68 +- .../state/message_transmitter_config.rs | 1 - .../cpi/deposit_for_burn_with_caller.rs | 76 +- .../state/local_token.rs | 4 +- .../wormhole-cctp/src/cpi/burn_and_publish.rs | 2 +- .../processor/redeem_tokens_with_payload.rs | 24 +- .../processor/transfer_tokens_with_payload.rs | 22 +- solana/ts/src/{circle => cctp}/index.ts | 5 +- .../cctp/messageTransmitter/MessageSent.ts | 11 + .../MessageTransmitterConfig.ts | 16 +- .../messageTransmitter/UsedNonces.ts | 0 .../messageTransmitter/index.ts | 60 +- solana/ts/src/{circle => cctp}/messages.ts | 0 .../RemoteTokenMessenger.ts | 0 .../tokenMessengerMinter/index.ts | 17 +- .../ts/src/cctp/types/message_transmitter.ts | 2735 +++++++++++++ .../src/cctp/types/token_messenger_minter.ts | 3521 +++++++++++++++++ .../src/circle/idl/message_transmitter.json | 1099 ----- .../circle/idl/token_messenger_minter.json | 1451 ------- .../src/circle/types/message_transmitter.ts | 2193 ---------- .../circle/types/token_messenger_minter.ts | 2897 -------------- solana/ts/src/index.ts | 155 +- solana/ts/tests/01__circleIntegration.ts | 71 +- .../usdc_local_token.json | 8 +- 26 files changed, 6549 insertions(+), 7893 deletions(-) rename solana/ts/src/{circle => cctp}/index.ts (51%) create mode 100644 solana/ts/src/cctp/messageTransmitter/MessageSent.ts rename solana/ts/src/{circle => cctp}/messageTransmitter/MessageTransmitterConfig.ts (78%) rename solana/ts/src/{circle => cctp}/messageTransmitter/UsedNonces.ts (100%) rename solana/ts/src/{circle => cctp}/messageTransmitter/index.ts (75%) rename solana/ts/src/{circle => cctp}/messages.ts (100%) rename solana/ts/src/{circle => cctp}/tokenMessengerMinter/RemoteTokenMessenger.ts (100%) rename solana/ts/src/{circle => cctp}/tokenMessengerMinter/index.ts (92%) create mode 100644 solana/ts/src/cctp/types/message_transmitter.ts create mode 100644 solana/ts/src/cctp/types/token_messenger_minter.ts delete mode 100644 solana/ts/src/circle/idl/message_transmitter.json delete mode 100644 solana/ts/src/circle/idl/token_messenger_minter.json delete mode 100644 solana/ts/src/circle/types/message_transmitter.ts delete mode 100644 solana/ts/src/circle/types/token_messenger_minter.ts diff --git a/solana/Cargo.lock b/solana/Cargo.lock index 9c6d30f..af6098f 100644 --- a/solana/Cargo.lock +++ b/solana/Cargo.lock @@ -2377,7 +2377,7 @@ dependencies = [ [[package]] name = "wormhole-cctp-solana" -version = "0.0.1-alpha.9" +version = "0.1.0-alpha.1" dependencies = [ "anchor-lang", "anchor-spl", @@ -2393,7 +2393,7 @@ dependencies = [ [[package]] name = "wormhole-circle-integration-solana" -version = "0.0.1-alpha.9" +version = "0.1.0-alpha.1" dependencies = [ "ahash 0.8.6", "anchor-lang", diff --git a/solana/Cargo.toml b/solana/Cargo.toml index 92e2df6..20de59a 100644 --- a/solana/Cargo.toml +++ b/solana/Cargo.toml @@ -7,7 +7,7 @@ resolver = "2" [workspace.package] edition = "2021" -version = "0.0.1-alpha.9" +version = "0.1.0-alpha.1" authors = ["Wormhole Contributors"] license = "Apache-2.0" homepage = "https://wormhole.com" diff --git a/solana/modules/wormhole-cctp/src/cctp/message_transmitter_program/cpi/receive_message/token_messenger_minter.rs b/solana/modules/wormhole-cctp/src/cctp/message_transmitter_program/cpi/receive_message/token_messenger_minter.rs index 9f378a4..2440475 100644 --- a/solana/modules/wormhole-cctp/src/cctp/message_transmitter_program/cpi/receive_message/token_messenger_minter.rs +++ b/solana/modules/wormhole-cctp/src/cctp/message_transmitter_program/cpi/receive_message/token_messenger_minter.rs @@ -1,17 +1,15 @@ use anchor_lang::prelude::*; /// Account context to invoke [receive_token_messenger_minter_message]. -#[derive(Accounts)] pub struct ReceiveTokenMessengerMinterMessage<'info> { /// Mutable signer. Transaction payer. - #[account(mut, signer)] pub payer: AccountInfo<'info>, /// Signer. Specific caller, which must be encoded as the destination caller. - #[account(signer)] pub caller: AccountInfo<'info>, - /// Seeds must be \["message_transmitter_authority"\] (CCTP Message Transmitter program). + /// Seeds must be \["message_transmitter_authority"\, token_messenger_minter_program] (CCTP + /// Message Transmitter program). pub message_transmitter_authority: AccountInfo<'info>, /// Seeds must be \["message_transmitter"\] (CCTP Message Transmitter program). @@ -19,7 +17,6 @@ pub struct ReceiveTokenMessengerMinterMessage<'info> { /// Mutable. Seeds must be \["used_nonces", remote_domain.to_string(), first_nonce.to_string()\] /// (CCTP Message Transmitter program). - #[account(mut)] pub used_nonces: AccountInfo<'info>, /// CCTP Token Messenger Minter program. @@ -27,6 +24,11 @@ pub struct ReceiveTokenMessengerMinterMessage<'info> { pub system_program: AccountInfo<'info>, + /// Seeds must be \["__event_authority"\] (CCTP Message Transmitter program)). + pub message_transmitter_event_authority: AccountInfo<'info>, + + pub message_transmitter_program: AccountInfo<'info>, + // The following accounts are expected to be passed in as remaining accounts. These accounts are // meant for the Token Messenger Minter program because the Message Transmitter program performs // CPI on this program so it can mint tokens. @@ -45,7 +47,6 @@ pub struct ReceiveTokenMessengerMinterMessage<'info> { pub token_minter: AccountInfo<'info>, /// Mutable. Seeds must be \["local_token", mint\] (CCTP Token Messenger Minter program). - #[account(mut)] pub local_token: AccountInfo<'info>, /// Seeds must be \["token_pair", remote_domain.to_string(), remote_token_address\] (CCTP Token @@ -54,14 +55,15 @@ pub struct ReceiveTokenMessengerMinterMessage<'info> { /// Mutable. Mint recipient token account, which must be encoded as the mint recipient in the /// CCTP mesage. - #[account(mut)] pub mint_recipient: AccountInfo<'info>, /// Mutable. Seeds must be \["custody", mint\] (CCTP Token Messenger Minter program). - #[account(mut)] pub custody_token: AccountInfo<'info>, pub token_program: AccountInfo<'info>, + + /// Seeds must be \["__event_authority"\] (CCTP Token Messenger Minter program). + pub token_messenger_minter_event_authority: AccountInfo<'info>, } /// Method to call the receive message instruction on the CCTP Message Transmitter program, specific @@ -86,3 +88,53 @@ pub fn receive_token_messenger_minter_message<'info>( ) .map_err(Into::into) } + +impl<'info> ToAccountMetas for ReceiveTokenMessengerMinterMessage<'info> { + fn to_account_metas(&self, _is_signer: Option) -> Vec { + vec![ + AccountMeta::new(self.payer.key(), true), + AccountMeta::new_readonly(self.caller.key(), true), + AccountMeta::new_readonly(self.message_transmitter_authority.key(), false), + AccountMeta::new_readonly(self.message_transmitter_config.key(), false), + AccountMeta::new(self.used_nonces.key(), false), + AccountMeta::new_readonly(self.token_messenger_minter_program.key(), false), + AccountMeta::new_readonly(self.system_program.key(), false), + AccountMeta::new_readonly(self.message_transmitter_event_authority.key(), false), + AccountMeta::new_readonly(self.message_transmitter_program.key(), false), + AccountMeta::new_readonly(self.token_messenger.key(), false), + AccountMeta::new_readonly(self.remote_token_messenger.key(), false), + AccountMeta::new_readonly(self.token_minter.key(), false), + AccountMeta::new(self.local_token.key(), false), + AccountMeta::new_readonly(self.token_pair.key(), false), + AccountMeta::new(self.mint_recipient.key(), false), + AccountMeta::new(self.custody_token.key(), false), + AccountMeta::new_readonly(self.token_program.key(), false), + AccountMeta::new_readonly(self.token_messenger_minter_event_authority.key(), false), + AccountMeta::new_readonly(self.token_messenger_minter_program.key(), false), + ] + } +} + +impl<'info> ToAccountInfos<'info> for ReceiveTokenMessengerMinterMessage<'info> { + fn to_account_infos(&self) -> Vec> { + vec![ + self.payer.clone(), + self.caller.clone(), + self.message_transmitter_authority.clone(), + self.message_transmitter_config.clone(), + self.used_nonces.clone(), + self.token_messenger_minter_program.clone(), + self.system_program.clone(), + self.message_transmitter_event_authority.clone(), + self.token_messenger.clone(), + self.remote_token_messenger.clone(), + self.token_minter.clone(), + self.local_token.clone(), + self.token_pair.clone(), + self.mint_recipient.clone(), + self.custody_token.clone(), + self.token_program.clone(), + self.token_messenger_minter_event_authority.clone(), + ] + } +} diff --git a/solana/modules/wormhole-cctp/src/cctp/message_transmitter_program/state/message_transmitter_config.rs b/solana/modules/wormhole-cctp/src/cctp/message_transmitter_program/state/message_transmitter_config.rs index 3eeceae..c0961f5 100644 --- a/solana/modules/wormhole-cctp/src/cctp/message_transmitter_program/state/message_transmitter_config.rs +++ b/solana/modules/wormhole-cctp/src/cctp/message_transmitter_program/state/message_transmitter_config.rs @@ -13,7 +13,6 @@ pub struct MessageTransmitterConfig { pub enabled_attesters: Vec<[u8; 32]>, pub max_message_body_size: u64, pub next_available_nonce: u64, - pub authority_bump: u8, } impl anchor_lang::Discriminator for MessageTransmitterConfig { diff --git a/solana/modules/wormhole-cctp/src/cctp/token_messenger_minter_program/cpi/deposit_for_burn_with_caller.rs b/solana/modules/wormhole-cctp/src/cctp/token_messenger_minter_program/cpi/deposit_for_burn_with_caller.rs index 9275bb2..9175acc 100644 --- a/solana/modules/wormhole-cctp/src/cctp/token_messenger_minter_program/cpi/deposit_for_burn_with_caller.rs +++ b/solana/modules/wormhole-cctp/src/cctp/token_messenger_minter_program/cpi/deposit_for_burn_with_caller.rs @@ -1,21 +1,23 @@ use anchor_lang::prelude::*; /// Account context to invoke [deposit_for_burn_with_caller]. -#[derive(Accounts)] pub struct DepositForBurnWithCaller<'info> { - /// Signer. This account must be the owner of `src_token`. - #[account(signer)] - pub src_token_owner: AccountInfo<'info>, + /// Signer. This account must be the owner of `burn_token`. + //#[account(signer)] + pub burn_token_owner: AccountInfo<'info>, + + //#[account(mut, signer)] + pub payer: AccountInfo<'info>, /// Seeds must be \["sender_authority"\] (CCTP Token Messenger Minter program). pub token_messenger_minter_sender_authority: AccountInfo<'info>, - /// Mutable. This token account must be owned by `src_token_owner`. - #[account(mut)] - pub src_token: AccountInfo<'info>, + /// Mutable. This token account must be owned by `burn_token_owner`. + //#[account(mut)] + pub burn_token: AccountInfo<'info>, /// Mutable. Seeds must be \["message_transmitter"\] (CCTP Message Transmitter program). - #[account(mut)] + //#[account(mut)] pub message_transmitter_config: AccountInfo<'info>, /// Seeds must be \["token_messenger"\] (CCTP Token Messenger Minter program). @@ -29,13 +31,16 @@ pub struct DepositForBurnWithCaller<'info> { pub token_minter: AccountInfo<'info>, /// Mutable. Seeds must be \["local_token", mint\] (CCTP Token Messenger Minter program). - #[account(mut)] + //#[account(mut)] pub local_token: AccountInfo<'info>, /// Mutable. Mint to be burned via CCTP. - #[account(mut)] + //#[account(mut)] pub mint: AccountInfo<'info>, + //#[account(mut, signer)] + pub cctp_message: AccountInfo<'info>, + /// CCTP Message Transmitter program. pub message_transmitter_program: AccountInfo<'info>, @@ -43,6 +48,11 @@ pub struct DepositForBurnWithCaller<'info> { pub token_messenger_minter_program: AccountInfo<'info>, pub token_program: AccountInfo<'info>, + + pub system_program: AccountInfo<'info>, + + /// Seeds must be \["__event_authority"\] (CCTP Token Messenger Minter program). + pub event_authority: AccountInfo<'info>, } /// Parameters to invoke [deposit_for_burn_with_caller]. @@ -91,3 +101,49 @@ pub fn deposit_for_burn_with_caller<'info>( ) .map_err(Into::into) } + +impl<'info> ToAccountMetas for DepositForBurnWithCaller<'info> { + fn to_account_metas(&self, _is_signer: Option) -> Vec { + vec![ + AccountMeta::new_readonly(self.burn_token_owner.key(), true), + AccountMeta::new(self.payer.key(), true), + AccountMeta::new_readonly(self.token_messenger_minter_sender_authority.key(), false), + AccountMeta::new(self.burn_token.key(), false), + AccountMeta::new(self.message_transmitter_config.key(), false), + AccountMeta::new_readonly(self.token_messenger.key(), false), + AccountMeta::new_readonly(self.remote_token_messenger.key(), false), + AccountMeta::new_readonly(self.token_minter.key(), false), + AccountMeta::new(self.local_token.key(), false), + AccountMeta::new(self.mint.key(), false), + AccountMeta::new(self.cctp_message.key(), true), + AccountMeta::new_readonly(self.message_transmitter_program.key(), false), + AccountMeta::new_readonly(self.token_messenger_minter_program.key(), false), + AccountMeta::new_readonly(self.token_program.key(), false), + AccountMeta::new_readonly(self.system_program.key(), false), + AccountMeta::new_readonly(self.event_authority.key(), false), + AccountMeta::new_readonly(self.token_messenger_minter_program.key(), false), + ] + } +} + +impl<'info> ToAccountInfos<'info> for DepositForBurnWithCaller<'info> { + fn to_account_infos(&self) -> Vec> { + vec![ + self.burn_token_owner.clone(), + self.payer.clone(), + self.token_messenger_minter_sender_authority.clone(), + self.burn_token.clone(), + self.message_transmitter_config.clone(), + self.token_messenger.clone(), + self.remote_token_messenger.clone(), + self.token_minter.clone(), + self.local_token.clone(), + self.mint.clone(), + self.cctp_message.clone(), + self.message_transmitter_program.clone(), + self.token_program.clone(), + self.system_program.clone(), + self.event_authority.clone(), + ] + } +} diff --git a/solana/modules/wormhole-cctp/src/cctp/token_messenger_minter_program/state/local_token.rs b/solana/modules/wormhole-cctp/src/cctp/token_messenger_minter_program/state/local_token.rs index f182b5a..6363d7c 100644 --- a/solana/modules/wormhole-cctp/src/cctp/token_messenger_minter_program/state/local_token.rs +++ b/solana/modules/wormhole-cctp/src/cctp/token_messenger_minter_program/state/local_token.rs @@ -7,8 +7,8 @@ pub struct LocalToken { pub burn_limit_per_message: u64, pub messages_sent: u64, pub messages_received: u64, - pub amount_sent: u64, - pub amount_received: u64, + pub amount_sent: u128, + pub amount_received: u128, pub bump: u8, pub custody_bump: u8, } diff --git a/solana/modules/wormhole-cctp/src/cpi/burn_and_publish.rs b/solana/modules/wormhole-cctp/src/cpi/burn_and_publish.rs index 2c95e70..0c05a6b 100644 --- a/solana/modules/wormhole-cctp/src/cpi/burn_and_publish.rs +++ b/solana/modules/wormhole-cctp/src/cpi/burn_and_publish.rs @@ -78,7 +78,7 @@ where let token_address = cctp_ctx.accounts.mint.key.to_bytes(); let burn_source = burn_source - .unwrap_or(cctp_ctx.accounts.src_token.key()) + .unwrap_or(cctp_ctx.accounts.burn_token.key()) .to_bytes(); // We want to make this call as early as possible because the deposit for burn diff --git a/solana/programs/circle-integration/src/processor/redeem_tokens_with_payload.rs b/solana/programs/circle-integration/src/processor/redeem_tokens_with_payload.rs index 4d34eae..ab53930 100644 --- a/solana/programs/circle-integration/src/processor/redeem_tokens_with_payload.rs +++ b/solana/programs/circle-integration/src/processor/redeem_tokens_with_payload.rs @@ -73,13 +73,16 @@ pub struct RedeemTokensWithPayload<'info> { message_transmitter_authority: UncheckedAccount<'info>, /// CHECK: Seeds must be \["message_transmitter"\] (CCTP Message Transmitter program). - message_transmitter_config: AccountInfo<'info>, + message_transmitter_config: UncheckedAccount<'info>, /// CHECK: Mutable. Seeds must be \["used_nonces", remote_domain.to_string(), /// first_nonce.to_string()\] (CCTP Message Transmitter program). #[account(mut)] used_nonces: UncheckedAccount<'info>, + /// CHECK: Seeds must be \["__event_authority"\] (CCTP Message Transmitter program). + message_transmitter_event_authority: UncheckedAccount<'info>, + /// CHECK: Seeds must be \["token_messenger"\] (CCTP Token Messenger Minter program). token_messenger: UncheckedAccount<'info>, @@ -107,11 +110,14 @@ pub struct RedeemTokensWithPayload<'info> { /// CHECK: Seeds must be \["token_pair", remote_domain.to_string(), remote_token_address\] (CCTP /// Token Messenger Minter program). - token_pair: AccountInfo<'info>, + token_pair: UncheckedAccount<'info>, /// CHECK: Mutable. Seeds must be \["custody", mint\] (CCTP Token Messenger Minter program). #[account(mut)] - token_messenger_minter_custody_token: AccountInfo<'info>, + token_messenger_minter_custody_token: UncheckedAccount<'info>, + + /// CHECK: Seeds must be \["__event_authority"\] (CCTP Token Messenger Minter program). + token_messenger_minter_event_authority: UncheckedAccount<'info>, token_messenger_minter_program: Program<'info, token_messenger_minter_program::TokenMessengerMinter>, @@ -159,6 +165,14 @@ pub fn redeem_tokens_with_payload( .token_messenger_minter_program .to_account_info(), system_program: ctx.accounts.system_program.to_account_info(), + message_transmitter_event_authority: ctx + .accounts + .message_transmitter_event_authority + .to_account_info(), + message_transmitter_program: ctx + .accounts + .message_transmitter_program + .to_account_info(), token_messenger: ctx.accounts.token_messenger.to_account_info(), remote_token_messenger: ctx.accounts.remote_token_messenger.to_account_info(), token_minter: ctx.accounts.token_minter.to_account_info(), @@ -170,6 +184,10 @@ pub fn redeem_tokens_with_payload( .token_messenger_minter_custody_token .to_account_info(), token_program: ctx.accounts.token_program.to_account_info(), + token_messenger_minter_event_authority: ctx + .accounts + .token_messenger_minter_event_authority + .to_account_info(), }, &[&[Custodian::SEED_PREFIX, &[ctx.accounts.custodian.bump]]], ), diff --git a/solana/programs/circle-integration/src/processor/transfer_tokens_with_payload.rs b/solana/programs/circle-integration/src/processor/transfer_tokens_with_payload.rs index 2d6a65e..58df57f 100644 --- a/solana/programs/circle-integration/src/processor/transfer_tokens_with_payload.rs +++ b/solana/programs/circle-integration/src/processor/transfer_tokens_with_payload.rs @@ -82,6 +82,10 @@ pub struct TransferTokensWithPayload<'info> { #[account(mut)] core_message: Signer<'info>, + /// CHECK: Mutable signer to create CCTP message. + #[account(mut)] + cctp_message: Signer<'info>, + /// CHECK: Seeds must be \["Sequence"\, custodian] (Wormhole Core Bridge program). #[account(mut)] core_emitter_sequence: UncheckedAccount<'info>, @@ -104,7 +108,7 @@ pub struct TransferTokensWithPayload<'info> { /// Messenger Minter program). remote_token_messenger: UncheckedAccount<'info>, - /// CHECK Seeds must be \["token_minter"\] (CCTP Token Messenger Minter program). + /// CHECK: Seeds must be \["token_minter"\] (CCTP Token Messenger Minter program). token_minter: UncheckedAccount<'info>, /// Local token account, which this program uses to validate the `mint` used to burn. @@ -113,6 +117,9 @@ pub struct TransferTokensWithPayload<'info> { #[account(mut)] local_token: Box>>, + /// CHECK: Seeds must be \["__event_authority"\] (CCTP Token Messenger Minter program). + token_messenger_minter_event_authority: UncheckedAccount<'info>, + core_bridge_program: Program<'info, core_bridge_program::CoreBridge>, token_messenger_minter_program: Program<'info, token_messenger_minter_program::TokenMessengerMinter>, @@ -148,7 +155,7 @@ pub struct TransferTokensWithPayloadArgs { } #[derive(Debug, Clone)] -pub struct WrappedVec(Vec); +struct WrappedVec(Vec); impl Readable for WrappedVec { const SIZE: Option = None; @@ -218,12 +225,13 @@ pub fn transfer_tokens_with_payload( .token_messenger_minter_program .to_account_info(), wormhole_cctp_solana::cpi::DepositForBurnWithCaller { - src_token_owner: ctx.accounts.custodian.to_account_info(), + burn_token_owner: ctx.accounts.custodian.to_account_info(), + payer: ctx.accounts.payer.to_account_info(), token_messenger_minter_sender_authority: ctx .accounts .token_messenger_minter_sender_authority .to_account_info(), - src_token: ctx.accounts.custody_token.to_account_info(), + burn_token: ctx.accounts.custody_token.to_account_info(), message_transmitter_config: ctx .accounts .message_transmitter_config @@ -233,6 +241,7 @@ pub fn transfer_tokens_with_payload( token_minter: ctx.accounts.token_minter.to_account_info(), local_token: ctx.accounts.local_token.to_account_info(), mint: ctx.accounts.mint.to_account_info(), + cctp_message: ctx.accounts.cctp_message.to_account_info(), message_transmitter_program: ctx .accounts .message_transmitter_program @@ -242,6 +251,11 @@ pub fn transfer_tokens_with_payload( .token_messenger_minter_program .to_account_info(), token_program: ctx.accounts.token_program.to_account_info(), + system_program: ctx.accounts.system_program.to_account_info(), + event_authority: ctx + .accounts + .token_messenger_minter_event_authority + .to_account_info(), }, &[custodian_seeds], ), diff --git a/solana/ts/src/circle/index.ts b/solana/ts/src/cctp/index.ts similarity index 51% rename from solana/ts/src/circle/index.ts rename to solana/ts/src/cctp/index.ts index acd4e0c..3527387 100644 --- a/solana/ts/src/circle/index.ts +++ b/solana/ts/src/cctp/index.ts @@ -1,6 +1,3 @@ export { MessageTransmitterProgram } from "./messageTransmitter"; export { CctpMessage, CctpTokenBurnMessage } from "./messages"; -export { - DEPOSIT_FOR_BURN_WITH_CALLER_IX_SELECTOR, - TokenMessengerMinterProgram, -} from "./tokenMessengerMinter"; +export { TokenMessengerMinterProgram } from "./tokenMessengerMinter"; diff --git a/solana/ts/src/cctp/messageTransmitter/MessageSent.ts b/solana/ts/src/cctp/messageTransmitter/MessageSent.ts new file mode 100644 index 0000000..8cbb552 --- /dev/null +++ b/solana/ts/src/cctp/messageTransmitter/MessageSent.ts @@ -0,0 +1,11 @@ +import { PublicKey } from "@solana/web3.js"; + +export class MessageSent { + rentPayer: PublicKey; + message: Buffer; + + constructor(rentPayer: PublicKey, message: Buffer) { + this.rentPayer = rentPayer; + this.message = message; + } +} diff --git a/solana/ts/src/circle/messageTransmitter/MessageTransmitterConfig.ts b/solana/ts/src/cctp/messageTransmitter/MessageTransmitterConfig.ts similarity index 78% rename from solana/ts/src/circle/messageTransmitter/MessageTransmitterConfig.ts rename to solana/ts/src/cctp/messageTransmitter/MessageTransmitterConfig.ts index e8b86ab..d297ab9 100644 --- a/solana/ts/src/circle/messageTransmitter/MessageTransmitterConfig.ts +++ b/solana/ts/src/cctp/messageTransmitter/MessageTransmitterConfig.ts @@ -1,3 +1,4 @@ +import { BN } from "@coral-xyz/anchor"; import { PublicKey } from "@solana/web3.js"; export class MessageTransmitterConfig { @@ -9,10 +10,9 @@ export class MessageTransmitterConfig { localDomain: number; version: number; signatureThreshold: number; - enabledAttesters: Array>; - maxMessageBodySize: bigint; - nextAvailableNonce: bigint; - authorityBump: number; + enabledAttesters: Array; + maxMessageBodySize: BN; + nextAvailableNonce: BN; constructor( owner: PublicKey, @@ -23,10 +23,9 @@ export class MessageTransmitterConfig { localDomain: number, version: number, signatureThreshold: number, - enabledAttesters: Array>, - maxMessageBodySize: bigint, - nextAvailableNonce: bigint, - authorityBump: number, + enabledAttesters: Array, + maxMessageBodySize: BN, + nextAvailableNonce: BN, ) { this.owner = owner; this.pendingOwner = pendingOwner; @@ -39,7 +38,6 @@ export class MessageTransmitterConfig { this.enabledAttesters = enabledAttesters; this.maxMessageBodySize = maxMessageBodySize; this.nextAvailableNonce = nextAvailableNonce; - this.authorityBump = authorityBump; } static address(programId: PublicKey) { diff --git a/solana/ts/src/circle/messageTransmitter/UsedNonces.ts b/solana/ts/src/cctp/messageTransmitter/UsedNonces.ts similarity index 100% rename from solana/ts/src/circle/messageTransmitter/UsedNonces.ts rename to solana/ts/src/cctp/messageTransmitter/UsedNonces.ts diff --git a/solana/ts/src/circle/messageTransmitter/index.ts b/solana/ts/src/cctp/messageTransmitter/index.ts similarity index 75% rename from solana/ts/src/circle/messageTransmitter/index.ts rename to solana/ts/src/cctp/messageTransmitter/index.ts index c86b7d7..0169b5d 100644 --- a/solana/ts/src/circle/messageTransmitter/index.ts +++ b/solana/ts/src/cctp/messageTransmitter/index.ts @@ -1,9 +1,9 @@ import { Program } from "@coral-xyz/anchor"; -import { TOKEN_PROGRAM_ID } from "@solana/spl-token"; import { Connection, PublicKey } from "@solana/web3.js"; import { CctpTokenBurnMessage } from "../messages"; import { TokenMessengerMinterProgram } from "../tokenMessengerMinter"; import { IDL, MessageTransmitter } from "../types/message_transmitter"; +import { MessageSent } from "./MessageSent"; import { MessageTransmitterConfig } from "./MessageTransmitterConfig"; import { UsedNonses } from "./UsedNonces"; @@ -11,18 +11,20 @@ export const PROGRAM_IDS = ["CCTPmbSD7gX1bxKPAmg77w8oFzNFpaQiQUWD43TKaecd"] as c export type ProgramId = (typeof PROGRAM_IDS)[number]; -export type ReceiveMessageAccounts = { +export type ReceiveTokenMessengerMinterMessageAccounts = { authority: PublicKey; messageTransmitterConfig: PublicKey; usedNonces: PublicKey; tokenMessengerMinterProgram: PublicKey; + messageTransmitterEventAuthority: PublicKey; + messageTransmitterProgram: PublicKey; tokenMessenger: PublicKey; remoteTokenMessenger: PublicKey; tokenMinter: PublicKey; localToken: PublicKey; tokenPair: PublicKey; custodyToken: PublicKey; - tokenProgram: PublicKey; + eventAuthority: PublicKey; }; export class MessageTransmitterProgram { @@ -46,48 +48,28 @@ export class MessageTransmitterProgram { } async fetchMessageTransmitterConfig(addr: PublicKey): Promise { - const { - owner, - pendingOwner, - attesterManager, - pauser, - paused, - localDomain, - version, - signatureThreshold, - enabledAttesters, - maxMessageBodySize, - nextAvailableNonce, - authorityBump, - } = await this.program.account.messageTransmitter.fetch(addr); - - return new MessageTransmitterConfig( - owner, - pendingOwner, - attesterManager, - pauser, - paused, - localDomain, - version, - signatureThreshold, - enabledAttesters.map((addr) => Array.from(addr.toBuffer())), - BigInt(maxMessageBodySize.toString()), - BigInt(nextAvailableNonce.toString()), - authorityBump, - ); + return this.program.account.messageTransmitter.fetch(addr); } usedNoncesAddress(remoteDomain: number, nonce: bigint): PublicKey { return UsedNonses.address(this.ID, remoteDomain, nonce); } - authorityAddress(): PublicKey { + authorityAddress(cpiProgramId: PublicKey): PublicKey { return PublicKey.findProgramAddressSync( - [Buffer.from("message_transmitter_authority")], + [Buffer.from("message_transmitter_authority"), cpiProgramId.toBuffer()], this.ID, )[0]; } + eventAuthorityAddress(): PublicKey { + return PublicKey.findProgramAddressSync([Buffer.from("__event_authority")], this.ID)[0]; + } + + fetchMessageSent(addr: PublicKey): Promise { + return this.program.account.messageSent.fetch(addr); + } + tokenMessengerMinterProgram(): TokenMessengerMinterProgram { switch (this._programId) { case testnet(): { @@ -108,10 +90,10 @@ export class MessageTransmitterProgram { } } - receiveMessageAccounts( + receiveTokenMessengerMinterMessageAccounts( mint: PublicKey, circleMessage: CctpTokenBurnMessage | Buffer, - ): ReceiveMessageAccounts { + ): ReceiveTokenMessengerMinterMessageAccounts { const { cctp: { sourceDomain, nonce }, burnTokenAddress, @@ -119,10 +101,12 @@ export class MessageTransmitterProgram { const tokenMessengerMinterProgram = this.tokenMessengerMinterProgram(); return { - authority: this.authorityAddress(), + authority: this.authorityAddress(tokenMessengerMinterProgram.ID), messageTransmitterConfig: this.messageTransmitterConfigAddress(), usedNonces: this.usedNoncesAddress(sourceDomain, nonce), tokenMessengerMinterProgram: tokenMessengerMinterProgram.ID, + messageTransmitterEventAuthority: this.eventAuthorityAddress(), + messageTransmitterProgram: this.ID, tokenMessenger: tokenMessengerMinterProgram.tokenMessengerAddress(), remoteTokenMessenger: tokenMessengerMinterProgram.remoteTokenMessengerAddress(sourceDomain), @@ -130,7 +114,7 @@ export class MessageTransmitterProgram { localToken: tokenMessengerMinterProgram.localTokenAddress(mint), tokenPair: tokenMessengerMinterProgram.tokenPairAddress(sourceDomain, burnTokenAddress), custodyToken: tokenMessengerMinterProgram.custodyTokenAddress(mint), - tokenProgram: TOKEN_PROGRAM_ID, + eventAuthority: tokenMessengerMinterProgram.eventAuthorityAddress(), }; } } diff --git a/solana/ts/src/circle/messages.ts b/solana/ts/src/cctp/messages.ts similarity index 100% rename from solana/ts/src/circle/messages.ts rename to solana/ts/src/cctp/messages.ts diff --git a/solana/ts/src/circle/tokenMessengerMinter/RemoteTokenMessenger.ts b/solana/ts/src/cctp/tokenMessengerMinter/RemoteTokenMessenger.ts similarity index 100% rename from solana/ts/src/circle/tokenMessengerMinter/RemoteTokenMessenger.ts rename to solana/ts/src/cctp/tokenMessengerMinter/RemoteTokenMessenger.ts diff --git a/solana/ts/src/circle/tokenMessengerMinter/index.ts b/solana/ts/src/cctp/tokenMessengerMinter/index.ts similarity index 92% rename from solana/ts/src/circle/tokenMessengerMinter/index.ts rename to solana/ts/src/cctp/tokenMessengerMinter/index.ts index 64f3288..4686531 100644 --- a/solana/ts/src/circle/tokenMessengerMinter/index.ts +++ b/solana/ts/src/cctp/tokenMessengerMinter/index.ts @@ -1,5 +1,4 @@ import { Program } from "@coral-xyz/anchor"; -import { TOKEN_PROGRAM_ID } from "@solana/spl-token"; import { Connection, PublicKey } from "@solana/web3.js"; import { MessageTransmitterProgram } from "../messageTransmitter"; import { IDL, TokenMessengerMinter } from "../types/token_messenger_minter"; @@ -7,10 +6,6 @@ import { RemoteTokenMessenger } from "./RemoteTokenMessenger"; export const PROGRAM_IDS = ["CCTPiPYPc6AsJuwueEnWgSgucamXDZwBd53dQ11YiKX3"] as const; -export const DEPOSIT_FOR_BURN_WITH_CALLER_IX_SELECTOR = Uint8Array.from([ - 167, 222, 19, 114, 85, 21, 14, 118, -]); - export type ProgramId = (typeof PROGRAM_IDS)[number]; export type DepositForBurnWithCallerAccounts = { @@ -20,9 +15,9 @@ export type DepositForBurnWithCallerAccounts = { remoteTokenMessenger: PublicKey; tokenMinter: PublicKey; localToken: PublicKey; + tokenMessengerMinterEventAuthority: PublicKey; messageTransmitterProgram: PublicKey; tokenMessengerMinterProgram: PublicKey; - tokenProgram: PublicKey; }; export class TokenMessengerMinterProgram { @@ -84,10 +79,14 @@ export class TokenMessengerMinterProgram { )[0]; } - senderAuthority(): PublicKey { + senderAuthorityAddress(): PublicKey { return PublicKey.findProgramAddressSync([Buffer.from("sender_authority")], this.ID)[0]; } + eventAuthorityAddress(): PublicKey { + return PublicKey.findProgramAddressSync([Buffer.from("__event_authority")], this.ID)[0]; + } + messageTransmitterProgram(): MessageTransmitterProgram { switch (this._programId) { case testnet(): { @@ -114,15 +113,15 @@ export class TokenMessengerMinterProgram { ): DepositForBurnWithCallerAccounts { const messageTransmitterProgram = this.messageTransmitterProgram(); return { - senderAuthority: this.senderAuthority(), + senderAuthority: this.senderAuthorityAddress(), messageTransmitterConfig: messageTransmitterProgram.messageTransmitterConfigAddress(), tokenMessenger: this.tokenMessengerAddress(), remoteTokenMessenger: this.remoteTokenMessengerAddress(remoteDomain), tokenMinter: this.tokenMinterAddress(), localToken: this.localTokenAddress(mint), + tokenMessengerMinterEventAuthority: this.eventAuthorityAddress(), messageTransmitterProgram: messageTransmitterProgram.ID, tokenMessengerMinterProgram: this.ID, - tokenProgram: TOKEN_PROGRAM_ID, }; } } diff --git a/solana/ts/src/cctp/types/message_transmitter.ts b/solana/ts/src/cctp/types/message_transmitter.ts new file mode 100644 index 0000000..4f59932 --- /dev/null +++ b/solana/ts/src/cctp/types/message_transmitter.ts @@ -0,0 +1,2735 @@ +export type MessageTransmitter = { + version: "0.1.0"; + name: "message_transmitter"; + instructions: [ + { + name: "initialize"; + accounts: [ + { + name: "payer"; + isMut: true; + isSigner: true; + }, + { + name: "upgradeAuthority"; + isMut: false; + isSigner: true; + }, + { + name: "messageTransmitter"; + isMut: true; + isSigner: false; + }, + { + name: "messageTransmitterProgramData"; + isMut: false; + isSigner: false; + }, + { + name: "messageTransmitterProgram"; + isMut: false; + isSigner: false; + }, + { + name: "systemProgram"; + isMut: false; + isSigner: false; + }, + { + name: "eventAuthority"; + isMut: false; + isSigner: false; + }, + { + name: "program"; + isMut: false; + isSigner: false; + }, + ]; + args: [ + { + name: "params"; + type: { + defined: "InitializeParams"; + }; + }, + ]; + }, + { + name: "transferOwnership"; + accounts: [ + { + name: "owner"; + isMut: false; + isSigner: true; + }, + { + name: "messageTransmitter"; + isMut: true; + isSigner: false; + }, + { + name: "eventAuthority"; + isMut: false; + isSigner: false; + }, + { + name: "program"; + isMut: false; + isSigner: false; + }, + ]; + args: [ + { + name: "params"; + type: { + defined: "TransferOwnershipParams"; + }; + }, + ]; + }, + { + name: "acceptOwnership"; + accounts: [ + { + name: "pendingOwner"; + isMut: false; + isSigner: true; + }, + { + name: "messageTransmitter"; + isMut: true; + isSigner: false; + }, + { + name: "eventAuthority"; + isMut: false; + isSigner: false; + }, + { + name: "program"; + isMut: false; + isSigner: false; + }, + ]; + args: [ + { + name: "params"; + type: { + defined: "AcceptOwnershipParams"; + }; + }, + ]; + }, + { + name: "updatePauser"; + accounts: [ + { + name: "owner"; + isMut: false; + isSigner: true; + }, + { + name: "messageTransmitter"; + isMut: true; + isSigner: false; + }, + { + name: "eventAuthority"; + isMut: false; + isSigner: false; + }, + { + name: "program"; + isMut: false; + isSigner: false; + }, + ]; + args: [ + { + name: "params"; + type: { + defined: "UpdatePauserParams"; + }; + }, + ]; + }, + { + name: "updateAttesterManager"; + accounts: [ + { + name: "owner"; + isMut: false; + isSigner: true; + }, + { + name: "messageTransmitter"; + isMut: true; + isSigner: false; + }, + { + name: "eventAuthority"; + isMut: false; + isSigner: false; + }, + { + name: "program"; + isMut: false; + isSigner: false; + }, + ]; + args: [ + { + name: "params"; + type: { + defined: "UpdateAttesterManagerParams"; + }; + }, + ]; + }, + { + name: "pause"; + accounts: [ + { + name: "pauser"; + isMut: false; + isSigner: true; + }, + { + name: "messageTransmitter"; + isMut: true; + isSigner: false; + }, + { + name: "eventAuthority"; + isMut: false; + isSigner: false; + }, + { + name: "program"; + isMut: false; + isSigner: false; + }, + ]; + args: [ + { + name: "params"; + type: { + defined: "PauseParams"; + }; + }, + ]; + }, + { + name: "unpause"; + accounts: [ + { + name: "pauser"; + isMut: false; + isSigner: true; + }, + { + name: "messageTransmitter"; + isMut: true; + isSigner: false; + }, + { + name: "eventAuthority"; + isMut: false; + isSigner: false; + }, + { + name: "program"; + isMut: false; + isSigner: false; + }, + ]; + args: [ + { + name: "params"; + type: { + defined: "UnpauseParams"; + }; + }, + ]; + }, + { + name: "setMaxMessageBodySize"; + accounts: [ + { + name: "owner"; + isMut: false; + isSigner: true; + }, + { + name: "messageTransmitter"; + isMut: true; + isSigner: false; + }, + { + name: "eventAuthority"; + isMut: false; + isSigner: false; + }, + { + name: "program"; + isMut: false; + isSigner: false; + }, + ]; + args: [ + { + name: "params"; + type: { + defined: "SetMaxMessageBodySizeParams"; + }; + }, + ]; + }, + { + name: "enableAttester"; + accounts: [ + { + name: "payer"; + isMut: true; + isSigner: true; + }, + { + name: "attesterManager"; + isMut: false; + isSigner: true; + }, + { + name: "messageTransmitter"; + isMut: true; + isSigner: false; + }, + { + name: "systemProgram"; + isMut: false; + isSigner: false; + }, + { + name: "eventAuthority"; + isMut: false; + isSigner: false; + }, + { + name: "program"; + isMut: false; + isSigner: false; + }, + ]; + args: [ + { + name: "params"; + type: { + defined: "EnableAttesterParams"; + }; + }, + ]; + }, + { + name: "disableAttester"; + accounts: [ + { + name: "payer"; + isMut: true; + isSigner: true; + }, + { + name: "attesterManager"; + isMut: false; + isSigner: true; + }, + { + name: "messageTransmitter"; + isMut: true; + isSigner: false; + }, + { + name: "systemProgram"; + isMut: false; + isSigner: false; + }, + { + name: "eventAuthority"; + isMut: false; + isSigner: false; + }, + { + name: "program"; + isMut: false; + isSigner: false; + }, + ]; + args: [ + { + name: "params"; + type: { + defined: "DisableAttesterParams"; + }; + }, + ]; + }, + { + name: "setSignatureThreshold"; + accounts: [ + { + name: "attesterManager"; + isMut: false; + isSigner: true; + }, + { + name: "messageTransmitter"; + isMut: true; + isSigner: false; + }, + { + name: "eventAuthority"; + isMut: false; + isSigner: false; + }, + { + name: "program"; + isMut: false; + isSigner: false; + }, + ]; + args: [ + { + name: "params"; + type: { + defined: "SetSignatureThresholdParams"; + }; + }, + ]; + }, + { + name: "sendMessage"; + accounts: [ + { + name: "eventRentPayer"; + isMut: true; + isSigner: true; + }, + { + name: "senderAuthorityPda"; + isMut: false; + isSigner: true; + }, + { + name: "messageTransmitter"; + isMut: true; + isSigner: false; + }, + { + name: "messageSentEventData"; + isMut: true; + isSigner: true; + }, + { + name: "senderProgram"; + isMut: false; + isSigner: false; + }, + { + name: "systemProgram"; + isMut: false; + isSigner: false; + }, + ]; + args: [ + { + name: "params"; + type: { + defined: "SendMessageParams"; + }; + }, + ]; + returns: "u64"; + }, + { + name: "sendMessageWithCaller"; + accounts: [ + { + name: "eventRentPayer"; + isMut: true; + isSigner: true; + }, + { + name: "senderAuthorityPda"; + isMut: false; + isSigner: true; + }, + { + name: "messageTransmitter"; + isMut: true; + isSigner: false; + }, + { + name: "messageSentEventData"; + isMut: true; + isSigner: true; + }, + { + name: "senderProgram"; + isMut: false; + isSigner: false; + }, + { + name: "systemProgram"; + isMut: false; + isSigner: false; + }, + ]; + args: [ + { + name: "params"; + type: { + defined: "SendMessageWithCallerParams"; + }; + }, + ]; + returns: "u64"; + }, + { + name: "replaceMessage"; + accounts: [ + { + name: "eventRentPayer"; + isMut: true; + isSigner: true; + }, + { + name: "senderAuthorityPda"; + isMut: false; + isSigner: true; + }, + { + name: "messageTransmitter"; + isMut: true; + isSigner: false; + }, + { + name: "messageSentEventData"; + isMut: true; + isSigner: true; + }, + { + name: "senderProgram"; + isMut: false; + isSigner: false; + }, + { + name: "systemProgram"; + isMut: false; + isSigner: false; + }, + ]; + args: [ + { + name: "params"; + type: { + defined: "ReplaceMessageParams"; + }; + }, + ]; + returns: "u64"; + }, + { + name: "receiveMessage"; + accounts: [ + { + name: "payer"; + isMut: true; + isSigner: true; + }, + { + name: "caller"; + isMut: false; + isSigner: true; + }, + { + name: "authorityPda"; + isMut: false; + isSigner: false; + }, + { + name: "messageTransmitter"; + isMut: false; + isSigner: false; + }, + { + name: "usedNonces"; + isMut: true; + isSigner: false; + }, + { + name: "receiver"; + isMut: false; + isSigner: false; + }, + { + name: "systemProgram"; + isMut: false; + isSigner: false; + }, + { + name: "eventAuthority"; + isMut: false; + isSigner: false; + }, + { + name: "program"; + isMut: false; + isSigner: false; + }, + ]; + args: [ + { + name: "params"; + type: { + defined: "ReceiveMessageParams"; + }; + }, + ]; + }, + { + name: "reclaimEventAccount"; + accounts: [ + { + name: "payee"; + isMut: true; + isSigner: true; + docs: ["rent SOL receiver, should match original rent payer"]; + }, + { + name: "messageTransmitter"; + isMut: true; + isSigner: false; + }, + { + name: "messageSentEventData"; + isMut: true; + isSigner: false; + }, + ]; + args: [ + { + name: "params"; + type: { + defined: "ReclaimEventAccountParams"; + }; + }, + ]; + }, + { + name: "getNoncePda"; + accounts: [ + { + name: "messageTransmitter"; + isMut: false; + isSigner: false; + }, + ]; + args: [ + { + name: "params"; + type: { + defined: "GetNoncePDAParams"; + }; + }, + ]; + returns: "publicKey"; + }, + { + name: "isNonceUsed"; + accounts: [ + { + name: "usedNonces"; + isMut: false; + isSigner: false; + docs: [ + "Account will be explicitly loaded to avoid error when it's not initialized", + ]; + }, + ]; + args: [ + { + name: "params"; + type: { + defined: "IsNonceUsedParams"; + }; + }, + ]; + returns: "bool"; + }, + ]; + accounts: [ + { + name: "messageSent"; + type: { + kind: "struct"; + fields: [ + { + name: "rentPayer"; + type: "publicKey"; + }, + { + name: "message"; + type: "bytes"; + }, + ]; + }; + }, + { + name: "messageTransmitter"; + docs: ["Main state of the MessageTransmitter program"]; + type: { + kind: "struct"; + fields: [ + { + name: "owner"; + type: "publicKey"; + }, + { + name: "pendingOwner"; + type: "publicKey"; + }, + { + name: "attesterManager"; + type: "publicKey"; + }, + { + name: "pauser"; + type: "publicKey"; + }, + { + name: "paused"; + type: "bool"; + }, + { + name: "localDomain"; + type: "u32"; + }, + { + name: "version"; + type: "u32"; + }, + { + name: "signatureThreshold"; + type: "u32"; + }, + { + name: "enabledAttesters"; + type: { + vec: "publicKey"; + }; + }, + { + name: "maxMessageBodySize"; + type: "u64"; + }, + { + name: "nextAvailableNonce"; + type: "u64"; + }, + ]; + }; + }, + { + name: "usedNonces"; + docs: [ + "UsedNonces account holds an array of bits that indicate which nonces were already used", + "so they can't be resused to receive new messages. Array starts with the first_nonce and", + "holds flags for UsedNonces::MAX_NONCES. Nonces are recorded separately for each remote_domain.", + ]; + type: { + kind: "struct"; + fields: [ + { + name: "remoteDomain"; + type: "u32"; + }, + { + name: "firstNonce"; + type: "u64"; + }, + { + name: "usedNonces"; + type: { + array: ["u64", 100]; + }; + }, + ]; + }; + }, + ]; + types: [ + { + name: "AcceptOwnershipParams"; + type: { + kind: "struct"; + fields: []; + }; + }, + { + name: "DisableAttesterParams"; + type: { + kind: "struct"; + fields: [ + { + name: "attester"; + type: "publicKey"; + }, + ]; + }; + }, + { + name: "EnableAttesterParams"; + type: { + kind: "struct"; + fields: [ + { + name: "newAttester"; + type: "publicKey"; + }, + ]; + }; + }, + { + name: "GetNoncePDAParams"; + type: { + kind: "struct"; + fields: [ + { + name: "nonce"; + type: "u64"; + }, + { + name: "sourceDomain"; + type: "u32"; + }, + ]; + }; + }, + { + name: "InitializeParams"; + type: { + kind: "struct"; + fields: [ + { + name: "localDomain"; + type: "u32"; + }, + { + name: "attester"; + type: "publicKey"; + }, + { + name: "maxMessageBodySize"; + type: "u64"; + }, + { + name: "version"; + type: "u32"; + }, + ]; + }; + }, + { + name: "IsNonceUsedParams"; + type: { + kind: "struct"; + fields: [ + { + name: "nonce"; + type: "u64"; + }, + ]; + }; + }, + { + name: "PauseParams"; + type: { + kind: "struct"; + fields: []; + }; + }, + { + name: "ReceiveMessageParams"; + type: { + kind: "struct"; + fields: [ + { + name: "message"; + type: "bytes"; + }, + { + name: "attestation"; + type: "bytes"; + }, + ]; + }; + }, + { + name: "HandleReceiveMessageParams"; + type: { + kind: "struct"; + fields: [ + { + name: "remoteDomain"; + type: "u32"; + }, + { + name: "sender"; + type: "publicKey"; + }, + { + name: "messageBody"; + type: "bytes"; + }, + { + name: "authorityBump"; + type: "u8"; + }, + ]; + }; + }, + { + name: "ReclaimEventAccountParams"; + type: { + kind: "struct"; + fields: [ + { + name: "attestation"; + type: "bytes"; + }, + ]; + }; + }, + { + name: "ReplaceMessageParams"; + type: { + kind: "struct"; + fields: [ + { + name: "originalMessage"; + type: "bytes"; + }, + { + name: "originalAttestation"; + type: "bytes"; + }, + { + name: "newMessageBody"; + type: "bytes"; + }, + { + name: "newDestinationCaller"; + type: "publicKey"; + }, + ]; + }; + }, + { + name: "SendMessageWithCallerParams"; + type: { + kind: "struct"; + fields: [ + { + name: "destinationDomain"; + type: "u32"; + }, + { + name: "recipient"; + type: "publicKey"; + }, + { + name: "messageBody"; + type: "bytes"; + }, + { + name: "destinationCaller"; + type: "publicKey"; + }, + ]; + }; + }, + { + name: "SendMessageParams"; + type: { + kind: "struct"; + fields: [ + { + name: "destinationDomain"; + type: "u32"; + }, + { + name: "recipient"; + type: "publicKey"; + }, + { + name: "messageBody"; + type: "bytes"; + }, + ]; + }; + }, + { + name: "SetMaxMessageBodySizeParams"; + type: { + kind: "struct"; + fields: [ + { + name: "newMaxMessageBodySize"; + type: "u64"; + }, + ]; + }; + }, + { + name: "SetSignatureThresholdParams"; + type: { + kind: "struct"; + fields: [ + { + name: "newSignatureThreshold"; + type: "u32"; + }, + ]; + }; + }, + { + name: "TransferOwnershipParams"; + type: { + kind: "struct"; + fields: [ + { + name: "newOwner"; + type: "publicKey"; + }, + ]; + }; + }, + { + name: "UnpauseParams"; + type: { + kind: "struct"; + fields: []; + }; + }, + { + name: "UpdateAttesterManagerParams"; + type: { + kind: "struct"; + fields: [ + { + name: "newAttesterManager"; + type: "publicKey"; + }, + ]; + }; + }, + { + name: "UpdatePauserParams"; + type: { + kind: "struct"; + fields: [ + { + name: "newPauser"; + type: "publicKey"; + }, + ]; + }; + }, + { + name: "MathError"; + type: { + kind: "enum"; + variants: [ + { + name: "MathOverflow"; + }, + { + name: "MathUnderflow"; + }, + { + name: "ErrorInDivision"; + }, + ]; + }; + }, + ]; + events: [ + { + name: "OwnershipTransferStarted"; + fields: [ + { + name: "previousOwner"; + type: "publicKey"; + index: false; + }, + { + name: "newOwner"; + type: "publicKey"; + index: false; + }, + ]; + }, + { + name: "OwnershipTransferred"; + fields: [ + { + name: "previousOwner"; + type: "publicKey"; + index: false; + }, + { + name: "newOwner"; + type: "publicKey"; + index: false; + }, + ]; + }, + { + name: "PauserChanged"; + fields: [ + { + name: "newAddress"; + type: "publicKey"; + index: false; + }, + ]; + }, + { + name: "AttesterManagerUpdated"; + fields: [ + { + name: "previousAttesterManager"; + type: "publicKey"; + index: false; + }, + { + name: "newAttesterManager"; + type: "publicKey"; + index: false; + }, + ]; + }, + { + name: "MessageReceived"; + fields: [ + { + name: "caller"; + type: "publicKey"; + index: false; + }, + { + name: "sourceDomain"; + type: "u32"; + index: false; + }, + { + name: "nonce"; + type: "u64"; + index: false; + }, + { + name: "sender"; + type: "publicKey"; + index: false; + }, + { + name: "messageBody"; + type: "bytes"; + index: false; + }, + ]; + }, + { + name: "SignatureThresholdUpdated"; + fields: [ + { + name: "oldSignatureThreshold"; + type: "u32"; + index: false; + }, + { + name: "newSignatureThreshold"; + type: "u32"; + index: false; + }, + ]; + }, + { + name: "AttesterEnabled"; + fields: [ + { + name: "attester"; + type: "publicKey"; + index: false; + }, + ]; + }, + { + name: "AttesterDisabled"; + fields: [ + { + name: "attester"; + type: "publicKey"; + index: false; + }, + ]; + }, + { + name: "MaxMessageBodySizeUpdated"; + fields: [ + { + name: "newMaxMessageBodySize"; + type: "u64"; + index: false; + }, + ]; + }, + { + name: "Pause"; + fields: []; + }, + { + name: "Unpause"; + fields: []; + }, + ]; + errors: [ + { + code: 6000; + name: "InvalidAuthority"; + msg: "Invalid authority"; + }, + { + code: 6001; + name: "ProgramPaused"; + msg: "Instruction is not allowed at this time"; + }, + { + code: 6002; + name: "InvalidMessageTransmitterState"; + msg: "Invalid message transmitter state"; + }, + { + code: 6003; + name: "InvalidSignatureThreshold"; + msg: "Invalid signature threshold"; + }, + { + code: 6004; + name: "SignatureThresholdAlreadySet"; + msg: "Signature threshold already set"; + }, + { + code: 6005; + name: "InvalidOwner"; + msg: "Invalid owner"; + }, + { + code: 6006; + name: "InvalidPauser"; + msg: "Invalid pauser"; + }, + { + code: 6007; + name: "InvalidAttesterManager"; + msg: "Invalid attester manager"; + }, + { + code: 6008; + name: "InvalidAttester"; + msg: "Invalid attester"; + }, + { + code: 6009; + name: "AttesterAlreadyEnabled"; + msg: "Attester already enabled"; + }, + { + code: 6010; + name: "TooFewEnabledAttesters"; + msg: "Too few enabled attesters"; + }, + { + code: 6011; + name: "SignatureThresholdTooLow"; + msg: "Signature threshold is too low"; + }, + { + code: 6012; + name: "AttesterAlreadyDisabled"; + msg: "Attester already disabled"; + }, + { + code: 6013; + name: "MessageBodyLimitExceeded"; + msg: "Message body exceeds max size"; + }, + { + code: 6014; + name: "InvalidDestinationCaller"; + msg: "Invalid destination caller"; + }, + { + code: 6015; + name: "InvalidRecipient"; + msg: "Invalid message recipient"; + }, + { + code: 6016; + name: "SenderNotPermitted"; + msg: "Sender is not permitted"; + }, + { + code: 6017; + name: "InvalidSourceDomain"; + msg: "Invalid source domain"; + }, + { + code: 6018; + name: "InvalidDestinationDomain"; + msg: "Invalid destination domain"; + }, + { + code: 6019; + name: "InvalidMessageVersion"; + msg: "Invalid message version"; + }, + { + code: 6020; + name: "InvalidUsedNoncesAccount"; + msg: "Invalid used nonces account"; + }, + { + code: 6021; + name: "InvalidRecipientProgram"; + msg: "Invalid recipient program"; + }, + { + code: 6022; + name: "InvalidNonce"; + msg: "Invalid nonce"; + }, + { + code: 6023; + name: "NonceAlreadyUsed"; + msg: "Nonce already used"; + }, + { + code: 6024; + name: "MessageTooShort"; + msg: "Message is too short"; + }, + { + code: 6025; + name: "MalformedMessage"; + msg: "Malformed message"; + }, + { + code: 6026; + name: "InvalidSignatureOrderOrDupe"; + msg: "Invalid signature order or dupe"; + }, + { + code: 6027; + name: "InvalidAttesterSignature"; + msg: "Invalid attester signature"; + }, + { + code: 6028; + name: "InvalidAttestationLength"; + msg: "Invalid attestation length"; + }, + { + code: 6029; + name: "InvalidSignatureRecoveryId"; + msg: "Invalid signature recovery ID"; + }, + { + code: 6030; + name: "InvalidSignatureSValue"; + msg: "Invalid signature S value"; + }, + { + code: 6031; + name: "InvalidMessageHash"; + msg: "Invalid message hash"; + }, + ]; +}; + +export const IDL: MessageTransmitter = { + version: "0.1.0", + name: "message_transmitter", + instructions: [ + { + name: "initialize", + accounts: [ + { + name: "payer", + isMut: true, + isSigner: true, + }, + { + name: "upgradeAuthority", + isMut: false, + isSigner: true, + }, + { + name: "messageTransmitter", + isMut: true, + isSigner: false, + }, + { + name: "messageTransmitterProgramData", + isMut: false, + isSigner: false, + }, + { + name: "messageTransmitterProgram", + isMut: false, + isSigner: false, + }, + { + name: "systemProgram", + isMut: false, + isSigner: false, + }, + { + name: "eventAuthority", + isMut: false, + isSigner: false, + }, + { + name: "program", + isMut: false, + isSigner: false, + }, + ], + args: [ + { + name: "params", + type: { + defined: "InitializeParams", + }, + }, + ], + }, + { + name: "transferOwnership", + accounts: [ + { + name: "owner", + isMut: false, + isSigner: true, + }, + { + name: "messageTransmitter", + isMut: true, + isSigner: false, + }, + { + name: "eventAuthority", + isMut: false, + isSigner: false, + }, + { + name: "program", + isMut: false, + isSigner: false, + }, + ], + args: [ + { + name: "params", + type: { + defined: "TransferOwnershipParams", + }, + }, + ], + }, + { + name: "acceptOwnership", + accounts: [ + { + name: "pendingOwner", + isMut: false, + isSigner: true, + }, + { + name: "messageTransmitter", + isMut: true, + isSigner: false, + }, + { + name: "eventAuthority", + isMut: false, + isSigner: false, + }, + { + name: "program", + isMut: false, + isSigner: false, + }, + ], + args: [ + { + name: "params", + type: { + defined: "AcceptOwnershipParams", + }, + }, + ], + }, + { + name: "updatePauser", + accounts: [ + { + name: "owner", + isMut: false, + isSigner: true, + }, + { + name: "messageTransmitter", + isMut: true, + isSigner: false, + }, + { + name: "eventAuthority", + isMut: false, + isSigner: false, + }, + { + name: "program", + isMut: false, + isSigner: false, + }, + ], + args: [ + { + name: "params", + type: { + defined: "UpdatePauserParams", + }, + }, + ], + }, + { + name: "updateAttesterManager", + accounts: [ + { + name: "owner", + isMut: false, + isSigner: true, + }, + { + name: "messageTransmitter", + isMut: true, + isSigner: false, + }, + { + name: "eventAuthority", + isMut: false, + isSigner: false, + }, + { + name: "program", + isMut: false, + isSigner: false, + }, + ], + args: [ + { + name: "params", + type: { + defined: "UpdateAttesterManagerParams", + }, + }, + ], + }, + { + name: "pause", + accounts: [ + { + name: "pauser", + isMut: false, + isSigner: true, + }, + { + name: "messageTransmitter", + isMut: true, + isSigner: false, + }, + { + name: "eventAuthority", + isMut: false, + isSigner: false, + }, + { + name: "program", + isMut: false, + isSigner: false, + }, + ], + args: [ + { + name: "params", + type: { + defined: "PauseParams", + }, + }, + ], + }, + { + name: "unpause", + accounts: [ + { + name: "pauser", + isMut: false, + isSigner: true, + }, + { + name: "messageTransmitter", + isMut: true, + isSigner: false, + }, + { + name: "eventAuthority", + isMut: false, + isSigner: false, + }, + { + name: "program", + isMut: false, + isSigner: false, + }, + ], + args: [ + { + name: "params", + type: { + defined: "UnpauseParams", + }, + }, + ], + }, + { + name: "setMaxMessageBodySize", + accounts: [ + { + name: "owner", + isMut: false, + isSigner: true, + }, + { + name: "messageTransmitter", + isMut: true, + isSigner: false, + }, + { + name: "eventAuthority", + isMut: false, + isSigner: false, + }, + { + name: "program", + isMut: false, + isSigner: false, + }, + ], + args: [ + { + name: "params", + type: { + defined: "SetMaxMessageBodySizeParams", + }, + }, + ], + }, + { + name: "enableAttester", + accounts: [ + { + name: "payer", + isMut: true, + isSigner: true, + }, + { + name: "attesterManager", + isMut: false, + isSigner: true, + }, + { + name: "messageTransmitter", + isMut: true, + isSigner: false, + }, + { + name: "systemProgram", + isMut: false, + isSigner: false, + }, + { + name: "eventAuthority", + isMut: false, + isSigner: false, + }, + { + name: "program", + isMut: false, + isSigner: false, + }, + ], + args: [ + { + name: "params", + type: { + defined: "EnableAttesterParams", + }, + }, + ], + }, + { + name: "disableAttester", + accounts: [ + { + name: "payer", + isMut: true, + isSigner: true, + }, + { + name: "attesterManager", + isMut: false, + isSigner: true, + }, + { + name: "messageTransmitter", + isMut: true, + isSigner: false, + }, + { + name: "systemProgram", + isMut: false, + isSigner: false, + }, + { + name: "eventAuthority", + isMut: false, + isSigner: false, + }, + { + name: "program", + isMut: false, + isSigner: false, + }, + ], + args: [ + { + name: "params", + type: { + defined: "DisableAttesterParams", + }, + }, + ], + }, + { + name: "setSignatureThreshold", + accounts: [ + { + name: "attesterManager", + isMut: false, + isSigner: true, + }, + { + name: "messageTransmitter", + isMut: true, + isSigner: false, + }, + { + name: "eventAuthority", + isMut: false, + isSigner: false, + }, + { + name: "program", + isMut: false, + isSigner: false, + }, + ], + args: [ + { + name: "params", + type: { + defined: "SetSignatureThresholdParams", + }, + }, + ], + }, + { + name: "sendMessage", + accounts: [ + { + name: "eventRentPayer", + isMut: true, + isSigner: true, + }, + { + name: "senderAuthorityPda", + isMut: false, + isSigner: true, + }, + { + name: "messageTransmitter", + isMut: true, + isSigner: false, + }, + { + name: "messageSentEventData", + isMut: true, + isSigner: true, + }, + { + name: "senderProgram", + isMut: false, + isSigner: false, + }, + { + name: "systemProgram", + isMut: false, + isSigner: false, + }, + ], + args: [ + { + name: "params", + type: { + defined: "SendMessageParams", + }, + }, + ], + returns: "u64", + }, + { + name: "sendMessageWithCaller", + accounts: [ + { + name: "eventRentPayer", + isMut: true, + isSigner: true, + }, + { + name: "senderAuthorityPda", + isMut: false, + isSigner: true, + }, + { + name: "messageTransmitter", + isMut: true, + isSigner: false, + }, + { + name: "messageSentEventData", + isMut: true, + isSigner: true, + }, + { + name: "senderProgram", + isMut: false, + isSigner: false, + }, + { + name: "systemProgram", + isMut: false, + isSigner: false, + }, + ], + args: [ + { + name: "params", + type: { + defined: "SendMessageWithCallerParams", + }, + }, + ], + returns: "u64", + }, + { + name: "replaceMessage", + accounts: [ + { + name: "eventRentPayer", + isMut: true, + isSigner: true, + }, + { + name: "senderAuthorityPda", + isMut: false, + isSigner: true, + }, + { + name: "messageTransmitter", + isMut: true, + isSigner: false, + }, + { + name: "messageSentEventData", + isMut: true, + isSigner: true, + }, + { + name: "senderProgram", + isMut: false, + isSigner: false, + }, + { + name: "systemProgram", + isMut: false, + isSigner: false, + }, + ], + args: [ + { + name: "params", + type: { + defined: "ReplaceMessageParams", + }, + }, + ], + returns: "u64", + }, + { + name: "receiveMessage", + accounts: [ + { + name: "payer", + isMut: true, + isSigner: true, + }, + { + name: "caller", + isMut: false, + isSigner: true, + }, + { + name: "authorityPda", + isMut: false, + isSigner: false, + }, + { + name: "messageTransmitter", + isMut: false, + isSigner: false, + }, + { + name: "usedNonces", + isMut: true, + isSigner: false, + }, + { + name: "receiver", + isMut: false, + isSigner: false, + }, + { + name: "systemProgram", + isMut: false, + isSigner: false, + }, + { + name: "eventAuthority", + isMut: false, + isSigner: false, + }, + { + name: "program", + isMut: false, + isSigner: false, + }, + ], + args: [ + { + name: "params", + type: { + defined: "ReceiveMessageParams", + }, + }, + ], + }, + { + name: "reclaimEventAccount", + accounts: [ + { + name: "payee", + isMut: true, + isSigner: true, + docs: ["rent SOL receiver, should match original rent payer"], + }, + { + name: "messageTransmitter", + isMut: true, + isSigner: false, + }, + { + name: "messageSentEventData", + isMut: true, + isSigner: false, + }, + ], + args: [ + { + name: "params", + type: { + defined: "ReclaimEventAccountParams", + }, + }, + ], + }, + { + name: "getNoncePda", + accounts: [ + { + name: "messageTransmitter", + isMut: false, + isSigner: false, + }, + ], + args: [ + { + name: "params", + type: { + defined: "GetNoncePDAParams", + }, + }, + ], + returns: "publicKey", + }, + { + name: "isNonceUsed", + accounts: [ + { + name: "usedNonces", + isMut: false, + isSigner: false, + docs: [ + "Account will be explicitly loaded to avoid error when it's not initialized", + ], + }, + ], + args: [ + { + name: "params", + type: { + defined: "IsNonceUsedParams", + }, + }, + ], + returns: "bool", + }, + ], + accounts: [ + { + name: "messageSent", + type: { + kind: "struct", + fields: [ + { + name: "rentPayer", + type: "publicKey", + }, + { + name: "message", + type: "bytes", + }, + ], + }, + }, + { + name: "messageTransmitter", + docs: ["Main state of the MessageTransmitter program"], + type: { + kind: "struct", + fields: [ + { + name: "owner", + type: "publicKey", + }, + { + name: "pendingOwner", + type: "publicKey", + }, + { + name: "attesterManager", + type: "publicKey", + }, + { + name: "pauser", + type: "publicKey", + }, + { + name: "paused", + type: "bool", + }, + { + name: "localDomain", + type: "u32", + }, + { + name: "version", + type: "u32", + }, + { + name: "signatureThreshold", + type: "u32", + }, + { + name: "enabledAttesters", + type: { + vec: "publicKey", + }, + }, + { + name: "maxMessageBodySize", + type: "u64", + }, + { + name: "nextAvailableNonce", + type: "u64", + }, + ], + }, + }, + { + name: "usedNonces", + docs: [ + "UsedNonces account holds an array of bits that indicate which nonces were already used", + "so they can't be resused to receive new messages. Array starts with the first_nonce and", + "holds flags for UsedNonces::MAX_NONCES. Nonces are recorded separately for each remote_domain.", + ], + type: { + kind: "struct", + fields: [ + { + name: "remoteDomain", + type: "u32", + }, + { + name: "firstNonce", + type: "u64", + }, + { + name: "usedNonces", + type: { + array: ["u64", 100], + }, + }, + ], + }, + }, + ], + types: [ + { + name: "AcceptOwnershipParams", + type: { + kind: "struct", + fields: [], + }, + }, + { + name: "DisableAttesterParams", + type: { + kind: "struct", + fields: [ + { + name: "attester", + type: "publicKey", + }, + ], + }, + }, + { + name: "EnableAttesterParams", + type: { + kind: "struct", + fields: [ + { + name: "newAttester", + type: "publicKey", + }, + ], + }, + }, + { + name: "GetNoncePDAParams", + type: { + kind: "struct", + fields: [ + { + name: "nonce", + type: "u64", + }, + { + name: "sourceDomain", + type: "u32", + }, + ], + }, + }, + { + name: "InitializeParams", + type: { + kind: "struct", + fields: [ + { + name: "localDomain", + type: "u32", + }, + { + name: "attester", + type: "publicKey", + }, + { + name: "maxMessageBodySize", + type: "u64", + }, + { + name: "version", + type: "u32", + }, + ], + }, + }, + { + name: "IsNonceUsedParams", + type: { + kind: "struct", + fields: [ + { + name: "nonce", + type: "u64", + }, + ], + }, + }, + { + name: "PauseParams", + type: { + kind: "struct", + fields: [], + }, + }, + { + name: "ReceiveMessageParams", + type: { + kind: "struct", + fields: [ + { + name: "message", + type: "bytes", + }, + { + name: "attestation", + type: "bytes", + }, + ], + }, + }, + { + name: "HandleReceiveMessageParams", + type: { + kind: "struct", + fields: [ + { + name: "remoteDomain", + type: "u32", + }, + { + name: "sender", + type: "publicKey", + }, + { + name: "messageBody", + type: "bytes", + }, + { + name: "authorityBump", + type: "u8", + }, + ], + }, + }, + { + name: "ReclaimEventAccountParams", + type: { + kind: "struct", + fields: [ + { + name: "attestation", + type: "bytes", + }, + ], + }, + }, + { + name: "ReplaceMessageParams", + type: { + kind: "struct", + fields: [ + { + name: "originalMessage", + type: "bytes", + }, + { + name: "originalAttestation", + type: "bytes", + }, + { + name: "newMessageBody", + type: "bytes", + }, + { + name: "newDestinationCaller", + type: "publicKey", + }, + ], + }, + }, + { + name: "SendMessageWithCallerParams", + type: { + kind: "struct", + fields: [ + { + name: "destinationDomain", + type: "u32", + }, + { + name: "recipient", + type: "publicKey", + }, + { + name: "messageBody", + type: "bytes", + }, + { + name: "destinationCaller", + type: "publicKey", + }, + ], + }, + }, + { + name: "SendMessageParams", + type: { + kind: "struct", + fields: [ + { + name: "destinationDomain", + type: "u32", + }, + { + name: "recipient", + type: "publicKey", + }, + { + name: "messageBody", + type: "bytes", + }, + ], + }, + }, + { + name: "SetMaxMessageBodySizeParams", + type: { + kind: "struct", + fields: [ + { + name: "newMaxMessageBodySize", + type: "u64", + }, + ], + }, + }, + { + name: "SetSignatureThresholdParams", + type: { + kind: "struct", + fields: [ + { + name: "newSignatureThreshold", + type: "u32", + }, + ], + }, + }, + { + name: "TransferOwnershipParams", + type: { + kind: "struct", + fields: [ + { + name: "newOwner", + type: "publicKey", + }, + ], + }, + }, + { + name: "UnpauseParams", + type: { + kind: "struct", + fields: [], + }, + }, + { + name: "UpdateAttesterManagerParams", + type: { + kind: "struct", + fields: [ + { + name: "newAttesterManager", + type: "publicKey", + }, + ], + }, + }, + { + name: "UpdatePauserParams", + type: { + kind: "struct", + fields: [ + { + name: "newPauser", + type: "publicKey", + }, + ], + }, + }, + { + name: "MathError", + type: { + kind: "enum", + variants: [ + { + name: "MathOverflow", + }, + { + name: "MathUnderflow", + }, + { + name: "ErrorInDivision", + }, + ], + }, + }, + ], + events: [ + { + name: "OwnershipTransferStarted", + fields: [ + { + name: "previousOwner", + type: "publicKey", + index: false, + }, + { + name: "newOwner", + type: "publicKey", + index: false, + }, + ], + }, + { + name: "OwnershipTransferred", + fields: [ + { + name: "previousOwner", + type: "publicKey", + index: false, + }, + { + name: "newOwner", + type: "publicKey", + index: false, + }, + ], + }, + { + name: "PauserChanged", + fields: [ + { + name: "newAddress", + type: "publicKey", + index: false, + }, + ], + }, + { + name: "AttesterManagerUpdated", + fields: [ + { + name: "previousAttesterManager", + type: "publicKey", + index: false, + }, + { + name: "newAttesterManager", + type: "publicKey", + index: false, + }, + ], + }, + { + name: "MessageReceived", + fields: [ + { + name: "caller", + type: "publicKey", + index: false, + }, + { + name: "sourceDomain", + type: "u32", + index: false, + }, + { + name: "nonce", + type: "u64", + index: false, + }, + { + name: "sender", + type: "publicKey", + index: false, + }, + { + name: "messageBody", + type: "bytes", + index: false, + }, + ], + }, + { + name: "SignatureThresholdUpdated", + fields: [ + { + name: "oldSignatureThreshold", + type: "u32", + index: false, + }, + { + name: "newSignatureThreshold", + type: "u32", + index: false, + }, + ], + }, + { + name: "AttesterEnabled", + fields: [ + { + name: "attester", + type: "publicKey", + index: false, + }, + ], + }, + { + name: "AttesterDisabled", + fields: [ + { + name: "attester", + type: "publicKey", + index: false, + }, + ], + }, + { + name: "MaxMessageBodySizeUpdated", + fields: [ + { + name: "newMaxMessageBodySize", + type: "u64", + index: false, + }, + ], + }, + { + name: "Pause", + fields: [], + }, + { + name: "Unpause", + fields: [], + }, + ], + errors: [ + { + code: 6000, + name: "InvalidAuthority", + msg: "Invalid authority", + }, + { + code: 6001, + name: "ProgramPaused", + msg: "Instruction is not allowed at this time", + }, + { + code: 6002, + name: "InvalidMessageTransmitterState", + msg: "Invalid message transmitter state", + }, + { + code: 6003, + name: "InvalidSignatureThreshold", + msg: "Invalid signature threshold", + }, + { + code: 6004, + name: "SignatureThresholdAlreadySet", + msg: "Signature threshold already set", + }, + { + code: 6005, + name: "InvalidOwner", + msg: "Invalid owner", + }, + { + code: 6006, + name: "InvalidPauser", + msg: "Invalid pauser", + }, + { + code: 6007, + name: "InvalidAttesterManager", + msg: "Invalid attester manager", + }, + { + code: 6008, + name: "InvalidAttester", + msg: "Invalid attester", + }, + { + code: 6009, + name: "AttesterAlreadyEnabled", + msg: "Attester already enabled", + }, + { + code: 6010, + name: "TooFewEnabledAttesters", + msg: "Too few enabled attesters", + }, + { + code: 6011, + name: "SignatureThresholdTooLow", + msg: "Signature threshold is too low", + }, + { + code: 6012, + name: "AttesterAlreadyDisabled", + msg: "Attester already disabled", + }, + { + code: 6013, + name: "MessageBodyLimitExceeded", + msg: "Message body exceeds max size", + }, + { + code: 6014, + name: "InvalidDestinationCaller", + msg: "Invalid destination caller", + }, + { + code: 6015, + name: "InvalidRecipient", + msg: "Invalid message recipient", + }, + { + code: 6016, + name: "SenderNotPermitted", + msg: "Sender is not permitted", + }, + { + code: 6017, + name: "InvalidSourceDomain", + msg: "Invalid source domain", + }, + { + code: 6018, + name: "InvalidDestinationDomain", + msg: "Invalid destination domain", + }, + { + code: 6019, + name: "InvalidMessageVersion", + msg: "Invalid message version", + }, + { + code: 6020, + name: "InvalidUsedNoncesAccount", + msg: "Invalid used nonces account", + }, + { + code: 6021, + name: "InvalidRecipientProgram", + msg: "Invalid recipient program", + }, + { + code: 6022, + name: "InvalidNonce", + msg: "Invalid nonce", + }, + { + code: 6023, + name: "NonceAlreadyUsed", + msg: "Nonce already used", + }, + { + code: 6024, + name: "MessageTooShort", + msg: "Message is too short", + }, + { + code: 6025, + name: "MalformedMessage", + msg: "Malformed message", + }, + { + code: 6026, + name: "InvalidSignatureOrderOrDupe", + msg: "Invalid signature order or dupe", + }, + { + code: 6027, + name: "InvalidAttesterSignature", + msg: "Invalid attester signature", + }, + { + code: 6028, + name: "InvalidAttestationLength", + msg: "Invalid attestation length", + }, + { + code: 6029, + name: "InvalidSignatureRecoveryId", + msg: "Invalid signature recovery ID", + }, + { + code: 6030, + name: "InvalidSignatureSValue", + msg: "Invalid signature S value", + }, + { + code: 6031, + name: "InvalidMessageHash", + msg: "Invalid message hash", + }, + ], +}; diff --git a/solana/ts/src/cctp/types/token_messenger_minter.ts b/solana/ts/src/cctp/types/token_messenger_minter.ts new file mode 100644 index 0000000..9305bcc --- /dev/null +++ b/solana/ts/src/cctp/types/token_messenger_minter.ts @@ -0,0 +1,3521 @@ +export type TokenMessengerMinter = { + version: "0.1.0"; + name: "token_messenger_minter"; + instructions: [ + { + name: "initialize"; + accounts: [ + { + name: "payer"; + isMut: true; + isSigner: true; + }, + { + name: "upgradeAuthority"; + isMut: false; + isSigner: true; + }, + { + name: "authorityPda"; + isMut: false; + isSigner: false; + }, + { + name: "tokenMessenger"; + isMut: true; + isSigner: false; + }, + { + name: "tokenMinter"; + isMut: true; + isSigner: false; + }, + { + name: "tokenMessengerMinterProgramData"; + isMut: false; + isSigner: false; + }, + { + name: "tokenMessengerMinterProgram"; + isMut: false; + isSigner: false; + }, + { + name: "systemProgram"; + isMut: false; + isSigner: false; + }, + { + name: "eventAuthority"; + isMut: false; + isSigner: false; + }, + { + name: "program"; + isMut: false; + isSigner: false; + }, + ]; + args: [ + { + name: "params"; + type: { + defined: "InitializeParams"; + }; + }, + ]; + }, + { + name: "transferOwnership"; + accounts: [ + { + name: "owner"; + isMut: false; + isSigner: true; + }, + { + name: "tokenMessenger"; + isMut: true; + isSigner: false; + }, + { + name: "eventAuthority"; + isMut: false; + isSigner: false; + }, + { + name: "program"; + isMut: false; + isSigner: false; + }, + ]; + args: [ + { + name: "params"; + type: { + defined: "TransferOwnershipParams"; + }; + }, + ]; + }, + { + name: "acceptOwnership"; + accounts: [ + { + name: "pendingOwner"; + isMut: false; + isSigner: true; + }, + { + name: "tokenMessenger"; + isMut: true; + isSigner: false; + }, + { + name: "eventAuthority"; + isMut: false; + isSigner: false; + }, + { + name: "program"; + isMut: false; + isSigner: false; + }, + ]; + args: [ + { + name: "params"; + type: { + defined: "AcceptOwnershipParams"; + }; + }, + ]; + }, + { + name: "addRemoteTokenMessenger"; + accounts: [ + { + name: "payer"; + isMut: true; + isSigner: true; + }, + { + name: "owner"; + isMut: false; + isSigner: true; + }, + { + name: "tokenMessenger"; + isMut: false; + isSigner: false; + }, + { + name: "remoteTokenMessenger"; + isMut: true; + isSigner: false; + }, + { + name: "systemProgram"; + isMut: false; + isSigner: false; + }, + { + name: "eventAuthority"; + isMut: false; + isSigner: false; + }, + { + name: "program"; + isMut: false; + isSigner: false; + }, + ]; + args: [ + { + name: "params"; + type: { + defined: "AddRemoteTokenMessengerParams"; + }; + }, + ]; + }, + { + name: "removeRemoteTokenMessenger"; + accounts: [ + { + name: "payee"; + isMut: true; + isSigner: true; + }, + { + name: "owner"; + isMut: false; + isSigner: true; + }, + { + name: "tokenMessenger"; + isMut: false; + isSigner: false; + }, + { + name: "remoteTokenMessenger"; + isMut: true; + isSigner: false; + }, + { + name: "eventAuthority"; + isMut: false; + isSigner: false; + }, + { + name: "program"; + isMut: false; + isSigner: false; + }, + ]; + args: [ + { + name: "params"; + type: { + defined: "RemoveRemoteTokenMessengerParams"; + }; + }, + ]; + }, + { + name: "depositForBurn"; + accounts: [ + { + name: "owner"; + isMut: false; + isSigner: true; + }, + { + name: "eventRentPayer"; + isMut: true; + isSigner: true; + }, + { + name: "senderAuthorityPda"; + isMut: false; + isSigner: false; + }, + { + name: "burnTokenAccount"; + isMut: true; + isSigner: false; + }, + { + name: "messageTransmitter"; + isMut: true; + isSigner: false; + }, + { + name: "tokenMessenger"; + isMut: false; + isSigner: false; + }, + { + name: "remoteTokenMessenger"; + isMut: false; + isSigner: false; + }, + { + name: "tokenMinter"; + isMut: false; + isSigner: false; + }, + { + name: "localToken"; + isMut: true; + isSigner: false; + }, + { + name: "burnTokenMint"; + isMut: true; + isSigner: false; + }, + { + name: "messageSentEventData"; + isMut: true; + isSigner: true; + }, + { + name: "messageTransmitterProgram"; + isMut: false; + isSigner: false; + }, + { + name: "tokenMessengerMinterProgram"; + isMut: false; + isSigner: false; + }, + { + name: "tokenProgram"; + isMut: false; + isSigner: false; + }, + { + name: "systemProgram"; + isMut: false; + isSigner: false; + }, + { + name: "eventAuthority"; + isMut: false; + isSigner: false; + }, + { + name: "program"; + isMut: false; + isSigner: false; + }, + ]; + args: [ + { + name: "params"; + type: { + defined: "DepositForBurnParams"; + }; + }, + ]; + returns: "u64"; + }, + { + name: "depositForBurnWithCaller"; + accounts: [ + { + name: "owner"; + isMut: false; + isSigner: true; + }, + { + name: "eventRentPayer"; + isMut: true; + isSigner: true; + }, + { + name: "senderAuthorityPda"; + isMut: false; + isSigner: false; + }, + { + name: "burnTokenAccount"; + isMut: true; + isSigner: false; + }, + { + name: "messageTransmitter"; + isMut: true; + isSigner: false; + }, + { + name: "tokenMessenger"; + isMut: false; + isSigner: false; + }, + { + name: "remoteTokenMessenger"; + isMut: false; + isSigner: false; + }, + { + name: "tokenMinter"; + isMut: false; + isSigner: false; + }, + { + name: "localToken"; + isMut: true; + isSigner: false; + }, + { + name: "burnTokenMint"; + isMut: true; + isSigner: false; + }, + { + name: "messageSentEventData"; + isMut: true; + isSigner: true; + }, + { + name: "messageTransmitterProgram"; + isMut: false; + isSigner: false; + }, + { + name: "tokenMessengerMinterProgram"; + isMut: false; + isSigner: false; + }, + { + name: "tokenProgram"; + isMut: false; + isSigner: false; + }, + { + name: "systemProgram"; + isMut: false; + isSigner: false; + }, + { + name: "eventAuthority"; + isMut: false; + isSigner: false; + }, + { + name: "program"; + isMut: false; + isSigner: false; + }, + ]; + args: [ + { + name: "params"; + type: { + defined: "DepositForBurnWithCallerParams"; + }; + }, + ]; + returns: "u64"; + }, + { + name: "replaceDepositForBurn"; + accounts: [ + { + name: "owner"; + isMut: false; + isSigner: true; + }, + { + name: "eventRentPayer"; + isMut: true; + isSigner: true; + }, + { + name: "senderAuthorityPda"; + isMut: false; + isSigner: false; + }, + { + name: "messageTransmitter"; + isMut: true; + isSigner: false; + }, + { + name: "tokenMessenger"; + isMut: false; + isSigner: false; + }, + { + name: "messageSentEventData"; + isMut: true; + isSigner: true; + }, + { + name: "messageTransmitterProgram"; + isMut: false; + isSigner: false; + }, + { + name: "tokenMessengerMinterProgram"; + isMut: false; + isSigner: false; + }, + { + name: "systemProgram"; + isMut: false; + isSigner: false; + }, + { + name: "eventAuthority"; + isMut: false; + isSigner: false; + }, + { + name: "program"; + isMut: false; + isSigner: false; + }, + ]; + args: [ + { + name: "params"; + type: { + defined: "ReplaceDepositForBurnParams"; + }; + }, + ]; + returns: "u64"; + }, + { + name: "handleReceiveMessage"; + accounts: [ + { + name: "authorityPda"; + isMut: false; + isSigner: true; + }, + { + name: "tokenMessenger"; + isMut: false; + isSigner: false; + }, + { + name: "remoteTokenMessenger"; + isMut: false; + isSigner: false; + }, + { + name: "tokenMinter"; + isMut: false; + isSigner: false; + }, + { + name: "localToken"; + isMut: true; + isSigner: false; + }, + { + name: "tokenPair"; + isMut: false; + isSigner: false; + }, + { + name: "recipientTokenAccount"; + isMut: true; + isSigner: false; + }, + { + name: "custodyTokenAccount"; + isMut: true; + isSigner: false; + }, + { + name: "tokenProgram"; + isMut: false; + isSigner: false; + }, + { + name: "eventAuthority"; + isMut: false; + isSigner: false; + }, + { + name: "program"; + isMut: false; + isSigner: false; + }, + ]; + args: [ + { + name: "params"; + type: { + defined: "HandleReceiveMessageParams"; + }; + }, + ]; + }, + { + name: "setTokenController"; + accounts: [ + { + name: "owner"; + isMut: false; + isSigner: true; + }, + { + name: "tokenMessenger"; + isMut: false; + isSigner: false; + }, + { + name: "tokenMinter"; + isMut: true; + isSigner: false; + }, + { + name: "eventAuthority"; + isMut: false; + isSigner: false; + }, + { + name: "program"; + isMut: false; + isSigner: false; + }, + ]; + args: [ + { + name: "params"; + type: { + defined: "SetTokenControllerParams"; + }; + }, + ]; + }, + { + name: "pause"; + accounts: [ + { + name: "pauser"; + isMut: false; + isSigner: true; + }, + { + name: "tokenMinter"; + isMut: true; + isSigner: false; + }, + { + name: "eventAuthority"; + isMut: false; + isSigner: false; + }, + { + name: "program"; + isMut: false; + isSigner: false; + }, + ]; + args: [ + { + name: "params"; + type: { + defined: "PauseParams"; + }; + }, + ]; + }, + { + name: "unpause"; + accounts: [ + { + name: "pauser"; + isMut: false; + isSigner: true; + }, + { + name: "tokenMinter"; + isMut: true; + isSigner: false; + }, + { + name: "eventAuthority"; + isMut: false; + isSigner: false; + }, + { + name: "program"; + isMut: false; + isSigner: false; + }, + ]; + args: [ + { + name: "params"; + type: { + defined: "UnpauseParams"; + }; + }, + ]; + }, + { + name: "updatePauser"; + accounts: [ + { + name: "owner"; + isMut: false; + isSigner: true; + }, + { + name: "tokenMessenger"; + isMut: false; + isSigner: false; + }, + { + name: "tokenMinter"; + isMut: true; + isSigner: false; + }, + { + name: "eventAuthority"; + isMut: false; + isSigner: false; + }, + { + name: "program"; + isMut: false; + isSigner: false; + }, + ]; + args: [ + { + name: "params"; + type: { + defined: "UpdatePauserParams"; + }; + }, + ]; + }, + { + name: "setMaxBurnAmountPerMessage"; + accounts: [ + { + name: "tokenController"; + isMut: false; + isSigner: true; + }, + { + name: "tokenMinter"; + isMut: false; + isSigner: false; + }, + { + name: "localToken"; + isMut: true; + isSigner: false; + }, + { + name: "eventAuthority"; + isMut: false; + isSigner: false; + }, + { + name: "program"; + isMut: false; + isSigner: false; + }, + ]; + args: [ + { + name: "params"; + type: { + defined: "SetMaxBurnAmountPerMessageParams"; + }; + }, + ]; + }, + { + name: "addLocalToken"; + accounts: [ + { + name: "payer"; + isMut: true; + isSigner: true; + }, + { + name: "tokenController"; + isMut: false; + isSigner: true; + }, + { + name: "tokenMinter"; + isMut: false; + isSigner: false; + }, + { + name: "localToken"; + isMut: true; + isSigner: false; + }, + { + name: "custodyTokenAccount"; + isMut: true; + isSigner: false; + }, + { + name: "localTokenMint"; + isMut: false; + isSigner: false; + }, + { + name: "tokenProgram"; + isMut: false; + isSigner: false; + }, + { + name: "systemProgram"; + isMut: false; + isSigner: false; + }, + { + name: "eventAuthority"; + isMut: false; + isSigner: false; + }, + { + name: "program"; + isMut: false; + isSigner: false; + }, + ]; + args: [ + { + name: "params"; + type: { + defined: "AddLocalTokenParams"; + }; + }, + ]; + }, + { + name: "removeLocalToken"; + accounts: [ + { + name: "payee"; + isMut: true; + isSigner: true; + }, + { + name: "tokenController"; + isMut: false; + isSigner: true; + }, + { + name: "tokenMinter"; + isMut: false; + isSigner: false; + }, + { + name: "localToken"; + isMut: true; + isSigner: false; + }, + { + name: "custodyTokenAccount"; + isMut: true; + isSigner: false; + }, + { + name: "tokenProgram"; + isMut: false; + isSigner: false; + }, + { + name: "eventAuthority"; + isMut: false; + isSigner: false; + }, + { + name: "program"; + isMut: false; + isSigner: false; + }, + ]; + args: [ + { + name: "params"; + type: { + defined: "RemoveLocalTokenParams"; + }; + }, + ]; + }, + { + name: "linkTokenPair"; + accounts: [ + { + name: "payer"; + isMut: true; + isSigner: true; + }, + { + name: "tokenController"; + isMut: false; + isSigner: true; + }, + { + name: "tokenMinter"; + isMut: false; + isSigner: false; + }, + { + name: "tokenPair"; + isMut: true; + isSigner: false; + }, + { + name: "systemProgram"; + isMut: false; + isSigner: false; + }, + { + name: "eventAuthority"; + isMut: false; + isSigner: false; + }, + { + name: "program"; + isMut: false; + isSigner: false; + }, + ]; + args: [ + { + name: "params"; + type: { + defined: "LinkTokenPairParams"; + }; + }, + ]; + }, + { + name: "unlinkTokenPair"; + accounts: [ + { + name: "payee"; + isMut: true; + isSigner: true; + }, + { + name: "tokenController"; + isMut: false; + isSigner: true; + }, + { + name: "tokenMinter"; + isMut: false; + isSigner: false; + }, + { + name: "tokenPair"; + isMut: true; + isSigner: false; + }, + { + name: "eventAuthority"; + isMut: false; + isSigner: false; + }, + { + name: "program"; + isMut: false; + isSigner: false; + }, + ]; + args: [ + { + name: "params"; + type: { + defined: "UninkTokenPairParams"; + }; + }, + ]; + }, + { + name: "burnTokenCustody"; + accounts: [ + { + name: "payee"; + isMut: true; + isSigner: true; + }, + { + name: "tokenController"; + isMut: false; + isSigner: true; + }, + { + name: "tokenMinter"; + isMut: false; + isSigner: false; + }, + { + name: "localToken"; + isMut: false; + isSigner: false; + }, + { + name: "custodyTokenAccount"; + isMut: true; + isSigner: false; + }, + { + name: "custodyTokenMint"; + isMut: true; + isSigner: false; + }, + { + name: "tokenProgram"; + isMut: false; + isSigner: false; + }, + { + name: "eventAuthority"; + isMut: false; + isSigner: false; + }, + { + name: "program"; + isMut: false; + isSigner: false; + }, + ]; + args: [ + { + name: "params"; + type: { + defined: "BurnTokenCustodyParams"; + }; + }, + ]; + }, + ]; + accounts: [ + { + name: "tokenMessenger"; + type: { + kind: "struct"; + fields: [ + { + name: "owner"; + type: "publicKey"; + }, + { + name: "pendingOwner"; + type: "publicKey"; + }, + { + name: "localMessageTransmitter"; + type: "publicKey"; + }, + { + name: "messageBodyVersion"; + type: "u32"; + }, + { + name: "authorityBump"; + type: "u8"; + }, + ]; + }; + }, + { + name: "remoteTokenMessenger"; + type: { + kind: "struct"; + fields: [ + { + name: "domain"; + type: "u32"; + }, + { + name: "tokenMessenger"; + type: "publicKey"; + }, + ]; + }; + }, + { + name: "tokenMinter"; + type: { + kind: "struct"; + fields: [ + { + name: "tokenController"; + type: "publicKey"; + }, + { + name: "pauser"; + type: "publicKey"; + }, + { + name: "paused"; + type: "bool"; + }, + { + name: "bump"; + type: "u8"; + }, + ]; + }; + }, + { + name: "tokenPair"; + type: { + kind: "struct"; + fields: [ + { + name: "remoteDomain"; + type: "u32"; + }, + { + name: "remoteToken"; + type: "publicKey"; + }, + { + name: "localToken"; + type: "publicKey"; + }, + { + name: "bump"; + type: "u8"; + }, + ]; + }; + }, + { + name: "localToken"; + type: { + kind: "struct"; + fields: [ + { + name: "custody"; + type: "publicKey"; + }, + { + name: "mint"; + type: "publicKey"; + }, + { + name: "burnLimitPerMessage"; + type: "u64"; + }, + { + name: "messagesSent"; + type: "u64"; + }, + { + name: "messagesReceived"; + type: "u64"; + }, + { + name: "amountSent"; + type: "u128"; + }, + { + name: "amountReceived"; + type: "u128"; + }, + { + name: "bump"; + type: "u8"; + }, + { + name: "custodyBump"; + type: "u8"; + }, + ]; + }; + }, + ]; + types: [ + { + name: "AcceptOwnershipParams"; + type: { + kind: "struct"; + fields: []; + }; + }, + { + name: "AddRemoteTokenMessengerParams"; + type: { + kind: "struct"; + fields: [ + { + name: "domain"; + type: "u32"; + }, + { + name: "tokenMessenger"; + type: "publicKey"; + }, + ]; + }; + }, + { + name: "DepositForBurnWithCallerParams"; + type: { + kind: "struct"; + fields: [ + { + name: "amount"; + type: "u64"; + }, + { + name: "destinationDomain"; + type: "u32"; + }, + { + name: "mintRecipient"; + type: "publicKey"; + }, + { + name: "destinationCaller"; + type: "publicKey"; + }, + ]; + }; + }, + { + name: "DepositForBurnParams"; + type: { + kind: "struct"; + fields: [ + { + name: "amount"; + type: "u64"; + }, + { + name: "destinationDomain"; + type: "u32"; + }, + { + name: "mintRecipient"; + type: "publicKey"; + }, + ]; + }; + }, + { + name: "HandleReceiveMessageParams"; + type: { + kind: "struct"; + fields: [ + { + name: "remoteDomain"; + type: "u32"; + }, + { + name: "sender"; + type: "publicKey"; + }, + { + name: "messageBody"; + type: "bytes"; + }, + { + name: "authorityBump"; + type: "u8"; + }, + ]; + }; + }, + { + name: "InitializeParams"; + type: { + kind: "struct"; + fields: [ + { + name: "tokenController"; + type: "publicKey"; + }, + { + name: "localMessageTransmitter"; + type: "publicKey"; + }, + { + name: "messageBodyVersion"; + type: "u32"; + }, + ]; + }; + }, + { + name: "RemoveRemoteTokenMessengerParams"; + type: { + kind: "struct"; + fields: []; + }; + }, + { + name: "ReplaceDepositForBurnParams"; + type: { + kind: "struct"; + fields: [ + { + name: "originalMessage"; + type: "bytes"; + }, + { + name: "originalAttestation"; + type: "bytes"; + }, + { + name: "newDestinationCaller"; + type: "publicKey"; + }, + { + name: "newMintRecipient"; + type: "publicKey"; + }, + ]; + }; + }, + { + name: "TransferOwnershipParams"; + type: { + kind: "struct"; + fields: [ + { + name: "newOwner"; + type: "publicKey"; + }, + ]; + }; + }, + { + name: "AddLocalTokenParams"; + type: { + kind: "struct"; + fields: []; + }; + }, + { + name: "BurnTokenCustodyParams"; + type: { + kind: "struct"; + fields: [ + { + name: "amount"; + type: "u64"; + }, + ]; + }; + }, + { + name: "LinkTokenPairParams"; + type: { + kind: "struct"; + fields: [ + { + name: "localToken"; + type: "publicKey"; + }, + { + name: "remoteDomain"; + type: "u32"; + }, + { + name: "remoteToken"; + type: "publicKey"; + }, + ]; + }; + }, + { + name: "PauseParams"; + type: { + kind: "struct"; + fields: []; + }; + }, + { + name: "RemoveLocalTokenParams"; + type: { + kind: "struct"; + fields: []; + }; + }, + { + name: "SetMaxBurnAmountPerMessageParams"; + type: { + kind: "struct"; + fields: [ + { + name: "burnLimitPerMessage"; + type: "u64"; + }, + ]; + }; + }, + { + name: "SetTokenControllerParams"; + type: { + kind: "struct"; + fields: [ + { + name: "tokenController"; + type: "publicKey"; + }, + ]; + }; + }, + { + name: "UninkTokenPairParams"; + type: { + kind: "struct"; + fields: []; + }; + }, + { + name: "UnpauseParams"; + type: { + kind: "struct"; + fields: []; + }; + }, + { + name: "UpdatePauserParams"; + type: { + kind: "struct"; + fields: [ + { + name: "newPauser"; + type: "publicKey"; + }, + ]; + }; + }, + { + name: "TokenMinterError"; + type: { + kind: "enum"; + variants: [ + { + name: "InvalidAuthority"; + }, + { + name: "InvalidTokenMinterState"; + }, + { + name: "ProgramPaused"; + }, + { + name: "InvalidTokenPairState"; + }, + { + name: "InvalidLocalTokenState"; + }, + { + name: "InvalidPauser"; + }, + { + name: "InvalidTokenController"; + }, + { + name: "BurnAmountExceeded"; + }, + { + name: "InvalidAmount"; + }, + ]; + }; + }, + ]; + events: [ + { + name: "OwnershipTransferStarted"; + fields: [ + { + name: "previousOwner"; + type: "publicKey"; + index: false; + }, + { + name: "newOwner"; + type: "publicKey"; + index: false; + }, + ]; + }, + { + name: "OwnershipTransferred"; + fields: [ + { + name: "previousOwner"; + type: "publicKey"; + index: false; + }, + { + name: "newOwner"; + type: "publicKey"; + index: false; + }, + ]; + }, + { + name: "DepositForBurn"; + fields: [ + { + name: "nonce"; + type: "u64"; + index: false; + }, + { + name: "burnToken"; + type: "publicKey"; + index: false; + }, + { + name: "amount"; + type: "u64"; + index: false; + }, + { + name: "depositor"; + type: "publicKey"; + index: false; + }, + { + name: "mintRecipient"; + type: "publicKey"; + index: false; + }, + { + name: "destinationDomain"; + type: "u32"; + index: false; + }, + { + name: "destinationTokenMessenger"; + type: "publicKey"; + index: false; + }, + { + name: "destinationCaller"; + type: "publicKey"; + index: false; + }, + ]; + }, + { + name: "MintAndWithdraw"; + fields: [ + { + name: "mintRecipient"; + type: "publicKey"; + index: false; + }, + { + name: "amount"; + type: "u64"; + index: false; + }, + { + name: "mintToken"; + type: "publicKey"; + index: false; + }, + ]; + }, + { + name: "RemoteTokenMessengerAdded"; + fields: [ + { + name: "domain"; + type: "u32"; + index: false; + }, + { + name: "tokenMessenger"; + type: "publicKey"; + index: false; + }, + ]; + }, + { + name: "RemoteTokenMessengerRemoved"; + fields: [ + { + name: "domain"; + type: "u32"; + index: false; + }, + { + name: "tokenMessenger"; + type: "publicKey"; + index: false; + }, + ]; + }, + { + name: "SetTokenController"; + fields: [ + { + name: "tokenController"; + type: "publicKey"; + index: false; + }, + ]; + }, + { + name: "PauserChanged"; + fields: [ + { + name: "newAddress"; + type: "publicKey"; + index: false; + }, + ]; + }, + { + name: "SetBurnLimitPerMessage"; + fields: [ + { + name: "token"; + type: "publicKey"; + index: false; + }, + { + name: "burnLimitPerMessage"; + type: "u64"; + index: false; + }, + ]; + }, + { + name: "LocalTokenAdded"; + fields: [ + { + name: "custody"; + type: "publicKey"; + index: false; + }, + { + name: "mint"; + type: "publicKey"; + index: false; + }, + ]; + }, + { + name: "LocalTokenRemoved"; + fields: [ + { + name: "custody"; + type: "publicKey"; + index: false; + }, + { + name: "mint"; + type: "publicKey"; + index: false; + }, + ]; + }, + { + name: "TokenPairLinked"; + fields: [ + { + name: "localToken"; + type: "publicKey"; + index: false; + }, + { + name: "remoteDomain"; + type: "u32"; + index: false; + }, + { + name: "remoteToken"; + type: "publicKey"; + index: false; + }, + ]; + }, + { + name: "TokenPairUnlinked"; + fields: [ + { + name: "localToken"; + type: "publicKey"; + index: false; + }, + { + name: "remoteDomain"; + type: "u32"; + index: false; + }, + { + name: "remoteToken"; + type: "publicKey"; + index: false; + }, + ]; + }, + { + name: "Pause"; + fields: []; + }, + { + name: "Unpause"; + fields: []; + }, + { + name: "TokenCustodyBurned"; + fields: [ + { + name: "custodyTokenAccount"; + type: "publicKey"; + index: false; + }, + { + name: "amount"; + type: "u64"; + index: false; + }, + ]; + }, + ]; + errors: [ + { + code: 6000; + name: "InvalidAuthority"; + msg: "Invalid authority"; + }, + { + code: 6001; + name: "InvalidTokenMessengerState"; + msg: "Invalid token messenger state"; + }, + { + code: 6002; + name: "InvalidTokenMessenger"; + msg: "Invalid token messenger"; + }, + { + code: 6003; + name: "InvalidOwner"; + msg: "Invalid owner"; + }, + { + code: 6004; + name: "MalformedMessage"; + msg: "Malformed message"; + }, + { + code: 6005; + name: "InvalidMessageBodyVersion"; + msg: "Invalid message body version"; + }, + { + code: 6006; + name: "InvalidAmount"; + msg: "Invalid amount"; + }, + { + code: 6007; + name: "InvalidDestinationDomain"; + msg: "Invalid destination domain"; + }, + { + code: 6008; + name: "InvalidDestinationCaller"; + msg: "Invalid destination caller"; + }, + { + code: 6009; + name: "InvalidMintRecipient"; + msg: "Invalid mint recipient"; + }, + { + code: 6010; + name: "InvalidSender"; + msg: "Invalid sender"; + }, + { + code: 6011; + name: "InvalidTokenPair"; + msg: "Invalid token pair"; + }, + { + code: 6012; + name: "InvalidTokenMint"; + msg: "Invalid token mint"; + }, + ]; +}; + +export const IDL: TokenMessengerMinter = { + version: "0.1.0", + name: "token_messenger_minter", + instructions: [ + { + name: "initialize", + accounts: [ + { + name: "payer", + isMut: true, + isSigner: true, + }, + { + name: "upgradeAuthority", + isMut: false, + isSigner: true, + }, + { + name: "authorityPda", + isMut: false, + isSigner: false, + }, + { + name: "tokenMessenger", + isMut: true, + isSigner: false, + }, + { + name: "tokenMinter", + isMut: true, + isSigner: false, + }, + { + name: "tokenMessengerMinterProgramData", + isMut: false, + isSigner: false, + }, + { + name: "tokenMessengerMinterProgram", + isMut: false, + isSigner: false, + }, + { + name: "systemProgram", + isMut: false, + isSigner: false, + }, + { + name: "eventAuthority", + isMut: false, + isSigner: false, + }, + { + name: "program", + isMut: false, + isSigner: false, + }, + ], + args: [ + { + name: "params", + type: { + defined: "InitializeParams", + }, + }, + ], + }, + { + name: "transferOwnership", + accounts: [ + { + name: "owner", + isMut: false, + isSigner: true, + }, + { + name: "tokenMessenger", + isMut: true, + isSigner: false, + }, + { + name: "eventAuthority", + isMut: false, + isSigner: false, + }, + { + name: "program", + isMut: false, + isSigner: false, + }, + ], + args: [ + { + name: "params", + type: { + defined: "TransferOwnershipParams", + }, + }, + ], + }, + { + name: "acceptOwnership", + accounts: [ + { + name: "pendingOwner", + isMut: false, + isSigner: true, + }, + { + name: "tokenMessenger", + isMut: true, + isSigner: false, + }, + { + name: "eventAuthority", + isMut: false, + isSigner: false, + }, + { + name: "program", + isMut: false, + isSigner: false, + }, + ], + args: [ + { + name: "params", + type: { + defined: "AcceptOwnershipParams", + }, + }, + ], + }, + { + name: "addRemoteTokenMessenger", + accounts: [ + { + name: "payer", + isMut: true, + isSigner: true, + }, + { + name: "owner", + isMut: false, + isSigner: true, + }, + { + name: "tokenMessenger", + isMut: false, + isSigner: false, + }, + { + name: "remoteTokenMessenger", + isMut: true, + isSigner: false, + }, + { + name: "systemProgram", + isMut: false, + isSigner: false, + }, + { + name: "eventAuthority", + isMut: false, + isSigner: false, + }, + { + name: "program", + isMut: false, + isSigner: false, + }, + ], + args: [ + { + name: "params", + type: { + defined: "AddRemoteTokenMessengerParams", + }, + }, + ], + }, + { + name: "removeRemoteTokenMessenger", + accounts: [ + { + name: "payee", + isMut: true, + isSigner: true, + }, + { + name: "owner", + isMut: false, + isSigner: true, + }, + { + name: "tokenMessenger", + isMut: false, + isSigner: false, + }, + { + name: "remoteTokenMessenger", + isMut: true, + isSigner: false, + }, + { + name: "eventAuthority", + isMut: false, + isSigner: false, + }, + { + name: "program", + isMut: false, + isSigner: false, + }, + ], + args: [ + { + name: "params", + type: { + defined: "RemoveRemoteTokenMessengerParams", + }, + }, + ], + }, + { + name: "depositForBurn", + accounts: [ + { + name: "owner", + isMut: false, + isSigner: true, + }, + { + name: "eventRentPayer", + isMut: true, + isSigner: true, + }, + { + name: "senderAuthorityPda", + isMut: false, + isSigner: false, + }, + { + name: "burnTokenAccount", + isMut: true, + isSigner: false, + }, + { + name: "messageTransmitter", + isMut: true, + isSigner: false, + }, + { + name: "tokenMessenger", + isMut: false, + isSigner: false, + }, + { + name: "remoteTokenMessenger", + isMut: false, + isSigner: false, + }, + { + name: "tokenMinter", + isMut: false, + isSigner: false, + }, + { + name: "localToken", + isMut: true, + isSigner: false, + }, + { + name: "burnTokenMint", + isMut: true, + isSigner: false, + }, + { + name: "messageSentEventData", + isMut: true, + isSigner: true, + }, + { + name: "messageTransmitterProgram", + isMut: false, + isSigner: false, + }, + { + name: "tokenMessengerMinterProgram", + isMut: false, + isSigner: false, + }, + { + name: "tokenProgram", + isMut: false, + isSigner: false, + }, + { + name: "systemProgram", + isMut: false, + isSigner: false, + }, + { + name: "eventAuthority", + isMut: false, + isSigner: false, + }, + { + name: "program", + isMut: false, + isSigner: false, + }, + ], + args: [ + { + name: "params", + type: { + defined: "DepositForBurnParams", + }, + }, + ], + returns: "u64", + }, + { + name: "depositForBurnWithCaller", + accounts: [ + { + name: "owner", + isMut: false, + isSigner: true, + }, + { + name: "eventRentPayer", + isMut: true, + isSigner: true, + }, + { + name: "senderAuthorityPda", + isMut: false, + isSigner: false, + }, + { + name: "burnTokenAccount", + isMut: true, + isSigner: false, + }, + { + name: "messageTransmitter", + isMut: true, + isSigner: false, + }, + { + name: "tokenMessenger", + isMut: false, + isSigner: false, + }, + { + name: "remoteTokenMessenger", + isMut: false, + isSigner: false, + }, + { + name: "tokenMinter", + isMut: false, + isSigner: false, + }, + { + name: "localToken", + isMut: true, + isSigner: false, + }, + { + name: "burnTokenMint", + isMut: true, + isSigner: false, + }, + { + name: "messageSentEventData", + isMut: true, + isSigner: true, + }, + { + name: "messageTransmitterProgram", + isMut: false, + isSigner: false, + }, + { + name: "tokenMessengerMinterProgram", + isMut: false, + isSigner: false, + }, + { + name: "tokenProgram", + isMut: false, + isSigner: false, + }, + { + name: "systemProgram", + isMut: false, + isSigner: false, + }, + { + name: "eventAuthority", + isMut: false, + isSigner: false, + }, + { + name: "program", + isMut: false, + isSigner: false, + }, + ], + args: [ + { + name: "params", + type: { + defined: "DepositForBurnWithCallerParams", + }, + }, + ], + returns: "u64", + }, + { + name: "replaceDepositForBurn", + accounts: [ + { + name: "owner", + isMut: false, + isSigner: true, + }, + { + name: "eventRentPayer", + isMut: true, + isSigner: true, + }, + { + name: "senderAuthorityPda", + isMut: false, + isSigner: false, + }, + { + name: "messageTransmitter", + isMut: true, + isSigner: false, + }, + { + name: "tokenMessenger", + isMut: false, + isSigner: false, + }, + { + name: "messageSentEventData", + isMut: true, + isSigner: true, + }, + { + name: "messageTransmitterProgram", + isMut: false, + isSigner: false, + }, + { + name: "tokenMessengerMinterProgram", + isMut: false, + isSigner: false, + }, + { + name: "systemProgram", + isMut: false, + isSigner: false, + }, + { + name: "eventAuthority", + isMut: false, + isSigner: false, + }, + { + name: "program", + isMut: false, + isSigner: false, + }, + ], + args: [ + { + name: "params", + type: { + defined: "ReplaceDepositForBurnParams", + }, + }, + ], + returns: "u64", + }, + { + name: "handleReceiveMessage", + accounts: [ + { + name: "authorityPda", + isMut: false, + isSigner: true, + }, + { + name: "tokenMessenger", + isMut: false, + isSigner: false, + }, + { + name: "remoteTokenMessenger", + isMut: false, + isSigner: false, + }, + { + name: "tokenMinter", + isMut: false, + isSigner: false, + }, + { + name: "localToken", + isMut: true, + isSigner: false, + }, + { + name: "tokenPair", + isMut: false, + isSigner: false, + }, + { + name: "recipientTokenAccount", + isMut: true, + isSigner: false, + }, + { + name: "custodyTokenAccount", + isMut: true, + isSigner: false, + }, + { + name: "tokenProgram", + isMut: false, + isSigner: false, + }, + { + name: "eventAuthority", + isMut: false, + isSigner: false, + }, + { + name: "program", + isMut: false, + isSigner: false, + }, + ], + args: [ + { + name: "params", + type: { + defined: "HandleReceiveMessageParams", + }, + }, + ], + }, + { + name: "setTokenController", + accounts: [ + { + name: "owner", + isMut: false, + isSigner: true, + }, + { + name: "tokenMessenger", + isMut: false, + isSigner: false, + }, + { + name: "tokenMinter", + isMut: true, + isSigner: false, + }, + { + name: "eventAuthority", + isMut: false, + isSigner: false, + }, + { + name: "program", + isMut: false, + isSigner: false, + }, + ], + args: [ + { + name: "params", + type: { + defined: "SetTokenControllerParams", + }, + }, + ], + }, + { + name: "pause", + accounts: [ + { + name: "pauser", + isMut: false, + isSigner: true, + }, + { + name: "tokenMinter", + isMut: true, + isSigner: false, + }, + { + name: "eventAuthority", + isMut: false, + isSigner: false, + }, + { + name: "program", + isMut: false, + isSigner: false, + }, + ], + args: [ + { + name: "params", + type: { + defined: "PauseParams", + }, + }, + ], + }, + { + name: "unpause", + accounts: [ + { + name: "pauser", + isMut: false, + isSigner: true, + }, + { + name: "tokenMinter", + isMut: true, + isSigner: false, + }, + { + name: "eventAuthority", + isMut: false, + isSigner: false, + }, + { + name: "program", + isMut: false, + isSigner: false, + }, + ], + args: [ + { + name: "params", + type: { + defined: "UnpauseParams", + }, + }, + ], + }, + { + name: "updatePauser", + accounts: [ + { + name: "owner", + isMut: false, + isSigner: true, + }, + { + name: "tokenMessenger", + isMut: false, + isSigner: false, + }, + { + name: "tokenMinter", + isMut: true, + isSigner: false, + }, + { + name: "eventAuthority", + isMut: false, + isSigner: false, + }, + { + name: "program", + isMut: false, + isSigner: false, + }, + ], + args: [ + { + name: "params", + type: { + defined: "UpdatePauserParams", + }, + }, + ], + }, + { + name: "setMaxBurnAmountPerMessage", + accounts: [ + { + name: "tokenController", + isMut: false, + isSigner: true, + }, + { + name: "tokenMinter", + isMut: false, + isSigner: false, + }, + { + name: "localToken", + isMut: true, + isSigner: false, + }, + { + name: "eventAuthority", + isMut: false, + isSigner: false, + }, + { + name: "program", + isMut: false, + isSigner: false, + }, + ], + args: [ + { + name: "params", + type: { + defined: "SetMaxBurnAmountPerMessageParams", + }, + }, + ], + }, + { + name: "addLocalToken", + accounts: [ + { + name: "payer", + isMut: true, + isSigner: true, + }, + { + name: "tokenController", + isMut: false, + isSigner: true, + }, + { + name: "tokenMinter", + isMut: false, + isSigner: false, + }, + { + name: "localToken", + isMut: true, + isSigner: false, + }, + { + name: "custodyTokenAccount", + isMut: true, + isSigner: false, + }, + { + name: "localTokenMint", + isMut: false, + isSigner: false, + }, + { + name: "tokenProgram", + isMut: false, + isSigner: false, + }, + { + name: "systemProgram", + isMut: false, + isSigner: false, + }, + { + name: "eventAuthority", + isMut: false, + isSigner: false, + }, + { + name: "program", + isMut: false, + isSigner: false, + }, + ], + args: [ + { + name: "params", + type: { + defined: "AddLocalTokenParams", + }, + }, + ], + }, + { + name: "removeLocalToken", + accounts: [ + { + name: "payee", + isMut: true, + isSigner: true, + }, + { + name: "tokenController", + isMut: false, + isSigner: true, + }, + { + name: "tokenMinter", + isMut: false, + isSigner: false, + }, + { + name: "localToken", + isMut: true, + isSigner: false, + }, + { + name: "custodyTokenAccount", + isMut: true, + isSigner: false, + }, + { + name: "tokenProgram", + isMut: false, + isSigner: false, + }, + { + name: "eventAuthority", + isMut: false, + isSigner: false, + }, + { + name: "program", + isMut: false, + isSigner: false, + }, + ], + args: [ + { + name: "params", + type: { + defined: "RemoveLocalTokenParams", + }, + }, + ], + }, + { + name: "linkTokenPair", + accounts: [ + { + name: "payer", + isMut: true, + isSigner: true, + }, + { + name: "tokenController", + isMut: false, + isSigner: true, + }, + { + name: "tokenMinter", + isMut: false, + isSigner: false, + }, + { + name: "tokenPair", + isMut: true, + isSigner: false, + }, + { + name: "systemProgram", + isMut: false, + isSigner: false, + }, + { + name: "eventAuthority", + isMut: false, + isSigner: false, + }, + { + name: "program", + isMut: false, + isSigner: false, + }, + ], + args: [ + { + name: "params", + type: { + defined: "LinkTokenPairParams", + }, + }, + ], + }, + { + name: "unlinkTokenPair", + accounts: [ + { + name: "payee", + isMut: true, + isSigner: true, + }, + { + name: "tokenController", + isMut: false, + isSigner: true, + }, + { + name: "tokenMinter", + isMut: false, + isSigner: false, + }, + { + name: "tokenPair", + isMut: true, + isSigner: false, + }, + { + name: "eventAuthority", + isMut: false, + isSigner: false, + }, + { + name: "program", + isMut: false, + isSigner: false, + }, + ], + args: [ + { + name: "params", + type: { + defined: "UninkTokenPairParams", + }, + }, + ], + }, + { + name: "burnTokenCustody", + accounts: [ + { + name: "payee", + isMut: true, + isSigner: true, + }, + { + name: "tokenController", + isMut: false, + isSigner: true, + }, + { + name: "tokenMinter", + isMut: false, + isSigner: false, + }, + { + name: "localToken", + isMut: false, + isSigner: false, + }, + { + name: "custodyTokenAccount", + isMut: true, + isSigner: false, + }, + { + name: "custodyTokenMint", + isMut: true, + isSigner: false, + }, + { + name: "tokenProgram", + isMut: false, + isSigner: false, + }, + { + name: "eventAuthority", + isMut: false, + isSigner: false, + }, + { + name: "program", + isMut: false, + isSigner: false, + }, + ], + args: [ + { + name: "params", + type: { + defined: "BurnTokenCustodyParams", + }, + }, + ], + }, + ], + accounts: [ + { + name: "tokenMessenger", + type: { + kind: "struct", + fields: [ + { + name: "owner", + type: "publicKey", + }, + { + name: "pendingOwner", + type: "publicKey", + }, + { + name: "localMessageTransmitter", + type: "publicKey", + }, + { + name: "messageBodyVersion", + type: "u32", + }, + { + name: "authorityBump", + type: "u8", + }, + ], + }, + }, + { + name: "remoteTokenMessenger", + type: { + kind: "struct", + fields: [ + { + name: "domain", + type: "u32", + }, + { + name: "tokenMessenger", + type: "publicKey", + }, + ], + }, + }, + { + name: "tokenMinter", + type: { + kind: "struct", + fields: [ + { + name: "tokenController", + type: "publicKey", + }, + { + name: "pauser", + type: "publicKey", + }, + { + name: "paused", + type: "bool", + }, + { + name: "bump", + type: "u8", + }, + ], + }, + }, + { + name: "tokenPair", + type: { + kind: "struct", + fields: [ + { + name: "remoteDomain", + type: "u32", + }, + { + name: "remoteToken", + type: "publicKey", + }, + { + name: "localToken", + type: "publicKey", + }, + { + name: "bump", + type: "u8", + }, + ], + }, + }, + { + name: "localToken", + type: { + kind: "struct", + fields: [ + { + name: "custody", + type: "publicKey", + }, + { + name: "mint", + type: "publicKey", + }, + { + name: "burnLimitPerMessage", + type: "u64", + }, + { + name: "messagesSent", + type: "u64", + }, + { + name: "messagesReceived", + type: "u64", + }, + { + name: "amountSent", + type: "u128", + }, + { + name: "amountReceived", + type: "u128", + }, + { + name: "bump", + type: "u8", + }, + { + name: "custodyBump", + type: "u8", + }, + ], + }, + }, + ], + types: [ + { + name: "AcceptOwnershipParams", + type: { + kind: "struct", + fields: [], + }, + }, + { + name: "AddRemoteTokenMessengerParams", + type: { + kind: "struct", + fields: [ + { + name: "domain", + type: "u32", + }, + { + name: "tokenMessenger", + type: "publicKey", + }, + ], + }, + }, + { + name: "DepositForBurnWithCallerParams", + type: { + kind: "struct", + fields: [ + { + name: "amount", + type: "u64", + }, + { + name: "destinationDomain", + type: "u32", + }, + { + name: "mintRecipient", + type: "publicKey", + }, + { + name: "destinationCaller", + type: "publicKey", + }, + ], + }, + }, + { + name: "DepositForBurnParams", + type: { + kind: "struct", + fields: [ + { + name: "amount", + type: "u64", + }, + { + name: "destinationDomain", + type: "u32", + }, + { + name: "mintRecipient", + type: "publicKey", + }, + ], + }, + }, + { + name: "HandleReceiveMessageParams", + type: { + kind: "struct", + fields: [ + { + name: "remoteDomain", + type: "u32", + }, + { + name: "sender", + type: "publicKey", + }, + { + name: "messageBody", + type: "bytes", + }, + { + name: "authorityBump", + type: "u8", + }, + ], + }, + }, + { + name: "InitializeParams", + type: { + kind: "struct", + fields: [ + { + name: "tokenController", + type: "publicKey", + }, + { + name: "localMessageTransmitter", + type: "publicKey", + }, + { + name: "messageBodyVersion", + type: "u32", + }, + ], + }, + }, + { + name: "RemoveRemoteTokenMessengerParams", + type: { + kind: "struct", + fields: [], + }, + }, + { + name: "ReplaceDepositForBurnParams", + type: { + kind: "struct", + fields: [ + { + name: "originalMessage", + type: "bytes", + }, + { + name: "originalAttestation", + type: "bytes", + }, + { + name: "newDestinationCaller", + type: "publicKey", + }, + { + name: "newMintRecipient", + type: "publicKey", + }, + ], + }, + }, + { + name: "TransferOwnershipParams", + type: { + kind: "struct", + fields: [ + { + name: "newOwner", + type: "publicKey", + }, + ], + }, + }, + { + name: "AddLocalTokenParams", + type: { + kind: "struct", + fields: [], + }, + }, + { + name: "BurnTokenCustodyParams", + type: { + kind: "struct", + fields: [ + { + name: "amount", + type: "u64", + }, + ], + }, + }, + { + name: "LinkTokenPairParams", + type: { + kind: "struct", + fields: [ + { + name: "localToken", + type: "publicKey", + }, + { + name: "remoteDomain", + type: "u32", + }, + { + name: "remoteToken", + type: "publicKey", + }, + ], + }, + }, + { + name: "PauseParams", + type: { + kind: "struct", + fields: [], + }, + }, + { + name: "RemoveLocalTokenParams", + type: { + kind: "struct", + fields: [], + }, + }, + { + name: "SetMaxBurnAmountPerMessageParams", + type: { + kind: "struct", + fields: [ + { + name: "burnLimitPerMessage", + type: "u64", + }, + ], + }, + }, + { + name: "SetTokenControllerParams", + type: { + kind: "struct", + fields: [ + { + name: "tokenController", + type: "publicKey", + }, + ], + }, + }, + { + name: "UninkTokenPairParams", + type: { + kind: "struct", + fields: [], + }, + }, + { + name: "UnpauseParams", + type: { + kind: "struct", + fields: [], + }, + }, + { + name: "UpdatePauserParams", + type: { + kind: "struct", + fields: [ + { + name: "newPauser", + type: "publicKey", + }, + ], + }, + }, + { + name: "TokenMinterError", + type: { + kind: "enum", + variants: [ + { + name: "InvalidAuthority", + }, + { + name: "InvalidTokenMinterState", + }, + { + name: "ProgramPaused", + }, + { + name: "InvalidTokenPairState", + }, + { + name: "InvalidLocalTokenState", + }, + { + name: "InvalidPauser", + }, + { + name: "InvalidTokenController", + }, + { + name: "BurnAmountExceeded", + }, + { + name: "InvalidAmount", + }, + ], + }, + }, + ], + events: [ + { + name: "OwnershipTransferStarted", + fields: [ + { + name: "previousOwner", + type: "publicKey", + index: false, + }, + { + name: "newOwner", + type: "publicKey", + index: false, + }, + ], + }, + { + name: "OwnershipTransferred", + fields: [ + { + name: "previousOwner", + type: "publicKey", + index: false, + }, + { + name: "newOwner", + type: "publicKey", + index: false, + }, + ], + }, + { + name: "DepositForBurn", + fields: [ + { + name: "nonce", + type: "u64", + index: false, + }, + { + name: "burnToken", + type: "publicKey", + index: false, + }, + { + name: "amount", + type: "u64", + index: false, + }, + { + name: "depositor", + type: "publicKey", + index: false, + }, + { + name: "mintRecipient", + type: "publicKey", + index: false, + }, + { + name: "destinationDomain", + type: "u32", + index: false, + }, + { + name: "destinationTokenMessenger", + type: "publicKey", + index: false, + }, + { + name: "destinationCaller", + type: "publicKey", + index: false, + }, + ], + }, + { + name: "MintAndWithdraw", + fields: [ + { + name: "mintRecipient", + type: "publicKey", + index: false, + }, + { + name: "amount", + type: "u64", + index: false, + }, + { + name: "mintToken", + type: "publicKey", + index: false, + }, + ], + }, + { + name: "RemoteTokenMessengerAdded", + fields: [ + { + name: "domain", + type: "u32", + index: false, + }, + { + name: "tokenMessenger", + type: "publicKey", + index: false, + }, + ], + }, + { + name: "RemoteTokenMessengerRemoved", + fields: [ + { + name: "domain", + type: "u32", + index: false, + }, + { + name: "tokenMessenger", + type: "publicKey", + index: false, + }, + ], + }, + { + name: "SetTokenController", + fields: [ + { + name: "tokenController", + type: "publicKey", + index: false, + }, + ], + }, + { + name: "PauserChanged", + fields: [ + { + name: "newAddress", + type: "publicKey", + index: false, + }, + ], + }, + { + name: "SetBurnLimitPerMessage", + fields: [ + { + name: "token", + type: "publicKey", + index: false, + }, + { + name: "burnLimitPerMessage", + type: "u64", + index: false, + }, + ], + }, + { + name: "LocalTokenAdded", + fields: [ + { + name: "custody", + type: "publicKey", + index: false, + }, + { + name: "mint", + type: "publicKey", + index: false, + }, + ], + }, + { + name: "LocalTokenRemoved", + fields: [ + { + name: "custody", + type: "publicKey", + index: false, + }, + { + name: "mint", + type: "publicKey", + index: false, + }, + ], + }, + { + name: "TokenPairLinked", + fields: [ + { + name: "localToken", + type: "publicKey", + index: false, + }, + { + name: "remoteDomain", + type: "u32", + index: false, + }, + { + name: "remoteToken", + type: "publicKey", + index: false, + }, + ], + }, + { + name: "TokenPairUnlinked", + fields: [ + { + name: "localToken", + type: "publicKey", + index: false, + }, + { + name: "remoteDomain", + type: "u32", + index: false, + }, + { + name: "remoteToken", + type: "publicKey", + index: false, + }, + ], + }, + { + name: "Pause", + fields: [], + }, + { + name: "Unpause", + fields: [], + }, + { + name: "TokenCustodyBurned", + fields: [ + { + name: "custodyTokenAccount", + type: "publicKey", + index: false, + }, + { + name: "amount", + type: "u64", + index: false, + }, + ], + }, + ], + errors: [ + { + code: 6000, + name: "InvalidAuthority", + msg: "Invalid authority", + }, + { + code: 6001, + name: "InvalidTokenMessengerState", + msg: "Invalid token messenger state", + }, + { + code: 6002, + name: "InvalidTokenMessenger", + msg: "Invalid token messenger", + }, + { + code: 6003, + name: "InvalidOwner", + msg: "Invalid owner", + }, + { + code: 6004, + name: "MalformedMessage", + msg: "Malformed message", + }, + { + code: 6005, + name: "InvalidMessageBodyVersion", + msg: "Invalid message body version", + }, + { + code: 6006, + name: "InvalidAmount", + msg: "Invalid amount", + }, + { + code: 6007, + name: "InvalidDestinationDomain", + msg: "Invalid destination domain", + }, + { + code: 6008, + name: "InvalidDestinationCaller", + msg: "Invalid destination caller", + }, + { + code: 6009, + name: "InvalidMintRecipient", + msg: "Invalid mint recipient", + }, + { + code: 6010, + name: "InvalidSender", + msg: "Invalid sender", + }, + { + code: 6011, + name: "InvalidTokenPair", + msg: "Invalid token pair", + }, + { + code: 6012, + name: "InvalidTokenMint", + msg: "Invalid token mint", + }, + ], +}; diff --git a/solana/ts/src/circle/idl/message_transmitter.json b/solana/ts/src/circle/idl/message_transmitter.json deleted file mode 100644 index 431e10b..0000000 --- a/solana/ts/src/circle/idl/message_transmitter.json +++ /dev/null @@ -1,1099 +0,0 @@ -{ - "version": "0.1.0", - "name": "message_transmitter", - "instructions": [ - { - "name": "initialize", - "accounts": [ - { - "name": "payer", - "isMut": true, - "isSigner": true - }, - { - "name": "upgradeAuthority", - "isMut": false, - "isSigner": true - }, - { - "name": "authorityPda", - "isMut": false, - "isSigner": false - }, - { - "name": "messageTransmitter", - "isMut": true, - "isSigner": false - }, - { - "name": "messageTransmitterProgramData", - "isMut": false, - "isSigner": false - }, - { - "name": "messageTransmitterProgram", - "isMut": false, - "isSigner": false - }, - { - "name": "systemProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [ - { - "name": "params", - "type": { - "defined": "InitializeParams" - } - } - ] - }, - { - "name": "transferOwnership", - "accounts": [ - { - "name": "owner", - "isMut": false, - "isSigner": true - }, - { - "name": "messageTransmitter", - "isMut": true, - "isSigner": false - } - ], - "args": [ - { - "name": "params", - "type": { - "defined": "TransferOwnershipParams" - } - } - ] - }, - { - "name": "acceptOwnership", - "accounts": [ - { - "name": "pendingOwner", - "isMut": false, - "isSigner": true - }, - { - "name": "messageTransmitter", - "isMut": true, - "isSigner": false - } - ], - "args": [ - { - "name": "params", - "type": { - "defined": "AcceptOwnershipParams" - } - } - ] - }, - { - "name": "updatePauser", - "accounts": [ - { - "name": "owner", - "isMut": false, - "isSigner": true - }, - { - "name": "messageTransmitter", - "isMut": true, - "isSigner": false - } - ], - "args": [ - { - "name": "params", - "type": { - "defined": "UpdatePauserParams" - } - } - ] - }, - { - "name": "updateAttesterManager", - "accounts": [ - { - "name": "owner", - "isMut": false, - "isSigner": true - }, - { - "name": "messageTransmitter", - "isMut": true, - "isSigner": false - } - ], - "args": [ - { - "name": "params", - "type": { - "defined": "UpdateAttesterManagerParams" - } - } - ] - }, - { - "name": "pause", - "accounts": [ - { - "name": "pauser", - "isMut": false, - "isSigner": true - }, - { - "name": "messageTransmitter", - "isMut": true, - "isSigner": false - } - ], - "args": [ - { - "name": "params", - "type": { - "defined": "PauseParams" - } - } - ] - }, - { - "name": "unpause", - "accounts": [ - { - "name": "pauser", - "isMut": false, - "isSigner": true - }, - { - "name": "messageTransmitter", - "isMut": true, - "isSigner": false - } - ], - "args": [ - { - "name": "params", - "type": { - "defined": "UnpauseParams" - } - } - ] - }, - { - "name": "setMaxMessageBodySize", - "accounts": [ - { - "name": "owner", - "isMut": false, - "isSigner": true - }, - { - "name": "messageTransmitter", - "isMut": true, - "isSigner": false - } - ], - "args": [ - { - "name": "params", - "type": { - "defined": "SetMaxMessageBodySizeParams" - } - } - ] - }, - { - "name": "enableAttester", - "accounts": [ - { - "name": "payer", - "isMut": true, - "isSigner": true - }, - { - "name": "attesterManager", - "isMut": false, - "isSigner": true - }, - { - "name": "messageTransmitter", - "isMut": true, - "isSigner": false - }, - { - "name": "systemProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [ - { - "name": "params", - "type": { - "defined": "EnableAttesterParams" - } - } - ] - }, - { - "name": "disableAttester", - "accounts": [ - { - "name": "payer", - "isMut": true, - "isSigner": true - }, - { - "name": "attesterManager", - "isMut": false, - "isSigner": true - }, - { - "name": "messageTransmitter", - "isMut": true, - "isSigner": false - }, - { - "name": "systemProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [ - { - "name": "params", - "type": { - "defined": "DisableAttesterParams" - } - } - ] - }, - { - "name": "setSignatureThreshold", - "accounts": [ - { - "name": "attesterManager", - "isMut": false, - "isSigner": true - }, - { - "name": "messageTransmitter", - "isMut": true, - "isSigner": false - } - ], - "args": [ - { - "name": "params", - "type": { - "defined": "SetSignatureThresholdParams" - } - } - ] - }, - { - "name": "sendMessage", - "accounts": [ - { - "name": "senderAuthorityPda", - "isMut": false, - "isSigner": true - }, - { - "name": "messageTransmitter", - "isMut": true, - "isSigner": false - }, - { - "name": "senderProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [ - { - "name": "params", - "type": { - "defined": "SendMessageParams" - } - } - ], - "returns": "u64" - }, - { - "name": "sendMessageWithCaller", - "accounts": [ - { - "name": "senderAuthorityPda", - "isMut": false, - "isSigner": true - }, - { - "name": "messageTransmitter", - "isMut": true, - "isSigner": false - }, - { - "name": "senderProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [ - { - "name": "params", - "type": { - "defined": "SendMessageWithCallerParams" - } - } - ], - "returns": "u64" - }, - { - "name": "replaceMessage", - "accounts": [ - { - "name": "senderAuthorityPda", - "isMut": false, - "isSigner": true - }, - { - "name": "messageTransmitter", - "isMut": true, - "isSigner": false - }, - { - "name": "senderProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [ - { - "name": "params", - "type": { - "defined": "ReplaceMessageParams" - } - } - ], - "returns": "u64" - }, - { - "name": "receiveMessage", - "accounts": [ - { - "name": "payer", - "isMut": true, - "isSigner": true - }, - { - "name": "caller", - "isMut": false, - "isSigner": true - }, - { - "name": "authorityPda", - "isMut": false, - "isSigner": false - }, - { - "name": "messageTransmitter", - "isMut": false, - "isSigner": false - }, - { - "name": "usedNonces", - "isMut": true, - "isSigner": false - }, - { - "name": "receiver", - "isMut": false, - "isSigner": false - }, - { - "name": "systemProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [ - { - "name": "params", - "type": { - "defined": "ReceiveMessageParams" - } - } - ] - } - ], - "accounts": [ - { - "name": "MessageTransmitter", - "docs": [ - "Main state of the MessageTransmitter program" - ], - "type": { - "kind": "struct", - "fields": [ - { - "name": "owner", - "type": "publicKey" - }, - { - "name": "pendingOwner", - "type": "publicKey" - }, - { - "name": "attesterManager", - "type": "publicKey" - }, - { - "name": "pauser", - "type": "publicKey" - }, - { - "name": "paused", - "type": "bool" - }, - { - "name": "localDomain", - "type": "u32" - }, - { - "name": "version", - "type": "u32" - }, - { - "name": "signatureThreshold", - "type": "u32" - }, - { - "name": "enabledAttesters", - "type": { - "vec": "publicKey" - } - }, - { - "name": "maxMessageBodySize", - "type": "u64" - }, - { - "name": "nextAvailableNonce", - "type": "u64" - }, - { - "name": "authorityBump", - "type": "u8" - } - ] - } - }, - { - "name": "UsedNonces", - "docs": [ - "UsedNonces account holds an array of bits that indicate which nonces were already used", - "so they can't be resused to receive new messages. Array starts with the first_nonce and", - "holds flags for UsedNonces::MAX_NONCES. Nonces are recorded separately for each remote_domain." - ], - "type": { - "kind": "struct", - "fields": [ - { - "name": "remoteDomain", - "type": "u32" - }, - { - "name": "firstNonce", - "type": "u64" - }, - { - "name": "usedNonces", - "type": { - "array": [ - "u64", - 100 - ] - } - } - ] - } - } - ], - "types": [ - { - "name": "AcceptOwnershipParams", - "type": { - "kind": "struct", - "fields": [] - } - }, - { - "name": "DisableAttesterParams", - "type": { - "kind": "struct", - "fields": [ - { - "name": "attester", - "type": "publicKey" - } - ] - } - }, - { - "name": "EnableAttesterParams", - "type": { - "kind": "struct", - "fields": [ - { - "name": "newAttester", - "type": "publicKey" - } - ] - } - }, - { - "name": "InitializeParams", - "type": { - "kind": "struct", - "fields": [ - { - "name": "localDomain", - "type": "u32" - }, - { - "name": "attester", - "type": "publicKey" - }, - { - "name": "maxMessageBodySize", - "type": "u64" - }, - { - "name": "version", - "type": "u32" - } - ] - } - }, - { - "name": "PauseParams", - "type": { - "kind": "struct", - "fields": [] - } - }, - { - "name": "ReceiveMessageParams", - "type": { - "kind": "struct", - "fields": [ - { - "name": "message", - "type": "bytes" - }, - { - "name": "attestation", - "type": "bytes" - } - ] - } - }, - { - "name": "HandleReceiveMessageParams", - "type": { - "kind": "struct", - "fields": [ - { - "name": "remoteDomain", - "type": "u32" - }, - { - "name": "sender", - "type": "publicKey" - }, - { - "name": "messageBody", - "type": "bytes" - } - ] - } - }, - { - "name": "ReplaceMessageParams", - "type": { - "kind": "struct", - "fields": [ - { - "name": "originalMessage", - "type": "bytes" - }, - { - "name": "originalAttestation", - "type": "bytes" - }, - { - "name": "newMessageBody", - "type": "bytes" - }, - { - "name": "newDestinationCaller", - "type": "publicKey" - } - ] - } - }, - { - "name": "SendMessageWithCallerParams", - "type": { - "kind": "struct", - "fields": [ - { - "name": "destinationDomain", - "type": "u32" - }, - { - "name": "recipient", - "type": "publicKey" - }, - { - "name": "destinationCaller", - "type": "publicKey" - }, - { - "name": "messageBody", - "type": "bytes" - } - ] - } - }, - { - "name": "SendMessageParams", - "type": { - "kind": "struct", - "fields": [ - { - "name": "destinationDomain", - "type": "u32" - }, - { - "name": "recipient", - "type": "publicKey" - }, - { - "name": "messageBody", - "type": "bytes" - } - ] - } - }, - { - "name": "SetMaxMessageBodySizeParams", - "type": { - "kind": "struct", - "fields": [ - { - "name": "newMaxMessageBodySize", - "type": "u64" - } - ] - } - }, - { - "name": "SetSignatureThresholdParams", - "type": { - "kind": "struct", - "fields": [ - { - "name": "newSignatureThreshold", - "type": "u32" - } - ] - } - }, - { - "name": "TransferOwnershipParams", - "type": { - "kind": "struct", - "fields": [ - { - "name": "newOwner", - "type": "publicKey" - } - ] - } - }, - { - "name": "UnpauseParams", - "type": { - "kind": "struct", - "fields": [] - } - }, - { - "name": "UpdateAttesterManagerParams", - "type": { - "kind": "struct", - "fields": [ - { - "name": "newAttesterManager", - "type": "publicKey" - } - ] - } - }, - { - "name": "UpdatePauserParams", - "type": { - "kind": "struct", - "fields": [ - { - "name": "newPauser", - "type": "publicKey" - } - ] - } - }, - { - "name": "MathError", - "type": { - "kind": "enum", - "variants": [ - { - "name": "MathOverflow" - }, - { - "name": "MathUnderflow" - }, - { - "name": "ErrorInDivision" - } - ] - } - } - ], - "events": [ - { - "name": "OwnershipTransferStarted", - "fields": [ - { - "name": "previousOwner", - "type": "publicKey", - "index": false - }, - { - "name": "newOwner", - "type": "publicKey", - "index": false - } - ] - }, - { - "name": "OwnershipTransferred", - "fields": [ - { - "name": "previousOwner", - "type": "publicKey", - "index": false - }, - { - "name": "newOwner", - "type": "publicKey", - "index": false - } - ] - }, - { - "name": "PauserChanged", - "fields": [ - { - "name": "newAddress", - "type": "publicKey", - "index": false - } - ] - }, - { - "name": "AttesterManagerUpdated", - "fields": [ - { - "name": "previousAttesterManager", - "type": "publicKey", - "index": false - }, - { - "name": "newAttesterManager", - "type": "publicKey", - "index": false - } - ] - }, - { - "name": "MessageSent", - "fields": [ - { - "name": "message", - "type": "bytes", - "index": false - } - ] - }, - { - "name": "MessageReceived", - "fields": [ - { - "name": "caller", - "type": "publicKey", - "index": false - }, - { - "name": "sourceDomain", - "type": "u32", - "index": false - }, - { - "name": "nonce", - "type": "u64", - "index": false - }, - { - "name": "sender", - "type": "publicKey", - "index": false - }, - { - "name": "messageBody", - "type": "bytes", - "index": false - } - ] - }, - { - "name": "SignatureThresholdUpdated", - "fields": [ - { - "name": "oldSignatureThreshold", - "type": "u32", - "index": false - }, - { - "name": "newSignatureThreshold", - "type": "u32", - "index": false - } - ] - }, - { - "name": "AttesterEnabled", - "fields": [ - { - "name": "attester", - "type": "publicKey", - "index": false - } - ] - }, - { - "name": "AttesterDisabled", - "fields": [ - { - "name": "attester", - "type": "publicKey", - "index": false - } - ] - }, - { - "name": "MaxMessageBodySizeUpdated", - "fields": [ - { - "name": "newMaxMessageBodySize", - "type": "u64", - "index": false - } - ] - }, - { - "name": "Pause", - "fields": [] - }, - { - "name": "Unpause", - "fields": [] - } - ], - "errors": [ - { - "code": 6000, - "name": "InvalidAuthority", - "msg": "Invalid authority" - }, - { - "code": 6001, - "name": "ProgramPaused", - "msg": "Instruction is not allowed at this time" - }, - { - "code": 6002, - "name": "InvalidMessageTransmitterState", - "msg": "Invalid message transmitter state" - }, - { - "code": 6003, - "name": "InvalidSignatureThreshold", - "msg": "Invalid signature threshold" - }, - { - "code": 6004, - "name": "SignatureThresholdAlreadySet", - "msg": "Signature threshold already set" - }, - { - "code": 6005, - "name": "InvalidOwner", - "msg": "Invalid owner" - }, - { - "code": 6006, - "name": "InvalidPauser", - "msg": "Invalid pauser" - }, - { - "code": 6007, - "name": "InvalidAttesterManager", - "msg": "Invalid attester manager" - }, - { - "code": 6008, - "name": "InvalidAttester", - "msg": "Invalid attester" - }, - { - "code": 6009, - "name": "AttesterAlreadyEnabled", - "msg": "Attester already enabled" - }, - { - "code": 6010, - "name": "TooFewEnabledAttesters", - "msg": "Too few enabled attesters" - }, - { - "code": 6011, - "name": "SignatureThresholdTooLow", - "msg": "Signature threshold is too low" - }, - { - "code": 6012, - "name": "AttesterAlreadyDisabled", - "msg": "Attester already disabled" - }, - { - "code": 6013, - "name": "MessageBodyLimitExceeded", - "msg": "Message body exceeds max size" - }, - { - "code": 6014, - "name": "InvalidDestinationCaller", - "msg": "Invalid destination caller" - }, - { - "code": 6015, - "name": "InvalidRecipient", - "msg": "Invalid message recipient" - }, - { - "code": 6016, - "name": "SenderNotPermitted", - "msg": "Sender is not permitted" - }, - { - "code": 6017, - "name": "InvalidSourceDomain", - "msg": "Invalid source domain" - }, - { - "code": 6018, - "name": "InvalidDestinationDomain", - "msg": "Invalid destination domain" - }, - { - "code": 6019, - "name": "InvalidMessageVersion", - "msg": "Invalid message version" - }, - { - "code": 6020, - "name": "InvalidUsedNoncesAccount", - "msg": "Invalid used nonces account" - }, - { - "code": 6021, - "name": "InvalidRecipientProgram", - "msg": "Invalid recipient program" - }, - { - "code": 6022, - "name": "InvalidNonce", - "msg": "Invalid nonce" - }, - { - "code": 6023, - "name": "NonceAlreadyUsed", - "msg": "Nonce already used" - }, - { - "code": 6024, - "name": "MessageTooShort", - "msg": "Message is too short" - }, - { - "code": 6025, - "name": "MalformedMessage", - "msg": "Malformed message" - }, - { - "code": 6026, - "name": "InvalidSignatureOrderOrDupe", - "msg": "Invalid signature order or dupe" - }, - { - "code": 6027, - "name": "InvalidAttesterSignature", - "msg": "Invalid attester signature" - }, - { - "code": 6028, - "name": "InvalidAttestationLength", - "msg": "Invalid attestation length" - }, - { - "code": 6029, - "name": "InvalidSignatureRecoveryId", - "msg": "Invalid signature recovery ID" - }, - { - "code": 6030, - "name": "InvalidSignatureSValue", - "msg": "Invalid signature S value" - }, - { - "code": 6031, - "name": "InvalidMessageHash", - "msg": "Invalid message hash" - } - ], - "metadata": { - "address": "CCTPmbSD7gX1bxKPAmg77w8oFzNFpaQiQUWD43TKaecd" - } -} diff --git a/solana/ts/src/circle/idl/token_messenger_minter.json b/solana/ts/src/circle/idl/token_messenger_minter.json deleted file mode 100644 index 1f6faff..0000000 --- a/solana/ts/src/circle/idl/token_messenger_minter.json +++ /dev/null @@ -1,1451 +0,0 @@ -{ - "version": "0.1.0", - "name": "token_messenger_minter", - "instructions": [ - { - "name": "initialize", - "accounts": [ - { - "name": "payer", - "isMut": true, - "isSigner": true - }, - { - "name": "upgradeAuthority", - "isMut": false, - "isSigner": true - }, - { - "name": "authorityPda", - "isMut": false, - "isSigner": false - }, - { - "name": "tokenMessenger", - "isMut": true, - "isSigner": false - }, - { - "name": "tokenMinter", - "isMut": true, - "isSigner": false - }, - { - "name": "tokenMessengerMinterProgramData", - "isMut": false, - "isSigner": false - }, - { - "name": "tokenMessengerMinterProgram", - "isMut": false, - "isSigner": false - }, - { - "name": "systemProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [ - { - "name": "params", - "type": { - "defined": "InitializeParams" - } - } - ] - }, - { - "name": "transferOwnership", - "accounts": [ - { - "name": "owner", - "isMut": false, - "isSigner": true - }, - { - "name": "tokenMessenger", - "isMut": true, - "isSigner": false - } - ], - "args": [ - { - "name": "params", - "type": { - "defined": "TransferOwnershipParams" - } - } - ] - }, - { - "name": "acceptOwnership", - "accounts": [ - { - "name": "pendingOwner", - "isMut": false, - "isSigner": true - }, - { - "name": "tokenMessenger", - "isMut": true, - "isSigner": false - } - ], - "args": [ - { - "name": "params", - "type": { - "defined": "AcceptOwnershipParams" - } - } - ] - }, - { - "name": "addRemoteTokenMessenger", - "accounts": [ - { - "name": "payer", - "isMut": true, - "isSigner": true - }, - { - "name": "owner", - "isMut": false, - "isSigner": true - }, - { - "name": "tokenMessenger", - "isMut": false, - "isSigner": false - }, - { - "name": "remoteTokenMessenger", - "isMut": true, - "isSigner": false - }, - { - "name": "systemProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [ - { - "name": "params", - "type": { - "defined": "AddRemoteTokenMessengerParams" - } - } - ] - }, - { - "name": "removeRemoteTokenMessenger", - "accounts": [ - { - "name": "payee", - "isMut": true, - "isSigner": true - }, - { - "name": "owner", - "isMut": false, - "isSigner": true - }, - { - "name": "tokenMessenger", - "isMut": false, - "isSigner": false - }, - { - "name": "remoteTokenMessenger", - "isMut": true, - "isSigner": false - } - ], - "args": [ - { - "name": "params", - "type": { - "defined": "RemoveRemoteTokenMessengerParams" - } - } - ] - }, - { - "name": "depositForBurn", - "accounts": [ - { - "name": "owner", - "isMut": false, - "isSigner": true - }, - { - "name": "senderAuthorityPda", - "isMut": false, - "isSigner": false - }, - { - "name": "burnTokenAccount", - "isMut": true, - "isSigner": false - }, - { - "name": "messageTransmitter", - "isMut": true, - "isSigner": false - }, - { - "name": "tokenMessenger", - "isMut": false, - "isSigner": false - }, - { - "name": "remoteTokenMessenger", - "isMut": false, - "isSigner": false - }, - { - "name": "tokenMinter", - "isMut": false, - "isSigner": false - }, - { - "name": "localToken", - "isMut": true, - "isSigner": false - }, - { - "name": "burnTokenMint", - "isMut": true, - "isSigner": false - }, - { - "name": "messageTransmitterProgram", - "isMut": false, - "isSigner": false - }, - { - "name": "tokenMessengerMinterProgram", - "isMut": false, - "isSigner": false - }, - { - "name": "tokenProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [ - { - "name": "params", - "type": { - "defined": "DepositForBurnParams" - } - } - ], - "returns": "u64" - }, - { - "name": "depositForBurnWithCaller", - "accounts": [ - { - "name": "owner", - "isMut": false, - "isSigner": true - }, - { - "name": "senderAuthorityPda", - "isMut": false, - "isSigner": false - }, - { - "name": "burnTokenAccount", - "isMut": true, - "isSigner": false - }, - { - "name": "messageTransmitter", - "isMut": true, - "isSigner": false - }, - { - "name": "tokenMessenger", - "isMut": false, - "isSigner": false - }, - { - "name": "remoteTokenMessenger", - "isMut": false, - "isSigner": false - }, - { - "name": "tokenMinter", - "isMut": false, - "isSigner": false - }, - { - "name": "localToken", - "isMut": true, - "isSigner": false - }, - { - "name": "burnTokenMint", - "isMut": true, - "isSigner": false - }, - { - "name": "messageTransmitterProgram", - "isMut": false, - "isSigner": false - }, - { - "name": "tokenMessengerMinterProgram", - "isMut": false, - "isSigner": false - }, - { - "name": "tokenProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [ - { - "name": "params", - "type": { - "defined": "DepositForBurnWithCallerParams" - } - } - ], - "returns": "u64" - }, - { - "name": "replaceDepositForBurn", - "accounts": [ - { - "name": "owner", - "isMut": false, - "isSigner": true - }, - { - "name": "senderAuthorityPda", - "isMut": false, - "isSigner": false - }, - { - "name": "messageTransmitter", - "isMut": true, - "isSigner": false - }, - { - "name": "tokenMessenger", - "isMut": false, - "isSigner": false - }, - { - "name": "messageTransmitterProgram", - "isMut": false, - "isSigner": false - }, - { - "name": "tokenMessengerMinterProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [ - { - "name": "params", - "type": { - "defined": "ReplaceDepositForBurnParams" - } - } - ], - "returns": "u64" - }, - { - "name": "handleReceiveMessage", - "accounts": [ - { - "name": "authorityPda", - "isMut": false, - "isSigner": true - }, - { - "name": "messageTransmitter", - "isMut": false, - "isSigner": false - }, - { - "name": "tokenMessenger", - "isMut": false, - "isSigner": false - }, - { - "name": "remoteTokenMessenger", - "isMut": false, - "isSigner": false - }, - { - "name": "tokenMinter", - "isMut": false, - "isSigner": false - }, - { - "name": "localToken", - "isMut": true, - "isSigner": false - }, - { - "name": "tokenPair", - "isMut": false, - "isSigner": false - }, - { - "name": "recipientTokenAccount", - "isMut": true, - "isSigner": false - }, - { - "name": "custodyTokenAccount", - "isMut": true, - "isSigner": false - }, - { - "name": "tokenProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [ - { - "name": "params", - "type": { - "defined": "HandleReceiveMessageParams" - } - } - ] - }, - { - "name": "setTokenController", - "accounts": [ - { - "name": "owner", - "isMut": false, - "isSigner": true - }, - { - "name": "tokenMessenger", - "isMut": false, - "isSigner": false - }, - { - "name": "tokenMinter", - "isMut": true, - "isSigner": false - } - ], - "args": [ - { - "name": "params", - "type": { - "defined": "SetTokenControllerParams" - } - } - ] - }, - { - "name": "pause", - "accounts": [ - { - "name": "pauser", - "isMut": false, - "isSigner": true - }, - { - "name": "tokenMinter", - "isMut": true, - "isSigner": false - } - ], - "args": [ - { - "name": "params", - "type": { - "defined": "PauseParams" - } - } - ] - }, - { - "name": "unpause", - "accounts": [ - { - "name": "pauser", - "isMut": false, - "isSigner": true - }, - { - "name": "tokenMinter", - "isMut": true, - "isSigner": false - } - ], - "args": [ - { - "name": "params", - "type": { - "defined": "UnpauseParams" - } - } - ] - }, - { - "name": "updatePauser", - "accounts": [ - { - "name": "owner", - "isMut": false, - "isSigner": true - }, - { - "name": "tokenMessenger", - "isMut": false, - "isSigner": false - }, - { - "name": "tokenMinter", - "isMut": true, - "isSigner": false - } - ], - "args": [ - { - "name": "params", - "type": { - "defined": "UpdatePauserParams" - } - } - ] - }, - { - "name": "setMaxBurnAmountPerMessage", - "accounts": [ - { - "name": "tokenController", - "isMut": false, - "isSigner": true - }, - { - "name": "tokenMinter", - "isMut": false, - "isSigner": false - }, - { - "name": "localToken", - "isMut": true, - "isSigner": false - } - ], - "args": [ - { - "name": "params", - "type": { - "defined": "SetMaxBurnAmountPerMessageParams" - } - } - ] - }, - { - "name": "addLocalToken", - "accounts": [ - { - "name": "payer", - "isMut": true, - "isSigner": true - }, - { - "name": "tokenController", - "isMut": false, - "isSigner": true - }, - { - "name": "tokenMinter", - "isMut": false, - "isSigner": false - }, - { - "name": "localToken", - "isMut": true, - "isSigner": false - }, - { - "name": "custodyTokenAccount", - "isMut": true, - "isSigner": false - }, - { - "name": "localTokenMint", - "isMut": false, - "isSigner": false - }, - { - "name": "tokenProgram", - "isMut": false, - "isSigner": false - }, - { - "name": "systemProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [ - { - "name": "params", - "type": { - "defined": "AddLocalTokenParams" - } - } - ] - }, - { - "name": "removeLocalToken", - "accounts": [ - { - "name": "payee", - "isMut": true, - "isSigner": true - }, - { - "name": "tokenController", - "isMut": false, - "isSigner": true - }, - { - "name": "tokenMinter", - "isMut": false, - "isSigner": false - }, - { - "name": "localToken", - "isMut": true, - "isSigner": false - }, - { - "name": "custodyTokenAccount", - "isMut": true, - "isSigner": false - }, - { - "name": "tokenProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [ - { - "name": "params", - "type": { - "defined": "RemoveLocalTokenParams" - } - } - ] - }, - { - "name": "linkTokenPair", - "accounts": [ - { - "name": "payer", - "isMut": true, - "isSigner": true - }, - { - "name": "tokenController", - "isMut": false, - "isSigner": true - }, - { - "name": "tokenMinter", - "isMut": false, - "isSigner": false - }, - { - "name": "tokenPair", - "isMut": true, - "isSigner": false - }, - { - "name": "systemProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [ - { - "name": "params", - "type": { - "defined": "LinkTokenPairParams" - } - } - ] - }, - { - "name": "unlinkTokenPair", - "accounts": [ - { - "name": "payee", - "isMut": true, - "isSigner": true - }, - { - "name": "tokenController", - "isMut": false, - "isSigner": true - }, - { - "name": "tokenMinter", - "isMut": false, - "isSigner": false - }, - { - "name": "tokenPair", - "isMut": true, - "isSigner": false - } - ], - "args": [ - { - "name": "params", - "type": { - "defined": "UninkTokenPairParams" - } - } - ] - } - ], - "accounts": [ - { - "name": "TokenMessenger", - "type": { - "kind": "struct", - "fields": [ - { - "name": "owner", - "type": "publicKey" - }, - { - "name": "pendingOwner", - "type": "publicKey" - }, - { - "name": "localMessageTransmitter", - "type": "publicKey" - }, - { - "name": "messageBodyVersion", - "type": "u32" - }, - { - "name": "authorityBump", - "type": "u8" - } - ] - } - }, - { - "name": "RemoteTokenMessenger", - "type": { - "kind": "struct", - "fields": [ - { - "name": "domain", - "type": "u32" - }, - { - "name": "tokenMessenger", - "type": "publicKey" - } - ] - } - }, - { - "name": "TokenMinter", - "type": { - "kind": "struct", - "fields": [ - { - "name": "tokenController", - "type": "publicKey" - }, - { - "name": "pauser", - "type": "publicKey" - }, - { - "name": "paused", - "type": "bool" - }, - { - "name": "bump", - "type": "u8" - } - ] - } - }, - { - "name": "TokenPair", - "type": { - "kind": "struct", - "fields": [ - { - "name": "remoteDomain", - "type": "u32" - }, - { - "name": "remoteToken", - "type": "publicKey" - }, - { - "name": "localToken", - "type": "publicKey" - }, - { - "name": "bump", - "type": "u8" - } - ] - } - }, - { - "name": "LocalToken", - "type": { - "kind": "struct", - "fields": [ - { - "name": "custody", - "type": "publicKey" - }, - { - "name": "mint", - "type": "publicKey" - }, - { - "name": "burnLimitPerMessage", - "type": "u64" - }, - { - "name": "messagesSent", - "type": "u64" - }, - { - "name": "messagesReceived", - "type": "u64" - }, - { - "name": "amountSent", - "type": "u64" - }, - { - "name": "amountReceived", - "type": "u64" - }, - { - "name": "bump", - "type": "u8" - }, - { - "name": "custodyBump", - "type": "u8" - } - ] - } - } - ], - "types": [ - { - "name": "AcceptOwnershipParams", - "type": { - "kind": "struct", - "fields": [] - } - }, - { - "name": "AddRemoteTokenMessengerParams", - "type": { - "kind": "struct", - "fields": [ - { - "name": "domain", - "type": "u32" - }, - { - "name": "tokenMessenger", - "type": "publicKey" - } - ] - } - }, - { - "name": "DepositForBurnWithCallerParams", - "type": { - "kind": "struct", - "fields": [ - { - "name": "amount", - "type": "u64" - }, - { - "name": "destinationDomain", - "type": "u32" - }, - { - "name": "mintRecipient", - "type": "publicKey" - }, - { - "name": "destinationCaller", - "type": "publicKey" - } - ] - } - }, - { - "name": "DepositForBurnParams", - "type": { - "kind": "struct", - "fields": [ - { - "name": "amount", - "type": "u64" - }, - { - "name": "destinationDomain", - "type": "u32" - }, - { - "name": "mintRecipient", - "type": "publicKey" - } - ] - } - }, - { - "name": "HandleReceiveMessageParams", - "type": { - "kind": "struct", - "fields": [ - { - "name": "remoteDomain", - "type": "u32" - }, - { - "name": "sender", - "type": "publicKey" - }, - { - "name": "messageBody", - "type": "bytes" - } - ] - } - }, - { - "name": "InitializeParams", - "type": { - "kind": "struct", - "fields": [ - { - "name": "tokenController", - "type": "publicKey" - }, - { - "name": "localMessageTransmitter", - "type": "publicKey" - }, - { - "name": "messageBodyVersion", - "type": "u32" - } - ] - } - }, - { - "name": "RemoveRemoteTokenMessengerParams", - "type": { - "kind": "struct", - "fields": [] - } - }, - { - "name": "ReplaceDepositForBurnParams", - "type": { - "kind": "struct", - "fields": [ - { - "name": "originalMessage", - "type": "bytes" - }, - { - "name": "originalAttestation", - "type": "bytes" - }, - { - "name": "newDestinationCaller", - "type": "publicKey" - }, - { - "name": "newMintRecipient", - "type": "publicKey" - } - ] - } - }, - { - "name": "TransferOwnershipParams", - "type": { - "kind": "struct", - "fields": [ - { - "name": "newOwner", - "type": "publicKey" - } - ] - } - }, - { - "name": "AddLocalTokenParams", - "type": { - "kind": "struct", - "fields": [] - } - }, - { - "name": "LinkTokenPairParams", - "type": { - "kind": "struct", - "fields": [ - { - "name": "localToken", - "type": "publicKey" - }, - { - "name": "remoteDomain", - "type": "u32" - }, - { - "name": "remoteToken", - "type": "publicKey" - } - ] - } - }, - { - "name": "PauseParams", - "type": { - "kind": "struct", - "fields": [] - } - }, - { - "name": "RemoveLocalTokenParams", - "type": { - "kind": "struct", - "fields": [] - } - }, - { - "name": "SetMaxBurnAmountPerMessageParams", - "type": { - "kind": "struct", - "fields": [ - { - "name": "burnLimitPerMessage", - "type": "u64" - } - ] - } - }, - { - "name": "SetTokenControllerParams", - "type": { - "kind": "struct", - "fields": [ - { - "name": "tokenController", - "type": "publicKey" - } - ] - } - }, - { - "name": "UninkTokenPairParams", - "type": { - "kind": "struct", - "fields": [] - } - }, - { - "name": "UnpauseParams", - "type": { - "kind": "struct", - "fields": [] - } - }, - { - "name": "UpdatePauserParams", - "type": { - "kind": "struct", - "fields": [ - { - "name": "newPauser", - "type": "publicKey" - } - ] - } - }, - { - "name": "TokenMinterError", - "type": { - "kind": "enum", - "variants": [ - { - "name": "InvalidAuthority" - }, - { - "name": "InvalidTokenMinterState" - }, - { - "name": "ProgramPaused" - }, - { - "name": "InvalidTokenPairState" - }, - { - "name": "InvalidLocalTokenState" - }, - { - "name": "InvalidPauser" - }, - { - "name": "InvalidTokenController" - }, - { - "name": "BurnAmountExceeded" - } - ] - } - } - ], - "events": [ - { - "name": "OwnershipTransferStarted", - "fields": [ - { - "name": "previousOwner", - "type": "publicKey", - "index": false - }, - { - "name": "newOwner", - "type": "publicKey", - "index": false - } - ] - }, - { - "name": "OwnershipTransferred", - "fields": [ - { - "name": "previousOwner", - "type": "publicKey", - "index": false - }, - { - "name": "newOwner", - "type": "publicKey", - "index": false - } - ] - }, - { - "name": "DepositForBurn", - "fields": [ - { - "name": "nonce", - "type": "u64", - "index": false - }, - { - "name": "burnToken", - "type": "publicKey", - "index": false - }, - { - "name": "amount", - "type": "u64", - "index": false - }, - { - "name": "depositor", - "type": "publicKey", - "index": false - }, - { - "name": "mintRecipient", - "type": "publicKey", - "index": false - }, - { - "name": "destinationDomain", - "type": "u32", - "index": false - }, - { - "name": "destinationTokenMessenger", - "type": "publicKey", - "index": false - }, - { - "name": "destinationCaller", - "type": "publicKey", - "index": false - } - ] - }, - { - "name": "MintAndWithdraw", - "fields": [ - { - "name": "mintRecipient", - "type": "publicKey", - "index": false - }, - { - "name": "amount", - "type": "u64", - "index": false - }, - { - "name": "mintToken", - "type": "publicKey", - "index": false - } - ] - }, - { - "name": "RemoteTokenMessengerAdded", - "fields": [ - { - "name": "domain", - "type": "u32", - "index": false - }, - { - "name": "tokenMessenger", - "type": "publicKey", - "index": false - } - ] - }, - { - "name": "RemoteTokenMessengerRemoved", - "fields": [ - { - "name": "domain", - "type": "u32", - "index": false - }, - { - "name": "tokenMessenger", - "type": "publicKey", - "index": false - } - ] - }, - { - "name": "SetTokenController", - "fields": [ - { - "name": "tokenController", - "type": "publicKey", - "index": false - } - ] - }, - { - "name": "PauserChanged", - "fields": [ - { - "name": "newAddress", - "type": "publicKey", - "index": false - } - ] - }, - { - "name": "SetBurnLimitPerMessage", - "fields": [ - { - "name": "token", - "type": "publicKey", - "index": false - }, - { - "name": "burnLimitPerMessage", - "type": "u64", - "index": false - } - ] - }, - { - "name": "LocalTokenAdded", - "fields": [ - { - "name": "custody", - "type": "publicKey", - "index": false - }, - { - "name": "mint", - "type": "publicKey", - "index": false - } - ] - }, - { - "name": "LocalTokenRemoved", - "fields": [ - { - "name": "custody", - "type": "publicKey", - "index": false - }, - { - "name": "mint", - "type": "publicKey", - "index": false - } - ] - }, - { - "name": "TokenPairLinked", - "fields": [ - { - "name": "localToken", - "type": "publicKey", - "index": false - }, - { - "name": "remoteDomain", - "type": "u32", - "index": false - }, - { - "name": "remoteToken", - "type": "publicKey", - "index": false - } - ] - }, - { - "name": "TokenPairUnlinked", - "fields": [ - { - "name": "localToken", - "type": "publicKey", - "index": false - }, - { - "name": "remoteDomain", - "type": "u32", - "index": false - }, - { - "name": "remoteToken", - "type": "publicKey", - "index": false - } - ] - }, - { - "name": "Pause", - "fields": [] - }, - { - "name": "Unpause", - "fields": [] - } - ], - "errors": [ - { - "code": 6000, - "name": "InvalidAuthority", - "msg": "Invalid authority" - }, - { - "code": 6001, - "name": "InvalidTokenMessengerState", - "msg": "Invalid token messenger state" - }, - { - "code": 6002, - "name": "InvalidTokenMessenger", - "msg": "Invalid token messenger" - }, - { - "code": 6003, - "name": "InvalidOwner", - "msg": "Invalid owner" - }, - { - "code": 6004, - "name": "MalformedMessage", - "msg": "Malformed message" - }, - { - "code": 6005, - "name": "InvalidMessageBodyVersion", - "msg": "Invalid message body version" - }, - { - "code": 6006, - "name": "InvalidAmount", - "msg": "Invalid amount" - }, - { - "code": 6007, - "name": "InvalidDestinationDomain", - "msg": "Invalid destination domain" - }, - { - "code": 6008, - "name": "InvalidDestinationCaller", - "msg": "Invalid destination caller" - }, - { - "code": 6009, - "name": "InvalidMintRecipient", - "msg": "Invalid mint recipient" - }, - { - "code": 6010, - "name": "InvalidSender", - "msg": "Invalid sender" - }, - { - "code": 6011, - "name": "InvalidTokenPair", - "msg": "Invalid token pair" - }, - { - "code": 6012, - "name": "InvalidTokenMint", - "msg": "Invalid token mint" - } - ], - "metadata": { - "address": "CCTPiPYPc6AsJuwueEnWgSgucamXDZwBd53dQ11YiKX3" - } -} diff --git a/solana/ts/src/circle/types/message_transmitter.ts b/solana/ts/src/circle/types/message_transmitter.ts deleted file mode 100644 index 464e36f..0000000 --- a/solana/ts/src/circle/types/message_transmitter.ts +++ /dev/null @@ -1,2193 +0,0 @@ -export type MessageTransmitter = { - "version": "0.1.0", - "name": "message_transmitter", - "instructions": [ - { - "name": "initialize", - "accounts": [ - { - "name": "payer", - "isMut": true, - "isSigner": true - }, - { - "name": "upgradeAuthority", - "isMut": false, - "isSigner": true - }, - { - "name": "authorityPda", - "isMut": false, - "isSigner": false - }, - { - "name": "messageTransmitter", - "isMut": true, - "isSigner": false - }, - { - "name": "messageTransmitterProgramData", - "isMut": false, - "isSigner": false - }, - { - "name": "messageTransmitterProgram", - "isMut": false, - "isSigner": false - }, - { - "name": "systemProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [ - { - "name": "params", - "type": { - "defined": "InitializeParams" - } - } - ] - }, - { - "name": "transferOwnership", - "accounts": [ - { - "name": "owner", - "isMut": false, - "isSigner": true - }, - { - "name": "messageTransmitter", - "isMut": true, - "isSigner": false - } - ], - "args": [ - { - "name": "params", - "type": { - "defined": "TransferOwnershipParams" - } - } - ] - }, - { - "name": "acceptOwnership", - "accounts": [ - { - "name": "pendingOwner", - "isMut": false, - "isSigner": true - }, - { - "name": "messageTransmitter", - "isMut": true, - "isSigner": false - } - ], - "args": [ - { - "name": "params", - "type": { - "defined": "AcceptOwnershipParams" - } - } - ] - }, - { - "name": "updatePauser", - "accounts": [ - { - "name": "owner", - "isMut": false, - "isSigner": true - }, - { - "name": "messageTransmitter", - "isMut": true, - "isSigner": false - } - ], - "args": [ - { - "name": "params", - "type": { - "defined": "UpdatePauserParams" - } - } - ] - }, - { - "name": "updateAttesterManager", - "accounts": [ - { - "name": "owner", - "isMut": false, - "isSigner": true - }, - { - "name": "messageTransmitter", - "isMut": true, - "isSigner": false - } - ], - "args": [ - { - "name": "params", - "type": { - "defined": "UpdateAttesterManagerParams" - } - } - ] - }, - { - "name": "pause", - "accounts": [ - { - "name": "pauser", - "isMut": false, - "isSigner": true - }, - { - "name": "messageTransmitter", - "isMut": true, - "isSigner": false - } - ], - "args": [ - { - "name": "params", - "type": { - "defined": "PauseParams" - } - } - ] - }, - { - "name": "unpause", - "accounts": [ - { - "name": "pauser", - "isMut": false, - "isSigner": true - }, - { - "name": "messageTransmitter", - "isMut": true, - "isSigner": false - } - ], - "args": [ - { - "name": "params", - "type": { - "defined": "UnpauseParams" - } - } - ] - }, - { - "name": "setMaxMessageBodySize", - "accounts": [ - { - "name": "owner", - "isMut": false, - "isSigner": true - }, - { - "name": "messageTransmitter", - "isMut": true, - "isSigner": false - } - ], - "args": [ - { - "name": "params", - "type": { - "defined": "SetMaxMessageBodySizeParams" - } - } - ] - }, - { - "name": "enableAttester", - "accounts": [ - { - "name": "payer", - "isMut": true, - "isSigner": true - }, - { - "name": "attesterManager", - "isMut": false, - "isSigner": true - }, - { - "name": "messageTransmitter", - "isMut": true, - "isSigner": false - }, - { - "name": "systemProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [ - { - "name": "params", - "type": { - "defined": "EnableAttesterParams" - } - } - ] - }, - { - "name": "disableAttester", - "accounts": [ - { - "name": "payer", - "isMut": true, - "isSigner": true - }, - { - "name": "attesterManager", - "isMut": false, - "isSigner": true - }, - { - "name": "messageTransmitter", - "isMut": true, - "isSigner": false - }, - { - "name": "systemProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [ - { - "name": "params", - "type": { - "defined": "DisableAttesterParams" - } - } - ] - }, - { - "name": "setSignatureThreshold", - "accounts": [ - { - "name": "attesterManager", - "isMut": false, - "isSigner": true - }, - { - "name": "messageTransmitter", - "isMut": true, - "isSigner": false - } - ], - "args": [ - { - "name": "params", - "type": { - "defined": "SetSignatureThresholdParams" - } - } - ] - }, - { - "name": "sendMessage", - "accounts": [ - { - "name": "senderAuthorityPda", - "isMut": false, - "isSigner": true - }, - { - "name": "messageTransmitter", - "isMut": true, - "isSigner": false - }, - { - "name": "senderProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [ - { - "name": "params", - "type": { - "defined": "SendMessageParams" - } - } - ], - "returns": "u64" - }, - { - "name": "sendMessageWithCaller", - "accounts": [ - { - "name": "senderAuthorityPda", - "isMut": false, - "isSigner": true - }, - { - "name": "messageTransmitter", - "isMut": true, - "isSigner": false - }, - { - "name": "senderProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [ - { - "name": "params", - "type": { - "defined": "SendMessageWithCallerParams" - } - } - ], - "returns": "u64" - }, - { - "name": "replaceMessage", - "accounts": [ - { - "name": "senderAuthorityPda", - "isMut": false, - "isSigner": true - }, - { - "name": "messageTransmitter", - "isMut": true, - "isSigner": false - }, - { - "name": "senderProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [ - { - "name": "params", - "type": { - "defined": "ReplaceMessageParams" - } - } - ], - "returns": "u64" - }, - { - "name": "receiveMessage", - "accounts": [ - { - "name": "payer", - "isMut": true, - "isSigner": true - }, - { - "name": "caller", - "isMut": false, - "isSigner": true - }, - { - "name": "authorityPda", - "isMut": false, - "isSigner": false - }, - { - "name": "messageTransmitter", - "isMut": false, - "isSigner": false - }, - { - "name": "usedNonces", - "isMut": true, - "isSigner": false - }, - { - "name": "receiver", - "isMut": false, - "isSigner": false - }, - { - "name": "systemProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [ - { - "name": "params", - "type": { - "defined": "ReceiveMessageParams" - } - } - ] - } - ], - "accounts": [ - { - "name": "messageTransmitter", - "docs": [ - "Main state of the MessageTransmitter program" - ], - "type": { - "kind": "struct", - "fields": [ - { - "name": "owner", - "type": "publicKey" - }, - { - "name": "pendingOwner", - "type": "publicKey" - }, - { - "name": "attesterManager", - "type": "publicKey" - }, - { - "name": "pauser", - "type": "publicKey" - }, - { - "name": "paused", - "type": "bool" - }, - { - "name": "localDomain", - "type": "u32" - }, - { - "name": "version", - "type": "u32" - }, - { - "name": "signatureThreshold", - "type": "u32" - }, - { - "name": "enabledAttesters", - "type": { - "vec": "publicKey" - } - }, - { - "name": "maxMessageBodySize", - "type": "u64" - }, - { - "name": "nextAvailableNonce", - "type": "u64" - }, - { - "name": "authorityBump", - "type": "u8" - } - ] - } - }, - { - "name": "usedNonces", - "docs": [ - "UsedNonces account holds an array of bits that indicate which nonces were already used", - "so they can't be resused to receive new messages. Array starts with the first_nonce and", - "holds flags for UsedNonces::MAX_NONCES. Nonces are recorded separately for each remote_domain." - ], - "type": { - "kind": "struct", - "fields": [ - { - "name": "remoteDomain", - "type": "u32" - }, - { - "name": "firstNonce", - "type": "u64" - }, - { - "name": "usedNonces", - "type": { - "array": [ - "u64", - 100 - ] - } - } - ] - } - } - ], - "types": [ - { - "name": "AcceptOwnershipParams", - "type": { - "kind": "struct", - "fields": [] - } - }, - { - "name": "DisableAttesterParams", - "type": { - "kind": "struct", - "fields": [ - { - "name": "attester", - "type": "publicKey" - } - ] - } - }, - { - "name": "EnableAttesterParams", - "type": { - "kind": "struct", - "fields": [ - { - "name": "newAttester", - "type": "publicKey" - } - ] - } - }, - { - "name": "InitializeParams", - "type": { - "kind": "struct", - "fields": [ - { - "name": "localDomain", - "type": "u32" - }, - { - "name": "attester", - "type": "publicKey" - }, - { - "name": "maxMessageBodySize", - "type": "u64" - }, - { - "name": "version", - "type": "u32" - } - ] - } - }, - { - "name": "PauseParams", - "type": { - "kind": "struct", - "fields": [] - } - }, - { - "name": "ReceiveMessageParams", - "type": { - "kind": "struct", - "fields": [ - { - "name": "message", - "type": "bytes" - }, - { - "name": "attestation", - "type": "bytes" - } - ] - } - }, - { - "name": "HandleReceiveMessageParams", - "type": { - "kind": "struct", - "fields": [ - { - "name": "remoteDomain", - "type": "u32" - }, - { - "name": "sender", - "type": "publicKey" - }, - { - "name": "messageBody", - "type": "bytes" - } - ] - } - }, - { - "name": "ReplaceMessageParams", - "type": { - "kind": "struct", - "fields": [ - { - "name": "originalMessage", - "type": "bytes" - }, - { - "name": "originalAttestation", - "type": "bytes" - }, - { - "name": "newMessageBody", - "type": "bytes" - }, - { - "name": "newDestinationCaller", - "type": "publicKey" - } - ] - } - }, - { - "name": "SendMessageWithCallerParams", - "type": { - "kind": "struct", - "fields": [ - { - "name": "destinationDomain", - "type": "u32" - }, - { - "name": "recipient", - "type": "publicKey" - }, - { - "name": "destinationCaller", - "type": "publicKey" - }, - { - "name": "messageBody", - "type": "bytes" - } - ] - } - }, - { - "name": "SendMessageParams", - "type": { - "kind": "struct", - "fields": [ - { - "name": "destinationDomain", - "type": "u32" - }, - { - "name": "recipient", - "type": "publicKey" - }, - { - "name": "messageBody", - "type": "bytes" - } - ] - } - }, - { - "name": "SetMaxMessageBodySizeParams", - "type": { - "kind": "struct", - "fields": [ - { - "name": "newMaxMessageBodySize", - "type": "u64" - } - ] - } - }, - { - "name": "SetSignatureThresholdParams", - "type": { - "kind": "struct", - "fields": [ - { - "name": "newSignatureThreshold", - "type": "u32" - } - ] - } - }, - { - "name": "TransferOwnershipParams", - "type": { - "kind": "struct", - "fields": [ - { - "name": "newOwner", - "type": "publicKey" - } - ] - } - }, - { - "name": "UnpauseParams", - "type": { - "kind": "struct", - "fields": [] - } - }, - { - "name": "UpdateAttesterManagerParams", - "type": { - "kind": "struct", - "fields": [ - { - "name": "newAttesterManager", - "type": "publicKey" - } - ] - } - }, - { - "name": "UpdatePauserParams", - "type": { - "kind": "struct", - "fields": [ - { - "name": "newPauser", - "type": "publicKey" - } - ] - } - }, - { - "name": "MathError", - "type": { - "kind": "enum", - "variants": [ - { - "name": "MathOverflow" - }, - { - "name": "MathUnderflow" - }, - { - "name": "ErrorInDivision" - } - ] - } - } - ], - "events": [ - { - "name": "OwnershipTransferStarted", - "fields": [ - { - "name": "previousOwner", - "type": "publicKey", - "index": false - }, - { - "name": "newOwner", - "type": "publicKey", - "index": false - } - ] - }, - { - "name": "OwnershipTransferred", - "fields": [ - { - "name": "previousOwner", - "type": "publicKey", - "index": false - }, - { - "name": "newOwner", - "type": "publicKey", - "index": false - } - ] - }, - { - "name": "PauserChanged", - "fields": [ - { - "name": "newAddress", - "type": "publicKey", - "index": false - } - ] - }, - { - "name": "AttesterManagerUpdated", - "fields": [ - { - "name": "previousAttesterManager", - "type": "publicKey", - "index": false - }, - { - "name": "newAttesterManager", - "type": "publicKey", - "index": false - } - ] - }, - { - "name": "MessageSent", - "fields": [ - { - "name": "message", - "type": "bytes", - "index": false - } - ] - }, - { - "name": "MessageReceived", - "fields": [ - { - "name": "caller", - "type": "publicKey", - "index": false - }, - { - "name": "sourceDomain", - "type": "u32", - "index": false - }, - { - "name": "nonce", - "type": "u64", - "index": false - }, - { - "name": "sender", - "type": "publicKey", - "index": false - }, - { - "name": "messageBody", - "type": "bytes", - "index": false - } - ] - }, - { - "name": "SignatureThresholdUpdated", - "fields": [ - { - "name": "oldSignatureThreshold", - "type": "u32", - "index": false - }, - { - "name": "newSignatureThreshold", - "type": "u32", - "index": false - } - ] - }, - { - "name": "AttesterEnabled", - "fields": [ - { - "name": "attester", - "type": "publicKey", - "index": false - } - ] - }, - { - "name": "AttesterDisabled", - "fields": [ - { - "name": "attester", - "type": "publicKey", - "index": false - } - ] - }, - { - "name": "MaxMessageBodySizeUpdated", - "fields": [ - { - "name": "newMaxMessageBodySize", - "type": "u64", - "index": false - } - ] - }, - { - "name": "Pause", - "fields": [] - }, - { - "name": "Unpause", - "fields": [] - } - ], - "errors": [ - { - "code": 6000, - "name": "InvalidAuthority", - "msg": "Invalid authority" - }, - { - "code": 6001, - "name": "ProgramPaused", - "msg": "Instruction is not allowed at this time" - }, - { - "code": 6002, - "name": "InvalidMessageTransmitterState", - "msg": "Invalid message transmitter state" - }, - { - "code": 6003, - "name": "InvalidSignatureThreshold", - "msg": "Invalid signature threshold" - }, - { - "code": 6004, - "name": "SignatureThresholdAlreadySet", - "msg": "Signature threshold already set" - }, - { - "code": 6005, - "name": "InvalidOwner", - "msg": "Invalid owner" - }, - { - "code": 6006, - "name": "InvalidPauser", - "msg": "Invalid pauser" - }, - { - "code": 6007, - "name": "InvalidAttesterManager", - "msg": "Invalid attester manager" - }, - { - "code": 6008, - "name": "InvalidAttester", - "msg": "Invalid attester" - }, - { - "code": 6009, - "name": "AttesterAlreadyEnabled", - "msg": "Attester already enabled" - }, - { - "code": 6010, - "name": "TooFewEnabledAttesters", - "msg": "Too few enabled attesters" - }, - { - "code": 6011, - "name": "SignatureThresholdTooLow", - "msg": "Signature threshold is too low" - }, - { - "code": 6012, - "name": "AttesterAlreadyDisabled", - "msg": "Attester already disabled" - }, - { - "code": 6013, - "name": "MessageBodyLimitExceeded", - "msg": "Message body exceeds max size" - }, - { - "code": 6014, - "name": "InvalidDestinationCaller", - "msg": "Invalid destination caller" - }, - { - "code": 6015, - "name": "InvalidRecipient", - "msg": "Invalid message recipient" - }, - { - "code": 6016, - "name": "SenderNotPermitted", - "msg": "Sender is not permitted" - }, - { - "code": 6017, - "name": "InvalidSourceDomain", - "msg": "Invalid source domain" - }, - { - "code": 6018, - "name": "InvalidDestinationDomain", - "msg": "Invalid destination domain" - }, - { - "code": 6019, - "name": "InvalidMessageVersion", - "msg": "Invalid message version" - }, - { - "code": 6020, - "name": "InvalidUsedNoncesAccount", - "msg": "Invalid used nonces account" - }, - { - "code": 6021, - "name": "InvalidRecipientProgram", - "msg": "Invalid recipient program" - }, - { - "code": 6022, - "name": "InvalidNonce", - "msg": "Invalid nonce" - }, - { - "code": 6023, - "name": "NonceAlreadyUsed", - "msg": "Nonce already used" - }, - { - "code": 6024, - "name": "MessageTooShort", - "msg": "Message is too short" - }, - { - "code": 6025, - "name": "MalformedMessage", - "msg": "Malformed message" - }, - { - "code": 6026, - "name": "InvalidSignatureOrderOrDupe", - "msg": "Invalid signature order or dupe" - }, - { - "code": 6027, - "name": "InvalidAttesterSignature", - "msg": "Invalid attester signature" - }, - { - "code": 6028, - "name": "InvalidAttestationLength", - "msg": "Invalid attestation length" - }, - { - "code": 6029, - "name": "InvalidSignatureRecoveryId", - "msg": "Invalid signature recovery ID" - }, - { - "code": 6030, - "name": "InvalidSignatureSValue", - "msg": "Invalid signature S value" - }, - { - "code": 6031, - "name": "InvalidMessageHash", - "msg": "Invalid message hash" - } - ] -}; - -export const IDL: MessageTransmitter = { - "version": "0.1.0", - "name": "message_transmitter", - "instructions": [ - { - "name": "initialize", - "accounts": [ - { - "name": "payer", - "isMut": true, - "isSigner": true - }, - { - "name": "upgradeAuthority", - "isMut": false, - "isSigner": true - }, - { - "name": "authorityPda", - "isMut": false, - "isSigner": false - }, - { - "name": "messageTransmitter", - "isMut": true, - "isSigner": false - }, - { - "name": "messageTransmitterProgramData", - "isMut": false, - "isSigner": false - }, - { - "name": "messageTransmitterProgram", - "isMut": false, - "isSigner": false - }, - { - "name": "systemProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [ - { - "name": "params", - "type": { - "defined": "InitializeParams" - } - } - ] - }, - { - "name": "transferOwnership", - "accounts": [ - { - "name": "owner", - "isMut": false, - "isSigner": true - }, - { - "name": "messageTransmitter", - "isMut": true, - "isSigner": false - } - ], - "args": [ - { - "name": "params", - "type": { - "defined": "TransferOwnershipParams" - } - } - ] - }, - { - "name": "acceptOwnership", - "accounts": [ - { - "name": "pendingOwner", - "isMut": false, - "isSigner": true - }, - { - "name": "messageTransmitter", - "isMut": true, - "isSigner": false - } - ], - "args": [ - { - "name": "params", - "type": { - "defined": "AcceptOwnershipParams" - } - } - ] - }, - { - "name": "updatePauser", - "accounts": [ - { - "name": "owner", - "isMut": false, - "isSigner": true - }, - { - "name": "messageTransmitter", - "isMut": true, - "isSigner": false - } - ], - "args": [ - { - "name": "params", - "type": { - "defined": "UpdatePauserParams" - } - } - ] - }, - { - "name": "updateAttesterManager", - "accounts": [ - { - "name": "owner", - "isMut": false, - "isSigner": true - }, - { - "name": "messageTransmitter", - "isMut": true, - "isSigner": false - } - ], - "args": [ - { - "name": "params", - "type": { - "defined": "UpdateAttesterManagerParams" - } - } - ] - }, - { - "name": "pause", - "accounts": [ - { - "name": "pauser", - "isMut": false, - "isSigner": true - }, - { - "name": "messageTransmitter", - "isMut": true, - "isSigner": false - } - ], - "args": [ - { - "name": "params", - "type": { - "defined": "PauseParams" - } - } - ] - }, - { - "name": "unpause", - "accounts": [ - { - "name": "pauser", - "isMut": false, - "isSigner": true - }, - { - "name": "messageTransmitter", - "isMut": true, - "isSigner": false - } - ], - "args": [ - { - "name": "params", - "type": { - "defined": "UnpauseParams" - } - } - ] - }, - { - "name": "setMaxMessageBodySize", - "accounts": [ - { - "name": "owner", - "isMut": false, - "isSigner": true - }, - { - "name": "messageTransmitter", - "isMut": true, - "isSigner": false - } - ], - "args": [ - { - "name": "params", - "type": { - "defined": "SetMaxMessageBodySizeParams" - } - } - ] - }, - { - "name": "enableAttester", - "accounts": [ - { - "name": "payer", - "isMut": true, - "isSigner": true - }, - { - "name": "attesterManager", - "isMut": false, - "isSigner": true - }, - { - "name": "messageTransmitter", - "isMut": true, - "isSigner": false - }, - { - "name": "systemProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [ - { - "name": "params", - "type": { - "defined": "EnableAttesterParams" - } - } - ] - }, - { - "name": "disableAttester", - "accounts": [ - { - "name": "payer", - "isMut": true, - "isSigner": true - }, - { - "name": "attesterManager", - "isMut": false, - "isSigner": true - }, - { - "name": "messageTransmitter", - "isMut": true, - "isSigner": false - }, - { - "name": "systemProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [ - { - "name": "params", - "type": { - "defined": "DisableAttesterParams" - } - } - ] - }, - { - "name": "setSignatureThreshold", - "accounts": [ - { - "name": "attesterManager", - "isMut": false, - "isSigner": true - }, - { - "name": "messageTransmitter", - "isMut": true, - "isSigner": false - } - ], - "args": [ - { - "name": "params", - "type": { - "defined": "SetSignatureThresholdParams" - } - } - ] - }, - { - "name": "sendMessage", - "accounts": [ - { - "name": "senderAuthorityPda", - "isMut": false, - "isSigner": true - }, - { - "name": "messageTransmitter", - "isMut": true, - "isSigner": false - }, - { - "name": "senderProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [ - { - "name": "params", - "type": { - "defined": "SendMessageParams" - } - } - ], - "returns": "u64" - }, - { - "name": "sendMessageWithCaller", - "accounts": [ - { - "name": "senderAuthorityPda", - "isMut": false, - "isSigner": true - }, - { - "name": "messageTransmitter", - "isMut": true, - "isSigner": false - }, - { - "name": "senderProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [ - { - "name": "params", - "type": { - "defined": "SendMessageWithCallerParams" - } - } - ], - "returns": "u64" - }, - { - "name": "replaceMessage", - "accounts": [ - { - "name": "senderAuthorityPda", - "isMut": false, - "isSigner": true - }, - { - "name": "messageTransmitter", - "isMut": true, - "isSigner": false - }, - { - "name": "senderProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [ - { - "name": "params", - "type": { - "defined": "ReplaceMessageParams" - } - } - ], - "returns": "u64" - }, - { - "name": "receiveMessage", - "accounts": [ - { - "name": "payer", - "isMut": true, - "isSigner": true - }, - { - "name": "caller", - "isMut": false, - "isSigner": true - }, - { - "name": "authorityPda", - "isMut": false, - "isSigner": false - }, - { - "name": "messageTransmitter", - "isMut": false, - "isSigner": false - }, - { - "name": "usedNonces", - "isMut": true, - "isSigner": false - }, - { - "name": "receiver", - "isMut": false, - "isSigner": false - }, - { - "name": "systemProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [ - { - "name": "params", - "type": { - "defined": "ReceiveMessageParams" - } - } - ] - } - ], - "accounts": [ - { - "name": "messageTransmitter", - "docs": [ - "Main state of the MessageTransmitter program" - ], - "type": { - "kind": "struct", - "fields": [ - { - "name": "owner", - "type": "publicKey" - }, - { - "name": "pendingOwner", - "type": "publicKey" - }, - { - "name": "attesterManager", - "type": "publicKey" - }, - { - "name": "pauser", - "type": "publicKey" - }, - { - "name": "paused", - "type": "bool" - }, - { - "name": "localDomain", - "type": "u32" - }, - { - "name": "version", - "type": "u32" - }, - { - "name": "signatureThreshold", - "type": "u32" - }, - { - "name": "enabledAttesters", - "type": { - "vec": "publicKey" - } - }, - { - "name": "maxMessageBodySize", - "type": "u64" - }, - { - "name": "nextAvailableNonce", - "type": "u64" - }, - { - "name": "authorityBump", - "type": "u8" - } - ] - } - }, - { - "name": "usedNonces", - "docs": [ - "UsedNonces account holds an array of bits that indicate which nonces were already used", - "so they can't be resused to receive new messages. Array starts with the first_nonce and", - "holds flags for UsedNonces::MAX_NONCES. Nonces are recorded separately for each remote_domain." - ], - "type": { - "kind": "struct", - "fields": [ - { - "name": "remoteDomain", - "type": "u32" - }, - { - "name": "firstNonce", - "type": "u64" - }, - { - "name": "usedNonces", - "type": { - "array": [ - "u64", - 100 - ] - } - } - ] - } - } - ], - "types": [ - { - "name": "AcceptOwnershipParams", - "type": { - "kind": "struct", - "fields": [] - } - }, - { - "name": "DisableAttesterParams", - "type": { - "kind": "struct", - "fields": [ - { - "name": "attester", - "type": "publicKey" - } - ] - } - }, - { - "name": "EnableAttesterParams", - "type": { - "kind": "struct", - "fields": [ - { - "name": "newAttester", - "type": "publicKey" - } - ] - } - }, - { - "name": "InitializeParams", - "type": { - "kind": "struct", - "fields": [ - { - "name": "localDomain", - "type": "u32" - }, - { - "name": "attester", - "type": "publicKey" - }, - { - "name": "maxMessageBodySize", - "type": "u64" - }, - { - "name": "version", - "type": "u32" - } - ] - } - }, - { - "name": "PauseParams", - "type": { - "kind": "struct", - "fields": [] - } - }, - { - "name": "ReceiveMessageParams", - "type": { - "kind": "struct", - "fields": [ - { - "name": "message", - "type": "bytes" - }, - { - "name": "attestation", - "type": "bytes" - } - ] - } - }, - { - "name": "HandleReceiveMessageParams", - "type": { - "kind": "struct", - "fields": [ - { - "name": "remoteDomain", - "type": "u32" - }, - { - "name": "sender", - "type": "publicKey" - }, - { - "name": "messageBody", - "type": "bytes" - } - ] - } - }, - { - "name": "ReplaceMessageParams", - "type": { - "kind": "struct", - "fields": [ - { - "name": "originalMessage", - "type": "bytes" - }, - { - "name": "originalAttestation", - "type": "bytes" - }, - { - "name": "newMessageBody", - "type": "bytes" - }, - { - "name": "newDestinationCaller", - "type": "publicKey" - } - ] - } - }, - { - "name": "SendMessageWithCallerParams", - "type": { - "kind": "struct", - "fields": [ - { - "name": "destinationDomain", - "type": "u32" - }, - { - "name": "recipient", - "type": "publicKey" - }, - { - "name": "destinationCaller", - "type": "publicKey" - }, - { - "name": "messageBody", - "type": "bytes" - } - ] - } - }, - { - "name": "SendMessageParams", - "type": { - "kind": "struct", - "fields": [ - { - "name": "destinationDomain", - "type": "u32" - }, - { - "name": "recipient", - "type": "publicKey" - }, - { - "name": "messageBody", - "type": "bytes" - } - ] - } - }, - { - "name": "SetMaxMessageBodySizeParams", - "type": { - "kind": "struct", - "fields": [ - { - "name": "newMaxMessageBodySize", - "type": "u64" - } - ] - } - }, - { - "name": "SetSignatureThresholdParams", - "type": { - "kind": "struct", - "fields": [ - { - "name": "newSignatureThreshold", - "type": "u32" - } - ] - } - }, - { - "name": "TransferOwnershipParams", - "type": { - "kind": "struct", - "fields": [ - { - "name": "newOwner", - "type": "publicKey" - } - ] - } - }, - { - "name": "UnpauseParams", - "type": { - "kind": "struct", - "fields": [] - } - }, - { - "name": "UpdateAttesterManagerParams", - "type": { - "kind": "struct", - "fields": [ - { - "name": "newAttesterManager", - "type": "publicKey" - } - ] - } - }, - { - "name": "UpdatePauserParams", - "type": { - "kind": "struct", - "fields": [ - { - "name": "newPauser", - "type": "publicKey" - } - ] - } - }, - { - "name": "MathError", - "type": { - "kind": "enum", - "variants": [ - { - "name": "MathOverflow" - }, - { - "name": "MathUnderflow" - }, - { - "name": "ErrorInDivision" - } - ] - } - } - ], - "events": [ - { - "name": "OwnershipTransferStarted", - "fields": [ - { - "name": "previousOwner", - "type": "publicKey", - "index": false - }, - { - "name": "newOwner", - "type": "publicKey", - "index": false - } - ] - }, - { - "name": "OwnershipTransferred", - "fields": [ - { - "name": "previousOwner", - "type": "publicKey", - "index": false - }, - { - "name": "newOwner", - "type": "publicKey", - "index": false - } - ] - }, - { - "name": "PauserChanged", - "fields": [ - { - "name": "newAddress", - "type": "publicKey", - "index": false - } - ] - }, - { - "name": "AttesterManagerUpdated", - "fields": [ - { - "name": "previousAttesterManager", - "type": "publicKey", - "index": false - }, - { - "name": "newAttesterManager", - "type": "publicKey", - "index": false - } - ] - }, - { - "name": "MessageSent", - "fields": [ - { - "name": "message", - "type": "bytes", - "index": false - } - ] - }, - { - "name": "MessageReceived", - "fields": [ - { - "name": "caller", - "type": "publicKey", - "index": false - }, - { - "name": "sourceDomain", - "type": "u32", - "index": false - }, - { - "name": "nonce", - "type": "u64", - "index": false - }, - { - "name": "sender", - "type": "publicKey", - "index": false - }, - { - "name": "messageBody", - "type": "bytes", - "index": false - } - ] - }, - { - "name": "SignatureThresholdUpdated", - "fields": [ - { - "name": "oldSignatureThreshold", - "type": "u32", - "index": false - }, - { - "name": "newSignatureThreshold", - "type": "u32", - "index": false - } - ] - }, - { - "name": "AttesterEnabled", - "fields": [ - { - "name": "attester", - "type": "publicKey", - "index": false - } - ] - }, - { - "name": "AttesterDisabled", - "fields": [ - { - "name": "attester", - "type": "publicKey", - "index": false - } - ] - }, - { - "name": "MaxMessageBodySizeUpdated", - "fields": [ - { - "name": "newMaxMessageBodySize", - "type": "u64", - "index": false - } - ] - }, - { - "name": "Pause", - "fields": [] - }, - { - "name": "Unpause", - "fields": [] - } - ], - "errors": [ - { - "code": 6000, - "name": "InvalidAuthority", - "msg": "Invalid authority" - }, - { - "code": 6001, - "name": "ProgramPaused", - "msg": "Instruction is not allowed at this time" - }, - { - "code": 6002, - "name": "InvalidMessageTransmitterState", - "msg": "Invalid message transmitter state" - }, - { - "code": 6003, - "name": "InvalidSignatureThreshold", - "msg": "Invalid signature threshold" - }, - { - "code": 6004, - "name": "SignatureThresholdAlreadySet", - "msg": "Signature threshold already set" - }, - { - "code": 6005, - "name": "InvalidOwner", - "msg": "Invalid owner" - }, - { - "code": 6006, - "name": "InvalidPauser", - "msg": "Invalid pauser" - }, - { - "code": 6007, - "name": "InvalidAttesterManager", - "msg": "Invalid attester manager" - }, - { - "code": 6008, - "name": "InvalidAttester", - "msg": "Invalid attester" - }, - { - "code": 6009, - "name": "AttesterAlreadyEnabled", - "msg": "Attester already enabled" - }, - { - "code": 6010, - "name": "TooFewEnabledAttesters", - "msg": "Too few enabled attesters" - }, - { - "code": 6011, - "name": "SignatureThresholdTooLow", - "msg": "Signature threshold is too low" - }, - { - "code": 6012, - "name": "AttesterAlreadyDisabled", - "msg": "Attester already disabled" - }, - { - "code": 6013, - "name": "MessageBodyLimitExceeded", - "msg": "Message body exceeds max size" - }, - { - "code": 6014, - "name": "InvalidDestinationCaller", - "msg": "Invalid destination caller" - }, - { - "code": 6015, - "name": "InvalidRecipient", - "msg": "Invalid message recipient" - }, - { - "code": 6016, - "name": "SenderNotPermitted", - "msg": "Sender is not permitted" - }, - { - "code": 6017, - "name": "InvalidSourceDomain", - "msg": "Invalid source domain" - }, - { - "code": 6018, - "name": "InvalidDestinationDomain", - "msg": "Invalid destination domain" - }, - { - "code": 6019, - "name": "InvalidMessageVersion", - "msg": "Invalid message version" - }, - { - "code": 6020, - "name": "InvalidUsedNoncesAccount", - "msg": "Invalid used nonces account" - }, - { - "code": 6021, - "name": "InvalidRecipientProgram", - "msg": "Invalid recipient program" - }, - { - "code": 6022, - "name": "InvalidNonce", - "msg": "Invalid nonce" - }, - { - "code": 6023, - "name": "NonceAlreadyUsed", - "msg": "Nonce already used" - }, - { - "code": 6024, - "name": "MessageTooShort", - "msg": "Message is too short" - }, - { - "code": 6025, - "name": "MalformedMessage", - "msg": "Malformed message" - }, - { - "code": 6026, - "name": "InvalidSignatureOrderOrDupe", - "msg": "Invalid signature order or dupe" - }, - { - "code": 6027, - "name": "InvalidAttesterSignature", - "msg": "Invalid attester signature" - }, - { - "code": 6028, - "name": "InvalidAttestationLength", - "msg": "Invalid attestation length" - }, - { - "code": 6029, - "name": "InvalidSignatureRecoveryId", - "msg": "Invalid signature recovery ID" - }, - { - "code": 6030, - "name": "InvalidSignatureSValue", - "msg": "Invalid signature S value" - }, - { - "code": 6031, - "name": "InvalidMessageHash", - "msg": "Invalid message hash" - } - ] -}; diff --git a/solana/ts/src/circle/types/token_messenger_minter.ts b/solana/ts/src/circle/types/token_messenger_minter.ts deleted file mode 100644 index 3ca7a4b..0000000 --- a/solana/ts/src/circle/types/token_messenger_minter.ts +++ /dev/null @@ -1,2897 +0,0 @@ -export type TokenMessengerMinter = { - "version": "0.1.0", - "name": "token_messenger_minter", - "instructions": [ - { - "name": "initialize", - "accounts": [ - { - "name": "payer", - "isMut": true, - "isSigner": true - }, - { - "name": "upgradeAuthority", - "isMut": false, - "isSigner": true - }, - { - "name": "authorityPda", - "isMut": false, - "isSigner": false - }, - { - "name": "tokenMessenger", - "isMut": true, - "isSigner": false - }, - { - "name": "tokenMinter", - "isMut": true, - "isSigner": false - }, - { - "name": "tokenMessengerMinterProgramData", - "isMut": false, - "isSigner": false - }, - { - "name": "tokenMessengerMinterProgram", - "isMut": false, - "isSigner": false - }, - { - "name": "systemProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [ - { - "name": "params", - "type": { - "defined": "InitializeParams" - } - } - ] - }, - { - "name": "transferOwnership", - "accounts": [ - { - "name": "owner", - "isMut": false, - "isSigner": true - }, - { - "name": "tokenMessenger", - "isMut": true, - "isSigner": false - } - ], - "args": [ - { - "name": "params", - "type": { - "defined": "TransferOwnershipParams" - } - } - ] - }, - { - "name": "acceptOwnership", - "accounts": [ - { - "name": "pendingOwner", - "isMut": false, - "isSigner": true - }, - { - "name": "tokenMessenger", - "isMut": true, - "isSigner": false - } - ], - "args": [ - { - "name": "params", - "type": { - "defined": "AcceptOwnershipParams" - } - } - ] - }, - { - "name": "addRemoteTokenMessenger", - "accounts": [ - { - "name": "payer", - "isMut": true, - "isSigner": true - }, - { - "name": "owner", - "isMut": false, - "isSigner": true - }, - { - "name": "tokenMessenger", - "isMut": false, - "isSigner": false - }, - { - "name": "remoteTokenMessenger", - "isMut": true, - "isSigner": false - }, - { - "name": "systemProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [ - { - "name": "params", - "type": { - "defined": "AddRemoteTokenMessengerParams" - } - } - ] - }, - { - "name": "removeRemoteTokenMessenger", - "accounts": [ - { - "name": "payee", - "isMut": true, - "isSigner": true - }, - { - "name": "owner", - "isMut": false, - "isSigner": true - }, - { - "name": "tokenMessenger", - "isMut": false, - "isSigner": false - }, - { - "name": "remoteTokenMessenger", - "isMut": true, - "isSigner": false - } - ], - "args": [ - { - "name": "params", - "type": { - "defined": "RemoveRemoteTokenMessengerParams" - } - } - ] - }, - { - "name": "depositForBurn", - "accounts": [ - { - "name": "owner", - "isMut": false, - "isSigner": true - }, - { - "name": "senderAuthorityPda", - "isMut": false, - "isSigner": false - }, - { - "name": "burnTokenAccount", - "isMut": true, - "isSigner": false - }, - { - "name": "messageTransmitter", - "isMut": true, - "isSigner": false - }, - { - "name": "tokenMessenger", - "isMut": false, - "isSigner": false - }, - { - "name": "remoteTokenMessenger", - "isMut": false, - "isSigner": false - }, - { - "name": "tokenMinter", - "isMut": false, - "isSigner": false - }, - { - "name": "localToken", - "isMut": true, - "isSigner": false - }, - { - "name": "burnTokenMint", - "isMut": true, - "isSigner": false - }, - { - "name": "messageTransmitterProgram", - "isMut": false, - "isSigner": false - }, - { - "name": "tokenMessengerMinterProgram", - "isMut": false, - "isSigner": false - }, - { - "name": "tokenProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [ - { - "name": "params", - "type": { - "defined": "DepositForBurnParams" - } - } - ], - "returns": "u64" - }, - { - "name": "depositForBurnWithCaller", - "accounts": [ - { - "name": "owner", - "isMut": false, - "isSigner": true - }, - { - "name": "senderAuthorityPda", - "isMut": false, - "isSigner": false - }, - { - "name": "burnTokenAccount", - "isMut": true, - "isSigner": false - }, - { - "name": "messageTransmitter", - "isMut": true, - "isSigner": false - }, - { - "name": "tokenMessenger", - "isMut": false, - "isSigner": false - }, - { - "name": "remoteTokenMessenger", - "isMut": false, - "isSigner": false - }, - { - "name": "tokenMinter", - "isMut": false, - "isSigner": false - }, - { - "name": "localToken", - "isMut": true, - "isSigner": false - }, - { - "name": "burnTokenMint", - "isMut": true, - "isSigner": false - }, - { - "name": "messageTransmitterProgram", - "isMut": false, - "isSigner": false - }, - { - "name": "tokenMessengerMinterProgram", - "isMut": false, - "isSigner": false - }, - { - "name": "tokenProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [ - { - "name": "params", - "type": { - "defined": "DepositForBurnWithCallerParams" - } - } - ], - "returns": "u64" - }, - { - "name": "replaceDepositForBurn", - "accounts": [ - { - "name": "owner", - "isMut": false, - "isSigner": true - }, - { - "name": "senderAuthorityPda", - "isMut": false, - "isSigner": false - }, - { - "name": "messageTransmitter", - "isMut": true, - "isSigner": false - }, - { - "name": "tokenMessenger", - "isMut": false, - "isSigner": false - }, - { - "name": "messageTransmitterProgram", - "isMut": false, - "isSigner": false - }, - { - "name": "tokenMessengerMinterProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [ - { - "name": "params", - "type": { - "defined": "ReplaceDepositForBurnParams" - } - } - ], - "returns": "u64" - }, - { - "name": "handleReceiveMessage", - "accounts": [ - { - "name": "authorityPda", - "isMut": false, - "isSigner": true - }, - { - "name": "messageTransmitter", - "isMut": false, - "isSigner": false - }, - { - "name": "tokenMessenger", - "isMut": false, - "isSigner": false - }, - { - "name": "remoteTokenMessenger", - "isMut": false, - "isSigner": false - }, - { - "name": "tokenMinter", - "isMut": false, - "isSigner": false - }, - { - "name": "localToken", - "isMut": true, - "isSigner": false - }, - { - "name": "tokenPair", - "isMut": false, - "isSigner": false - }, - { - "name": "recipientTokenAccount", - "isMut": true, - "isSigner": false - }, - { - "name": "custodyTokenAccount", - "isMut": true, - "isSigner": false - }, - { - "name": "tokenProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [ - { - "name": "params", - "type": { - "defined": "HandleReceiveMessageParams" - } - } - ] - }, - { - "name": "setTokenController", - "accounts": [ - { - "name": "owner", - "isMut": false, - "isSigner": true - }, - { - "name": "tokenMessenger", - "isMut": false, - "isSigner": false - }, - { - "name": "tokenMinter", - "isMut": true, - "isSigner": false - } - ], - "args": [ - { - "name": "params", - "type": { - "defined": "SetTokenControllerParams" - } - } - ] - }, - { - "name": "pause", - "accounts": [ - { - "name": "pauser", - "isMut": false, - "isSigner": true - }, - { - "name": "tokenMinter", - "isMut": true, - "isSigner": false - } - ], - "args": [ - { - "name": "params", - "type": { - "defined": "PauseParams" - } - } - ] - }, - { - "name": "unpause", - "accounts": [ - { - "name": "pauser", - "isMut": false, - "isSigner": true - }, - { - "name": "tokenMinter", - "isMut": true, - "isSigner": false - } - ], - "args": [ - { - "name": "params", - "type": { - "defined": "UnpauseParams" - } - } - ] - }, - { - "name": "updatePauser", - "accounts": [ - { - "name": "owner", - "isMut": false, - "isSigner": true - }, - { - "name": "tokenMessenger", - "isMut": false, - "isSigner": false - }, - { - "name": "tokenMinter", - "isMut": true, - "isSigner": false - } - ], - "args": [ - { - "name": "params", - "type": { - "defined": "UpdatePauserParams" - } - } - ] - }, - { - "name": "setMaxBurnAmountPerMessage", - "accounts": [ - { - "name": "tokenController", - "isMut": false, - "isSigner": true - }, - { - "name": "tokenMinter", - "isMut": false, - "isSigner": false - }, - { - "name": "localToken", - "isMut": true, - "isSigner": false - } - ], - "args": [ - { - "name": "params", - "type": { - "defined": "SetMaxBurnAmountPerMessageParams" - } - } - ] - }, - { - "name": "addLocalToken", - "accounts": [ - { - "name": "payer", - "isMut": true, - "isSigner": true - }, - { - "name": "tokenController", - "isMut": false, - "isSigner": true - }, - { - "name": "tokenMinter", - "isMut": false, - "isSigner": false - }, - { - "name": "localToken", - "isMut": true, - "isSigner": false - }, - { - "name": "custodyTokenAccount", - "isMut": true, - "isSigner": false - }, - { - "name": "localTokenMint", - "isMut": false, - "isSigner": false - }, - { - "name": "tokenProgram", - "isMut": false, - "isSigner": false - }, - { - "name": "systemProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [ - { - "name": "params", - "type": { - "defined": "AddLocalTokenParams" - } - } - ] - }, - { - "name": "removeLocalToken", - "accounts": [ - { - "name": "payee", - "isMut": true, - "isSigner": true - }, - { - "name": "tokenController", - "isMut": false, - "isSigner": true - }, - { - "name": "tokenMinter", - "isMut": false, - "isSigner": false - }, - { - "name": "localToken", - "isMut": true, - "isSigner": false - }, - { - "name": "custodyTokenAccount", - "isMut": true, - "isSigner": false - }, - { - "name": "tokenProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [ - { - "name": "params", - "type": { - "defined": "RemoveLocalTokenParams" - } - } - ] - }, - { - "name": "linkTokenPair", - "accounts": [ - { - "name": "payer", - "isMut": true, - "isSigner": true - }, - { - "name": "tokenController", - "isMut": false, - "isSigner": true - }, - { - "name": "tokenMinter", - "isMut": false, - "isSigner": false - }, - { - "name": "tokenPair", - "isMut": true, - "isSigner": false - }, - { - "name": "systemProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [ - { - "name": "params", - "type": { - "defined": "LinkTokenPairParams" - } - } - ] - }, - { - "name": "unlinkTokenPair", - "accounts": [ - { - "name": "payee", - "isMut": true, - "isSigner": true - }, - { - "name": "tokenController", - "isMut": false, - "isSigner": true - }, - { - "name": "tokenMinter", - "isMut": false, - "isSigner": false - }, - { - "name": "tokenPair", - "isMut": true, - "isSigner": false - } - ], - "args": [ - { - "name": "params", - "type": { - "defined": "UninkTokenPairParams" - } - } - ] - } - ], - "accounts": [ - { - "name": "tokenMessenger", - "type": { - "kind": "struct", - "fields": [ - { - "name": "owner", - "type": "publicKey" - }, - { - "name": "pendingOwner", - "type": "publicKey" - }, - { - "name": "localMessageTransmitter", - "type": "publicKey" - }, - { - "name": "messageBodyVersion", - "type": "u32" - }, - { - "name": "authorityBump", - "type": "u8" - } - ] - } - }, - { - "name": "remoteTokenMessenger", - "type": { - "kind": "struct", - "fields": [ - { - "name": "domain", - "type": "u32" - }, - { - "name": "tokenMessenger", - "type": "publicKey" - } - ] - } - }, - { - "name": "tokenMinter", - "type": { - "kind": "struct", - "fields": [ - { - "name": "tokenController", - "type": "publicKey" - }, - { - "name": "pauser", - "type": "publicKey" - }, - { - "name": "paused", - "type": "bool" - }, - { - "name": "bump", - "type": "u8" - } - ] - } - }, - { - "name": "tokenPair", - "type": { - "kind": "struct", - "fields": [ - { - "name": "remoteDomain", - "type": "u32" - }, - { - "name": "remoteToken", - "type": "publicKey" - }, - { - "name": "localToken", - "type": "publicKey" - }, - { - "name": "bump", - "type": "u8" - } - ] - } - }, - { - "name": "localToken", - "type": { - "kind": "struct", - "fields": [ - { - "name": "custody", - "type": "publicKey" - }, - { - "name": "mint", - "type": "publicKey" - }, - { - "name": "burnLimitPerMessage", - "type": "u64" - }, - { - "name": "messagesSent", - "type": "u64" - }, - { - "name": "messagesReceived", - "type": "u64" - }, - { - "name": "amountSent", - "type": "u64" - }, - { - "name": "amountReceived", - "type": "u64" - }, - { - "name": "bump", - "type": "u8" - }, - { - "name": "custodyBump", - "type": "u8" - } - ] - } - } - ], - "types": [ - { - "name": "AcceptOwnershipParams", - "type": { - "kind": "struct", - "fields": [] - } - }, - { - "name": "AddRemoteTokenMessengerParams", - "type": { - "kind": "struct", - "fields": [ - { - "name": "domain", - "type": "u32" - }, - { - "name": "tokenMessenger", - "type": "publicKey" - } - ] - } - }, - { - "name": "DepositForBurnWithCallerParams", - "type": { - "kind": "struct", - "fields": [ - { - "name": "amount", - "type": "u64" - }, - { - "name": "destinationDomain", - "type": "u32" - }, - { - "name": "mintRecipient", - "type": "publicKey" - }, - { - "name": "destinationCaller", - "type": "publicKey" - } - ] - } - }, - { - "name": "DepositForBurnParams", - "type": { - "kind": "struct", - "fields": [ - { - "name": "amount", - "type": "u64" - }, - { - "name": "destinationDomain", - "type": "u32" - }, - { - "name": "mintRecipient", - "type": "publicKey" - } - ] - } - }, - { - "name": "HandleReceiveMessageParams", - "type": { - "kind": "struct", - "fields": [ - { - "name": "remoteDomain", - "type": "u32" - }, - { - "name": "sender", - "type": "publicKey" - }, - { - "name": "messageBody", - "type": "bytes" - } - ] - } - }, - { - "name": "InitializeParams", - "type": { - "kind": "struct", - "fields": [ - { - "name": "tokenController", - "type": "publicKey" - }, - { - "name": "localMessageTransmitter", - "type": "publicKey" - }, - { - "name": "messageBodyVersion", - "type": "u32" - } - ] - } - }, - { - "name": "RemoveRemoteTokenMessengerParams", - "type": { - "kind": "struct", - "fields": [] - } - }, - { - "name": "ReplaceDepositForBurnParams", - "type": { - "kind": "struct", - "fields": [ - { - "name": "originalMessage", - "type": "bytes" - }, - { - "name": "originalAttestation", - "type": "bytes" - }, - { - "name": "newDestinationCaller", - "type": "publicKey" - }, - { - "name": "newMintRecipient", - "type": "publicKey" - } - ] - } - }, - { - "name": "TransferOwnershipParams", - "type": { - "kind": "struct", - "fields": [ - { - "name": "newOwner", - "type": "publicKey" - } - ] - } - }, - { - "name": "AddLocalTokenParams", - "type": { - "kind": "struct", - "fields": [] - } - }, - { - "name": "LinkTokenPairParams", - "type": { - "kind": "struct", - "fields": [ - { - "name": "localToken", - "type": "publicKey" - }, - { - "name": "remoteDomain", - "type": "u32" - }, - { - "name": "remoteToken", - "type": "publicKey" - } - ] - } - }, - { - "name": "PauseParams", - "type": { - "kind": "struct", - "fields": [] - } - }, - { - "name": "RemoveLocalTokenParams", - "type": { - "kind": "struct", - "fields": [] - } - }, - { - "name": "SetMaxBurnAmountPerMessageParams", - "type": { - "kind": "struct", - "fields": [ - { - "name": "burnLimitPerMessage", - "type": "u64" - } - ] - } - }, - { - "name": "SetTokenControllerParams", - "type": { - "kind": "struct", - "fields": [ - { - "name": "tokenController", - "type": "publicKey" - } - ] - } - }, - { - "name": "UninkTokenPairParams", - "type": { - "kind": "struct", - "fields": [] - } - }, - { - "name": "UnpauseParams", - "type": { - "kind": "struct", - "fields": [] - } - }, - { - "name": "UpdatePauserParams", - "type": { - "kind": "struct", - "fields": [ - { - "name": "newPauser", - "type": "publicKey" - } - ] - } - }, - { - "name": "TokenMinterError", - "type": { - "kind": "enum", - "variants": [ - { - "name": "InvalidAuthority" - }, - { - "name": "InvalidTokenMinterState" - }, - { - "name": "ProgramPaused" - }, - { - "name": "InvalidTokenPairState" - }, - { - "name": "InvalidLocalTokenState" - }, - { - "name": "InvalidPauser" - }, - { - "name": "InvalidTokenController" - }, - { - "name": "BurnAmountExceeded" - } - ] - } - } - ], - "events": [ - { - "name": "OwnershipTransferStarted", - "fields": [ - { - "name": "previousOwner", - "type": "publicKey", - "index": false - }, - { - "name": "newOwner", - "type": "publicKey", - "index": false - } - ] - }, - { - "name": "OwnershipTransferred", - "fields": [ - { - "name": "previousOwner", - "type": "publicKey", - "index": false - }, - { - "name": "newOwner", - "type": "publicKey", - "index": false - } - ] - }, - { - "name": "DepositForBurn", - "fields": [ - { - "name": "nonce", - "type": "u64", - "index": false - }, - { - "name": "burnToken", - "type": "publicKey", - "index": false - }, - { - "name": "amount", - "type": "u64", - "index": false - }, - { - "name": "depositor", - "type": "publicKey", - "index": false - }, - { - "name": "mintRecipient", - "type": "publicKey", - "index": false - }, - { - "name": "destinationDomain", - "type": "u32", - "index": false - }, - { - "name": "destinationTokenMessenger", - "type": "publicKey", - "index": false - }, - { - "name": "destinationCaller", - "type": "publicKey", - "index": false - } - ] - }, - { - "name": "MintAndWithdraw", - "fields": [ - { - "name": "mintRecipient", - "type": "publicKey", - "index": false - }, - { - "name": "amount", - "type": "u64", - "index": false - }, - { - "name": "mintToken", - "type": "publicKey", - "index": false - } - ] - }, - { - "name": "RemoteTokenMessengerAdded", - "fields": [ - { - "name": "domain", - "type": "u32", - "index": false - }, - { - "name": "tokenMessenger", - "type": "publicKey", - "index": false - } - ] - }, - { - "name": "RemoteTokenMessengerRemoved", - "fields": [ - { - "name": "domain", - "type": "u32", - "index": false - }, - { - "name": "tokenMessenger", - "type": "publicKey", - "index": false - } - ] - }, - { - "name": "SetTokenController", - "fields": [ - { - "name": "tokenController", - "type": "publicKey", - "index": false - } - ] - }, - { - "name": "PauserChanged", - "fields": [ - { - "name": "newAddress", - "type": "publicKey", - "index": false - } - ] - }, - { - "name": "SetBurnLimitPerMessage", - "fields": [ - { - "name": "token", - "type": "publicKey", - "index": false - }, - { - "name": "burnLimitPerMessage", - "type": "u64", - "index": false - } - ] - }, - { - "name": "LocalTokenAdded", - "fields": [ - { - "name": "custody", - "type": "publicKey", - "index": false - }, - { - "name": "mint", - "type": "publicKey", - "index": false - } - ] - }, - { - "name": "LocalTokenRemoved", - "fields": [ - { - "name": "custody", - "type": "publicKey", - "index": false - }, - { - "name": "mint", - "type": "publicKey", - "index": false - } - ] - }, - { - "name": "TokenPairLinked", - "fields": [ - { - "name": "localToken", - "type": "publicKey", - "index": false - }, - { - "name": "remoteDomain", - "type": "u32", - "index": false - }, - { - "name": "remoteToken", - "type": "publicKey", - "index": false - } - ] - }, - { - "name": "TokenPairUnlinked", - "fields": [ - { - "name": "localToken", - "type": "publicKey", - "index": false - }, - { - "name": "remoteDomain", - "type": "u32", - "index": false - }, - { - "name": "remoteToken", - "type": "publicKey", - "index": false - } - ] - }, - { - "name": "Pause", - "fields": [] - }, - { - "name": "Unpause", - "fields": [] - } - ], - "errors": [ - { - "code": 6000, - "name": "InvalidAuthority", - "msg": "Invalid authority" - }, - { - "code": 6001, - "name": "InvalidTokenMessengerState", - "msg": "Invalid token messenger state" - }, - { - "code": 6002, - "name": "InvalidTokenMessenger", - "msg": "Invalid token messenger" - }, - { - "code": 6003, - "name": "InvalidOwner", - "msg": "Invalid owner" - }, - { - "code": 6004, - "name": "MalformedMessage", - "msg": "Malformed message" - }, - { - "code": 6005, - "name": "InvalidMessageBodyVersion", - "msg": "Invalid message body version" - }, - { - "code": 6006, - "name": "InvalidAmount", - "msg": "Invalid amount" - }, - { - "code": 6007, - "name": "InvalidDestinationDomain", - "msg": "Invalid destination domain" - }, - { - "code": 6008, - "name": "InvalidDestinationCaller", - "msg": "Invalid destination caller" - }, - { - "code": 6009, - "name": "InvalidMintRecipient", - "msg": "Invalid mint recipient" - }, - { - "code": 6010, - "name": "InvalidSender", - "msg": "Invalid sender" - }, - { - "code": 6011, - "name": "InvalidTokenPair", - "msg": "Invalid token pair" - }, - { - "code": 6012, - "name": "InvalidTokenMint", - "msg": "Invalid token mint" - } - ] -}; - -export const IDL: TokenMessengerMinter = { - "version": "0.1.0", - "name": "token_messenger_minter", - "instructions": [ - { - "name": "initialize", - "accounts": [ - { - "name": "payer", - "isMut": true, - "isSigner": true - }, - { - "name": "upgradeAuthority", - "isMut": false, - "isSigner": true - }, - { - "name": "authorityPda", - "isMut": false, - "isSigner": false - }, - { - "name": "tokenMessenger", - "isMut": true, - "isSigner": false - }, - { - "name": "tokenMinter", - "isMut": true, - "isSigner": false - }, - { - "name": "tokenMessengerMinterProgramData", - "isMut": false, - "isSigner": false - }, - { - "name": "tokenMessengerMinterProgram", - "isMut": false, - "isSigner": false - }, - { - "name": "systemProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [ - { - "name": "params", - "type": { - "defined": "InitializeParams" - } - } - ] - }, - { - "name": "transferOwnership", - "accounts": [ - { - "name": "owner", - "isMut": false, - "isSigner": true - }, - { - "name": "tokenMessenger", - "isMut": true, - "isSigner": false - } - ], - "args": [ - { - "name": "params", - "type": { - "defined": "TransferOwnershipParams" - } - } - ] - }, - { - "name": "acceptOwnership", - "accounts": [ - { - "name": "pendingOwner", - "isMut": false, - "isSigner": true - }, - { - "name": "tokenMessenger", - "isMut": true, - "isSigner": false - } - ], - "args": [ - { - "name": "params", - "type": { - "defined": "AcceptOwnershipParams" - } - } - ] - }, - { - "name": "addRemoteTokenMessenger", - "accounts": [ - { - "name": "payer", - "isMut": true, - "isSigner": true - }, - { - "name": "owner", - "isMut": false, - "isSigner": true - }, - { - "name": "tokenMessenger", - "isMut": false, - "isSigner": false - }, - { - "name": "remoteTokenMessenger", - "isMut": true, - "isSigner": false - }, - { - "name": "systemProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [ - { - "name": "params", - "type": { - "defined": "AddRemoteTokenMessengerParams" - } - } - ] - }, - { - "name": "removeRemoteTokenMessenger", - "accounts": [ - { - "name": "payee", - "isMut": true, - "isSigner": true - }, - { - "name": "owner", - "isMut": false, - "isSigner": true - }, - { - "name": "tokenMessenger", - "isMut": false, - "isSigner": false - }, - { - "name": "remoteTokenMessenger", - "isMut": true, - "isSigner": false - } - ], - "args": [ - { - "name": "params", - "type": { - "defined": "RemoveRemoteTokenMessengerParams" - } - } - ] - }, - { - "name": "depositForBurn", - "accounts": [ - { - "name": "owner", - "isMut": false, - "isSigner": true - }, - { - "name": "senderAuthorityPda", - "isMut": false, - "isSigner": false - }, - { - "name": "burnTokenAccount", - "isMut": true, - "isSigner": false - }, - { - "name": "messageTransmitter", - "isMut": true, - "isSigner": false - }, - { - "name": "tokenMessenger", - "isMut": false, - "isSigner": false - }, - { - "name": "remoteTokenMessenger", - "isMut": false, - "isSigner": false - }, - { - "name": "tokenMinter", - "isMut": false, - "isSigner": false - }, - { - "name": "localToken", - "isMut": true, - "isSigner": false - }, - { - "name": "burnTokenMint", - "isMut": true, - "isSigner": false - }, - { - "name": "messageTransmitterProgram", - "isMut": false, - "isSigner": false - }, - { - "name": "tokenMessengerMinterProgram", - "isMut": false, - "isSigner": false - }, - { - "name": "tokenProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [ - { - "name": "params", - "type": { - "defined": "DepositForBurnParams" - } - } - ], - "returns": "u64" - }, - { - "name": "depositForBurnWithCaller", - "accounts": [ - { - "name": "owner", - "isMut": false, - "isSigner": true - }, - { - "name": "senderAuthorityPda", - "isMut": false, - "isSigner": false - }, - { - "name": "burnTokenAccount", - "isMut": true, - "isSigner": false - }, - { - "name": "messageTransmitter", - "isMut": true, - "isSigner": false - }, - { - "name": "tokenMessenger", - "isMut": false, - "isSigner": false - }, - { - "name": "remoteTokenMessenger", - "isMut": false, - "isSigner": false - }, - { - "name": "tokenMinter", - "isMut": false, - "isSigner": false - }, - { - "name": "localToken", - "isMut": true, - "isSigner": false - }, - { - "name": "burnTokenMint", - "isMut": true, - "isSigner": false - }, - { - "name": "messageTransmitterProgram", - "isMut": false, - "isSigner": false - }, - { - "name": "tokenMessengerMinterProgram", - "isMut": false, - "isSigner": false - }, - { - "name": "tokenProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [ - { - "name": "params", - "type": { - "defined": "DepositForBurnWithCallerParams" - } - } - ], - "returns": "u64" - }, - { - "name": "replaceDepositForBurn", - "accounts": [ - { - "name": "owner", - "isMut": false, - "isSigner": true - }, - { - "name": "senderAuthorityPda", - "isMut": false, - "isSigner": false - }, - { - "name": "messageTransmitter", - "isMut": true, - "isSigner": false - }, - { - "name": "tokenMessenger", - "isMut": false, - "isSigner": false - }, - { - "name": "messageTransmitterProgram", - "isMut": false, - "isSigner": false - }, - { - "name": "tokenMessengerMinterProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [ - { - "name": "params", - "type": { - "defined": "ReplaceDepositForBurnParams" - } - } - ], - "returns": "u64" - }, - { - "name": "handleReceiveMessage", - "accounts": [ - { - "name": "authorityPda", - "isMut": false, - "isSigner": true - }, - { - "name": "messageTransmitter", - "isMut": false, - "isSigner": false - }, - { - "name": "tokenMessenger", - "isMut": false, - "isSigner": false - }, - { - "name": "remoteTokenMessenger", - "isMut": false, - "isSigner": false - }, - { - "name": "tokenMinter", - "isMut": false, - "isSigner": false - }, - { - "name": "localToken", - "isMut": true, - "isSigner": false - }, - { - "name": "tokenPair", - "isMut": false, - "isSigner": false - }, - { - "name": "recipientTokenAccount", - "isMut": true, - "isSigner": false - }, - { - "name": "custodyTokenAccount", - "isMut": true, - "isSigner": false - }, - { - "name": "tokenProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [ - { - "name": "params", - "type": { - "defined": "HandleReceiveMessageParams" - } - } - ] - }, - { - "name": "setTokenController", - "accounts": [ - { - "name": "owner", - "isMut": false, - "isSigner": true - }, - { - "name": "tokenMessenger", - "isMut": false, - "isSigner": false - }, - { - "name": "tokenMinter", - "isMut": true, - "isSigner": false - } - ], - "args": [ - { - "name": "params", - "type": { - "defined": "SetTokenControllerParams" - } - } - ] - }, - { - "name": "pause", - "accounts": [ - { - "name": "pauser", - "isMut": false, - "isSigner": true - }, - { - "name": "tokenMinter", - "isMut": true, - "isSigner": false - } - ], - "args": [ - { - "name": "params", - "type": { - "defined": "PauseParams" - } - } - ] - }, - { - "name": "unpause", - "accounts": [ - { - "name": "pauser", - "isMut": false, - "isSigner": true - }, - { - "name": "tokenMinter", - "isMut": true, - "isSigner": false - } - ], - "args": [ - { - "name": "params", - "type": { - "defined": "UnpauseParams" - } - } - ] - }, - { - "name": "updatePauser", - "accounts": [ - { - "name": "owner", - "isMut": false, - "isSigner": true - }, - { - "name": "tokenMessenger", - "isMut": false, - "isSigner": false - }, - { - "name": "tokenMinter", - "isMut": true, - "isSigner": false - } - ], - "args": [ - { - "name": "params", - "type": { - "defined": "UpdatePauserParams" - } - } - ] - }, - { - "name": "setMaxBurnAmountPerMessage", - "accounts": [ - { - "name": "tokenController", - "isMut": false, - "isSigner": true - }, - { - "name": "tokenMinter", - "isMut": false, - "isSigner": false - }, - { - "name": "localToken", - "isMut": true, - "isSigner": false - } - ], - "args": [ - { - "name": "params", - "type": { - "defined": "SetMaxBurnAmountPerMessageParams" - } - } - ] - }, - { - "name": "addLocalToken", - "accounts": [ - { - "name": "payer", - "isMut": true, - "isSigner": true - }, - { - "name": "tokenController", - "isMut": false, - "isSigner": true - }, - { - "name": "tokenMinter", - "isMut": false, - "isSigner": false - }, - { - "name": "localToken", - "isMut": true, - "isSigner": false - }, - { - "name": "custodyTokenAccount", - "isMut": true, - "isSigner": false - }, - { - "name": "localTokenMint", - "isMut": false, - "isSigner": false - }, - { - "name": "tokenProgram", - "isMut": false, - "isSigner": false - }, - { - "name": "systemProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [ - { - "name": "params", - "type": { - "defined": "AddLocalTokenParams" - } - } - ] - }, - { - "name": "removeLocalToken", - "accounts": [ - { - "name": "payee", - "isMut": true, - "isSigner": true - }, - { - "name": "tokenController", - "isMut": false, - "isSigner": true - }, - { - "name": "tokenMinter", - "isMut": false, - "isSigner": false - }, - { - "name": "localToken", - "isMut": true, - "isSigner": false - }, - { - "name": "custodyTokenAccount", - "isMut": true, - "isSigner": false - }, - { - "name": "tokenProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [ - { - "name": "params", - "type": { - "defined": "RemoveLocalTokenParams" - } - } - ] - }, - { - "name": "linkTokenPair", - "accounts": [ - { - "name": "payer", - "isMut": true, - "isSigner": true - }, - { - "name": "tokenController", - "isMut": false, - "isSigner": true - }, - { - "name": "tokenMinter", - "isMut": false, - "isSigner": false - }, - { - "name": "tokenPair", - "isMut": true, - "isSigner": false - }, - { - "name": "systemProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [ - { - "name": "params", - "type": { - "defined": "LinkTokenPairParams" - } - } - ] - }, - { - "name": "unlinkTokenPair", - "accounts": [ - { - "name": "payee", - "isMut": true, - "isSigner": true - }, - { - "name": "tokenController", - "isMut": false, - "isSigner": true - }, - { - "name": "tokenMinter", - "isMut": false, - "isSigner": false - }, - { - "name": "tokenPair", - "isMut": true, - "isSigner": false - } - ], - "args": [ - { - "name": "params", - "type": { - "defined": "UninkTokenPairParams" - } - } - ] - } - ], - "accounts": [ - { - "name": "tokenMessenger", - "type": { - "kind": "struct", - "fields": [ - { - "name": "owner", - "type": "publicKey" - }, - { - "name": "pendingOwner", - "type": "publicKey" - }, - { - "name": "localMessageTransmitter", - "type": "publicKey" - }, - { - "name": "messageBodyVersion", - "type": "u32" - }, - { - "name": "authorityBump", - "type": "u8" - } - ] - } - }, - { - "name": "remoteTokenMessenger", - "type": { - "kind": "struct", - "fields": [ - { - "name": "domain", - "type": "u32" - }, - { - "name": "tokenMessenger", - "type": "publicKey" - } - ] - } - }, - { - "name": "tokenMinter", - "type": { - "kind": "struct", - "fields": [ - { - "name": "tokenController", - "type": "publicKey" - }, - { - "name": "pauser", - "type": "publicKey" - }, - { - "name": "paused", - "type": "bool" - }, - { - "name": "bump", - "type": "u8" - } - ] - } - }, - { - "name": "tokenPair", - "type": { - "kind": "struct", - "fields": [ - { - "name": "remoteDomain", - "type": "u32" - }, - { - "name": "remoteToken", - "type": "publicKey" - }, - { - "name": "localToken", - "type": "publicKey" - }, - { - "name": "bump", - "type": "u8" - } - ] - } - }, - { - "name": "localToken", - "type": { - "kind": "struct", - "fields": [ - { - "name": "custody", - "type": "publicKey" - }, - { - "name": "mint", - "type": "publicKey" - }, - { - "name": "burnLimitPerMessage", - "type": "u64" - }, - { - "name": "messagesSent", - "type": "u64" - }, - { - "name": "messagesReceived", - "type": "u64" - }, - { - "name": "amountSent", - "type": "u64" - }, - { - "name": "amountReceived", - "type": "u64" - }, - { - "name": "bump", - "type": "u8" - }, - { - "name": "custodyBump", - "type": "u8" - } - ] - } - } - ], - "types": [ - { - "name": "AcceptOwnershipParams", - "type": { - "kind": "struct", - "fields": [] - } - }, - { - "name": "AddRemoteTokenMessengerParams", - "type": { - "kind": "struct", - "fields": [ - { - "name": "domain", - "type": "u32" - }, - { - "name": "tokenMessenger", - "type": "publicKey" - } - ] - } - }, - { - "name": "DepositForBurnWithCallerParams", - "type": { - "kind": "struct", - "fields": [ - { - "name": "amount", - "type": "u64" - }, - { - "name": "destinationDomain", - "type": "u32" - }, - { - "name": "mintRecipient", - "type": "publicKey" - }, - { - "name": "destinationCaller", - "type": "publicKey" - } - ] - } - }, - { - "name": "DepositForBurnParams", - "type": { - "kind": "struct", - "fields": [ - { - "name": "amount", - "type": "u64" - }, - { - "name": "destinationDomain", - "type": "u32" - }, - { - "name": "mintRecipient", - "type": "publicKey" - } - ] - } - }, - { - "name": "HandleReceiveMessageParams", - "type": { - "kind": "struct", - "fields": [ - { - "name": "remoteDomain", - "type": "u32" - }, - { - "name": "sender", - "type": "publicKey" - }, - { - "name": "messageBody", - "type": "bytes" - } - ] - } - }, - { - "name": "InitializeParams", - "type": { - "kind": "struct", - "fields": [ - { - "name": "tokenController", - "type": "publicKey" - }, - { - "name": "localMessageTransmitter", - "type": "publicKey" - }, - { - "name": "messageBodyVersion", - "type": "u32" - } - ] - } - }, - { - "name": "RemoveRemoteTokenMessengerParams", - "type": { - "kind": "struct", - "fields": [] - } - }, - { - "name": "ReplaceDepositForBurnParams", - "type": { - "kind": "struct", - "fields": [ - { - "name": "originalMessage", - "type": "bytes" - }, - { - "name": "originalAttestation", - "type": "bytes" - }, - { - "name": "newDestinationCaller", - "type": "publicKey" - }, - { - "name": "newMintRecipient", - "type": "publicKey" - } - ] - } - }, - { - "name": "TransferOwnershipParams", - "type": { - "kind": "struct", - "fields": [ - { - "name": "newOwner", - "type": "publicKey" - } - ] - } - }, - { - "name": "AddLocalTokenParams", - "type": { - "kind": "struct", - "fields": [] - } - }, - { - "name": "LinkTokenPairParams", - "type": { - "kind": "struct", - "fields": [ - { - "name": "localToken", - "type": "publicKey" - }, - { - "name": "remoteDomain", - "type": "u32" - }, - { - "name": "remoteToken", - "type": "publicKey" - } - ] - } - }, - { - "name": "PauseParams", - "type": { - "kind": "struct", - "fields": [] - } - }, - { - "name": "RemoveLocalTokenParams", - "type": { - "kind": "struct", - "fields": [] - } - }, - { - "name": "SetMaxBurnAmountPerMessageParams", - "type": { - "kind": "struct", - "fields": [ - { - "name": "burnLimitPerMessage", - "type": "u64" - } - ] - } - }, - { - "name": "SetTokenControllerParams", - "type": { - "kind": "struct", - "fields": [ - { - "name": "tokenController", - "type": "publicKey" - } - ] - } - }, - { - "name": "UninkTokenPairParams", - "type": { - "kind": "struct", - "fields": [] - } - }, - { - "name": "UnpauseParams", - "type": { - "kind": "struct", - "fields": [] - } - }, - { - "name": "UpdatePauserParams", - "type": { - "kind": "struct", - "fields": [ - { - "name": "newPauser", - "type": "publicKey" - } - ] - } - }, - { - "name": "TokenMinterError", - "type": { - "kind": "enum", - "variants": [ - { - "name": "InvalidAuthority" - }, - { - "name": "InvalidTokenMinterState" - }, - { - "name": "ProgramPaused" - }, - { - "name": "InvalidTokenPairState" - }, - { - "name": "InvalidLocalTokenState" - }, - { - "name": "InvalidPauser" - }, - { - "name": "InvalidTokenController" - }, - { - "name": "BurnAmountExceeded" - } - ] - } - } - ], - "events": [ - { - "name": "OwnershipTransferStarted", - "fields": [ - { - "name": "previousOwner", - "type": "publicKey", - "index": false - }, - { - "name": "newOwner", - "type": "publicKey", - "index": false - } - ] - }, - { - "name": "OwnershipTransferred", - "fields": [ - { - "name": "previousOwner", - "type": "publicKey", - "index": false - }, - { - "name": "newOwner", - "type": "publicKey", - "index": false - } - ] - }, - { - "name": "DepositForBurn", - "fields": [ - { - "name": "nonce", - "type": "u64", - "index": false - }, - { - "name": "burnToken", - "type": "publicKey", - "index": false - }, - { - "name": "amount", - "type": "u64", - "index": false - }, - { - "name": "depositor", - "type": "publicKey", - "index": false - }, - { - "name": "mintRecipient", - "type": "publicKey", - "index": false - }, - { - "name": "destinationDomain", - "type": "u32", - "index": false - }, - { - "name": "destinationTokenMessenger", - "type": "publicKey", - "index": false - }, - { - "name": "destinationCaller", - "type": "publicKey", - "index": false - } - ] - }, - { - "name": "MintAndWithdraw", - "fields": [ - { - "name": "mintRecipient", - "type": "publicKey", - "index": false - }, - { - "name": "amount", - "type": "u64", - "index": false - }, - { - "name": "mintToken", - "type": "publicKey", - "index": false - } - ] - }, - { - "name": "RemoteTokenMessengerAdded", - "fields": [ - { - "name": "domain", - "type": "u32", - "index": false - }, - { - "name": "tokenMessenger", - "type": "publicKey", - "index": false - } - ] - }, - { - "name": "RemoteTokenMessengerRemoved", - "fields": [ - { - "name": "domain", - "type": "u32", - "index": false - }, - { - "name": "tokenMessenger", - "type": "publicKey", - "index": false - } - ] - }, - { - "name": "SetTokenController", - "fields": [ - { - "name": "tokenController", - "type": "publicKey", - "index": false - } - ] - }, - { - "name": "PauserChanged", - "fields": [ - { - "name": "newAddress", - "type": "publicKey", - "index": false - } - ] - }, - { - "name": "SetBurnLimitPerMessage", - "fields": [ - { - "name": "token", - "type": "publicKey", - "index": false - }, - { - "name": "burnLimitPerMessage", - "type": "u64", - "index": false - } - ] - }, - { - "name": "LocalTokenAdded", - "fields": [ - { - "name": "custody", - "type": "publicKey", - "index": false - }, - { - "name": "mint", - "type": "publicKey", - "index": false - } - ] - }, - { - "name": "LocalTokenRemoved", - "fields": [ - { - "name": "custody", - "type": "publicKey", - "index": false - }, - { - "name": "mint", - "type": "publicKey", - "index": false - } - ] - }, - { - "name": "TokenPairLinked", - "fields": [ - { - "name": "localToken", - "type": "publicKey", - "index": false - }, - { - "name": "remoteDomain", - "type": "u32", - "index": false - }, - { - "name": "remoteToken", - "type": "publicKey", - "index": false - } - ] - }, - { - "name": "TokenPairUnlinked", - "fields": [ - { - "name": "localToken", - "type": "publicKey", - "index": false - }, - { - "name": "remoteDomain", - "type": "u32", - "index": false - }, - { - "name": "remoteToken", - "type": "publicKey", - "index": false - } - ] - }, - { - "name": "Pause", - "fields": [] - }, - { - "name": "Unpause", - "fields": [] - } - ], - "errors": [ - { - "code": 6000, - "name": "InvalidAuthority", - "msg": "Invalid authority" - }, - { - "code": 6001, - "name": "InvalidTokenMessengerState", - "msg": "Invalid token messenger state" - }, - { - "code": 6002, - "name": "InvalidTokenMessenger", - "msg": "Invalid token messenger" - }, - { - "code": 6003, - "name": "InvalidOwner", - "msg": "Invalid owner" - }, - { - "code": 6004, - "name": "MalformedMessage", - "msg": "Malformed message" - }, - { - "code": 6005, - "name": "InvalidMessageBodyVersion", - "msg": "Invalid message body version" - }, - { - "code": 6006, - "name": "InvalidAmount", - "msg": "Invalid amount" - }, - { - "code": 6007, - "name": "InvalidDestinationDomain", - "msg": "Invalid destination domain" - }, - { - "code": 6008, - "name": "InvalidDestinationCaller", - "msg": "Invalid destination caller" - }, - { - "code": 6009, - "name": "InvalidMintRecipient", - "msg": "Invalid mint recipient" - }, - { - "code": 6010, - "name": "InvalidSender", - "msg": "Invalid sender" - }, - { - "code": 6011, - "name": "InvalidTokenPair", - "msg": "Invalid token pair" - }, - { - "code": 6012, - "name": "InvalidTokenMint", - "msg": "Invalid token mint" - } - ] -}; diff --git a/solana/ts/src/index.ts b/solana/ts/src/index.ts index cc7b7cc..302b608 100644 --- a/solana/ts/src/index.ts +++ b/solana/ts/src/index.ts @@ -1,36 +1,31 @@ -export * from "./circle"; +export * from "./cctp"; export * from "./consts"; export * from "./messages"; export * from "./state"; export * from "./wormhole"; -import { BN, EventParser, Program, utils as anchorUtils } from "@coral-xyz/anchor"; +import { BN, Program } from "@coral-xyz/anchor"; import * as splToken from "@solana/spl-token"; import { - AddressLookupTableAccount, Connection, PublicKey, SYSVAR_CLOCK_PUBKEY, SYSVAR_RENT_PUBKEY, SystemProgram, TransactionInstruction, - VersionedTransactionResponse, } from "@solana/web3.js"; import { IDL, WormholeCircleIntegrationSolana, } from "../../target/types/wormhole_circle_integration_solana"; import { - CctpMessage, CctpTokenBurnMessage, MessageTransmitterProgram, TokenMessengerMinterProgram, -} from "./circle"; +} from "./cctp"; import { BPF_LOADER_UPGRADEABLE_ID } from "./consts"; import { Custodian, RegisteredEmitter } from "./state"; import { Claim, VaaAccount } from "./wormhole"; -import { PostedMessageData } from "@certusone/wormhole-sdk/lib/cjs/solana/wormhole"; -import { Deposit } from "./messages"; export const PROGRAM_IDS = [ "Wormho1eCirc1e1ntegration111111111111111111", // mainnet placeholder @@ -83,10 +78,10 @@ export type TransferTokensWithPayloadAccounts = PublishMessageAccounts & { remoteTokenMessenger: PublicKey; tokenMinter: PublicKey; localToken: PublicKey; + tokenMessengerMinterEventAuthority: PublicKey; coreBridgeProgram: PublicKey; tokenMessengerMinterProgram: PublicKey; messageTransmitterProgram: PublicKey; - tokenProgram: PublicKey; }; export type RedeemTokensWithPayloadAccounts = { @@ -98,15 +93,16 @@ export type RedeemTokensWithPayloadAccounts = { messageTransmitterAuthority: PublicKey; messageTransmitterConfig: PublicKey; usedNonces: PublicKey; + messageTransmitterEventAuthority: PublicKey; tokenMessenger: PublicKey; remoteTokenMessenger: PublicKey; tokenMinter: PublicKey; localToken: PublicKey; tokenPair: PublicKey; tokenMessengerMinterCustodyToken: PublicKey; + tokenMessengerMinterEventAuthority: PublicKey; tokenMessengerMinterProgram: PublicKey; messageTransmitterProgram: PublicKey; - tokenProgram: PublicKey; }; export type SolanaWormholeCctpTxData = { @@ -197,9 +193,12 @@ export class CircleIntegrationProgram { coreBridgeProgram, tokenMessenger: tokenMessengerMinterProgram.tokenMessengerAddress(), tokenMinter: tokenMessengerMinterProgram.tokenMinterAddress(), - tokenMessengerMinterSenderAuthority: tokenMessengerMinterProgram.senderAuthority(), + tokenMessengerMinterSenderAuthority: + tokenMessengerMinterProgram.senderAuthorityAddress(), tokenMessengerMinterProgram: tokenMessengerMinterProgram.ID, - messageTransmitterAuthority: messageTransmitterProgram.authorityAddress(), + messageTransmitterAuthority: messageTransmitterProgram.authorityAddress( + tokenMessengerMinterProgram.ID, + ), messageTransmitterConfig: messageTransmitterProgram.messageTransmitterConfigAddress(), messageTransmitterProgram: messageTransmitterProgram.ID, tokenProgram: splToken.TOKEN_PROGRAM_ID, @@ -311,9 +310,9 @@ export class CircleIntegrationProgram { remoteTokenMessenger, tokenMinter, localToken, + tokenMessengerMinterEventAuthority, messageTransmitterProgram, tokenMessengerMinterProgram, - tokenProgram, } = this.tokenMessengerMinterProgram().depositForBurnWithCallerAccounts(mint, remoteDomain); const custodian = this.custodianAddress(); @@ -333,10 +332,10 @@ export class CircleIntegrationProgram { remoteTokenMessenger, tokenMinter, localToken, + tokenMessengerMinterEventAuthority, coreBridgeProgram, tokenMessengerMinterProgram, messageTransmitterProgram, - tokenProgram, }; } @@ -346,10 +345,11 @@ export class CircleIntegrationProgram { mint: PublicKey; burnSource: PublicKey; coreMessage: PublicKey; + cctpMessage: PublicKey; }, args: TransferTokensWithPayloadArgs, ): Promise { - let { payer, burnSource, mint, coreMessage } = accounts; + let { payer, burnSource, mint, coreMessage, cctpMessage } = accounts; const { amount, targetChain, mintRecipient, wormholeMessageNonce, payload } = args; @@ -367,9 +367,9 @@ export class CircleIntegrationProgram { remoteTokenMessenger, tokenMinter, localToken, + tokenMessengerMinterEventAuthority, tokenMessengerMinterProgram, messageTransmitterProgram, - tokenProgram, } = await this.transferTokensWithPayloadAccounts(mint, targetChain); return this.program.methods @@ -388,6 +388,7 @@ export class CircleIntegrationProgram { registeredEmitter, coreBridgeConfig, coreMessage, + cctpMessage, coreEmitterSequence, coreFeeCollector, tokenMessengerMinterSenderAuthority, @@ -396,10 +397,10 @@ export class CircleIntegrationProgram { remoteTokenMessenger, tokenMinter, localToken, + tokenMessengerMinterEventAuthority, coreBridgeProgram, tokenMessengerMinterProgram, messageTransmitterProgram, - tokenProgram, }) .instruction(); } @@ -419,20 +420,21 @@ export class CircleIntegrationProgram { const { chain, address, sequence } = vaaAcct.emitterInfo(); const claim = Claim.address(this.ID, address, chain, sequence); - const messageTransmitterProgram = this.messageTransmitterProgram(); const { authority: messageTransmitterAuthority, messageTransmitterConfig, usedNonces, tokenMessengerMinterProgram, + messageTransmitterEventAuthority, + messageTransmitterProgram, tokenMessenger, remoteTokenMessenger, tokenMinter, localToken, tokenPair, custodyToken: tokenMessengerMinterCustodyToken, - tokenProgram, - } = messageTransmitterProgram.receiveMessageAccounts(mint, msg); + eventAuthority: tokenMessengerMinterEventAuthority, + } = this.messageTransmitterProgram().receiveTokenMessengerMinterMessageAccounts(mint, msg); return { custodian: this.custodianAddress(), @@ -443,15 +445,16 @@ export class CircleIntegrationProgram { messageTransmitterAuthority, messageTransmitterConfig, usedNonces, + messageTransmitterEventAuthority, tokenMessenger, remoteTokenMessenger, tokenMinter, localToken, tokenPair, tokenMessengerMinterCustodyToken, + tokenMessengerMinterEventAuthority, tokenMessengerMinterProgram, - messageTransmitterProgram: messageTransmitterProgram.ID, - tokenProgram, + messageTransmitterProgram, }; } @@ -479,15 +482,16 @@ export class CircleIntegrationProgram { messageTransmitterAuthority, messageTransmitterConfig, usedNonces, + messageTransmitterEventAuthority, tokenMessenger, remoteTokenMessenger, tokenMinter, localToken, tokenPair, tokenMessengerMinterCustodyToken, + tokenMessengerMinterEventAuthority, tokenMessengerMinterProgram, messageTransmitterProgram, - tokenProgram, } = await this.redeemTokensWithPayloadAccounts(vaa, encodedCctpMessage); return this.program.methods @@ -503,15 +507,16 @@ export class CircleIntegrationProgram { messageTransmitterAuthority, messageTransmitterConfig, usedNonces, + messageTransmitterEventAuthority, tokenMessenger, remoteTokenMessenger, tokenMinter, localToken, tokenPair, tokenMessengerMinterCustodyToken, + tokenMessengerMinterEventAuthority, tokenMessengerMinterProgram, messageTransmitterProgram, - tokenProgram, }) .instruction(); } @@ -589,108 +594,6 @@ export class CircleIntegrationProgram { } } } - - async parseTransactionReceipt( - txReceipt: VersionedTransactionResponse, - addressLookupTableAccounts?: AddressLookupTableAccount[], - ): Promise { - if (txReceipt.meta === null) { - throw new Error("meta not found in tx"); - } - - const txMeta = txReceipt.meta; - if (txMeta.logMessages === undefined || txMeta.logMessages === null) { - throw new Error("logMessages not found in tx"); - } - - const txLogMessages = txMeta.logMessages; - - // Decode message field from MessageSent event. - const messageTransmitterProgram = this.messageTransmitterProgram(); - const parser = new EventParser( - messageTransmitterProgram.ID, - messageTransmitterProgram.program.coder, - ); - - // Map these puppies based on nonce. - const encodedCctpMessages = new Map(); - for (const parsed of parser.parseLogs(txLogMessages, false)) { - const msg = parsed.data.message as Buffer; - encodedCctpMessages.set(CctpMessage.decode(msg).cctp.nonce, msg); - } - - const fetchedKeys = txReceipt.transaction.message.getAccountKeys({ - addressLookupTableAccounts, - }); - const accountKeys = fetchedKeys.staticAccountKeys; - if (fetchedKeys.accountKeysFromLookups !== undefined) { - accountKeys.push( - ...fetchedKeys.accountKeysFromLookups.writable, - ...fetchedKeys.accountKeysFromLookups.readonly, - ); - } - - const coreBridgeProgramIndex = accountKeys.findIndex((key) => - key.equals(this.coreBridgeProgramId()), - ); - const tokenMessengerMinterProgramIndex = accountKeys.findIndex((key) => - key.equals(this.tokenMessengerMinterProgram().ID), - ); - const messageTransmitterProgramIndex = accountKeys.findIndex((key) => - key.equals(this.messageTransmitterProgram().ID), - ); - if ( - coreBridgeProgramIndex == -1 && - tokenMessengerMinterProgramIndex == -1 && - messageTransmitterProgramIndex == -1 - ) { - return []; - } - - if (txMeta.innerInstructions === undefined || txMeta.innerInstructions === null) { - throw new Error("innerInstructions not found in tx"); - } - const txInnerInstructions = txMeta.innerInstructions; - - const custodian = this.custodianAddress(); - const postedMessageKeys: PublicKey[] = []; - for (const innerIx of txInnerInstructions) { - // Traverse instructions to find messages posted by the Wormhole Circle Integration program. - for (const ixInfo of innerIx.instructions) { - if ( - ixInfo.programIdIndex == coreBridgeProgramIndex && - anchorUtils.bytes.bs58.decode(ixInfo.data)[0] == 1 && - accountKeys[ixInfo.accounts[2]].equals(custodian) - ) { - postedMessageKeys.push(accountKeys[ixInfo.accounts[1]]); - } - } - } - - return this.program.provider.connection - .getMultipleAccountsInfo(postedMessageKeys) - .then((infos) => - infos.map((info, i) => { - if (info === null) { - throw new Error("message info is null"); - } - const payload = info.data.subarray(95); - const nonce = Deposit.decode(payload).deposit.cctpNonce; - const encodedCctpMessage = encodedCctpMessages.get(nonce); - if (encodedCctpMessage === undefined) { - throw new Error( - `cannot find CCTP message with nonce ${nonce} in tx receipt`, - ); - } - - return { - coreMessageAccount: postedMessageKeys[i], - coreMessageSequence: info.data.readBigUInt64LE(49), - encodedCctpMessage, - }; - }), - ); - } } export function mainnet(): ProgramId { diff --git a/solana/ts/tests/01__circleIntegration.ts b/solana/ts/tests/01__circleIntegration.ts index 085629a..3e8082f 100644 --- a/solana/ts/tests/01__circleIntegration.ts +++ b/solana/ts/tests/01__circleIntegration.ts @@ -4,14 +4,7 @@ import { getPostedMessage } from "@certusone/wormhole-sdk/lib/cjs/solana/wormhol import * as anchor from "@coral-xyz/anchor"; import * as splToken from "@solana/spl-token"; import { expect } from "chai"; -import { - CctpTokenBurnMessage, - Deposit, - DepositHeader, - CircleIntegrationProgram, - VaaAccount, - Claim, -} from "../src"; +import { CctpTokenBurnMessage, CircleIntegrationProgram, Deposit, DepositHeader } from "../src"; import { CircleAttester, ETHEREUM_USDC_ADDRESS, @@ -269,13 +262,15 @@ describe("Circle Integration -- Localnet", () => { const wormholeMessageNonce = 420; const inputPayload = Buffer.from("All your base are belong to us."); - const message = anchor.web3.Keypair.generate(); + const coreMessage = anchor.web3.Keypair.generate(); + const cctpMessage = anchor.web3.Keypair.generate(); const ix = await circleIntegration.transferTokensWithPayloadIx( { payer: payer.publicKey, mint: USDC_MINT_ADDRESS, burnSource: payerToken, - coreMessage: message.publicKey, + coreMessage: coreMessage.publicKey, + cctpMessage: cctpMessage.publicKey, }, { amount: 0n, @@ -301,7 +296,7 @@ describe("Circle Integration -- Localnet", () => { await expectIxErr( connection, [approveIx, ix], - [payer, message], + [payer, coreMessage, cctpMessage], "Error Code: InvalidAmount", { addressLookupTableAccounts: [lookupTableAccount], @@ -320,13 +315,15 @@ describe("Circle Integration -- Localnet", () => { const wormholeMessageNonce = 420; const inputPayload = Buffer.from("All your base are belong to us."); - const message = anchor.web3.Keypair.generate(); + const coreMessage = anchor.web3.Keypair.generate(); + const cctpMessage = anchor.web3.Keypair.generate(); const ix = await circleIntegration.transferTokensWithPayloadIx( { payer: payer.publicKey, mint: USDC_MINT_ADDRESS, burnSource: payerToken, - coreMessage: message.publicKey, + coreMessage: coreMessage.publicKey, + cctpMessage: cctpMessage.publicKey, }, { amount, @@ -352,7 +349,7 @@ describe("Circle Integration -- Localnet", () => { await expectIxErr( connection, [approveIx, ix], - [payer, message], + [payer, coreMessage, cctpMessage], "Error Code: InvalidMintRecipient", { addressLookupTableAccounts: [lookupTableAccount], @@ -372,13 +369,15 @@ describe("Circle Integration -- Localnet", () => { const wormholeMessageNonce = 420; const inputPayload = Buffer.from("All your base are belong to us."); - const message = anchor.web3.Keypair.generate(); + const coreMessage = anchor.web3.Keypair.generate(); + const cctpMessage = anchor.web3.Keypair.generate(); const ix = await circleIntegration.transferTokensWithPayloadIx( { payer: payer.publicKey, mint: USDC_MINT_ADDRESS, burnSource: payerToken, - coreMessage: message.publicKey, + coreMessage: coreMessage.publicKey, + cctpMessage: cctpMessage.publicKey, }, { amount, @@ -394,9 +393,15 @@ describe("Circle Integration -- Localnet", () => { .then((resp) => resp.value); // NOTE: This is an SPL Token program error. - await expectIxErr(connection, [ix], [payer, message], "Error: owner does not match", { - addressLookupTableAccounts: [lookupTableAccount], - }); + await expectIxErr( + connection, + [ix], + [payer, coreMessage, cctpMessage], + "Error: owner does not match", + { + addressLookupTableAccounts: [lookupTableAccount], + }, + ); }); it("Invoke `transfer_tokens_with_payload`", async () => { @@ -411,13 +416,15 @@ describe("Circle Integration -- Localnet", () => { const wormholeMessageNonce = 420; const inputPayload = Buffer.from("All your base are belong to us."); - const message = anchor.web3.Keypair.generate(); + const coreMessage = anchor.web3.Keypair.generate(); + const cctpMessage = anchor.web3.Keypair.generate(); const ix = await circleIntegration.transferTokensWithPayloadIx( { payer: payer.publicKey, mint: USDC_MINT_ADDRESS, burnSource: payerToken, - coreMessage: message.publicKey, + coreMessage: coreMessage.publicKey, + cctpMessage: cctpMessage.publicKey, }, { amount, @@ -445,7 +452,7 @@ describe("Circle Integration -- Localnet", () => { const txReceipt = await expectIxOkDetails( connection, [approveIx, ix], - [payer, message], + [payer, coreMessage, cctpMessage], { addressLookupTableAccounts: [lookupTableAccount], }, @@ -458,19 +465,15 @@ describe("Circle Integration -- Localnet", () => { expect(balanceAfter + amount).to.equal(balanceBefore); // Check messages. - const posted = await getPostedMessage(connection, message.publicKey); + const posted = await getPostedMessage(connection, coreMessage.publicKey); const { deposit, payload } = Deposit.decode(posted.message.payload); expect(payload).to.eql(inputPayload); - const parsedTxData = await circleIntegration.parseTransactionReceipt(txReceipt, [ - lookupTableAccount, - ]); - expect(parsedTxData).has.length(1); + const { message: encodedCctpMessage } = await circleIntegration + .messageTransmitterProgram() + .fetchMessageSent(cctpMessage.publicKey); - const txData = parsedTxData[0]; - expect(txData.coreMessageAccount).is.eql(message.publicKey); - - const burnMessage = CctpTokenBurnMessage.decode(txData.encodedCctpMessage); + const burnMessage = CctpTokenBurnMessage.decode(encodedCctpMessage); expect(burnMessage.sender).to.eql( Array.from(circleIntegration.custodianAddress().toBuffer()), ); @@ -1150,12 +1153,18 @@ describe("Circle Integration -- Localnet", () => { { encodedCctpMessage, cctpAttestation }, ); + const lookupTableAccount = await connection + .getAddressLookupTable(lookupTableAddress) + .then((resp) => resp.value); // NOTE: This is a CCTP Message Transmitter program error. await expectIxErr( connection, [ix], [payer, mintRecipientAuthority], "Error Code: NonceAlreadyUsed", + { + addressLookupTableAccounts: [lookupTableAccount], + }, ); }); }); diff --git a/solana/ts/tests/accounts/token_messenger_minter/usdc_local_token.json b/solana/ts/tests/accounts/token_messenger_minter/usdc_local_token.json index 850c604..a2082ab 100644 --- a/solana/ts/tests/accounts/token_messenger_minter/usdc_local_token.json +++ b/solana/ts/tests/accounts/token_messenger_minter/usdc_local_token.json @@ -1,14 +1,14 @@ { "pubkey": "4xt9P42CcMHXAgvemTnzineHp6owfGUcrg1xD9V7mdk1", "account": { - "lamports": 1684320, + "lamports": 1795680, "data": [ - "n4M6qsFUgLaJOQ9DWBY8Pr5GkgAm5md6yYsX7D3P0LYdBflhsqtwJDtELLORIVfxOpM9ATQoLQMrX/7NAaLb8bd5BgjfAC6nABCl1OgAAAAyAAAAAAAAAIYAAAAAAAAAjaVmAQAAAAAhU6gjdg8AAP//", + "n4M6qsFUgLaJOQ9DWBY8Pr5GkgAm5md6yYsX7D3P0LYdBflhsqtwJDtELLORIVfxOpM9ATQoLQMrX/7NAaLb8bd5BgjfAC6nABCl1OgAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAD//w==", "base64" ], "owner": "CCTPiPYPc6AsJuwueEnWgSgucamXDZwBd53dQ11YiKX3", "executable": false, "rentEpoch": 18446744073709551615, - "space": 114 + "space": 130 } -} \ No newline at end of file +}