跳至主要內容

使用 Web3 發送交易

交易
web3.js
Alchemy
初階
埃蘭·哈爾彭
2020年11月4日
15 分鐘閱讀

這是一篇適合初學者的指南,介紹如何使用 Web3 發送以太坊交易。將交易發送到以太坊區塊鏈主要有三個步驟:建立、簽署和廣播。我們將逐一介紹這三個步驟,希望能解答您的任何疑問!在本教學中,我們將使用 Alchemy (opens in a new tab) 將我們的交易發送到以太坊鏈。您可以在此建立免費的 Alchemy 帳戶 (opens in a new tab)

注意: 本指南適用於在應用程式的_後端_簽署交易。如果您想在前端整合交易簽署,請查看整合 Web3 與瀏覽器提供者 (opens in a new tab)

基礎知識

就像大多數剛起步的區塊鏈開發人員一樣,您可能已經對如何發送交易(這應該是一件非常簡單的事情)做了一些研究,並遇到了大量的指南,每篇指南的說法都不盡相同,讓您感到有些不知所措和困惑。如果您正處於這種情況,請不要擔心;我們都曾有過這樣的經歷!因此,在我們開始之前,讓我們先釐清幾件事:

1. Alchemy 不會儲存您的私鑰

  • 這意味著 Alchemy 無法代表您簽署和發送交易。這樣做是出於安全考量。Alchemy 永遠不會要求您分享您的私鑰,您也絕對不應該與託管節點(或任何人)分享您的私鑰。
  • 您可以使用 Alchemy 的核心 API 從區塊鏈讀取資料,但要寫入資料,您需要使用其他工具來簽署交易,然後再透過 Alchemy 發送(這對於任何其他節點服務也是一樣的)。

2. 什麼是「簽署者」?

3. 為什麼我需要簽署我的交易?

  • 每個想要在以太坊網路上發送交易的使用者都必須簽署交易(使用他們的私鑰),以驗證交易的來源是否如其所稱。
  • 保護這個私鑰非常重要,因為擁有它的存取權限就等於擁有對您以太坊帳戶的完全控制權,允許您(或任何擁有存取權限的人)代表您執行交易。

4. 我該如何保護我的私鑰?

  • 有許多方法可以保護您的私鑰並使用它來發送交易。在本教學中,我們將使用 .env 檔案。不過,您也可以使用儲存私鑰的獨立提供者、使用金鑰庫檔案或其他選項。

5. eth_sendTransactioneth_sendRawTransaction 之間有什麼區別?

eth_sendTransactioneth_sendRawTransaction 都是以太坊 API 函數,它們將交易廣播到以太坊網路,以便將其新增到未來的區塊中。它們的區別在於處理交易簽署的方式。

使用 Web3 時,可以透過呼叫 web3.eth.sendSignedTransaction (opens in a new tab) 函數來存取 eth_sendRawTransaction

這就是我們在本教學中將要使用的內容。

6. 什麼是 Web3 函式庫?

好了,現在我們已經解決了其中幾個問題,讓我們繼續進行教學。歡迎隨時在 Alchemy 的 Discord (opens in a new tab) 中提問!

7. 如何發送安全、燃料最佳化且私密的交易?

注意: 本指南需要一個 Alchemy 帳戶、一個以太坊地址或梅塔馬斯克錢包,並安裝 Node.js 和 npm。如果沒有,請按照以下步驟操作:

  1. 建立免費的 Alchemy 帳戶 (opens in a new tab)
  2. 建立梅塔馬斯克帳戶 (opens in a new tab)(或取得一個以太坊地址)
  3. 安裝 Node.js 和 npm (opens in a new tab)

發送交易的步驟

1. 在 Sepolia 測試網上建立 Alchemy 應用程式

導覽至您的 Alchemy 儀表板 (opens in a new tab)並建立一個新的應用程式,為您的網路選擇 Sepolia(或任何其他測試網)。

2. 從 Sepolia 水龍頭請求 ETH

按照 Alchemy Sepolia 水龍頭 (opens in a new tab)上的指示接收 ETH。請確保包含您的 Sepolia 以太坊地址(來自 MetaMask),而不是其他網路。按照指示操作後,請再次確認您已在錢包中收到 ETH。

3. 建立一個新的專案目錄並 cd 進入該目錄

從命令列(Mac 的終端機)建立一個新的專案目錄並導覽進入:

mkdir sendtx-example
cd sendtx-example

4. 安裝 Alchemy Web3(或任何 Web3 函式庫)

在您的專案目錄中執行以下命令以安裝 Alchemy Web3 (opens in a new tab)

請注意,如果您想使用 Ethers.js 函式庫,請按照此處的指示操作 (opens in a new tab)

npm install @alch/alchemy-web3

5. 安裝 dotenv

我們將使用 .env 檔案來安全地儲存我們的 API 金鑰和私鑰。

npm install dotenv --save

6. 建立 .env 檔案

在您的專案目錄中建立一個 .env 檔案並新增以下內容(替換「your-api-url」和「your-private-key」)

  • 要尋找您的 Alchemy API URL,請導覽至您剛在儀表板上建立的應用程式的詳細資料頁面,點擊右上角的「View Key」,然後複製 HTTP URL。
  • 要使用 MetaMask 尋找您的私鑰,請查看此指南 (opens in a new tab)
API_URL = "your-api-url"
PRIVATE_KEY = "your-private-key"
不要提交 .env!請確保永遠不要與任何人分享或暴露您的 .env 檔案,因為這樣做會危及您的機密。如果您正在使用版本控制,請將您的 .env 新增到 gitignore 檔案中。

7. 建立 sendTx.js 檔案

太好了,現在我們已經將敏感資料保護在 .env 檔案中,讓我們開始編寫程式碼。在我們的發送交易範例中,我們將把 ETH 發送回 Sepolia 水龍頭。

建立一個 sendTx.js 檔案,我們將在其中設定並發送我們的範例交易,並在其中新增以下程式碼:

請務必將第 6 行的地址替換為您自己的公開地址。

現在,在我們開始執行這段程式碼之前,讓我們先談談這裡的一些元件。

  • nonce:隨機數規範用於追蹤從您的地址發送的交易數量。出於安全考量以及防止重放攻擊,我們需要這個值。要取得從您的地址發送的交易數量,我們使用 getTransactionCount (opens in a new tab)
  • transaction:交易物件有幾個我們需要指定的方面:
    • to:這是我們想要發送 ETH 的目標地址。在這種情況下,我們將 ETH 發送回我們最初請求的 Sepolia 水龍頭 (opens in a new tab)
    • value:這是我們希望發送的金額,以 Wei 為單位指定,其中 10^18 Wei = 1 ETH。
    • gas:有許多方法可以決定交易中應包含的正確燃料量。Alchemy 支援可以通知您鏈上活動的 webhooks (opens in a new tab)。對於主網交易,檢查當前的燃料狀況以決定要包含的正確燃料量是一個好習慣。21000 是以太坊上操作將使用的最小燃料量,因此為了確保我們的交易將被執行,我們在這裡填入 30000。
    • nonce:請參閱上述隨機數的定義。隨機數從零開始計算。
    • [選用] data:用於在轉帳時發送額外資訊,或呼叫智能合約,餘額轉帳不需要此欄位,請查看下方的注意事項。
  • signedTx:為了簽署我們的交易物件,我們將使用 signTransaction 方法和我們的 PRIVATE_KEY
  • sendSignedTransaction:一旦我們有了已簽署的交易,我們就可以使用 sendSignedTransaction 將其發送出去,以便將其包含在後續的區塊中。

關於 data 的注意事項 在以太坊中可以發送兩種主要類型的交易。

  • 餘額轉帳:將 ETH 從一個地址發送到另一個地址。不需要 data 欄位,但是,如果您想在交易中發送額外資訊,您可以在此欄位中以 HEX 格式包含該資訊。
    • 例如,假設我們想將 IPFS 文件的雜湊寫入以太坊鏈,以便為其提供不可變的時間戳記。我們的 data 欄位應該看起來像這樣:data: web3.utils.toHex('IPFS hash')。現在任何人都可以查詢該鏈並查看該文件是何時新增的。
  • 智能合約交易:在鏈上執行一些智能合約程式碼。在這種情況下,data 欄位應包含您希望執行的智能函數以及任何參數。

8. 使用 node sendTx.js 執行程式碼

導覽回您的終端機或命令列並執行:

node sendTx.js

9. 在記憶體池中查看您的交易

打開 Alchemy 儀表板中的記憶體池頁面 (opens in a new tab),並透過您建立的應用程式進行篩選以尋找您的交易。在這裡,我們可以觀察我們的交易從待處理狀態轉換為已挖礦狀態(如果成功)或已丟棄狀態(如果失敗)。請確保將其保持在「All」(全部),以便您捕捉到「mined」(已挖礦)、「pending」(待處理)和「dropped」(已丟棄)的交易。您也可以透過尋找發送到地址 0x31b98d14007bdee637298086988a0bbd31184523 的交易來搜尋您的交易。

找到交易後,若要查看其詳細資料,請選擇交易雜湊,這將帶您進入如下所示的畫面:

記憶體池觀察器螢幕截圖

從那裡,您可以點擊紅色圓圈標示的圖示,在 Etherscan 上查看您的交易!

太棒了!您剛剛使用 Alchemy 發送了您的第一筆以太坊交易 🎉

如對本指南有任何回饋和建議,請在 Alchemy 的 Discord (opens in a new tab) 上傳送訊息給 Elan!

最初由 Alchemy 發布。