與智能合約互動
作者:Alchemy Team
在開始本教學(智能合約互動)之前,你應該已經完成第一部分 — 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 時,我們需要處理三個概念:
- Provider - 這是一個節點提供者,讓你能夠讀取及寫入區塊鏈。
- Signer - 這代表一個有能力對交易簽章的 Ethereum 帳戶。
- 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 最新產品更新與資源
輸入您的電子郵件地址,即表示您同意接收我們的行銷通訊與產品更新。您了解 Alchemy 會依照我們的隱私權聲明處理所收到的資訊。您可以隨時取消訂閱。


