Jacky Gu

Solana开发笔记: solana常用命令行

01 Jan 2025 Share to

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文件。