智能合約入門——Remix+合約調(diào)用

最近這段時間Defi很火,但是如果你只是一個小散戶,你可能只看到了表面的一層機(jī)會,而且往往還抓不住。區(qū)塊鏈?zhǔn)浅绦虻氖澜纾茖W(xué)家們統(tǒng)治著區(qū)塊鏈,想要在未來的世界里深入了解區(qū)塊鏈,用程序自動化流程是必不可少的。

當(dāng)我們使用程序調(diào)用區(qū)塊鏈上的數(shù)據(jù)時,往往需要選擇一種比較方便的語言,現(xiàn)有的框架主要以JavaScript為主。

現(xiàn)在世界上比較流行的在線ide可以滿足大部分的編程需求,Remix算是區(qū)塊鏈應(yīng)用里的集大成者。
https://remix.ethereum.org/

安裝插件

這個在線的IDE可以選擇一個入門教程,在選擇插件獲取(左側(cè)圖標(biāo)最下面那個),搜索LEARNETH,然后選擇Active就可以點擊新出現(xiàn)的圖標(biāo)進(jìn)入了。

1.Web.js請求區(qū)塊鏈數(shù)據(jù)

(async () => {
  try {
    let blockNumber = await web3.eth.getBlockNumber()
    console.log('current block number : ', blockNumber)
  } catch (e) {
    console.log(e.message)
  }
})()

這幾行代碼封裝了一個自調(diào)用的web3.js程序,可以在控制臺返回當(dāng)前以太坊的區(qū)塊高度,使用的是web3.eth.getBlockNumber()這個函數(shù)。

在進(jìn)行編譯和執(zhí)行操作前,需要將編譯器設(shè)置為Injected Web3或者是Web3 Provider,JavaScript VM不支持這個web3.js庫。

然后在下面的終端輸入:

remix.execute()

就可以得到當(dāng)前區(qū)塊高度了。

2.與一個合約進(jìn)行交互

剛剛我們只是通過它獲取了一個區(qū)塊鏈的信息,第二步我們就可以通過程序與以太坊上已經(jīng)部署的合約進(jìn)行交互了。

凡是部署到以太坊上的合約,只要它不自毀,就可以一直存在在以太坊上,而且由于去中心化的設(shè)計,部署者和使用者都不需要自己擁有服務(wù)器,大大減少了開發(fā)者的研發(fā)成本。

合約可以看成是一個類(就是一個集合體),里面有很多的函數(shù)和變量,根據(jù)部署時設(shè)置的不同,有些函數(shù)根據(jù)權(quán)限的不同只有固定的人可以調(diào)用和查看,有些函數(shù)是所有人都可以使用和查看的。

這次的例子是使用web3.eth的庫來調(diào)用tether合約,獲取它的名字,代碼如下:

    (async () => {
        try {
            const abi = ...
            const contractAddress = '0xdac17f958d2ee523a2206206994597c13d831ec7'

            // instantiate a new web3 Contract object
            let contract = new web3.eth.Contract(abi, contractAddress)

            // call the autogenerated function to return the value of a public state variable
            let name = await contract.methods.name().call()
        
            // log it to the remix console
            console.log(name)
        
        } catch (e) {
            console.log(e.message)
        }  

    })()

這里關(guān)于ABI這一塊我進(jìn)行了簡化(太長了),如果我們要調(diào)用一個合約,我們得知道它的ABI以及地址,比如我們要掉用的這個合約的ABI可以通過它的地址從ethscan上查到:https://etherscan.io/address/0xdac17f958d2ee523a2206206994597c13d831ec7#code

ABI

我們在這個頁面上可以點擊Read contract獲取這個合約的變量信息,在這里可以看到它的name是Tether USD。

那么我們切換回剛剛的頁面,然后進(jìn)行編譯和執(zhí)行,同樣的我們要注意剛剛的編譯選項,選擇Injected Web3或者是Web3 Provider,同時我們還要注意切換到Mainnet。

tips:以太網(wǎng)分為主網(wǎng)和測試網(wǎng),測試網(wǎng)可以免費獲取eth進(jìn)行測試和部署,對于開發(fā)者來說可以在測試網(wǎng)上測試通過了再進(jìn)行主網(wǎng)部署。主網(wǎng)和測試網(wǎng)的切換可以通過Metamask切換。

在完成了之后在網(wǎng)頁下部的終端內(nèi)輸入remix.execute(),就可以看到反饋了。

OK到這里我們的入門第一步就結(jié)束了

總結(jié)一下:
1.通過web3.js可以訪問以太網(wǎng)的信息,包括區(qū)塊高度,交易等等。
2.通過web3.js可以與以太網(wǎng)上的合約進(jìn)行交互,交互需要擁有權(quán)限,并且知道合約的地址和ABI。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。