Cách xây dựng, triển khai và thử nghiệm Waves RIDE dApp

Xin chào! Trong bài viết này, tôi sẽ hướng dẫn bạn cách viết và chạy một dApp thông thường trên nút Waves. Hãy xem xét các công cụ, phương pháp cần thiết và một ví dụ về phát triển.

Cách xây dựng, triển khai và thử nghiệm Waves RIDE dApp

Sơ đồ phát triển cho dApps và các ứng dụng thông thường gần như giống nhau:

  • Chúng tôi viết mã
  • Viết bài kiểm tra tự động
  • Khởi chạy ứng dụng
  • Kiểm tra

Dụng cụ

1. docker để chạy nút và Waves Explorer

Nếu bạn không muốn bắt đầu một nút, bạn có thể bỏ qua bước này. Rốt cuộc, có một mạng thử nghiệm và thử nghiệm. Nhưng nếu không triển khai nút của riêng bạn, quá trình thử nghiệm có thể kéo dài.

  • Bạn sẽ liên tục cần các tài khoản mới có mã thông báo thử nghiệm. Vòi mạng thử nghiệm truyền 10 WAVES cứ sau 10 phút.
  • Thời gian chặn trung bình trong mạng thử nghiệm là 1 phút, trong nút – 15 giây. Điều này đặc biệt đáng chú ý khi một giao dịch yêu cầu nhiều xác nhận.
  • Có thể lưu vào bộ nhớ đệm tích cực trên các nút kiểm tra công khai.
  • Chúng cũng có thể tạm thời không khả dụng do bảo trì.

Từ bây giờ tôi sẽ cho rằng bạn đang làm việc với nút của riêng mình.

2. Công cụ dòng lệnh ván lướt sóng

  • Tải xuống và cài đặt Node.js bằng ppa, homebrew hoặc exe tại đây: https://nodejs.org/en/download/.
  • Cài đặt Surfboard, một công cụ cho phép bạn chạy thử nghiệm trên nút hiện có.

npm install -g @waves/surfboard

3. Plugin mã Visual Studio

Bước này là tùy chọn nếu bạn không phải là người yêu thích IDE và thích các trình soạn thảo văn bản. Tất cả các công cụ cần thiết đều là tiện ích dòng lệnh. Nếu bạn sử dụng vim, hãy chú ý đến plugin vim-đi xe.

Tải xuống và cài đặt Visual Studio Code: https://code.visualstudio.com/

Mở VS Code và cài đặt plugin wave-ride:

Cách xây dựng, triển khai và thử nghiệm Waves RIDE dApp

Tiện ích mở rộng trình duyệt Waves Keeper: https://wavesplatform.com/products-keeper

Xong!

Khởi động nút và Waves Explorer

1. Khởi động nút:

docker run -d -p 6869:6869 wavesplatform/waves-private-node

Đảm bảo rằng nút được khởi chạy thông qua API REST trong http://localhost:6869:

Cách xây dựng, triển khai và thử nghiệm Waves RIDE dApp
API REST Swagger cho nút

2. Bắt đầu phiên bản Waves Explorer:

docker run -d -e API_NODE_URL=http://localhost:6869 -e NODE_LIST=http://localhost:6869 -p 3000:8080 wavesplatform/explorer

Mở trình duyệt và truy cập http://localhost:3000. Bạn sẽ thấy mạch nút cục bộ trống được xây dựng nhanh như thế nào.

Cách xây dựng, triển khai và thử nghiệm Waves RIDE dApp
Waves Explorer hiển thị phiên bản nút cục bộ

Cấu trúc RIDE và công cụ Ván lướt sóng

Tạo một thư mục trống và chạy lệnh trong đó

surfboard init

Lệnh khởi tạo một thư mục có cấu trúc dự án, các ứng dụng và thử nghiệm “hello world”. Nếu bạn mở thư mục này bằng VS Code, bạn sẽ thấy:

Cách xây dựng, triển khai và thử nghiệm Waves RIDE dApp
Ván lướt sóng.config.json

  • Trong thư mục ./ride/, bạn sẽ tìm thấy một tệp wallet.ride - thư mục chứa mã dApp. Chúng tôi sẽ phân tích ngắn gọn về dApp trong khối tiếp theo.
  • Trong thư mục ./test/ bạn sẽ tìm thấy tệp *.js. Các bài kiểm tra được lưu trữ ở đây.
  • ./surfboard.config.json – tệp cấu hình để chạy thử nghiệm.

Envs là một phần quan trọng. Mỗi môi trường được cấu hình như thế này:

  • Điểm cuối API REST của nút sẽ được sử dụng để khởi chạy dApp và CHAIN_ID của mạng.
  • Cụm từ bí mật dành cho tài khoản có mã thông báo sẽ là nguồn mã thông báo thử nghiệm của bạn.

Như bạn có thể thấy, theo mặc định, Surfboard.config.json hỗ trợ nhiều môi trường. Mặc định là môi trường cục bộ (khóa defaultEnv là tham số có thể thay đổi).

Ứng dụng ví-demo

Phần này không phải là tài liệu tham khảo về ngôn ngữ RIDE. Thay vào đó, hãy xem xét ứng dụng mà chúng tôi triển khai và thử nghiệm để hiểu rõ hơn những gì đang xảy ra trong chuỗi khối.

Hãy xem xét một ứng dụng Ví-demo đơn giản. Bất kỳ ai cũng có thể gửi mã thông báo đến địa chỉ dApp. Bạn chỉ có thể rút WAVES của mình. Hai hàm @Callable có sẵn thông qua InvokeScriptTransaction:

  • deposit()yêu cầu thanh toán đính kèm bằng WAVES
  • withdraw(amount: Int)trả về mã thông báo

Trong suốt vòng đời của dApp, cấu trúc (địa chỉ → số tiền) sẽ được duy trì:

Hoạt động
Trạng thái kết quả

ban đầu
trống

Alice gửi 5 WAVES
địa chỉ alice → 500000000

Bob gửi 2 WAVES

địa chỉ alice → 500000000
địa chỉ bob → 200000000

Bob rút 7 WAVES
TỪ CHỐI!

Alice rút 4 WAVES
địa chỉ alice → 100000000
địa chỉ bob → 200000000

Đây là mã để hiểu đầy đủ tình hình:

# In this example multiple accounts can deposit their funds and safely take them back. No one can interfere with this.
# An inner state is maintained as mapping `address=>waves`.
{-# STDLIB_VERSION 3 #-}
{-# CONTENT_TYPE DAPP #-}
{-# SCRIPT_TYPE ACCOUNT #-}
@Callable(i)
func deposit() = {
 let pmt = extract(i.payment)
 if (isDefined(pmt.assetId))
    then throw("works with waves only")
    else {
     let currentKey = toBase58String(i.caller.bytes)
     let currentAmount = match getInteger(this, currentKey) {
       case a:Int => a
       case _ => 0
     }
     let newAmount = currentAmount + pmt.amount
     WriteSet([DataEntry(currentKey, newAmount)]) 
   }
 }
@Callable(i)
func withdraw(amount: Int) = {
 let currentKey = toBase58String(i.caller.bytes)
 let currentAmount = match getInteger(this, currentKey) {
   case a:Int => a
   case _ => 0
 }
 let newAmount = currentAmount - amount
 if (amount < 0)
   then throw("Can't withdraw negative amount")
   else if (newAmount < 0)
     then throw("Not enough balance")
     else ScriptResult(
       WriteSet([DataEntry(currentKey, newAmount)]),
       TransferSet([ScriptTransfer(i.caller, amount, unit)])
      )
 }
@Verifier(tx)
func verify() = false

Mã mẫu cũng có thể được tìm thấy tại GitHub.

Plugin VSCode hỗ trợ biên dịch liên tục trong khi chỉnh sửa tệp. Do đó, bạn luôn có thể theo dõi lỗi trong tab VẤN ĐỀ.

Cách xây dựng, triển khai và thử nghiệm Waves RIDE dApp
Nếu bạn muốn sử dụng trình soạn thảo văn bản khác khi biên dịch tệp, hãy sử dụng

surfboard compile ride/wallet.ride

Điều này sẽ xuất ra một loạt mã RIDE được biên dịch base64.

Tập lệnh thử nghiệm cho 'wallet.ride'

Chúng ta hãy nhìn vào tập tin kiểm tra. Được hỗ trợ bởi khung Mocha của JavaScript. Có chức năng “Trước” và ba bài kiểm tra:

  • “Trước” cấp tiền cho nhiều tài khoản thông qua MassTransferTransaction, biên dịch tập lệnh và triển khai nó vào chuỗi khối.
  • “Có thể gửi tiền” gửi InvokeScriptTransaction tới mạng, kích hoạt chức năng Deposit() cho mỗi tài khoản trong số hai tài khoản.
  • Thử nghiệm “Không thể rút nhiều hơn số tiền đã gửi” cho thấy không ai có thể đánh cắp token của người khác.
  • “Có thể gửi tiền” kiểm tra xem việc rút tiền có được xử lý chính xác hay không.

Chạy thử nghiệm từ Surfboard và phân tích kết quả trong Waves Explorer

Để chạy thử nghiệm, hãy chạy

surfboard test

Nếu bạn có nhiều tập lệnh (ví dụ: bạn cần một tập lệnh triển khai riêng), bạn có thể chạy

surfboard test my-scenario.js

Surfboard sẽ thu thập các tệp kiểm tra trong thư mục ./test/ và chạy tập lệnh trên nút được định cấu hình trong Surfboard.config.json. Sau vài giây, bạn sẽ thấy một cái gì đó như thế này:

wallet test suite
Generating accounts with nonce: ce8d86ee
Account generated: foofoofoofoofoofoofoofoofoofoofoo#ce8d86ee - 3M763WgwDhmry95XzafZedf7WoBf5ixMwhX
Account generated: barbarbarbarbarbarbarbarbarbar#ce8d86ee - 3MAi9KhwnaAk5HSHmYPjLRdpCAnsSFpoY2v
Account generated: wallet#ce8d86ee - 3M5r6XYMZPUsRhxbwYf1ypaTB6MNs2Yo1Gb
Accounts successfully funded
Script has been set
   √ Can deposit (4385ms)
   √ Cannot withdraw more than was deposited
   √ Can withdraw (108ms)
3 passing (15s)

Hoan hô! Các thử nghiệm đã được thông qua. Bây giờ chúng ta hãy xem điều gì xảy ra khi sử dụng Waves Explorer: nhìn vào các khối hoặc dán một trong các địa chỉ trên vào tìm kiếm (ví dụ: địa chỉ tương ứng wallet#. Ở đó bạn có thể tìm thấy lịch sử giao dịch, trạng thái dApp, tệp nhị phân được dịch ngược.

Cách xây dựng, triển khai và thử nghiệm Waves RIDE dApp
Nhà thám hiểm sóng. Một ứng dụng vừa được triển khai.

Một số mẹo về ván lướt sóng:

1. Để kiểm tra trong môi trường testnet, hãy sử dụng:

surfboard test --env=testnet

Nhận mã thông báo thử nghiệm

2. Nếu bạn muốn xem các phiên bản JSON của giao dịch và cách chúng được nút xử lý, hãy chạy thử nghiệm với -v (có nghĩa là 'dài dòng'):

surfboard test -v

Sử dụng ứng dụng với Waves Keeper

1. Thiết lập Waves Keeper để hoạt động: http://localhost:6869

Cách xây dựng, triển khai và thử nghiệm Waves RIDE dApp
Thiết lập Waves Keeper để hoạt động với nút cục bộ

2. Nhập cụm từ bí mật bằng mã thông báo cho mạng? Để đơn giản, hãy sử dụng hạt giống ban đầu của nút của bạn: waves private node seed with waves tokens. Địa chỉ: 3M4qwDomRabJKLZxuXhwfqLApQkU592nWxF.

3. Bạn có thể tự chạy một ứng dụng trang đơn không có máy chủ bằng cách sử dụng npm. Hoặc đi đến cái hiện có: chrome-ext.wvservices.com/dapp-wallet.html

4. Nhập địa chỉ ví từ lần chạy thử nghiệm (được gạch chân ở trên) vào hộp văn bản địa chỉ dApp

5. Nhập một số tiền nhỏ vào trường “Gửi tiền” và nhấp vào nút:

Cách xây dựng, triển khai và thử nghiệm Waves RIDE dApp
Waves Keeper yêu cầu quyền ký InvokeScriptTransaction với mức thanh toán là 10 WAVES.

6. Xác nhận giao dịch:

Cách xây dựng, triển khai và thử nghiệm Waves RIDE dApp
Giao dịch được tạo và phát lên mạng. Bây giờ bạn có thể thấy ID của cô ấy

7. Giám sát giao dịch bằng Waves Explorer. Nhập ID vào trường tìm kiếm

Cách xây dựng, triển khai và thử nghiệm Waves RIDE dApp

Kết luận và thông tin bổ sung

Chúng tôi đã xem xét các công cụ để phát triển, thử nghiệm, triển khai và sử dụng các dApp đơn giản trên Nền tảng Waves:

  • ngôn ngữ ĐI XE
  • Trình chỉnh sửa mã VS
  • Sóng thám hiểm
  • Ván lướt sóng
  • Người giữ sóng

Link dành cho những ai muốn tiếp tục học RIDE:

Các ví dụ khác
IDE trực tuyến với các ví dụ
Tài liệu về sóng
Trò chuyện của nhà phát triển trong Telegram
Sóng và RIDE trên stackoverflow
MỚI! Các khóa học trực tuyến về tạo dApp trên Nền tảng Waves

Tiếp tục đi sâu vào chủ đề RIDE và tạo dApp đầu tiên của bạn!

TL; DR: bit.ly/2YCFnwY

Nguồn: www.habr.com

Thêm một lời nhận xét