Solana 开发⼊门【源码】
在这个教程⾥,我们将学习如何开发Solana链上程序,内容包括创建Solana账号、从测试链获取免费的SOL、编译部署与测试流程,并开
发⼀个简单的Solana链上程序。在教程结束部分提供了完整源码的下载链接。
⽤⾃⼰熟悉的语⾔学习 以太坊开发 : | | | | | |
在深⼊学习本教程之前,请确保已按照中的步骤设置了环境并安装了⼯具套件。
可以访问这⾥查看。
1、连接到Solana 开发⽹
2、准备Solana 帐户
每个链上程序实际上都是⼀个Account,但它被标记为“Executable: true”,这意味着它是⼀个可执⾏⽂件。为了存储这个⽂件,我们需要创建另⼀个可以⽀付费⽤的 Solana 账户:输⼊密码并确认后,新账号就保存在 /home/ubuntu/.config/solana/id.json 中,作为我们的默认密钥。可以运⾏以下命令检查公钥:ubuntu@VM-0-12-ubuntu:~$ solana config set --url devnet.solana Config File: /home/ubuntu/.config/solana/l RPC URL: devnet.solana WebSocket URL: wss://devnet.solana/ (computed)1
2
3
4solana-keygen new
1ubuntu@VM-0-12-ubuntu:~$ solana-keygen pubkey /home/ubuntu/.config/solana/id.json 7FqW6xXE4sMmZSeVxFsoTr83He4MhhePvA1vRAv9zgQf
1
2
在Solana测试链上,可以运⾏以下命令获得⼀些免费的 SOL以便执⾏后续的操作:
让我们检查⼀下我们的余额:
哇,有钱。
然后我们创建另⼀个帐户,⽤于存储程序⽂件:在这⾥,我们使⽤-o 选项将新的密钥对输出到新⽂件solana_memo_program.json 。
3、编译程序
从 1.4.x 版本(2020-10-22 发布)开始,Solana 提供了cargo-build-bpf和cargo-test-bpf等⼯具,帮助
我们将 cargo 项⽬编译为BPF 格式⽂件。
可以使⽤ Solana 官⽅团队提供的备忘录程序来试试这个。⾸先克隆仓库:
然后跳到⽂件夹solana-program-library/memo/program/并运⾏:
这是我们上⾯提到的程序cargo-build-bpf的包装器。如果看到如下错误:
那是因为你缺少⼀些32位的依赖包,让我们通过安装来修复它:
然后我们再次编译,得到:
好了,可以部署了,这⾥我们将它部署到我们创建的帐户并导出到⽂件solana_memo_program.json,
让我们先获取密钥:
然后运⾏部署:ubuntu@VM-0-12-ubuntu:~$ solana airdrop 10 7FqW6xXE4sMmZSeVxFsoTr83He4MhhePvA1vRAv9zgQf Requesting airdrop of 10 SOL from 34.82.57.86:990010 SOL
1
23ubuntu@VM-0-12-ubuntu:~$ solana balance 7FqW6xXE4sMmZSeVxFsoTr83He4MhhePvA1vRAv9zgQf 10 SOL 1
2solana-keygen new -o solana_memo_program.json
1git clone github/solana-labs/solana-program-library.git
1cargo build-bpf
1= note: /usr/bin/ld: cannot find Scrt1.o: No such file or directory /usr/bin/ld: cannot find crti.o: No such file or directory collect2: error: ld returned 1 exit status
12
3sudo apt install gcc-multilib 1To deploy this program:$ solana deploy /home/ubuntu/solana/solana-program-library/target/deploy/spl_memo.so
12solana-keygen pubkey ~/solana_memo_program.json D8Cnv1UcThay2WijWP4SQ8G683UuVsKPaZEU7TNVKW1j
12solana deploy /home/ubuntu/solana/solana-program-library/target/deploy/spl_memo.so ~/solana_memo_program.json {"programId":"D8Cnv1UcThay2WijWP4SQ8G683UuVsKPaZEU7TNVKW1j"}
1
2
现在我们已经成功部署了⼀个程序到测试连,程序地址:D8Cnv1UcThay2WijWP4SQ8G683UuVsKPaZEU7TNVKW1j 是的,我们的程序就在那⾥!
4、测试Solana 程序
为了与我们的链上程序进⾏交互,这⾥我们需要⽼朋友@solana/web3.js。让我们创建⼀个新的js项⽬并添加包@solana/web3.js:
然后在根⽂件夹和测试代码中创建⼀个类似index.js的⼊⼝ js ⽂件:yarn init yarn add @solana/web3.js
1
2
让我们看看这⾥发⽣了什么。⾸先连接到 devnet 端点,然后我们使⽤ solana_web3 提供的solana_web3.Account() 函数创建⼀个新帐户,该帐户将⽤于稍后与我们的程序交互。
然后我们从 devnet 得到⼀些免费的SOL ,然后调⽤了这个testMemo函数,该函数向我们的程序发送⼀个交易,参数作为数据流传⼊(这⾥我们传递⼀个字符串“ cztest ”)
现在,让我们再次使⽤资源管理器检查我们的Solana程序:var solana_web3 = require('@solana/web3.js');function testMemo(connection, account){ const instruction = new solana_web3.TransactionInstruction({ keys: [], programId:new solana_web3.PublicKey('D8Cnv1UcThay2WijWP4SQ8G683UuVsKPaZEU7TNVKW1j'), data: Buffer.from('cztest'), }); console.log("account:", Base58()) solana_web3.sendAndConfirmTransaction( connection, new solana_web3.Transaction().add(instruction), [account], { skipPreflight: true, commitment: "singleGossip", }, ).then(()=>{console.log("done")}).catch((e)=>{console.log("error",e)});}function main() { connection = new solana_web3.Connection("devnet.solana", 'singleGossip'); const account = new solana_web3.Account() const lamports = 10*1000000000 questAirdrop(account.publicKey, lamports).then(()=>{ console.log("airdrop done") testMemo(connection, account) });}main()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
免费平台源码资源网21
22
23
24
25
26
27
如上所⽰的交易,我们可以看到⼗六进制格式的数据,可以使⽤binascii 之类的⼯具来解码这些数据:
在这⾥我们可以看到结果与我们发送给程序的字符串相同
5、编写⾃⼰的Solana 程序
我们刚刚尝试了⼀个从 Solana 官⽅ repo 中提取的程序,那么我们应该怎么做才能从头开始编写⼀个Solana链上程序呢?作为⼀个普通的 Rust 项⽬,Solana 链上程序也是由 cargo 管理的。⾸先,让我们使⽤ cargo 来启动我们的新项⽬:>>> import binascii >>> binascii.a2b_hex('637a74657374')b'cztest'
1
2
3
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论