iT邦幫忙

2022 iThome 鐵人賽

DAY 18
0
自我挑戰組

區塊鏈 Blockchain系列 第 18

Day18 web3.js – 智能合約 web3.eth.Contract()

  • 分享至 

  • xImage
  •  

web3.js – 智能合約的互動
我們今天就來練習 web3.eth.Contract() 相關函式的實作吧!


智能合約的互動是javascript中對智能合約的表示,可以使用智能合約對象訪問智能合約。
可以使用web3.eth.Contract()的函數來獲得,此函數需要2个參數: 智能合約ABI、智能合約地址。

ABI代表“Abstract Binary Interface/抽象二進位制接口”,它是一個JSON數組,是面向以太坊虛擬機的可執行文件,類似於windows平台上的二進位制可執行的文件。智能合约編譯後生成ABI文件,可以在以太坊虛擬機上執行。

首先我們一樣先去 Etherscan 取得ABI的範例,選擇有ERC-20標準,我們就挑第三個BNB好了!
點進下方Contract的地方(有綠勾勾的),複製它的API:

https://ithelp.ithome.com.tw/upload/images/20221002/20152174KF4Ga3TRg4.png

你可以在Etherscan上,找到關於這個tocken更加詳細的資訊,其內容包含它的ABI及地址。我們將在下面這個範例的其他部分中使用這個智能合約ABI。

const abi = 你複製的ABI

大概是像下圖這種感覺,但因為ABI太長,後面就不截圖了
打完後面你再輸入abi的話,會看到其他更詳細的資訊

https://ithelp.ithome.com.tw/upload/images/20221002/20152174dD5nZ92A8d.png


BNB認證智能合約的地址:

const address = '0xB8c77482e45F1F44dE1745F52C74426C631bDD52'

https://ithelp.ithome.com.tw/upload/images/20221002/2015217485B1zncg3n.png

有了ABI和地址,就可以建立BNB認證智能合約的Javascript對象:

const contract = new web3.eth.Contract(abi, address)

https://ithelp.ithome.com.tw/upload/images/20221002/20152174oIQq7AyvcI.png


https://ithelp.ithome.com.tw/upload/images/20221002/20152174xcEoWB2Vj9.png

智能合約的methods屬性下,包含了對應智能合約的所有函數。要用智能合約中的某个函數,例如myFunction(),可以使用contract.methods.myFunction()的方式调用。

注意:這裡的方法只能用來讀取操作函數,不能用來寫操作函數,寫操作函數會改變區塊鏈狀態,而被視為交易。

由於這個智能合約是ERC-20標準,
可以用:totalSupply()、name()、symbol()和balanceOf()。


可以調用這些函數,如下所示:

查看現有BNB總供應量:

contract.methods.totalSupply().call((err, result) => { console.log(result) })
// > 16579517055253348798759097

查看BNB的名稱:

contract.methods.name().call((err, result) => { console.log(result) })
// > BNB

查看BNB的標誌:

contract.methods.symbol().call((err, result) => { console.log(result) })
// > BNB

https://ithelp.ithome.com.tw/upload/images/20221002/20152174FRJdOV6nda.png

查看给定帳戶的餘額
查看一下地址0xB8c77482e45F1F44dE1745F52C74426C631bDD52的BNB餘額情况。

contract.methods.balanceOf('0xB8c77482e45F1F44dE1745F52C74426C631bDD52').call((err, result) => { console.log(result) })
// > 23528169876785489362031

https://ithelp.ithome.com.tw/upload/images/20221002/20152174XUzHzERqmk.png


教學影片:https://youtu.be/tu92jcqdn6s
官網:https://web3js.readthedocs.io/en/v1.8.0/web3-eth-contract.html


上一篇
Day17 web3.js -訪問區塊鏈網路+讀取帳戶餘額
下一篇
Day19 Metamask
系列文
區塊鏈 Blockchain30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言