บทความที่เกี่ยวข้อง:
ไดอารี่การพัฒนาสัญญาสมาร์ทสนิม (2) การเขียนการทดสอบหน่วยสัญญาสมาร์ทสนิม
ในบล็อกการพัฒนาสัญญาอัจฉริยะของ Rust ฉบับนี้ BlockSec จะแนะนำวิธีการปรับใช้สัญญาอัจฉริยะตัวอย่างอย่างง่ายกับเครือข่ายทดสอบ NEAR (TestNet) ดำเนินการตามสัญญา และสืบค้นผลการดำเนินการตามสัญญา
เมื่อผู้พัฒนาสัญญาได้ปรับใช้ลอจิกหลักของสัญญาและดำเนินการทดสอบหน่วย นักพัฒนาสามารถรวบรวมโครงการสัญญาเป็น WASM bytecode และปรับใช้กับเชนทดสอบของ NEAR เพื่อปรับใช้ขั้นสุดท้ายกับเมนเน็ต (MainNet) ที่เตรียมไว้
1. รู้เบื้องต้นเกี่ยวกับเครือข่าย NEAR
NEAR Protocol เป็นโปรโตคอลหมายความว่าสามารถมีเครือข่ายอิสระหลายเครือข่ายตามโปรโตคอลนี้ ข้อมูลจำเพาะและมาตรฐานโปรโตคอล NEAR ข้อมูลจำเพาะและมาตรฐานที่กำหนดขึ้นโดยโปรโตคอล NEAR ระบุเชนที่แตกต่างกันตามโปรโตคอล NEAR และ chain_id ใน GenesisConfig ของการกำหนดค่าบล็อกการสร้างนั้นแตกต่างกัน
TestNet
โดยทั่วไปมีเครือข่ายสามประเภทที่เราใช้กันทั่วไป:
MainNet
ในที่สุดโครงการสัญญาอัจฉริยะทุกโครงการจำเป็นต้องทำงานบนเครือข่ายบล็อกเชนเพื่อให้ทราบถึงฟังก์ชันของโครงการ อย่างไรก็ตาม สำหรับโครงการใหม่ ทีมงานโครงการมักจะปรับใช้โครงการบนเครือข่ายทดสอบ (TestNet) เพื่อทดสอบฟังก์ชันและตรรกะทางธุรกิจที่เกี่ยวข้องของโครงการสัญญาอัจฉริยะ
LocalNet
หลังจากที่สัญญาได้ผ่านการทดสอบหลายรอบและการตรวจสอบความปลอดภัยโดยอิสระ (หากจำเป็น) ในเครือข่ายทดสอบ ทีมพัฒนาสามารถเลือกที่จะปรับใช้สัญญาอย่างเป็นทางการกับเครือข่ายหลัก (MainNet)
LocalNet แตกต่างจาก TestNet LocalNet ทำงานภายในเครื่อง ดังนั้นสัญญาและข้อมูลการทำธุรกรรมที่ใช้งานบนเครือข่ายจะไม่ถูกเปิดเผยต่อเครือข่ายภายนอก หากผู้พัฒนาไม่ต้องการให้ข้อมูลสำคัญรั่วไหลเกี่ยวกับโครงการสัญญาก่อนที่จะนำไปใช้กับ TestNet หรือ MainNet LocalNet จะเป็นตัวเลือกที่ดี
2. ใกล้การติดตั้ง CLI
$ sudo npm install -g near-cli
NEAR CLI (Command Line Interface) เป็นอินเทอร์เฟซบรรทัดคำสั่ง NodeJS ซึ่งใช้ Near-api-js เพื่อเชื่อมต่อและโต้ตอบกับเครือข่ายที่อธิบายไว้ข้างต้น ดังนั้นก่อนการติดตั้ง เราจำเป็นต้องติดตั้ง npm (ชื่อเต็ม Node Package Manager) จากนั้นเราจะใช้ npm เพื่อรันคำสั่งการติดตั้งต่อไปนี้ใน Linux เพื่อติดตั้ง NEAR CLI
$ near --version
ดำเนินการคำสั่งต่อไปนี้เพื่อดูเวอร์ชันที่ติดตั้งของ NEAR CLI และตรวจสอบว่าการติดตั้งสำเร็จหรือไม่
3. ปรับใช้สัญญาใน TestNet
3.1 ลงทะเบียนสำหรับบัญชี TestNethttps://wallet.testnet.near.orgผู้ใช้ใหม่สามารถไปที่
ในการลงทะเบียนกระเป๋าเงิน TestNet ใหม่บนหน้านี้ คุณเพียงแค่ป้อนชื่อผู้ใช้เพื่อทำการลงทะเบียนให้เสร็จสมบูรณ์ เช่น statusmessage.testnethttps://explorer.testnet.near.orgจากนั้นใน
เราสามารถค้นหาและดูข้อมูลที่เกี่ยวข้องกับบัญชีใน TestNet ได้ดังนี้:
ใน TestNet บัญชีที่สร้างขึ้นใหม่แต่ละบัญชีจะมียอดคงเหลือ 200Ⓝ
3.2 เข้าสู่บัญชีใน NEAR CLI
$ near login
เนื่องจากเราได้ติดตั้ง NEAR CLI และสมัครบัญชีผู้ใช้ใน NEAR TestNet คุณสามารถลองเข้าสู่บัญชีใน NAER CLI ได้ดังนี้:
หลังจากการดำเนินการตามคำสั่งข้างต้น NEAR CLI จะเรียกใช้ลิงก์และกำหนดให้ผู้ใช้คลิกด้วยตนเองเพื่อเข้าสู่บัญชี statusmessage.testnet ข้างต้น
3.3 ดูข้อมูลที่เกี่ยวข้องกับบัญชี
$ 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
3.4 การรวบรวมสัญญาและการปรับใช้
$ RUSTFLAGS='-C link-arg=-s' cargo +stable build --target wasm32-unknown-unknown --release
ก่อนใช้งานสัญญา เราต้องคอมไพล์สัญญาก่อน คำสั่งต่อไปนี้สามารถใช้เพื่อคอมไพล์ไฟล์ WASM status_message.wasm ที่มีสินค้า ซึ่งมักจะอยู่ในไดเร็กทอรี target/wasm32-unknown-unknown/release/ ของ โครงการ.
$ 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.
ในขณะเดียวกัน เราสามารถสร้างบัญชีย่อยสำหรับ statusmessage.testnet ชื่อ contract01.statusmessage.testnet สำหรับการปรับใช้สัญญา
$ near deploy --accountId contract01.$MASTER_ACCOUNT \
--wasmFile status_message.wasm
จากนั้นเราสามารถใช้คำสั่ง near deploy เพื่อช่วยในการปรับใช้สัญญา
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
หากการปรับใช้งานสัญญาสำเร็จ เราจะได้รับข้อมูลต่อไปนี้:
3.5 ฟังก์ชั่นสัญญาการโทร
$ near call --accountId $MASTER_ACCOUNT \
contract01.$MASTER\_ACCOUNT set\_status '{"message":"Hi!2021"}'
เมื่อเราปรับใช้สัญญากับ TestNet สำเร็จ บัญชี contract01.statusmessage.testnet ที่ปรับใช้สัญญาจะเป็นที่อยู่ของสัญญา เพื่อตรวจสอบว่าสัญญา StatusMessage ใน TestNet สามารถทำงานได้ตามปกติหรือไม่ เราสามารถเรียก set_status เพื่อตั้งค่าคุณสมบัติในตัวของสัญญา
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) ''
ต่อไปนี้เป็นข้อมูลที่ส่งคืนโดยการเรียกใช้ฟังก์ชัน set_status ในสัญญา
จะเห็นได้ว่าธุรกรรมการเรียกฟังก์ชันสัญญา StatusMessage สามารถดำเนินการได้ตามปกติ และส่งคืน ID ธุรกรรมเฉพาะ ได้แก่ E9dsw8H9ztDN18DDvXKTBPvBLWHew7TtuWsLgg6uvesN
3.6 สอบถามธุรกรรม
NEAR ให้บริการชุมชนด้วยแพลตฟอร์มแบบสอบถามการสืบค้นข้อมูล NEAR Explorer ผู้ใช้สามารถค้นหาข้อมูลออนไลน์แบบเรียลไทม์ เช่น ID บัญชี แฮชของธุรกรรม และบล็อคธุรกรรมในเครือข่ายที่ระบุบนแพลตฟอร์มhttps://explorer.testnet.near.org/transactions/E9dsw8H9ztDN18DDvXKTBPvBLWHew7TtuWsLgg6uvesN
ใช้ ID ธุรกรรมเพื่อสอบถามรายละเอียดธุรกรรมเฉพาะใน NEAR Explorer
สรุปและแสดงตัวอย่างของปัญหานี้
