solana上使用Rust进行合约开发
官方:用Rust开发
参考URL: https://docs.solana.com/developing/on-chain-programs/overview
客户端
请参阅doc.rs Solana发布的文档文件。
solana-sdk:访问通用数据结构 (https://docs.rs/solana-sdk/1.7.4/solana_sdk/)
solana-client :查询JSON RPC API (https://docs.solana.com/zh/developing/clients/jsonrpc-api)
开发前准备工作
准备工作
要创建和运行此范例,请确认并安装以下套件:
- 安装node
- 安装npm
- 从https://rustup.rs/安装最新的Rust稳定版本
- 从https://docs.solana.com/cli/install-solana-cli-tools 安装v1.6.6的Solana命令列管理工具
Install the Solana Tool Suite
MacOS & Linux#
安装 solana 最新稳定版stable
sh -c "$(curl -sSfL https://release.solana.com/stable/install)"
然后执行 solana --version 确认是否安装成功
root@VM-0-2-ubuntu:~# solana --version
solana-cli 1.6.17 (src:84f02341; feat:3416714594)
安装成功后,可以使用 命令solana-install update
方便的升级到最新版本。
官方示例demo
官方链接:https://docs.solana.com/developing/on-chain-programs/examples#helloworld
此教程包含以下内容:
- 链上的 Hello World 编程
- 向某个帐户发送 hello 并获取发送次数。
如上,版本实现,一个c,一个rust。
我们主要研究rust。
Solana Rust程序遵循典型的Rust项目布局:
/inc/
/src/
/Cargo.toml
但也必须包括:
/Xargo.toml
其必须包含
[target.bpfel-unknown-unknown.dependencies.std]
features = []
项目依赖关系#
Solana Rust程序必须引入solana-program。
[dependencies]
borsh = "0.7.1"
borsh-derive = "0.8.1"
solana-program = "=1.7.1"
Solana BPF程序具有某些限制,可能会阻止将某些箱体作为依赖项包含进来或需要特殊处理。
例如:
要求架构的箱体(Crates)是官方工具链支持箱体的子集。 除非解决了这个问题,并且没有将BPF添加到那些体系结构检查中,否则没有解决方法。
箱体可能取决于Solana确定性程序环境中不支持的rand。 要包含rand相关的箱体,请参考在 Rand 开发。
即使程序本身未包含堆栈溢出代码,箱体也可能会使堆栈溢出。 有关的更多信息,请参见Stack
$ git clone https://github.com/solana-labs/example-helloworld.git
$ cd example-helloworld
1) 配置命令列
将命令列配置的 url 设置成 localhost 集群
$ solana config set --url localhost
创建命令列使用的密钥对
如果这是你第一次使用 solana 命令列,你先得生成一个新的密钥对
solana-keygen new
root@VM-0-2-ubuntu:~# solana-keygen new
Generating a new keypair
For added security, enter a BIP39 passphrase
NOTE! This passphrase improves security of the recovery seed phrase NOT the
keypair file itself, which is stored as insecure plain text
BIP39 Passphrase (empty for none):
Wrote new keypair to /root/.config/solana/id.json
=========================================================================
pubkey: CpahsNjoSf5VoaVVyLya8XtyBVHuthHzdpJGzLoXBZU6
=========================================================================
Save this seed phrase and your BIP39 passphrase to recover your new keypair:
car early because cross scale jewel fish artefact honey quick embrace ask
=========================================================================
root@VM-0-2-ubuntu:~#
2) 启动本地 Solana 集群
默认情况下,此范例连接到本地 Solana 集群。
启动本地 Solana 集群:
solana-test-validator
查看交易日志:
$ solana logs
3) 安装 npm 套件
在example-helloworld目录下,执行
npm install
4) 构建
npm run build:program-rust
最终编译出来一个 helloworld.so 文件
/root/example-helloworld/dist/program/helloworld.so
5) 部署链上程序
$ solana program deploy dist/program/helloworld.so
6) 启动客户端
$ npm run start
root@VM-0-2-ubuntu:~/example-helloworld# npm run start
> helloworld@0.0.1 start /root/example-helloworld
> ts-node src/client/main.ts
Let's say hello to a Solana account...
Connection to cluster established: http://localhost:8899 { 'feature-set': 3416714594, 'solana-core': '1.6.17' }
Using account CpahsNjoSf5VoaVVyLya8XtyBVHuthHzdpJGzLoXBZU6 containing 499999999.12944824 SOL to pay for fees
Using program BtPjSxJNk1nPXMtt8UdZF3Mt8ajMkQAEMueMcKv8ZcAG
Creating account CSiEuPZDgsedTNXtDCXUdw3nKbWskchmGdb7mEzgWQDK to say hello to
Saying hello to CSiEuPZDgsedTNXtDCXUdw3nKbWskchmGdb7mEzgWQDK
CSiEuPZDgsedTNXtDCXUdw3nKbWskchmGdb7mEzgWQDK has been greeted 1 time(s)
Success
root@VM-0-2-ubuntu:~/example-helloworld#
代码
使用了官方sdk库:https://docs.rs/solana-sdk/1.7.4/solana_sdk/
部署
如上图所示,程序作者创建了一个程序,将它编译成包含 BFF 字节代码的 ELF 共享对象,然后包含一笔特殊的 deploy 交易,将其上传到 Solana 集群。 群集通过一个 program ID 将其提供给客户端。 程序 ID 是部署时指定的 地址,用于在后续交易中引用程序。
一旦部署成功,持有程序的账户将被标记为可执行,并且其账户数据变得永久不可篡改。 如果程序需要更改(功能、补丁等…),新程序必须部署到一个新程序 ID。
Solana 命令行接口支持部署程序,更多信息请见 deploy 命令行使用 文档。
调试
Solana程序在链上运行,因此在链外调试可能会很困难。 为了使调试程序更容易,开发人员可以编写单元测试以通过Solana运行时直接测试其程序的执行情况,或者运行允许RPC客户端与其程序进行交互的本地集群。
转载:https://blog.csdn.net/inthat/article/details/118657454