Vietnamese translated content

Thiết lập môi trường phát triển

Trong bài viết này, chúng ta sẽ điểm qua quy trình thiết lập môi trường phát triển trọn vẹn dành cho việc lập trình trên hệ sinh thái TON. Những công cụ sau đây sẽ được thảo luận:

  • TON binaries (lite-client, tonlib, func, fift, ...)

  • toncli

  • ton-contract-executor

  • tonstarter-contracts

  • MyLocalTON

TON Binaries

LƯU Ý: Việc hoàn thành bước này là cần thiết cho việc lập trình trên chuỗi khối TON.

Để lập trình và tương tác với chuỗi khối TON, bạn sẽ cần binaries cần thiết cho các trình biên dịch (compilers), các máy trạm (clients), các nút (nodes), ... . Có hai lựa chọn để lấy các hệ nhị phân này:

  • Biên dịch từ mã nguồn

  • Lấy các binaries từ các bản Auto Builds

Chúng ta cần phải đi tiếp với lựa chọn đầu vì các bản Builds tự động chưa khả dụng cho nhánh mục tiêu của mình. Còn nữa, TON Binaries chính thức có thể được tải về từ kho lưu trữ Auto Builds của ton. Nhưng chúng ta sẽ dùng một bản phân nhánh (fork) của TON vì nó cung cấp khả năng kiểm thử khi cần sau này. Để bắt đầu, làm theo những bước sau:

  1. Cài đặt phiên bản mới nhất của:

    • make

    • cmake >= 3.0.2

    • g++ hay clang (hoặc một trình biên dịch tương thích với C++ 14 khác)

    • OpenSSL (với C Headers) >= 1.1.1

  2. Nhân bản (clone) SpyChesses's TON và chuyển qua nhánh toncli-local:

    git clone https://github.com/SpyCheese/ton 
    git checkout toncli-local

  3. Tạo một thư mục xây dựng ở nơi tùy ý, chúng ta sẽ nhắc đến nó dưới dạng <ton-build>. Giả sử bạn có nhân bản của ton trong <ton-rep>, trong giao diện terminal:

    cd <ton-build>
    cmake <ton-rep>

  4. Build từng mục tiêu:

    cmake --build . --target lite-client
    cmake --build . --target func
    cmake --build . --target fift

  5. Các bước này sẽ mất một khoảng thời gian, hãy đợi cho đến khi chúng hoàn thành. Lúc này các binaries sẽ khả dụng trong:

    fift: <ton-build>/crypto/fift
    func: <ton-build>/crypto/func
    lite-client: <ton-build>/lite-client/lite-client

    Bạn có thể sao chép chúng tới thư mục đặc biệt và thêm chúng vào PATH. 6. TON Binaries đã được tạo dựng và đang sẵn sàng hoạt động!

toncli

toncli là một cli (Command-line interface - Giao diện dòng lệnh) đa nền tảng cho TON, nó giúp thao tác và tương tác hợp đồng thông minh với chuỗi khối trở nên dễ dàng hơn nhiều. Chúng ta sẽ dùng một bản phân nhánh (fork) của toncli có kèm theo một bộ khung kiểm thử mới nên vì thế nó cũng cần bản phân nhánh của TON binaries. Để cài đặt bạn phải theo các bước sau đây:

  1. Đảm bảo rằng bạn đã hoàn thành phần TON Binaries ở trên.

  2. Cài đặt python(>=3.9) từ trang web chính thức lên hệ thống của bạn.

Lưu ý 1: Không sử dụng phiên bản từ cửa hàng Microsoft nếu bạn đang dùng windows.

Lưu ý 2: Chắc chắn rằng bạn đã thêm python vào phần PATH (trên windows hãy chọn đánh dấu vào lựa chọn Add Python 3.xx to PATH)

  1. Cài đặt toncli bằng lệnh này:

    git clone https://github.com/AminRezaei0x443/toncli
    cd toncli
    git checkout dev
    python setup.py develop

Lưu ý: Nếu bạn nhìn thấy WARNING: The script toncli is installed in '.../Python/3.X/bin' which is not on PATH. Thì bạn hãy thêm đường dẫn được nhắc đến vào biến môi trường PATH của bạn

  1. Đi tới thư mục của TON binaries và mở terminal trong thư mục đó. Sau đó, chạy lệnh toncli vào terminal. Bạn sẽ thấy nó tự động phát hiện các binaries và thiết lập chúng. Nếu vì bất kỳ lý do gì nó không tìm thấy các binaries, bạn chỉ cần cung cấp đường dẫn tóm tắt của các binaries nếu nó cần. Bạn sẽ thấy đầu ra hiển thị như thế này khi các binaries được phát hiện thành công: Như bạn thấy đấy, toncli đi kèm theo nhiều câu lệnh giúp cho quá trình phát triển và tương tác của hợp đồng thông minh. Các câu lệnh đều có hướng dẫn kĩ lưỡng nhưng chúng ta sẽ điểm qua ứng dụng của chúng tại đây. Thiết lập một dự án Để thiết lập một dự án có thể sử dụng lệnh start để tạo mới dự án từ dự án mẫu. Hiện tại có 4 lựa chọn: wallet, external_data, external_code, và simple_storage. Chúng ta đi tiếp tới lựa chọn simple_storage:

    toncli start simple_storage

    Bạn có thể xem cách mà hợp đồng đã được tích hợp vào simple_storage/func/ và thư mục kiểm thử được tích hợp vào simple_storage/tests/. Tệp yaml của dự án Tệp project.yaml chứa cấu trúc và dữ liệu chi tiết của dự án. Bạn có thể định nghĩa hợp đồng với các file data cell/fift của nó, các hợp đồng func, và các tệp kiểm thử tại đây để toncli có thể nhận diện và sử dụng chúng. Các hợp đồng kiểm thử Kiểm thử là cần thiết trong quá trình phát triển hợp đồng giúp chắc chắn sự an toàn của hợp đồng và ngăn những hành vi không ngờ tới. Để chạy kiểm thử, làm như sau:

    toncli run_tests

    Lệnh này chạy tất cả các trường hợp kiểm thử đã được định nghĩa trong tệp project.yaml cho hợp đồng. Bạn có thể kiểm thử một hợp đồng đặc biệt bằng cách thêm tham số -c

    toncli run_tests -c contract

    Triển khai hợp đồng Bạn có thể triển khai hợp đồng lên mạng chính hoặc mạng thử nghiệm một cách dễ dàng thông qua lệnh này:

    toncli deploy -n testnet -wc 0

    Nó sẽ tạo một ví mới cho bạn nếu chưa có và sẽ yêu cầu bạn gửi một số TON cho nó để trả phí triển khai hợp đồng. Bạn có thể xem mô tả chi tiết hơn tại toncli's docs.

ton-contract-executor

Lưu ý: Thư viện này dựa trên ton-compiler chỉ hỗ trợ macOS, tại thời điểm bài viết này được xuất bản. Nên nếu bạn không phải là người dùng macOS thì bạn sẽ không thể sử dụng thư viện này cho đến khi nó được hỗ trợ.

ton-contract-executor cho phép bạn chạy TVM cục bộ và thực thi hợp đồng, giúp việc ghi, gỡ lỗi và kiểm thử toàn bộ hợp đồng của bạn trước khi đưa chúng lên mạng dễ dàng hơn. Để thiết lập, bạn sẽ cần:

  1. Cài đặt Node.js

  2. Cài đặt quản lý gói yarn

npm install --global yarn
  1. Tạo một thư mục đại diện cho dự án, và khởi tạo nó:

yarn init
  1. Cài đặt ton-contract-executorton:

yarn add ton-contract-executor
yarn add ton
  1. Tạo tệp contract.js với nội dung:

   let {SmartContract} = require("ton-contract-executor");
   let { Cell } = require("ton");

   async function main() {
      const source = `
      () main() {
         ;; noop
      }

      int sum(int a, int b) method_id {
         return a + b;
      }
   `

      let contract = await SmartContract.fromFuncSource(source, new Cell())
      
      let res = await contract.invokeGetMethod('sum', [
         // argument a
         { type: 'int', value: '1' },
         // argument b
         { type: 'int', value: '2' },
      ])
      
      console.log('1 + 2 = ', res.result[0])
   };

   main().then(()=>{});
  1. Sau khi đã thực thi thành công, bạn sẽ thấy console log với kết quả chính xác. Đây chỉ là một ví dụ mẫu đơn giản, bạn có thể lập trình đoạn mã để đọc code từ các tệp hợp đồng, và thực thi cũng như kiểm thử những phương thức của chúng. Một số ví dụ khác cũng đang có tại kho lưu trữ chính.

tonstarter-contracts

Dự án này là một template mẫu mở đầu cho việc phát triển ứng dụng phi tập trung (dApps) trên TON. Nó hiện đang chứa code cho việc lập trình hợp đồng nhưng nó cũng sẽ chứa giao diện và bot telegram mẫu cho việc tương tác với hợp đồng trong tương lai. Để bắt đầu:

  1. Cài đặt phiên bản mới của Node.js.

  2. Đảm bảo rằng bạn đã hoàn thành bước TON Binaries và thêm binaries vào biến môi trường PATH. (fiftfunc phải được nhận diện)

  3. Nhân bản kho lưu trữ:

git clone https://github.com/ton-defi-org/tonstarter-contracts
  1. Cài đặt dependencies:

npm install
  1. Bạn đã hoàn thành!

Viết Code Hợp đồng nằm ở contracts/, và hành vi của mỗi thư mục con và tiện ích mở rộng trong cấu trúc thư mục được sắp xếp như sau:

  • contracts/*.fc: hợp đồng gốc đơn lẻ

  • contracts/imports/*.fc: các nguồn nhập được chia sẻ giữa các hợp đồng với nhau

  • contracts/imports/<contract>/*.fc: nguồn nhập dành riêng cho hợp đồng - không chia sẻ

  • contracts/<contract>.tld: TL-B Schema tùy chọn cho dữ liệu and tin nhắn ops

  • contracts/<contract>.ts: tệp typescript tùy chọn dùng để mã hóa dữ liệu và tin nhắn ops

Build Code Trong kho lưu trữ gốc, chạy lệnh npm run build để build hợp đồng. Nếu có lỗi, chúng sẽ được hiển thị, nếu không thì chúng ta có những tệp như sau:

  • <contract>.merged.fc - mã nguồn FunC với tất cả nguồn nhập đã được gộp và nén lại.

  • <contract>.fif - hợp đồng được biên dịch dưới dạng Fift assembly

  • <contract>.cell - binary code cell của hợp đồng đã được biên dịch (dành cho việc triển khai)

Kiểm thử

Bạn cần phải build code trước khi đến với phần kiểm thử. Chạy kiểm thử bằng cách nhập npm run test. Những trường hợp kiểm thử sẽ được khởi chạy bằng TVM thông qua ton-contract-executor.

Lưu ý: Như đã đề cập trước đó, tại thời điểm bài viết này diễn ra, ton-contract-executor chỉ chạy trên nền tảng macOS vì dependency của nó. Nên là, bạn sẽ không thể chạy kiểm thử nếu bạn không dùng macOS

Triển khai Trước tiên, hãy build hợp đồng. Mỗi hợp đồng cần triển khai nên có một đoạn mã tại build/<contract>.deploy.ts để trả về dữ liệu cell khởi tạo của nó. Ví triển khai có thể được cấu hình bởi biến DEPLOYER-MNEMONIC trong tệp .env. Bạn nên cung cấp 24 từ bí mật trong tệp .env như sau:

DEPLOYER_MNEMONIC="tumble degree cousin sand ..."

Chạy lệnh npm run deploy để triển khai lên mạng chính và npm run deploy:testnet cho mạng thử nghiệm, sau đó theo dõi hướng dẫn trên màn hình. Thông tin chi tiết có tại kho lưu trữ chính.

MyLocalTON

MyLocalTON là một chuỗi khối TON đa nền tảng. Nó là một ứng dụng có định dạng .jar. Nó được sử dụng để đơn giản hóa việc kiểm thử và kiểm tra trạng thái của chuỗi khối mà không cần phải sử dụng và triển khai lên mạng thử nghiệm. Để thiết lập MylocalTON:

  1. Đảm bảo rằng bạn đã cài đặt OpenJDK17, nếu đã hoàn thành xin vui lòng bỏ qua bước này.

Đây là hướng dẫn cài đặt OpenJDK nếu bạn cần:

  1. Đi tới phần Auto Builds của MylocalTON, mở build thành công mới nhất lên và tải MylocalTON từ phần artifacts được sinh ra.

  2. Giải nén tệp đã tải và thực thi nó với Java:

java -jar MyLocalTon.jar
  1. Bạn sẽ thấy màn hình như dưới đây, khởi tạo chuỗi khối TON sẽ tốn một khoảng thời gian:

  2. Sau khi cài đặt thành công, chuỗi khối sẽ sẵn sàng:

Last updated