此專案將展示如何使用 Solana Javascript API 在 Solana 區塊鏈上和程式交互。
此專案包含:
- 鏈上的 Hello World 程式
- 可以向帳戶發送
hello
並獲取hello
的發送次數。
如果您決定在 Gitpod 中打開,請參考 README-gitpod.md,否則請繼續閱讀。
要創建和運行此範例,請確認並安裝以下套件
- 安裝 node
- 安裝 npm
- 從 https://rustup.rs/ 安裝最新的 Rust 穩定版本
- 從 https://docs.solana.com/cli/install-solana-cli-tools 安裝 v1.6.6 的 Solana 命令列管理工具
如果這是您第一次使用 Docker 或 Rust,這些 安裝筆記 可能對您有幫助。
- 將命令列配置的 url 設置成 localhost 集群
$ solana config set --url localhost
- 創建命令列使用的密鑰對
如果這是你第一次使用 solana 命令列,你先得生成一个新的密鑰對
$ solana-keygen new
默認情況下,此範例連接到本地 Solana 集群。
啟動本地 Solana 集群:
$ solana-test-validator
注意: 如果你要用 Windows 的話,你得先設置 WSL,才能用 solana-test-validator
的工具
關注交易日誌:
$ solana logs
$ npm install
鏈上程式有 Rust 版本和 C 版本,最新的版本是運行範例時使用的版本。
$ npm run build:program-rust
$ npm run build:program-c
$ solana program deploy dist/program/helloworld.so
$ npm run start
公鑰將會有所不同:
Let's say hello to a Solana account...
Connection to cluster established: http://localhost:8899 { 'feature-set': 3714435735, 'solana-core': '1.6.6' }
Using account AiT1QgeYaK86Lf9kudqKthQPCWwpG8vFA1bAAioBoF4X containing 0.00141872 SOL to pay for fees
Using program Dro9uk45fxMcKWGb1eWALujbTssh6DW8mb4x8x3Eq5h6
Creating account 8MBmHtJvxpKdYhdw6yPpedp6X6y2U9dCpdYaZJdmwV3A to say hello to
Saying hello to 8MBmHtJvxpKdYhdw6yPpedp6X6y2U9dCpdYaZJdmwV3A
8MBmHtJvxpKdYhdw6yPpedp6X6y2U9dCpdYaZJdmwV3A has been greeted 1 times
Success
- 確認您已經啟動了本地 Solana 集群,構建 并 部署好了 鏈上程式。
- 集群的輸出日誌應包括程序日誌消息以及程式失敗的原因
program log: <message>
- 運行
solana logs
檢查程式日誌找出程式失敗的原因。-
Transaction executed in slot 5621: Signature: 4pya5iyvNfAZj9sVWHzByrxdKB84uA5sCxLceBwr9UyuETX2QwnKg56MgBKWSM4breVRzHmpb1EZQXFPPmJnEtsJ Status: Error processing Instruction 0: Program failed to complete Log Messages: Program G5bbS1ipWzqQhekkiCLn6u7Y1jJdnGK85ceSYLx2kKbA invoke [1] Program log: Hello World Rust program entrypoint Program G5bbS1ipWzqQhekkiCLn6u7Y1jJdnGK85ceSYLx2kKbA consumed 200000 of 200000 compute units Program failed to complete: exceeded maximum number of instructions allowed (200000) at instruction #334 Program G5bbS1ipWzqQhekkiCLn6u7Y1jJdnGK85ceSYLx2kKbA failed: Program failed to complete
-
要自定義示例,請更改 /src
下的文件。如果您更改 /src/program-rust
或 /src/program-c
下的任何文件,你將需要重新構建鏈上程式 並 重新部署鏈上程式。
現在,當您重新運行 npm run start
時,您應該看到更改的結果。
Solana 文件提供了有關 Solana 的更多消息並且所有的源代碼都在 github 上。
更多的問題?在 Discord 告訴我們。
此範例中的客戶端使用 JavaScript 語言撰寫:
客戶端入口點做了四件事
客戶端通過調用 establishConnection
與客戶端建立連接.
The client loads the keypair of the deployed program from ./dist/program/helloworld-keypair.json
and uses
the public key for the keypair to fetch the program account. If the program doesn't exist, the client halts
with an error. If the program does exist, it will create a new account with the program assigned as its owner
to store program state (number of hello's processed).
客戶端將通過調用 sayHello
並向程式發送 Hello
交易。此交易包含一條非常簡單的指令,此指令主要呼叫 helloworld
程式的帳戶公鑰希望向 greeter
帳戶說 Hello
。
客戶端每次對帳戶說 Hello
時,程式都會在 greeter
帳戶的數據中增加一個計數。客戶端查詢 greeter
帳戶的數據,並透過 reportHellos
查詢此帳戶當前被訪問的次數。
鏈上 HelloWorld 程式 是一個 Rust 程式編譯成 Berkley Packet Format (BPF) 並儲存為可執行和可鏈接格式(ELF)共享對象.
此程式是使用以下程式編寫:
要了解有關 Solana 程式設計模型的更多訊息,請參閱程式設計模型概述。
要了解有關在 Solana 上開發程式的更多訊息,請參閱已部署程式概述。
Solana 有三個公開集群:
devnet
- 啟用空投的開發者集群testnet
- Tour De Sol 沒有空投的測試集群mainnet-beta
- 主網集群
使用 Solana CLI 的 solana
指令去選擇集群
選擇 devnet
集群:
$ solana config set --url devnet
選擇 local
集群:
$ solana config set --url localhost
還有更多的東西要學習。以下範例展示了更多高級功能,例如自定義錯誤、高級帳戶處理、數據序列化建議、基準測試...等。