此專案將展示如何使用 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.7.8 的 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還有更多的東西要學習。以下範例展示了更多進階功能,例如自定義錯誤、進階帳戶處理、數據序列化建議、基準測試...等。