raydium amm
1.0.0
环境 | 程序 |
---|---|
主网 | 675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8 |
Devnet | HWy1jotHpo6UqeQxx49dpYYdQB8wj9Qk9MdxwjLvDHB8 |
solana-keygen new
,以在默认位置创建按键。 克隆存储库并输入源代码目录。
git clone https://github.com/raydium-io/raydium-amm
cd raydium-amm/program
cargo build-bpf
cargo build-bpf --features devnet
在构建之前,您必须在localnet功能上以您的“ config_feature”中的“ config_feature”更新这些PubKey。
cargo build-bpf --features localnet
构建后,智能合约文件全部位于目标目录中。
solana deploy
注意,检查您的配置并确认要部署的环境。
如果您想初始化一个新的AMM池,则必须拥有与任何AMM池无关的开放式市场。您可以参考ListMarket创建新市场。
在您的货物中添加依赖项
[ dependencies ]
[ features ]
# default is mainnet
devnet = [
"amm-cli/devnet" ,
"common/devnet" ,
]
[ dependencies ]
amm-cli = { git = "https://github.com/raydium-io/raydium-library" }
common = { git = "https://github.com/raydium-io/raydium-library" }
spl-token = { version = "4.0.0" , features = [ "no-entrypoint" ] }
spl-associated-token-account = { version = "2.2.0" , features = [
"no-entrypoint" ,
] }
spl-token- 2022 = { version = "0.9.0" , features = [ "no-entrypoint" ] }
solana-client = "<1.17.0"
solana-sdk = "<1.17.0"
anyhow = "1.0.53"
clap = { version = "4.1.8" , features = [ "derive" ] }
#! [ allow ( dead_code ) ]
use anyhow :: { Ok , Result } ;
use clap :: Parser ;
use solana_client :: rpc_client :: RpcClient ;
use solana_sdk :: { commitment_config :: CommitmentConfig , signer :: Signer } ;
use std :: sync :: Arc ;
use {
amm_cli :: { self , AmmCommands } ,
common :: { common_types , common_utils , rpc } ,
} ;
// default config
let mut config = common_types :: CommonConfig :: default ( ) ;
// Replace the default configuration parameters you need
config . set_cluster ( "http" , "ws" ) ;
config . set_wallet ( "your wallet path" ) ;
config . set_amm_program ( "675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8" ) ;
config . set_openbook_program ( "srmqPvymJeFKQ4zGQed1GFppgkRHL9kaELCbyksJtPX" ) ;
config . set_slippage ( 50 ) ;
let payer = common_utils :: read_keypair_file ( & config . wallet ( ) ) ? ;
let fee_payer = payer . pubkey ( ) ;
let mut signing_keypairs : Vec < Arc < dyn Signer > > = Vec :: new ( ) ;
let payer : Arc < dyn Signer > = Arc :: new ( payer ) ;
if !signing_keypairs . contains ( & payer ) {
signing_keypairs . push ( payer ) ;
}
// build initialize pool instruction
let subcmd = AmmCommands :: CreatePool {
market : Pubkey :: from_str ( "The amm associated with openbook market" ) . unwrap ( ) ,
coin_mint : Pubkey :: from_str ( "The openbook market's coin_mint" ) . unwrap ( ) ,
pc_mint : Pubkey :: from_str ( "The openbook market's pc_mint" ) . unwrap ( ) ,
user_token_coin : Pubkey :: from_str ( "User's token coin" ) . unwrap ( ) ,
user_token_pc : Pubkey :: from_str ( "User's token pc" ) . unwrap ( ) ,
init_coin_amount : 100000u64 ,
init_pc_amount : 100000u64 ,
open_time : 0 ,
} ;
let instruction = amm_cli :: process_amm_commands ( subcmd , & config ) . unwrap ( ) ;
// build deposit instruction
let subcmd = AmmCommands :: Deposit {
pool_id : Pubkey :: from_str ( "The specified pool of the assets deposite to" ) . unwrap ( ) ,
deposit_token_coin : Some ( Pubkey :: from_str ( "The specified token coin of the user deposit" ) . unwrap ( ) ) ,
deposit_token_pc : Some ( Pubkey :: from_str ( "The specified token pc of the user deposit" ) . unwrap ( ) ) ,
recipient_token_lp : Some ( Pubkey :: from_str ( "The specified lp token of the user will receive" ) . unwrap ( ) ) ,
amount_specified : 100000u64 ,
another_min_limit : false ,
base_coin : false ,
} ;
let instruction = amm_cli :: process_amm_commands ( subcmd , & config ) . unwrap ( ) ;
如果存款_Token_coin,poade_token_pc或coctient_token_lp的参数无,则默认情况下将是ATA令牌。
// build withdraw instruction
let subcmd = AmmCommands :: Withdraw {
pool_id : Pubkey :: from_str ( "The specified pool of the assets withdraw from" ) . unwrap ( ) ,
withdraw_token_lp : Some ( Pubkey :: from_str ( "The specified lp token of the user withdraw" ) . unwrap ( ) ) ,
recipient_token_coin : Some ( Pubkey :: from_str ( "The specified token coin of the user will receive" ) . unwrap ( ) ) ,
recipient_token_pc : Some ( Pubkey :: from_str ( "The specified token pc of the user will receive" ) . unwrap ( ) ) ,
input_lp_amount : 100000u64 ,
slippage_limit : false ,
} ;
let instruction = amm_cli :: process_amm_commands ( subcmd , & config ) . unwrap ( ) ;
如果fort_token_lp的参数,conterient_token_coin或coctient_token_pc无,则默认情况下将是ATA令牌。
// build swap instruction
let subcmd = AmmCommands :: Swap {
pool_id : Pubkey :: from_str ( " The specified pool of trading" ) . unwrap ( ) ,
user_input_token : Pubkey :: from_str ( "The token of user want to swap from" ) . unwrap ( ) ,
user_output_token : Some ( Pubkey :: from_str ( "The token of user want to swap to" ) . unwrap ( ) ) ,
amount_specified : 100000u64 ,
base_out : false ,
} ;
let instruction = amm_cli :: process_amm_commands ( subcmd , & config ) . unwrap ( ) ;
如果user_output_token的参数无,则默认情况下将是ata令牌。
有关更多信息,您可以看到Repo Raydium-library