此專案將展示如何使用 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.5.8 的 Solana 命令列管理工具
如果這是您第一次使用 Docker 或 Rust,這些 安裝筆記 可能對您有幫助。
默認情況下,此範例連接到本地Solana集群。
啟動鏈上程式日誌:
$ export RUST_LOG=solana_runtime::system_instruction_processor=trace,solana_runtime::message_processor=debug,solana_bpf_loader=debug,solana_rbpf=debug啟動本地 Solana 集群:
$ solana-test-validator --log$ npm install鏈上程式有 Rust 版本和 C 版本,最新的版本是運行範例時使用的版本。
$ npm run build:program-rust$ npm run build:program-c$ npm run start公鑰將會有所不同:
Lets say hello to a Solana account...
Connection to cluster established: http://localhost:8899 { solana-core: 1.1.2 }
Loading hello world program...
Program loaded to account 47bZX1D1tdmw3KWTo5MfBrAwwHBJQQzQL4VnNGT7HtyQ
Creating account Eys1jdLHdZ2AE56QAKpfadbjziMZ6NAvpL7qsdtM6sbk to say hello to
Saying hello to Eys1jdLHdZ2AE56QAKpfadbjziMZ6NAvpL7qsdtM6sbk
Eys1jdLHdZ2AE56QAKpfadbjziMZ6NAvpL7qsdtM6sbk has been greeted 1 times
Success- 確保您已經 啟動本地 Solana 集群 並 佈建鏈上程式.
- 集群的輸出日誌應包括程序日誌消息以及程式失敗的原因
program log: <message>
- 檢查 Solana 集群日誌以尋找任何失敗的交易或失敗的鏈上程式
- 擴展日誌過濾器並重啟集群以查看更多細節
-
$ export RUST_LOG=solana_runtime::native_loader=trace,solana_runtime::system_instruction_processor=trace,solana_runtime::bank=debug,solana_bpf_loader=debug,solana_rbpf=debug $ solana-test-validator --log
-
- 擴展日誌過濾器並重啟集群以查看更多細節
要自定義示例,請更改 /src 下的文件。如果您更改 /src/program-rust 或 /src/program-c 下的任何文件,你將需要重新部署鏈上程式
現在,當您重新運行 npm run start 時,您應該看到更改的結果。
Solana 文件提供了有關 Solana 的更多消息並且所有的源代碼都在 github 上。
更多的問題?在 Discord 告訴我們。
此範例中的客戶端使用 JavaScript 語言撰寫:
客戶端入口點做了四件事
客戶端通過調用 establishConnection 與客戶端建立連接.
在群集上載入程式的過程包括將共享對象的位元組儲存在 Solana 帳戶的數據向量中,並標記帳戶為可實行的。
客戶端通過調用 載入程式載入程式。並將第一次的 loadProgram 稱為客戶端:
- 從檔案系統中讀取共享對象
- 計算
載入程式相關的手續費 - 空投時間戳記到付款人帳戶以支付費用
- 通過 Solana web3.js 函式載入
BPFLoader.load程式 - 創建一個新的
greeter帳戶,該帳戶將創建Hello交易 - 在配置文件中記錄已載入
helloworld程式和greeter帳戶的 公鑰。重複調用客戶端將載入相同的程式和greeter帳戶。(要強制重新加載程式,請執行npm clean:store)
客戶端將通過調用 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- 主網集群
使用 npm 指令去選擇集群
選擇 devnet 集群:
$ npm run cluster:devnet選擇 local 集群:
$ npm run cluster:localnet還有更多的東西要學習。以下範例展示了更多高級功能,例如自定義錯誤、高級帳戶處理、數據序列化建議、基準測試...等。