Web开发

首页 » 常识 » 问答 » 在新兴公链ldquo以太坊杀手rd
TUhjnbcbe - 2022/4/18 14:48:00

Solana是年兴起的一条明星公链,目前是排名前列的主流公链之一,常被称为“以太坊杀手”。其智能合约被称为program,是用rust语言开发,今天演示一下如何在solana上开发一个计算器program,并编写测试代码对其进行测试。

-1.安装环境

首先安装rust,我已经安装过了,就不演示了,查看一下rust的版本

还需要安装nodejs,已经安装过了,查一下版本

安装solana(注意是全局安装,并不是安装在某个目录中)

安装solana之后,注销然后重新登录用户,或者执行

exportPATH="/home/linke/.local/share/solana/install/active_release/bin:$PATH"

全局安装mocha

sudonpminstall-gmocha

全局安装Anchor,这是solana目前最好的开发工具,类似于hardhat对于以太坊的地位。它提供了一个RustDSL(基本上是一个更简单的Rust),可以与IDL、CLI和workspace管理一起使用。Anchor从传统的Solanaprogram中抽象出了许多潜在的安全漏洞,负责序列化和反序列化,将大量繁琐的代码变成宏和许多其他好的特性。

sudonpmi-g

project-serum/anchor-cli

查看anchor的版本

anchor--version

-2.通过solana命令行运行命令

首先执行solanaconfigget,获取solana当前的配置

在开发program时环境最好设置为本地环境,上图中显式RPCURL是mainnet,需要运行以下命令设置为本地环境

solanaconfigset--urllocalhost

接下来需要知道我们的帐户/钱包地址,并空投一些SOLtokens到这个地址,以处理与Solanaprogram交互所带来的所有部署、交易等成本。

执行solanaaddress,获取地址

如果之前没有设置过密钥对,那么将不会在结果中有密钥对路径。需要新建一个密钥对。

目前/home/linke/.config/solana/id.json是不存在的。

执行以下命令新建一个密钥对

solana-keygennew-o/home/linke/.config/solana/id.json

BIP39Passphrase我没有设置,直接按enter键跳过。这个新建的密钥被放在/home/linke/.config/solana/id.json文件中,查看一下这个文件

公钥为

BaY1crJzunHUUQBGiQGYHEQM2yGS6VYNYE4oN9cES83R

助记词如下

nephewreasonmutualidleslushflatdefineorientdreamantennanextpanther

现在有了密钥对,再次执行solanaaddress

BaY1crJzunHUUQBGiQGYHEQM2yGS6VYNYE4oN9cES83R

执行以下命令获取账户详情

solanaaccountBaY1crJzunHUUQBGiQGYHEQM2yGS6VYNYE4oN9cES83R

报错,原因应该是还没启动本地网络。接下来先启动本地网络。可以将这个本地网络看作运行在操作系统上的模拟Solana区块链。开发和测试我们的program都需要这个网络。

要在一个单独的terminal中启动本地网络,使用以下命令

solana-test-validator

在不做任何操作的情况下,ProcessedSlot,ConfirmedSlot,FinalizedSlot一直在递增。

现在再次执行

solanaaccountBaY1crJzunHUUQBGiQGYHEQM2yGS6VYNYE4oN9cES83R

就成功了

可以看到,余额是SOL,owner是

接下来可以请求给当前账号空投SOL,执行

solanaairdrop

可以看到,余额增加了

-3.搭建Anchor项目

初始化一个Anchor项目,然后继续做我们自己的修改。进入自己新建的一个目录/home/linke/solana/solana_calculator_program,然后执行

anchorinitmycalculatordapp

cdmycalculatordapp

进入目录,目录结构如下图

首先,我们检查是否可以看到programs,app,migrations目录等。

如果有这些目录,我们可以去programs/mycalculatordapp/src/lib.rs查看Anchor提供给我们的默认program。这是在Anchor上最基本的例子,只是一个用户定义的函数Initialize无论何时被调用都会成功退出程序,没什么特别的。现在,让我们使用以下命令编译这个program

anchorbuild

发生这个错是因为没有使用nightly版本,把rust从稳定版本切换到nightly版本,执行命令

rustupdefaultnightly

切换到nightly版本之后,发现还是报同样的错,然后根据stackoverflow的一个链接

1
查看完整版本: 在新兴公链ldquo以太坊杀手rd