在本地Localdev环境构建Token开发环境
在solana的localnet上创建和主网或devnet相同的开发环境,会极大提高开发效率。但是,localnet上只有一些系统级的程序或账户,所以对于那些其他应用创建的程序或账户,就需要在启动solana-test-validator
时指定。
下面以开发一个与raydium
相关的应用为例,看如何把需要的帐号或程序导入到本地开发环境中。
第一步:下载主网或devnet上的程序到本地
mkdir node
cd node
solana program dump -u devnet TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA token_program.so
solana program dump -u devnet TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb token_extensions.so
solana program dump -u devnet metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s token_metadata.so
solana program dump -u devnet ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL token_ata.so
solana program dump -u devnet opnb2LAfJYbRMAHHvqjCwQxanZn7ReEHp1k81EohpZb openbook_v2.so
solana program dump -u mainnet-beta CPMMoo8L3F4NbTegBCKVNunggL7H1ZpdTHKxQB5qKP1C raydium_cpmm.so
solana program dump -u devnet devi51mZmdwUJGU9hjN27vEz64Gps7uUefqxg27EAtH raydium_clmm_devnet.so
solana program dump -u devnet CPMDWBwJDtYax9qW7AyRuVC19Cc4L4Vcy4n2BHAbHkCW raydium_cpmm_devnet.so
solana program dump -u devnet DDg4VmQaJV9ogWce7LpcjBA9bv22wRp5uaTPa5pGjijF stable_swap.so
solana program dump -u devnet BVChZ3XFEwTMUk1o9i3HAf91H6mFxSwa5X2wFAWhYPhU amm_route.so
solana program dump -u devnet HWy1jotHpo6UqeQxx49dpYYdQB8wj9Qk9MdxwjLvDHB8 openbook_amm.so
第二步:启动solana-test-validator
启动solana-test-validator
,需要添加上面下载的程序,除此之外,还需做两件事:
- 克隆
cpmm
运行时需要的帐号,一个是config帐号,一个是费用帐号帐号,分别是9zSzfkYy6awexsHvmggeH36pfVUdDGyCcwmjT3AQPBj6
,G11FKBRaAkHAKuLCgLM6K6NUc9rTjPAznRCjZifrTQe2
, - 为了确保和devnet/mainnet环境一样,即限制账户最大存储4k,在本地开发时,运行验证器时加入
--deactivate-feature EenyoWx9UMXYKpR8mW5Jmfmy2fRjzUtM7NduYMY8bx33
,否则会发生开发环境OK,devnet/mainet上不行的情况。参见:https://solana.stackexchange.com/questions/15555/fails-on-devnet-works-on-localnet-access-violation-in-stack-frame-5-at-address
因此,完整的启动方法是运行以下命令:
solana-test-validator --reset \
--url devnet \
--clone 9zSzfkYy6awexsHvmggeH36pfVUdDGyCcwmjT3AQPBj6 \
--clone G11FKBRaAkHAKuLCgLM6K6NUc9rTjPAznRCjZifrTQe2 \
--bpf-program CPMMoo8L3F4NbTegBCKVNunggL7H1ZpdTHKxQB5qKP1C raydium_cpmm.so \
--bpf-program CPMDWBwJDtYax9qW7AyRuVC19Cc4L4Vcy4n2BHAbHkCW raydium_cpmm_devnet.so \
--bpf-program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA token_program.so \
--bpf-program TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb token_extensions.so \
--bpf-program metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s token_metadata.so \
--bpf-program ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL token_ata.so \
--bpf-program opnb2LAfJYbRMAHHvqjCwQxanZn7ReEHp1k81EohpZb openbook_v2.so \
--bpf-program devi51mZmdwUJGU9hjN27vEz64Gps7uUefqxg27EAtH raydium_clmm.so \
--bpf-program CPMDWBwJDtYax9qW7AyRuVC19Cc4L4Vcy4n2BHAbHkCW raydium_amm.so \
--bpf-program DDg4VmQaJV9ogWce7LpcjBA9bv22wRp5uaTPa5pGjijF raydium_stable_swap.so \
--bpf-program BVChZ3XFEwTMUk1o9i3HAf91H6mFxSwa5X2wFAWhYPhU raydium_amm_route.so \
--bpf-program HWy1jotHpo6UqeQxx49dpYYdQB8wj9Qk9MdxwjLvDHB8 openbook_amm.so \
--deactivate-feature EenyoWx9UMXYKpR8mW5Jmfmy2fRjzUtM7NduYMY8bx33