Nhật ký phát triển hợp đồng thông minh Rust (3)
BlockSec
2022-03-29 10:29
本文约4130字,阅读全文需要约17分钟
Triển khai hợp đồng, gọi chức năng và sử dụng trình khám phá.

Những bài viết liên quan:

Nhật ký phát triển hợp đồng thông minh Rust (2) Viết bài kiểm tra đơn vị hợp đồng thông minh Rust

Trong số Blog phát triển hợp đồng thông minh Rust này, BlockSec sẽ giới thiệu cách triển khai một hợp đồng thông minh mẫu đơn giản cho mạng thử nghiệm NEAR (TestNet), thực hiện hợp đồng và truy vấn kết quả thực hiện của hợp đồng.

Khi các nhà phát triển hợp đồng đã triển khai logic chính của hợp đồng và thực hiện các thử nghiệm đơn vị, các nhà phát triển có thể biên dịch dự án hợp đồng thành mã byte WASM và triển khai nó vào chuỗi thử nghiệm của NEAR để chuẩn bị triển khai lần cuối cho mạng chính (MainNet).

1. Giới thiệu về Mạng NEAR

Giao thức NEAR là một giao thức có nghĩa là có thể có nhiều mạng độc lập dựa trên giao thức này. Các thông số kỹ thuật và tiêu chuẩn Các thông số kỹ thuật và tiêu chuẩn của giao thức NEAR được xây dựng bởi giao thức NEAR chỉ định các chuỗi khác nhau dựa trên giao thức NEAR và chain_id trong GenesisConfig của cấu hình khối tạo là khác nhau.

  • TestNet

    Chủ yếu có ba loại mạng mà chúng ta thường sử dụng:

  • MainNet

    Mỗi dự án hợp đồng thông minh cuối cùng cần chạy trên mạng blockchain để nhận ra chức năng của dự án. Tuy nhiên, đối với một dự án mới, nhóm dự án thường sẽ triển khai dự án trên mạng thử nghiệm (TestNet) để kiểm tra các chức năng và logic nghiệp vụ liên quan của dự án hợp đồng thông minh.

  • LocalNet

    Sau khi hợp đồng đã trải qua nhiều vòng kiểm tra và đánh giá bảo mật độc lập (nếu cần) trong mạng thử nghiệm, nhóm phát triển có thể chọn triển khai chính thức hợp đồng lên mạng chính (MainNet).

LocalNet khác với TestNet. LocalNet chạy cục bộ, vì vậy các hợp đồng và dữ liệu giao dịch được triển khai trên chuỗi không được tiết lộ cho mạng bên ngoài. Nếu nhà phát triển không muốn rò rỉ bất kỳ thông tin quan trọng nào về dự án hợp đồng trước khi nó được triển khai lên TestNet hoặc MainNet, thì LocalNet sẽ là một lựa chọn tốt.

2. Cài đặt GẦN CLI

$ sudo npm install -g near-cli

NEAR CLI (Giao diện dòng lệnh) là giao diện dòng lệnh NodeJS, sử dụng near-api-js để kết nối và tương tác với mạng được mô tả ở trên. Do đó, trước khi cài đặt, chúng ta cần cài đặt npm (tên đầy đủ là Node Package Manager), sau đó chúng ta sẽ sử dụng npm để thực thi lệnh cài đặt sau trong Linux để cài đặt NEAR CLI.

$ near --version

Thực hiện lệnh sau để xem phiên bản NEAR CLI đã cài đặt và kiểm tra xem cài đặt có thành công hay không.

3. Triển khai hợp đồng trong TestNet

3.1. Đăng ký tài khoản TestNethttps://wallet.testnet.near.orgNgười dùng mới có thể vào

Để đăng ký ví TestNet mới trên trang, bạn chỉ cần nhập tên người dùng để hoàn tất đăng ký, chẳng hạn như statusmessage.testnet.https://explorer.testnet.near.orgsau đó trong

, chúng ta có thể tìm kiếm và xem thông tin liên quan về tài khoản trong TestNet như sau:

Trong TestNet, mỗi tài khoản mới được tạo sẽ chứa số dư thô là 200Ⓝ.

3.2. Đăng nhập vào tài khoản trong NEAR CLI

$ near login

Vì chúng tôi đã cài đặt NEAR CLI và đăng ký tài khoản người dùng trong NEAR TestNet. Bạn có thể thử đăng nhập vào tài khoản trong NAER CLI như sau:

Sau khi thực hiện lệnh trên, NEAR CLI sẽ gọi một liên kết và yêu cầu người dùng nhấp thủ công để đăng nhập vào tài khoản statusmessage.testnet ở trên.

3.3. Xem thông tin liên quan đến tài khoản

$ 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' 
}

Đồng thời, chúng tôi có thể truy vấn thông tin liên quan của một tài khoản cụ thể thông qua NEAR CLI

3.4. Soạn hợp đồng và triển khai

$ RUSTFLAGS='-C link-arg=-s' cargo +stable build --target wasm32-unknown-unknown --release

Trước khi triển khai hợp đồng, trước tiên chúng ta cần biên dịch hợp đồng. Lệnh sau có thể được sử dụng để biên dịch tệp WASM cụ thể status_message.wasm với hàng hóa. Lệnh này thường nằm trong thư mục target/wasm32-unknown-unknown/release/ của dự án.

$ 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.

Đồng thời, chúng ta có thể tạo một tài khoản phụ cho statusmessage.testnet, có tên là contract01.statusmessage.testnet, để triển khai hợp đồng

$ near deploy --accountId contract01.$MASTER_ACCOUNT \
                        --wasmFile status_message.wasm

Sau đó, chúng tôi có thể sử dụng lệnh triển khai gần để giúp chúng tôi triển khai hợp đồng.

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

Nếu triển khai hợp đồng thành công, chúng tôi có thể nhận được các thông tin sau:

3.5 Chức năng hợp đồng cuộc gọi

$ near call --accountId $MASTER_ACCOUNT \
      contract01.$MASTER\_ACCOUNT set\_status '{"message":"Hi!2021"}'

Khi chúng tôi triển khai thành công hợp đồng lên TestNet, tài khoản contract01.statusmessage.testnet đã triển khai hợp đồng là địa chỉ của hợp đồng. Để xác minh xem hợp đồng StatusMessage trong TestNet có thể chạy bình thường hay không. Chúng ta có thể gọi set_status để thiết lập các thuộc tính có sẵn của hợp đồng.

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) ''

Sau đây là thông tin trả về bằng cách gọi hàm set_status trong hợp đồng

Có thể thấy rằng giao dịch gọi chức năng hợp đồng StatusMessage có thể được thực hiện bình thường và ID giao dịch cụ thể được trả về, cụ thể là E9dsw8H9ztDN18DDvXKTBPvBLWHew7TtuWsLgg6uvesN

3.6 Truy vấn giao dịch

NEAR cung cấp cho cộng đồng một nền tảng truy vấn duyệt dữ liệu, NEAR Explorer. Người dùng có thể tìm kiếm thông tin trực tuyến theo thời gian thực như ID tài khoản, hàm băm giao dịch và khối giao dịch trong mạng được chỉ định trên nền tảng.https://explorer.testnet.near.org/transactions/E9dsw8H9ztDN18DDvXKTBPvBLWHew7TtuWsLgg6uvesN

Sử dụng ID giao dịch để truy vấn chi tiết giao dịch cụ thể trong NEAR Explorer.

Tóm tắt và xem trước vấn đề này

BlockSec
作者文库