solana常用命令行
1- 生成本地keypair
keypair
即私钥,是一个数组。
solana-keygen new
创建新的账户并将私钥文件保存到指定文件
solana-keygen new -o <filename.json>
2- 在本地开发环境中调试
a- 启动solana本地节点
运行:
solana-test-validator --reset --deactivate-feature EenyoWx9UMXYKpR8mW5Jmfmy2fRjzUtM7NduYMY8bx33
solana服务在8899端口启动。
以上参数--reset
是从新启动,即从0block开始。
另外,使用--deactivate-feature EenyoWx9UMXYKpR8mW5Jmfmy2fRjzUtM7NduYMY8bx33
很重要,这是Solana主网一个重要的升级,对账户进行了一些限制,见 https://solana.stackexchange.com/questions/15555/fails-on-devnet-works-on-localnet-access-violation-in-stack-frame-5-at-address
如果不加这个的话,在本地开发并测试通过的程序,很可能无法在devnet和mainet上运行。
b- 在anchor test之后加 –skip-local-validator
anchor自己自带了测试网,也就是运行anchor test
时,会根据Anchor.yaml
中的配置启动一个测试节点,如果自己通过solana-test-validator
已经启动了一个测试节点的话,需要用--skip-local-validator
跳过默认测试节点,即使用:anchor test --skip-local-validator
。
c- 查看交易Hash
使用
solana confirm -v <txHash>
查看链上交易的log,包括程序中的msg!()
输出信息。
也可以通过solana浏览器查询txHash,推荐使用solana.fm
,它支持本地,mainet和devnet网,而且显示的信息很清晰。
3- 查询本地主账号
solana address
5- 查询主账户余额
solana balance
6- 查看部署的程序的id,更新到rust程序中
anchor keys list
7- 切换网络
solana config --url localhost|devnet|mainnet
同时,要在Anchor.toml
文件中改
[provider]
cluster = "devnet"
wallet = "~/.config/solana/id.json"
8- 部署程序
除了使用anchor deploy
外,还可以使用solana program
部署程序,在执行anchor build
后,会在./target/deploy/
目录下出现编译后文件xxxx.so
,使用以下命令部署到网络上:
solana program deploy --buffer ./keystore/id.json ./target/deploy/xxxx.so
9- 查看已部署的合约
solana program show <ProgramId>
10- anchor test的参数
anchor test --skip-deploy // 测试时不部署,用于在devnet上测试已经完成的合约
anchor test --skip-build // 不build,用于只测试客户端
anchor test --skip-local-validator // 测试时不启动默认的test网络,而是运行在solana-test-validator网络上
11- 读取区块信息
solana block
solana block-height
solana block-time
solana epoch
solana epoch-info
12- 查看账户信息
solana account <AccountId>
如果帐号已经初始化,则会显示类似如下信息:
Public Key: DXUTQ9JGFntUxajJnq9f4rRxqFGiE73S7ejob1nEXToK
Balance: 2.09579799 SOL
Owner: TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA
Executable: false
Rent Epoch: 18446744073709551615
Length: 165 (0xa5) bytes
0000: 06 9b 88 57 fe ab 81 84 fb 68 7f 63 46 18 c0 35 ...W.....h.cF..5
0010: da c4 39 dc 1a eb 3b 55 98 a0 f0 00 00 00 00 01 ..9...;U........
0020: ea 98 da 06 07 5b 99 96 7b 4a 26 db 19 a2 c1 05 .....[..{J&.....
0030: d4 58 ac 26 56 d7 ca 83 54 55 b1 5e a8 1d b4 22 .X.&V...TU.^..."
0040: f6 38 cc 7c 00 00 00 00 00 00 00 00 00 00 00 00 .8.|............
0050: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0060: 00 00 00 00 00 00 00 00 00 00 00 00 01 01 00 00 ................
0070: 00 f0 1d 1f 00 00 00 00 00 00 00 00 00 00 00 00 ................
0080: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0090: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00a0: 00 00 00 00 00 .....
如果帐号尚未初始化,会显示:
Error: AccountNotFound: pubkey=DXUTQ9JGFntUxajJnq9f4rRxqFGiE73S7ejob1nEXToJ
这条命令对调试程序很重要,因为AccountNotFound
是在调试程序时最常见的错误,因前端没有把正确的账户传给程序所导致。
13- 创建vanity账户
solana-keygen grind --starts-with <开头子母:生成的账户数>
执行后,会在当前目录下生成keypair文件。