Skip to content

Latest commit

 

History

History
233 lines (161 loc) · 9.14 KB

README_ZH_TW.md

File metadata and controls

233 lines (161 loc) · 9.14 KB

Solana

Build status Gitpod Ready-to-Code

Hello world on Solana

此專案將展示如何使用 Solana Javascript API 在 Solana 區塊鏈上和程式交互。

此專案包含:

  • 鏈上的 Hello World 程式
  • 可以向帳戶發送 hello 並獲取 hello 的發送次數。

翻譯

目錄

快速開始

Open in Gitpod

如果您決定在 Gitpod 中打開,請參考 README-gitpod.md,否則請繼續閱讀。

要創建和運行此範例,請確認並安裝以下套件

如果這是您第一次使用 Docker 或 Rust,這些 安裝筆記 可能對您有幫助。

配置命令列

  1. 將命令列配置的 url 設置成 localhost 集群
$ solana config set --url localhost
  1. 創建命令列使用的密鑰對

如果這是你第一次使用 solana 命令列,你先得生成一个新的密鑰對

$ solana-keygen new

啟動本地 Solana 集群

默認情況下,此範例連接到本地 Solana 集群。

啟動本地 Solana 集群:

$ solana-test-validator

注意: 如果你要用 Windows 的話,你得先設置 WSL,才能用 solana-test-validator 的工具

關注交易日誌:

$ solana logs

安裝 npm 套件

$ 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 文件提供了有關 Solana 的更多消息並且所有的源代碼都在 github 上。

更多的問題?在 Discord 告訴我們。

學習 Client

此範例中的客戶端使用 JavaScript 語言撰寫:

進入點

客戶端入口點做了四件事

建立與集群的連接

客戶端通過調用 establishConnection 與客戶端建立連接.

檢查一下這個 helloworld 鏈上程式是否已經部署好了

客戶端從 ./dist/program/helloworld-keypair.json 這個文件加載程式的密鑰對。客戶端使用那個密鑰對的公鑰訪問程式帳戶。如果程式帳戶不存在, 客戶端就會報錯並停止運行。如果程式存在,客戶端會創建一個對於該程式指定好的帳戶。

發送 Hello 交易至鏈上

客戶端將通過調用 sayHello 並向程式發送 Hello 交易。此交易包含一條非常簡單的指令,此指令主要呼叫 helloworld 程式的帳戶公鑰希望向 greeter 帳戶說 Hello

查詢使用過 Hello 交易的 Solana 帳戶

客戶端每次對帳戶說 Hello 時,程式都會在 greeter 帳戶的數據中增加一個計數。客戶端查詢 greeter 帳戶的數據,並透過 reportHellos 查詢此帳戶當前被訪問的次數。

學習鏈上程式

鏈上 HelloWorld 程式 是一個 Rust 程式編譯成 Berkley Packet Format (BPF) 並儲存為可執行和可鏈接格式(ELF)共享對象.

此程式是使用以下程式編寫:

在 Solana 上編寫程式

要了解有關 Solana 程式設計模型的更多訊息,請參閱程式設計模型概述

要了解有關在 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

透過高級的範例擴展你的技能

還有更多的東西要學習。以下範例展示了更多高級功能,例如自定義錯誤、高級帳戶處理、數據序列化建議、基準測試...等。