跳至內容
0%

與智能合約互動

作者:Alchemy Team

最後更新:2021年11月1日1 分鐘閱讀

在開始本教學(智能合約互動)之前,你應該已經完成第一部分 — Hello World Smart Contract (建立並部署智能合約)。在第三部分中,我們會介紹如何將合約提交到 Etherscan,讓任何人都能了解如何與它互動!

第二部分:與你的智能合約互動

我們已經成功將智能合約部署到 ropsten 網路,現在來測試一下我們的 web3 技能,跟它互動吧!

步驟 1:建立 interact.js 檔案

這是我們撰寫互動腳本的檔案。我們會使用你在第一部分安裝過的 Ethers.js 函式庫。

在 hardhat 教學中的 scripts/ 資料夾內(若是 Truffle 教學則在你的家目錄下),建立一個名為 interacts.js 的新檔案,並加入以下程式碼:

步驟 2:更新你的 .env 檔案

我們會用到新的環境變數,因此需要在 .env 檔案中定義它們,並確保 dotenv 模組會載入這些變數。

我們需要加入 Alchemy API\_KEY 的定義,以及你的智能合約部署所在的 CONTRACT\_ADDRESS。

你的 .env 檔案看起來應該會像這樣:

步驟 3:取得你的合約 ABI

我們的合約 ABI (Application Binary Interface) 是與智能合約互動的介面。你可以在我們的 eth_getLogs 深度解析文章中了解更多關於 Contract ABI 的內容。Hardhat(以及 Truffle)會自動為我們產生 ABI,並將它存放在 HelloWorld.json 檔案中。

為了使用它,我們需要在 contract-interact.js 檔案中加入以下程式碼來解析內容:

如果你想查看 ABI,可以把它印到 console:

若要執行 interact.js 並在 console 中看到印出的 ABI,請到終端機執行

Hardhat:

Truffle:

步驟 4:建立合約的實例

為了與我們的合約互動,我們需要在程式碼中建立它的實例。使用 Ethers.js 時,我們需要處理三個概念:

  1. Provider - 這是一個節點提供者,讓你能夠讀取及寫入區塊鏈。
  2. Signer - 這代表一個有能力對交易簽章的 Ethereum 帳戶。
  3. Contract - 這是一個 Ethers.js 物件,代表部署在鏈上的特定合約。

我們會使用上一步取得的合約 ABI 來建立合約的實例:

你可以在 Alchemy 的 Ethers.js 說明文章中閱讀更多關於 Providers、Signers 和 Contracts 的內容。

步驟 5:讀取 init message

還記得我們用 theinitMessage = "Hello world!" 部署合約時的操作嗎?現在我們要讀取儲存在智能合約中的那則訊息,並把它印到 console。

在 JavaScript 中,我們使用非同步函式來與網路互動。

使用以下程式碼來呼叫智能合約中的 message 函式,並讀取 init message:

在終端機用 npx hardhat run scripts/interact.js 執行該檔案後,我們應該會看到這樣的回應:

恭喜!你剛剛成功從 Ethereum 區塊鏈讀取了智能合約的資料,做得好!

步驟 6:更新訊息

現在除了讀取訊息之外,我們還可以用 update 函式來更新儲存在智能合約中的訊息!很酷吧?

要做到這點,我們可以直接在已實例化的 Contract 物件上呼叫 update 函式,像這樣:

注意我們對回傳的交易物件呼叫了 .wait\(\)。這能確保我們的腳本會等待交易在區塊鏈上被打包後才繼續執行。如果省略這行,你的腳本可能無法看到合約中更新後的 message 值。

步驟 7:讀取新訊息

你應該可以重複步驟 5 來讀取更新後的 message 值。花點時間看看你能不能做出必要的修改,印出那個新的值!

如果你需要提示,這時你的 interact.js 檔案應該會長這樣:

現在只要執行腳本,你就應該能在終端機看到舊訊息、更新中的狀態,以及新訊息被印出來!

npx hardhat run scripts/interact.js --network ropsten

在執行該腳本時,你可能會注意到 Updating the message... 這個步驟需要一段時間才能載入出新訊息。這是因為挖礦過程的關係!如果你想知道如何在交易被挖礦時追蹤它的狀態,可以造訪 Alchemy mempool 來查看你交易的狀態(不論是 pending、已挖礦,還是被網路丟棄)。如果你的交易被丟棄了,也可以去 Ropsten Etherscan 搜尋你的交易雜湊來確認。

就這樣!你現在已經部署並且和一個 Ethereum 智能合約互動過了。如果你想把你的合約發佈到 Etherscan,讓任何人都知道如何與它互動,可以看看第三部分:將你的智能合約提交到 etherscan!🎉

完成本教學後,歡迎在 Twitter 上標記我們 @Alchemy,讓我們知道你的體驗如何,或提供任何意見回饋!

Alchemy 電子報

搶先掌握最新發布消息

訂閱我們的電子報

取得 Alchemy 最新產品更新與資源

A
O
D
+
超過 80,000 名訂閱者

輸入您的電子郵件地址,即表示您同意接收我們的行銷通訊與產品更新。您了解 Alchemy 會依照我們的隱私權聲明處理所收到的資訊。您可以隨時取消訂閱。