Skip to main content
The wallet and minter programs have a set of accounts and instructions that you can use to build with Gateway on Solana. The following sections describe the main Program Derived Account (PDA) structures and instructions for the Gateway programs.

Mainnet program addresses

Devnet program addresses

Account structures

The following section describes the main Program Derived Account (PDA) structures for the Gateway programs. You can find the full IDLs for the Gateway Solana programs at the following links:

GatewayDeposit

A Gateway Wallet data account used to track the balance of a particular depositor and token.
ParameterTypeDescription
bumpu8The bump seed for the GatewayDeposit PDA.
depositorPubkeyThe depositor of the GatewayDeposit.
token_mintPubkeyThe mint of the token being deposited.
available_amountu64The available amount of the token.
withdrawing_amountu64The amount of the token pending withdrawal.
withdrawal_blocku64The block number at which the withdrawal was initiated.

GatewayDelegate

A Gateway Wallet data account used to store delegates.
ParameterTypeDescription
bumpu8The bump seed for the GatewayDelegate PDA.
statusDelegateStatusThe status of the delegate.
closeable_at_blocku64The block number at which the delegate can be closed.
tokenPubkeyThe mint of the token being delegated.
depositorPubkeyThe depositor of the delegate.
delegatePubkeyThe delegate address.

Denylist

A Gateway Wallet data account used to store a single denylisted account. The address being denylisted is implied in the PDA address, and the account itself stores no additional data.

UsedTransferSpecHash

A Gateway Wallet data account used to store whether a TransferSpecHash has been used, to prevent replay. The used TransferSpecHash is implied in the PDA address, and the account itself stores no additional data.

GatewayMinter

Stores general configuration for the GatewayMinter program.
ParameterTypeDescription
bumpu8The bump seed for the GatewayMinter PDA.
ownerPubkeyThe owner of the GatewayMinter.
pending_ownerPubkeyThe pending owner of the GatewayMinter.
pauserPubkeyThe pauser of the GatewayMinter.
token_controllerPubkeyThe token controller of the GatewayMinter.
pausedboolWhether the GatewayMinter is paused.
enabled_attestersVec<Pubkey>The enabled attesters of the GatewayMinter.
local_domainu32The local domain of the GatewayMinter.
versionu32The version of the GatewayMinter.
supported_tokensVec<Pubkey>The supported tokens of the GatewayMinter.
custody_token_account_bumpsVec<u8>The custody token account bumps of the GatewayMinter.

GatewayWallet

Stores general configuration for the GatewayWallet program.
ParameterTypeDescription
bumpu8The bump seed for the GatewayWallet PDA.
ownerPubkeyThe owner of the GatewayWallet.
pending_ownerPubkeyThe pending owner of the GatewayWallet.
pauserPubkeyThe pauser of the GatewayWallet.
denylisterPubkeyThe denylister of the GatewayWallet.
token_controllerPubkeyThe token controller of the GatewayWallet.
fee_recipientPubkeyThe fee recipient of the GatewayWallet.
local_domainu32The local domain of the GatewayWallet.
versionu32The version of the GatewayWallet.
withdrawal_delayu64The withdrawal delay of the GatewayWallet.
pausedboolWhether the GatewayWallet is paused.
supported_tokensVec<Pubkey>The supported tokens of the GatewayWallet.
custody_token_account_bumpsVec<u8>The custody token account bumps of the GatewayWallet.
burn_signersVec<Pubkey>The burn signers of the GatewayWallet.

Instructions

The following section describes the main instructions for the Gateway programs. Instruction data uses Anchor-style Borsh encoding.

gatewayMint

Mints tokens to a recipient on Solana based on a signed attestation produced by the Gateway API. The instruction supports two parameter encodings:
  • Full attestation mode: Pass the full ReducedMintAttestation message and its ECDSA signature as returned by the Transfer API.
  • Parameter mode: Pass only the minimal fields that cannot be inferred onchain; the program reconstructs the attestation and verifies the ECDSA signature against it.

Account list

The Gateway Mint account list has five fixed accounts and three additional accounts for each transfer in the attestation.
ParameterTypeDescription
payerSignerThe payer of the transaction.
destination_callerSignerThe destination caller of the transaction.
gateway_minterAccount<GatewayMinter>The GatewayMinter account.
system_programProgram<System>The System program.
token_programProgram<Token>The Token program.
Three additional ordered accounts are required in the remaining accounts list for each transfer in the attestation:
ParameterTypeDescription
custody_token_accountAccount<TokenAccount>The custody token account of the token used in the transfer
destination_recipientAccount<TokenAccount>The destination recipient token account of the transfer
transfer_spec_hash_accountAccount<UsedTransferSpecHash>The transfer spec hash account

Full attestation mode (gateway_mint)

ParameterTypeDescription
attestationVec<u8>The attestation to mint.
signatureVec<u8>The signature of the attestation.

Parameter mode (gateway_mint_with_params)

Saves transaction space by assuming certain fields or reading them from the account list.
ParameterTypeDescription
is_default_destination_callerboolWhether the destination caller is the default.
max_block_heightu64The maximum block height.
elementsVec<MintAttestationParams>The attestation parameters.
signatureVec<u8>The signature of the attestation.
The MintAttestationParams type is defined as follows:
ParameterTypeDescription
valueu64The amount to mint.
transfer_spec_hash[u8; 32]The transfer spec hash.
hook_dataVec<u8>The hook data.

deposit

Deposits tokens into the Gateway Wallet system.
  • Deposit mode: Deposits tokens on behalf of the signer. The tokens are transferred from the signer’s token account to the Gateway Wallet custody and tracked in the signer’s balance.
  • Deposit For mode: Deposits tokens on behalf of another depositor. The tokens are transferred from the signer’s token account to the Gateway Wallet custody and tracked in the specified depositor’s balance.

Account list

ParameterTypeDescription
payerSignerThe payer of the transaction.
ownerSignerThe owner of the transaction.
gateway_walletAccount<GatewayWallet>The GatewayWallet account.
owner_token_accountAccount<TokenAccount>The owner’s token account.
custody_token_accountAccount<TokenAccount>The custody token account.
depositAccount<GatewayDeposit>The GatewayDeposit account.
sender_denylistAccount<Denylist>The sender’s denylist account.
depositor_denylistAccount<Denylist>The depositor’s denylist account.
system_programProgram<System>The System program.
token_programProgram<Token>The Token program.

Instruction data

deposit
ParameterTypeDescription
amountu64Amount to deposit
deposit_for
ParameterTypeDescription
amountu64Amount to deposit
depositorPubkeyAddress to credit with the deposit

initiateWithdrawal

Starts the withdrawal process. After a program-defined withdrawal_delay (in slots), withdraw may be called to complete the withdrawal. Repeated calls add to the amount and reset the delay timer.

Account list

ParameterTypeDescription
depositorSignerThe depositor of the transaction.
gateway_walletAccount<GatewayWallet>The GatewayWallet account.
depositAccount<GatewayDeposit>The GatewayDeposit account.

Instruction data

ParameterTypeDescription
amountu64Amount to withdraw

withdraw

Completes a withdrawal that was initiated at least withdrawal_delay earlier. The full pending amount is withdrawn to the depositor’s token account.

Account list

ParameterTypeDescription
depositorSignerThe depositor of the transaction.
gateway_walletAccount<GatewayWallet>The GatewayWallet account.
custody_token_accountAccount<TokenAccount>The custody token account.
depositor_token_accountAccount<TokenAccount>The depositor’s token account.
depositAccount<GatewayDeposit>The GatewayDeposit account.
token_programProgram<Token>The Token program.

addDelegate

Allows a delegate to transfer the caller’s balance for the specified token.

Account list

ParameterTypeDescription
payerSignerThe payer of the transaction.
depositorSignerThe depositor of the transaction.
gateway_walletAccount<GatewayWallet>The GatewayWallet account.
token_mintAccount<Mint>The token mint.
delegate_accountAccount<GatewayDelegate>The delegate account.
depositor_denylistAccount<Denylist>The depositor’s denylist account.
delegate_denylistAccount<Denylist>The delegate’s denylist account.
system_programProgram<System>The System program.

Instruction data

ParameterTypeDescription
delegatePubKeyThe delegate of the transaction.

removeDelegate

Revokes a previously granted delegate for the caller’s balance of the specified token.
Revocation is respected by the Gateway API, which refuses BurnIntents signed by a revoked delegate. However, revocation does not prevent a BurnIntent signed by the delegate from being executed onchain. This design prevents malicious users from blocking a burn transaction by pre-emptively revoking a signer.

Account list

ParameterTypeDescription
depositorSignerThe depositor of the transaction.
gateway_walletAccount<GatewayWallet>The GatewayWallet account.
token_mintAccount<Mint>The token mint.
delegate_accountAccount<GatewayDelegate>The delegate account.
depositor_denylistAccount<Denylist>The depositor’s denylist account.

Instruction data

ParameterTypeDescription
delegatePubKeyThe delegate of the transaction.