
相關文章:
Rust Rust 智能合約養成日記(1)合約狀態數據定義與方法實現
Rust 智能合約養成日記(2)編寫Rust 智能合約單元測試
Rust 智能合約養成日記(2)編寫Rust 智能合約單元測試
在本期Rust 智能合約開發Blog 中,BlockSec 將為大家介紹如何將一個簡單的示例智能合約部署至NEAR 測試網絡(TestNet) 中,執行合約,並查詢合約的執行結果。
當合約的開發者們實現了合約的主要邏輯,進行了單元測試後,開發者可將該合約項目編譯成WASM 字節碼,部署到NEAR 的測試鏈上,為最後部署到主網(MainNet)做準備。
TestNet
1. NEAR 網絡介紹
MainNet
NEAR Protocol 作為一種協議,意味著可以存在有基於該協議的多種獨立網絡。 NEAR 協議所製定的規範與標準NEAR Protocol Specifications and Standards指明了基於NEAR 協議的不同鏈,其創世區塊配置GenesisConfig中chain_id各不相同。
LocalNet
我們常用的主要有如下三種網絡:
每一個智能合約項目最終都需要在區塊鍊網絡上運行,以實現項目的功能。然而,對於一個新項目來說,項目團隊往往會先將項目部署在測試網(TestNet) 上,用來測試該智能合約項目的功能和相關業務邏輯。
當合約在測試網絡中進行了多輪的測試和獨立的安全審查(如有必要的話)之後,開發團隊可以選擇將該合約正式地部署至主網(MainNet)中。
$ sudo npm install -g near-cli
LocalNet 不同於TestNet。 LocalNet 運行於本地,因此部署在該鏈上的合約與交易數據均不向外部網絡公開。如果在合約項目部署至TestNet 或MainNet 之前,開發者不希望洩漏任何該項目相關的重要信息,LocalNet 將是一個不錯的選擇。
$ near --version
2. NEAR CLI 安裝
NEAR CLI (Command Line Interface) 是一個NodeJS 命令行接口,它底層利用near-api-js 連接到上述所介紹的網絡中,並與之交互。因此在安裝之前,我們需要首先安裝npm (全稱Node Package Manager),隨後我們將在Linux 中利用npm 執行如下安裝命令安裝NEAR CLI。
執行如下命令可查看NEAR CLI 的安裝版本,並檢查是否安裝成功。https://wallet.testnet.near.org3. 在TestNet 中部署合約
3.1. 註冊TestNet 賬戶https://explorer.testnet.near.org新用戶可在
頁面中註冊新的TestNet 錢包,只需要輸入用戶名即完成註冊,例如statusmessage.testnet。
隨後在
中,我們可以搜索並查看有關TestNet 中該賬戶的有關信息,如下所示:
$ near login
在TestNet 中,每一個新建賬戶中將含有200Ⓝ的原生餘額。
3.2. 在NEAR CLI 中登錄該賬戶
由於我們已經安裝NEAR CLI,且已申請了NEAR TestNet 中的用戶賬戶。下面可以嘗試在NAER CLI 中登錄該賬戶:
$ near state statusmessage.testnet
Account statusmessage.testnet
{ amount: '199999959035075000000000000',
block_hash: '8iomNEFNa4LQB54ehTPBGu8bBfotistoWrBcYJfxm8vA',
block_height: 68318068,
code_hash: '11111111111111111111111111111111',
locked: '0',
storage_paid_at: 0,
storage_usage: 264,
formattedAmount: '199.999959035075'
}
隨著上述命令的執行,NEAR CLI 將喚起一個鏈接,並需要用戶手動點擊登陸上述statusmessage.testnet 賬戶。
3.3. 查看賬戶相關信息
$ RUSTFLAGS='-C link-arg=-s' cargo +stable build --target wasm32-unknown-unknown --release
同時,我們可以通過NEAR CLI 查詢特定賬戶的相關信息
$ cd target/wasm32-unknown-unknown/release
$ export MASTER_ACCOUNT=statusmessage.testnet
$ near create-account contract01.$MASTER_ACCOUNT
--initialBalance 10
--masterAccount $MASTER_ACCOUNT
Account contract01.statusmessage.testnet for network "testnet" was created.
3.4. 合約編譯與部署
$ near deploy --accountId contract01.$MASTER_ACCOUNT \
--wasmFile status_message.wasm
在將合約部署之前,我們首先需要對合約進行編譯,如下命令可利用cargo 編譯得到具體的WASM 文件status_message.wasm. 它通常位於項目的target/wasm32-unknown-unknown/release/ 目錄下。
Starting deployment. Account id: contract01.statusmessage.testnet, node: [https://rpc.testnet.near.org](https://rpc.testnet.near.org), helper: [https://helper.testnet.near.org](https://helper.testnet.near.org), file: status_message.wasm
Transaction Id 4oDYA8wPLJuKwDumJxEGubeJBA9Ep13MLXSf34q9ydRm
To see the transaction in the transaction explorer, please open this url in your browser[https://explorer.testnet.near.org/transactions/4oDYA8wPLJuKwDumJxEGubeJBA9Ep13MLXSf34q9ydRm](https://explorer.testnet.near.org/transactions/4oDYA8wPLJuKwDumJxEGubeJBA9Ep13MLXSf34q9ydRm) Done deploying to contract01.statusmessage.testnet
同時,我們可以給statusmessage.testnet 創建一個子賬戶,名為contract01.statusmessage.testnet, 用於合約的部署
接著我們便可以使用near deploy 命令來幫助我們部署該合約。
$ near call --accountId $MASTER_ACCOUNT \
contract01.$MASTER\_ACCOUNT set\_status '{"message":"Hi!2021"}'
若合約部署成功,我們可以獲得如下信息:
Scheduling a call: contract01.statusmessage.testnet.set_status({"message":"Hi!2021"})
TransactTransaction Id E9dsw8H9ztDN18DDvXKTBPvBLWHew7TtuWsLgg6uvesN
To see the transaction in the transaction explorer, please open this url in your browser[https://explorer.testnet.near.org/transactions/E9dsw8H9ztDN18DDvXKTBPvBLWHew7TtuWsLgg6uvesN](https://explorer.testnet.near.org/transactions/E9dsw8H9ztDN18DDvXKTBPvBLWHew7TtuWsLgg6uvesN) ''
3.5 調用合約函數
當我們成功部署合約至TestNet 後,部署該合約的賬戶contract01.statusmessage.testnet,即為該合約的地址。為驗證TestNet 中StatusMessage 合約是否能夠正常運行。我們可以調用set_status 來設定合約內置的屬性。
如下是調用該合約中函數set_status 返回的信息
可見該筆StatusMessage 合約函數調用交易能夠正常執行,並返回了具體的Transaction ID,即E9dsw8H9ztDN18DDvXKTBPvBLWHew7TtuWsLgg6uvesNhttps://explorer.testnet.near.org/transactions/E9dsw8H9ztDN18DDvXKTBPvBLWHew7TtuWsLgg6uvesN
3.6 交易查詢
NEAR 為社區提供了一個數據瀏覽查詢平台NEAR Explorer。用戶可以在該平台中搜索指定網絡中的賬戶ID,交易哈希,交易區塊等實時鏈上信息。