此專案將展示如何使用 Solana Javascript API 在 Solana 區塊鏈上和程式交互。
此專案包含:
- 鏈上的 Hello World 程式
- 可以向帳戶發送
hello
並獲取hello
的發送次數。
如果您決定在 Gitpod 中打開,請參考 README-gitpod.md,否則請繼續閱讀。
要創建和運行此範例,請確認並安裝以下套件
- 安裝 node
- 安裝 npm
- 從 https://rustup.rs/ 安裝最新的 Rust(v1.56.1+)穩定版本
- 從 https://docs.solana.com/cli/install-solana-cli-tools 安裝 v1.8.2+ 的 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': 2045430982, 'solana-core': '1.7.8' }
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
與客戶端建立連接.
客戶端從 ./dist/program/helloworld-keypair.json
這個文件加載程式的密鑰對。客戶端使用那個密鑰對的公鑰訪問程式帳戶。如果程式帳戶不存在,
客戶端就會報錯並停止運行。如果程式存在,客戶端會創建一個對於該程式指定好的帳戶。
客戶端將通過調用 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
還有更多的東西要學習。以下範例展示了更多進階功能,例如自定義錯誤、進階帳戶處理、數據序列化建議、基準測試...等。