Near 学习.1

1. 申请testnet钱包

https://wallet.testnet.near.org/

测试网的后缀为.testnet 主网为.near

申请钱包
申请钱包

选择一种方式来保证账户的安全

安全选择
安全选择

选择助记词后,复制保存好,进行验证等待

post image

申请完成后,会有200N的测试币使用

post image

2. 开发环境配置

我的环境:ubuntu20.04 虚拟机

安装nvm,用来管理node的版本

`//安装nvm #curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash

//安装完成后,执行环境变量 #export NVM_DIR="$([ -z "${XDG_CONFIG_HOME-}" ] && printf %s "${HOME}/.nvm" || printf %s "${XDG_CONFIG_HOME}/nvm")" [ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh" # This loads nvm

#nvm -v #0.39.1`

安装node

`#nvm install 14

#node -v v14.19.1 #npm -v 6.14.16`

安装rust

#curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

//记得执行环境变量

#cargo --version cargo 1.59.0 (49d8809dc 2022-02-10)

安装near-cli

#npm -i -g near-cli

#near --version 3.2.0

3. 命令行登录钱包

#near login

会弹出一个授权钱包的网页,选择需要连接的钱包后会自动回调命令行的接口。

因为测试网的RPC总是断掉,可以使用命令所以换一个其他的

#export NEAR_CLI_TESTNET_RPC_SERVER_URL=https://public-rpc.blockpi.io/http/near-testnet

选择连接钱包
选择连接钱包

登录成功回调

登录成功
登录成功

4. 试试合约

官方案例:

https://examples.near.org/

拉取合约代码(存值、取值合约)

#git clone https://github.com/near-examples/rust-status-message.git

#cd rust-status-message/

目录结构

frontend:前端代码

res:已编译好的wasm合约

src:合约代码(rust代码我不会)

Cargo.toml: 管理三方包的

其他的:看不懂(应该不重要)~

目录结构
目录结构

重新编译下合约,添加wasm编译器

#cargo build --target wasm32-unknown-unknown --release

等待编译完成。。。。完成后会多出一个target目录

找到status_message.wasm这个文件就是编译好的合约

编译好的合约
编译好的合约

部署合约

#near dev-deploy res/status_message.wasm

dev-deploy会自动生成一个dev accountID用来存储合约代码,可以用来测试代码

部署成功
部署成功

dev-1650358202077-31407618874600为自动生成的合约账户地址,

HRFSfvTM1jfAuwZ26qPjE8pPYEMHrWeyzgQcAHubcpVm 交易hash

都可以在区块链浏览器上查看

区块浏览器
区块浏览器

在目录会生成一个neardev账户,这两个记录了部署的合约账户地址,以方便前端调用合约时使用

neardev
neardev

调用view查询合约数据

#near view dev-1650358202077-31407618874600 get_status '{"account_id":"ballwww.testnet"}'

dev-1650358202077-31407618874600 合约账户地址

get_status 函数名

'{"account_id":"ballwww.testnet"}' 参数

返回内容

View call: dev-1650358202077-31407618874600.get_status({"account_id":"ballwww.testnet"}) null

因为ballwww.testnet在合约里没有状态,所以返回null

调用call修改合约数据,使用ballwww.testnet账户来存储状态消息”hello”

#near call dev-1650358202077-31407618874600 set_status '{"message":"hello"}' --accountId ballwww.testnet

存储成功

存储状态消息成功
存储状态消息成功

再次查询,可以看到ballwww.testnet的状态消息变为了hello

OK
OK

~~~ ok 合约已经完成了,剩下的启动前端代码(react写的,我也不会)

前端代码安装三方包命令: #npm install

启动命令:#npm run start

启动前端
启动前端

在浏览器中输入地址:http://localhost:1234,可以看到页面

网页
网页

登录ballwww.testnet 就可以看到我刚刚存储的状态值

登录查看存储消息
登录查看存储消息

点击Update更新状态消息

post image

等待一会,状态消息就更新了,并没有输入密钥等信息;

post image

ok~~~~ 完事儿了