閱讀時間 6 分鐘
引言
親愛的讀者,大家好!今天是個令人振奮的日子,因為我們即將展開一場探索 Solana 區塊鏈的旅程。 Solana 是一項嶄露頭角的區塊鏈,致力於改進當前生態系統的解決方案,以應對「提供安全、可擴展且去中心化的共識協議」這一複雜課題。Solana 運用了眾多技術,試圖從其「大哥」以太坊手中爭取市場份額。在本指南中,您將學習如何連線至 Solana、在其開發網(devnet)上取得資金,並利用這項嶄新且令人興奮的技術發送交易。
想看影片教學嗎?跟著 Sahil 一起學習如何使用 JavaScript 在 Solana 上發送交易。
先決條件:
- 您的系統上已安裝 Node.js。
- 熟悉命令列/終端機。
- 一款用於編寫程式碼的文字編輯器。
設定專案
在像炒低價股的日內交易者那樣瘋狂發送 Solana 交易之前,你需要先設定好你的專案!首先,建立一個目錄。在本指南中,我們將它命名為 SolanaTransaction,但你可以隨意命名。 建立新的專案資料夾後,我們需要一個檔案來撰寫程式碼。同樣地,只要檔案名稱以.js結尾,您可隨意命名,但我們將此檔案命名為sendSol.js。請在控制台輸入以下指令以繼續操作。
mkdir SolanaTransaction
cd SolanaTransaction
touch sendSol.js
既然已經說清楚了,請用你最喜歡的文字編輯器打開sendSol.js檔案。
建立 Solana 節點
使用您的 Quicknode 端點連線至 Solana 叢集
若要在 Solana 上進行開發,您需要一個 API 端點來連線至該網路。您可以使用公開節點,或自行部署並管理基礎架構;不過,若您希望將回應時間縮短 8 倍,不妨將繁重的工作交給我們處理。
了解為何在 索拉納 選擇 Quicknode,立即開始免費試用 這裡. 我們將使用一個 索拉納 Devnet 終點。
複製該 HTTP 服務提供者連結:
連線至 Solana
要連線至 Solana 提供的開發網路(devnet),我們需要安裝@solana/web3.js函式庫。請執行以下指令來完成此操作。
npm i @solana/web3.js@1
安裝完 Solana 的 JavaScript 函式庫後,我們現在就可以連線至網路了。
//sendSol.js
const web3 = require("@solana/web3.js");
// Connect to cluster
const connection = new web3.Connection(
"<YOUR_QUICKNODE_URL_HERE>",
'confirmed',
);
以下是該程式碼的簡要說明:
- 第 2 行:導入 solana/web3.js 函式庫。
- 第 4-6 行:建立新的連線物件。連線的建構函式會接受端點 URL 的字串表示形式(我們在前一步驟中已產生),以及一個承諾等級。
隨著 連結 配置完畢後,您現在便能向 Solana 網路發起請求。若要測試連線是否正常,您可以 console.log(connection) 以記錄 連線物件.
生成地址與資金
連上網路後,我們需要取得用來生成地址的工具,並為網路籌集資金。首先,我們需要生成一組新的密鑰對,並空投一些 SOL。我們已建立了一個簡單的工具,可為您生成新的密鑰對:
注意:若過於頻繁地發送空投請求,可能會觸發 429(請求過多)錯誤。
請貼上您的 秘密 以及 來自 請將錢包地址填入您程式碼中以下位置: web3 聲明。
最後,新增一個收件地址——我們將隨機產生一個地址,用來寄送我們的 SOL,方法是 const to = web3.Keypair.generate(); 您的程式碼應如下所示:
//sendSol.js
const web3 = require("@solana/web3.js");
const connection = new web3.Connection(
"<YOUR_QUICKNODE_URL_HERE>",
'confirmed',
);
const secret=[00, ... 00]; // Replace with your secret key
const from = web3.Keypair.fromSecretKey(new Uint8Array(secret));
// Generate a random address to send to
const to = web3.Keypair.generate();
逐行解析這段程式碼:
秘密: 這是我們在上一步驟所生成的私鑰。它用於簽署交易——我們已經將一些開發網(devnet)的 SOL 存入這個帳戶中。來自: 建立一個源自 unit8array 的私密金鑰。至: 建立一組新的金鑰對,我們將透過此金鑰對進行資金轉帳。
完成上述所有步驟後,您現在應該會看到:
- 與 Solana 網路的連線。
- 一個可用於轉出 SOL 的帳戶。
- 一個用於接收 SOL的帳戶地址。
原來如此,有了這些所有元件,你現在就能完成一筆交易了!
傳送交易
接下來就是有趣的部分了!現在我們可以向網路發送一筆交易了。這個過程包含兩個步驟。首先,我們需要建立一個新的交易物件;其次,我們必須將該交易發送給另一位使用者,並在交易上加上我們的簽名。以下這段非同步程式碼將具體示範如何操作:
(async () => {
const transaction = new web3.Transaction().add(
web3.SystemProgram.transfer({
fromPubkey: from.publicKey,
toPubkey: to.publicKey,
lamports: web3.LAMPORTS_PER_SOL / 100,
}),
);
// Sign transaction, broadcast, and confirm
const signature = await web3.sendAndConfirmTransaction(
connection,
transaction,
[from],
);
console.log('SIGNATURE', signature);
})()
建立交易
由此可見,前面的每個步驟都有其對應的函式。我們可以從第一個函式web3.Transaction().add(web3.SystemProgram.transfer()) 開始說明。這段程式碼相當冗長,需要拆解成更小的部分才能完全理解。
- web3.Transaction()— 建立一個空的 Transaction 物件。
- add()- 提供一個方法,讓我們可以向 Transaction 物件新增指令。
- web3.SystemProgram.transfer()—— 這是負責將資金從一個帳戶轉帳至另一個帳戶的方法。它需要幾個參數。這對應於我們儲存在交易常數中的第一個函式的第 2 至 6 行。
參數:
- fromPubkey —— 我們用來轉出資金的帳戶之公鑰。
- toPubkey - 該交易中接收資金之帳戶的公鑰。
- lamports:- 需發送的 lamports 數量。您可以將 lamports 視為 Sol 的單位,就像 gwei 是 Ether 的單位一樣。
簽署交易
既然交易物件已準備就緒,我們現在需要使用私鑰對其進行簽名,以授權這筆交易。上文程式碼區塊中的第二個函式負責執行此步驟。我們可以將其拆解,以便更清楚地了解其中的運作原理。
- 第 10 行:宣告簽名常數,該常數將儲存sendAndConfirmTransaction()的執行結果
- 第 11 至 13 行:向前述函式傳遞參數。依序而言,這些參數分別是連線物件、待傳送的交易,以及以陣列形式表示的發送者私鑰/公鑰對。
- 第 15 行:記錄成功的簽名,其以交易雜湊值表示。
完成上述所有步驟後,您現在就可以執行程式碼了。請將 Quicknode 的端點 URL 和密鑰儲存至環境變數中,方法如下:
QUICKNODE_URL=<YOUR_QUICKNODE_URL_HERE>
SECRET_KEY=<SECRET_KEY_HERE>
替換 <YOUR_QUICKNODE_URL_HERE> 以及 <SECRET_KEY_HERE> 並填入實際數值。
最後的程式碼片段應呈現如下樣貌
//sendSol.js
require('dotenv').config();
const web3 = require("@solana/web3.js");
const connection = new web3.Connection(
process.env.QUICKNODE_URL,
'confirmed',
);
const secret = JSON.parse(process.env.SECRET_KEY);
const from = web3.Keypair.fromSecretKey(new Uint8Array(secret));
// Generate a random address to send to
const to = web3.Keypair.generate();
(async () => {
const transaction = new web3.Transaction().add(
web3.SystemProgram.transfer({
fromPubkey: from.publicKey,
toPubkey: to.publicKey,
lamports: web3.LAMPORTS_PER_SOL / 100, //0.01 SOL
}),
);
// Sign transaction, broadcast, and confirm
const signature = await web3.sendAndConfirmTransaction(
connection,
transaction,
[from],
);
console.log('SIGNATURE', signature);
})()
現在您可以在終端機中執行sendSol.js檔案,並獲得類似以下的輸出結果!

結論
恭喜!若您已讀到這部分,表示您已成功在 Solana 網路發送了一筆交易。Solana 是一個非常有趣的區塊鏈,在使用者體驗(UX)方面似乎對以太坊網路有所改進。交易速度更快,手續費也更低。雖然 Solana 尚未像以太坊那樣經過實戰考驗,但絕對值得密切關注。更重要的是,您已經走在時代的前端了! 能說自己曾使用 JavaScript 在 Solana 上發送過交易的人並不多,但你做到了!
訂閱我們的電子報,獲取更多關於以太坊的文章與指南。如有任何意見回饋,歡迎透過Twitter 聯絡我們。您隨時都可以在我們的Discord社群伺服器上與我們聊天,那裡聚集了您這輩子見過最酷的開發者們 :)
我們 ❤️ 您的回饋!
如果您有任何意見回饋或對新主題的建議,請告訴我們。我們非常樂意聽取您的意見。