Lingkungan | PROGRAM |
---|---|
Mainnet | 675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8 |
Devnet | HWy1jotHpo6UqeQxx49dpYYdQB8wj9Qk9MdxwjLvDHB8 |
solana-keygen new
untuk membuat tombol di lokasi default. Kloning repositori dan masukkan direktori kode sumber.
git clone https://github.com/raydium-io/raydium-amm
cd raydium-amm/program
cargo build-bpf
cargo build-bpf --features devnet
Anda harus memperbarui pubkeys ini di "config_feature" sebagai milik Anda di atas fitur LocalNet sebelum dibangun;
cargo build-bpf --features localnet
Setelah membangun, file kontrak pintar semuanya terletak di direktori target.
solana deploy
Perhatian, periksa konfigurasi Anda dan konfirmasikan lingkungan yang ingin Anda gunakan.
Anda harus memiliki pasar buku terbuka yang tidak terkait dengan kumpulan AMM apa pun jika Anda ingin menginisialisasi kumpulan AMM baru. Dan Anda dapat merujuk ke ListMarket untuk membuat pasar baru.
Tambahkan dependensi di kargo Anda.toml
[ 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 ( ) ;
Jika parameter deposit_token_coin, deposit_token_pc atau penerima_token_lp tidak ada, itu akan menjadi token ATA secara default.
// 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 ( ) ;
Jika parameter penarikan_token_lp, penerima_token_coin atau penerima_token_pc tidak ada, itu akan menjadi token ATA secara default.
// 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 ( ) ;
Jika parameter user_output_token tidak ada, itu akan menjadi token ATA secara default.
Untuk informasi lebih lanjut, Anda dapat melihat repo Raydium-Library