最近這段時間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
我們在這個頁面上可以點擊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。