Windows10:NEAR Rust智能合约开发环境搭建

1、windows下载安装rust

Getting started - Rust Programming Language

https://static.rust-lang.org/rustup/dist/x86_64-pc-windows-msvc/rustup-init.exe

下载rustup-init.exe,并安装。

2、把cargo的bin目录添加到系统path 中,默认这个文件夹路径为“C:\Users\用户名\.cargo\bin”

在cmd中输入rustc --version 和cargo --version,若正常返回版本信息,则安装成功

3、安装near-cli 工具包:

执行“npm install -g near-cli”命令

执行 “near --version”验证是否安装成功

参考文档 :https://docs.near.org/zh-CN/docs/tools/near-cli

4、执行cargo hello命令创建一个项目,然后进入hello目录执行cargo run ,若报错

我的解决办法比较暴力,直接装了一个Visual Studio 2022 ,注意在安装的时候要把Visual C++ 选上。

Visual Studio 2022 下载地址:Visual Studio 2022 IDE - 适用于软件开发人员的编程工具

安装重启之后重新执行成功

参考文章:win10安装rust和编译失败的解决办法 - 走看看

5、Jetbrains Idea 安装 Rust 插件,具体参考下面文章

https://www.csdn.net/tags/OtDaYgxsMTIzMTctYmxvZwO0O0OO0O0O.html

重新进入idea,新建rust项目,这次打开的时候Standard library 下面会有一个安装提示,直接点击安装就行,然后后面就会有一个目录路径了。

6、如果报错“No Cargo projects found!”,可以参考下面文章解决:

Rust编写Near智能合约_盐水煮毛豆的博客-CSDN博客_rust 智能合约

或者使用“$ cargo init --lib 合约名称” 命令直接从命令行创建一个工程模板,再用鼠标右键再jetbrain idea 中打开即可。

7、编写完代码和 测试案例之后,可以在改工程目录命令行中输入“cargo test -- --nocapture”,进行测试

输入以上格式内容,则表示成功。

编译合约

windows 下使用“set RUSTFLAGS=-C link-arg=-s”和“cargo build --target wasm32-unknown-unknown --release”命令编译

near测试链登录

near login

若报错以下内容,证明是windows cmd 没有翻墙

通过这种方式修改即可

环境:shadowsocks、windows
本地ss端口设置(这里1080)

cmd命令行:(不用socks5)(临时设置)(也可放置环境变量)
set HTTP_PROXY=http://127.0.0.1:1080
set HTTPS_PROXY=http://127.0.0.1:1080


ps:一定要用cmd命令行,千万别用powershell !!!
简易测试命令:curl https://www.google.com(别用ping)


git config --global https.proxy http://127.0.0.1:1080
git config --global https.proxy https://127.0.0.1:1080

但是上面解决方案行不通,通过在开发群中咨询得知“官方的rpc被强了,命令行不会使用代理。可以在infura上面注册一个near的rpc节点然后使 --nodeUrl参数使用指定节点

near login --nodeUrl https://near-testnet.infura.io/v3/7102961aa7c04b1c8dbfe6d456d3fc86

near create-account learn01.lentel.testnet --masterAccount lentel.testnet --initialBalance 100 --nodeUrl https://near-testnet.infura.io/v3/7102961aa7c04b1c8dbfe6d456d3fc86

near create-account learn02.lentel.testnet --masterAccount lentel.testnet --initialBalance 10 --nodeUrl https://near-testnet.infura.io/v3/7102961aa7c04b1c8dbfe6d456d3fc86

一开始尝试:near create-account near.learn01.lentel.testnet --masterAccount lentel.testnet --initialBalance 100 --nodeUrl https://near-testnet.infura.io/v3/7102961aa7c04b1c8dbfe6d456d3fc86

报错,估计是有可能是near.learn01.lentel.testnet 命名规则不对,去掉near. 就可以了

另外,在执行这个命令的时候,会从masterAccount 往 新建账户自动转账 --initialBalance 后面对应数目的near , 如果master账户中near 不足,则会报错

Error: Sender lentel.testnet does not have enough balance 99.997684888406378 for operation costing 100.0000861846776875
    at Object.parseRpcError (C:\Users\86185\AppData\Roaming\npm\node_modules\near-cli\node_modules\near-api-js\lib\utils\rpc_errors.js:24:19)
    at C:\Users\86185\AppData\Roaming\npm\node_modules\near-cli\node_modules\near-api-js\lib\providers\json-rpc-provider.js:319:44
    at processTicksAndRejections (node:internal/process/task_queues:96:5)
    at async Object.exponentialBackoff [as default] (C:\Users\86185\AppData\Roaming\npm\node_modules\near-cli\node_modules\near-api-js\lib\utils\exponential-backoff.js:7:24)
    at async JsonRpcProvider.sendJsonRpc (C:\Users\86185\AppData\Roaming\npm\node_modules\near-cli\node_modules\near-api-js\lib\providers\json-rpc-provider.js:304:26)
    at async C:\Users\86185\AppData\Roaming\npm\node_modules\near-cli\node_modules\near-api-js\lib\account.js:121:24
    at async Object.exponentialBackoff [as default] (C:\Users\86185\AppData\Roaming\npm\node_modules\near-cli\node_modules\near-api-js\lib\utils\exponential-backoff.js:7:24)
    at async Account.signAndSendTransactionV2 (C:\Users\86185\AppData\Roaming\npm\node_modules\near-cli\node_modules\near-api-js\lib\account.js:117:24)
    at async LocalAccountCreator.createAccount (C:\Users\86185\AppData\Roaming\npm\node_modules\near-cli\node_modules\near-api-js\lib\account_creator.js:24:9)
    at async Near.createAccount (C:\Users\86185\AppData\Roaming\npm\node_modules\near-cli\node_modules\near-api-js\lib\near.js:69:9)
ServerError: Sender lentel.testnet does not have enough balance 99.997684888406378 for operation costing 100.0000861846776875
    at Object.parseRpcError (C:\Users\86185\AppData\Roaming\npm\node_modules\near-cli\node_modules\near-api-js\lib\utils\rpc_errors.js:24:19)
    at C:\Users\86185\AppData\Roaming\npm\node_modules\near-cli\node_modules\near-api-js\lib\providers\json-rpc-provider.js:319:44
    at processTicksAndRejections (node:internal/process/task_queues:96:5)
    at async Object.exponentialBackoff [as default] (C:\Users\86185\AppData\Roaming\npm\node_modules\near-cli\node_modules\near-api-js\lib\utils\exponential-backoff.js:7:24)
    at async JsonRpcProvider.sendJsonRpc (C:\Users\86185\AppData\Roaming\npm\node_modules\near-cli\node_modules\near-api-js\lib\providers\json-rpc-provider.js:304:26)
    at async C:\Users\86185\AppData\Roaming\npm\node_modules\near-cli\node_modules\near-api-js\lib\account.js:121:24
    at async Object.exponentialBackoff [as default] (C:\Users\86185\AppData\Roaming\npm\node_modules\near-cli\node_modules\near-api-js\lib\utils\exponential-backoff.js:7:24)
    at async Account.signAndSendTransactionV2 (C:\Users\86185\AppData\Roaming\npm\node_modules\near-cli\node_modules\near-api-js\lib\account.js:117:24)
    at async LocalAccountCreator.createAccount (C:\Users\86185\AppData\Roaming\npm\node_modules\near-cli\node_modules\near-api-js\lib\account_creator.js:24:9)
    at async Near.createAccount (C:\Users\86185\AppData\Roaming\npm\node_modules\near-cli\node_modules\near-api-js\lib\near.js:69:9) {
  type: 'NotEnoughBalance',
  context: ErrorContext {
    transactionHash: '4Ef9T7eFybaeYQfMJtNyZYJWV8mxHh4JDp2H9nQdDem3'
  },
  balance: '99997684888406378000000000',
  cost: '100000086184677687500000000',
  signer_id: 'lentel.testnet',
  kind: {
    balance: '99997684888406378000000000',
    cost: '100000086184677687500000000',
    signer_id: 'lentel.testnet'
  }
}

部署合约

near deploy --wasmFile target/wasm32-unknown-unknown/release/key_value_storage.wasm --accountId learn01.lentel.testnet --nodeUrl https://near-testnet.infura.io/v3/7102961aa7c04b1c8dbfe6d456d3fc86

Options:
      --help                     Show help  [boolean]
      --version                  Show version number  [boolean]
      --nodeUrl, --node_url      NEAR node URL  [string] [default: "https://rpc.testnet.near.org"]
      --networkId, --network_id  NEAR network ID, allows using different keys based on network  [string] [default: "testnet"]
      --helperUrl                NEAR contract helper URL  [string]
      --keyPath                  Path to master account key  [string]
      --accountId, --account_id  Unique identifier for the newly created account  [string] [required]
      --useLedgerKey             Use Ledger for signing with given HD key path  [string] [default: "44'/397'/0'/0'/1'"]
      --seedPhrase               Seed phrase mnemonic  [string]
      --seedPath                 HD path derivation  [string] [default: "m/44'/397'/0'"]
      --walletUrl                Website for NEAR Wallet  [string]
      --contractName             Account name of contract  [string]
      --masterAccount            Account used to create requested account.  [string] [required]
      --helperAccount            Expected top-level account for a network  [string]
  -v, --verbose                  Prints out verbose output  [boolean] [default: false]
  -f, --force                    Forcefully execute the desired action even if it is unsafe to do so  [boolean] [default: false]
      --publicKey                Public key to initialize the account with  [string]
      --newLedgerKey             HD key path to use with Ledger. Used to generate public key if not specified directly  [string] [default: "44'/397'/0'/0'/1'"]
      --initialBalance           Number of tokens to transfer to newly created account  [string] [default: "100"]

调用合约

–accountId 你的near 账户

1.创建键值对 调用合约create_update方法

near call learn01.lentel.testnet create_update '{"k": "first_key", "v" : "1"}' --accountId learn01.lentel.testnet --nodeUrl https://near-testnet.infura.io/v3/7102961aa7c04b1c8dbfe6d456d3fc86

2.读取键值对 调用read方法

near view learn01.lentel.testnet read '{"k": "song"}' --accountId learn01.lentel.testnet --nodeUrl https://near-testnet.infura.io/v3/7102961aa7c04b1c8dbfe6d456d3fc86

3.删除键值对 调用delete方法

near call learn01.lentel.testnet delete '{"k": "first_key"}' --accountId learn01.lentel.testnet --nodeUrl https://near-testnet.infura.io/v3/7102961aa7c04b1c8dbfe6d456d3fc86

参考文档:

idea搭建rust开发环境,解决不识别Rust工程的解决办法_跨链技术践行者的博客-CSDN博客_idea rust

https://www.baidu.com/link?url=5zSLAoGNFGUr2RAS36WVTE93qCHHhMk3cVQ6FSW2SvEZi_iseupFQSXrk-pNmxwv49oNT28EoIGaD2uwomzBICQhdpBeyy6H-FYAmbOx0wa&wd=&eqid=c99102b9000c1af30000000662a490e1

Rust智能合约养成日记: 合约部署,函数调用,及explorer使用 | 巴比特

Rust智能合约养成日记(2) | 登链社区 | 区块链技术社区

Rust智能合约养成日记: 用 Rust 开发智能合约 | 巴比特

https://www.baidu.com/link?url=NVS62gkUjrAR0EVFjWq3nRWqCfKZWeyDEwYjOiDg4QqNpRnS2HryyYU9Fg3krLwWxBV1_q_J1M0SxwfGjIqVgBMjjaZUBEZt1Oj3aW4yF17&wd=&eqid=95c673a900183a880000000662a48ed4

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值