如何開(kāi)發(fā)一個(gè)屬于自己的Chainlink智能合約
Chainlink是領(lǐng)先的區(qū)塊鏈項(xiàng)目之一,它構(gòu)建了第一個(gè)為智能合約提供外部數(shù)據(jù)的去中心化預(yù)言機(jī)網(wǎng)絡(luò)。Truffle通過(guò)提供強(qiáng)大的開(kāi)發(fā)框架,幫助智能合約開(kāi)發(fā)人員創(chuàng)建,測(cè)試和部署智能合約。Chainlink在其的博文中表示,他們的Chainlink Truffle Box得到了一些重大的升級(jí)!如果你有幸參加了Trufflecon 2019,那么你已經(jīng)看到了這些改進(jìn),同時(shí)也感謝Chainlink的Thomas Hodges所帶來(lái)的演講。如果您想開(kāi)始開(kāi)發(fā)您自己的Chainlink智能合約,您可以按照此處的指南獲取Chainlink的Truffle Box。
本文將從Truffle Scripts開(kāi)始展示這些全新的產(chǎn)品。Truffle Scripts創(chuàng)建了一種更方便的與合約交互的方法,為合約轉(zhuǎn)入LINK,從而可以請(qǐng)求數(shù)據(jù),并且在讀取合同的數(shù)據(jù)時(shí)只用三個(gè)命令。為了演示此功能,我們首先需要設(shè)置我們的環(huán)境變量:MNEMONIC和RPC_URL。
使用(以太坊)區(qū)塊鏈需要支持該鏈的錢包,其中最受歡迎的選擇之一是MetaMask。您可以非常方便的在幾分鐘之內(nèi)擁有自己的以太坊錢包,輕松地與各種dApp交互。在帳戶生成期間,您將看到您的秘密12字種子短語(yǔ),稱為助記詞。(請(qǐng)不要與任何人您的助記詞;如果有人知道你的助記詞,他們將會(huì)獲取到你的地址和私鑰)。請(qǐng)務(wù)必將此助記詞存儲(chǔ)在安全的地方,因?yàn)樯院笪覀冞€將要用到它來(lái)完成我們的示例。
此外,您還需要為MetaMask錢包提供測(cè)試網(wǎng)絡(luò)Ropsten上的LINK和ETH資金,以便為Ropsten Ethereum Testnet上的交易提供交易費(fèi)用。
注意:從測(cè)試水龍頭為您的帳戶轉(zhuǎn)入資金時(shí),請(qǐng)確保從默認(rèn)的以太坊主網(wǎng)絡(luò)切換到Ropsten測(cè)試網(wǎng)絡(luò),以正確查看您在Ropsten測(cè)試網(wǎng)絡(luò)上的資金。您可以通過(guò)Etherscan跟蹤在Ropsten Testnet上進(jìn)行的任何交易。
我們的第二個(gè)環(huán)境變量將需要(以太坊客戶端的)RPC URL。一些流行的RPC連接服務(wù)包括Infura,LinkPool和Fiews。在建立有效的RPC連接和向地址轉(zhuǎn)入資金后,您就可以將智能合約部署到測(cè)試網(wǎng)絡(luò)上了。
上面顯示的是將MetaMask錢包鏈接到Truffle所需的環(huán)境變量,可以在truffle-config.js中找到。
獲得所需的所有數(shù)據(jù)后,可以通過(guò)終端命令設(shè)置環(huán)境變量:
export RPC_URL=your_url_here export MNEMONIC=’your 12 words here’
部署
我們現(xiàn)在準(zhǔn)備在公共測(cè)試網(wǎng)絡(luò)上部署我們的智能合約。
首先,運(yùn)行命令:
npm run migrate:live
這將編譯所有智能合約,然后開(kāi)始部署它們。
注意:您可能會(huì)遇到Chainlink合約的一些編譯警告。這只是因?yàn)長(zhǎng)INK token最初部署的是較舊版本的Solidity。鑒于此合約僅在您運(yùn)行測(cè)試時(shí)部署,因此可以忽略這些警告。
我們的一個(gè)合約部署的控制臺(tái)輸出。這個(gè)交易可以在這里找到。
部署我們的Migrations和MyContract花費(fèi)了我們ETH,這就是為什么我們需要提前從水龍頭中轉(zhuǎn)入資金。現(xiàn)在我們的合約已經(jīng)部署,我們可以利用三個(gè)幫助腳本為L(zhǎng)INK(我們從Chainlink水龍頭獲得的)提供MyContract,創(chuàng)建請(qǐng)求和讀取狀態(tài)。
這是位于腳本目錄中的3個(gè)幫助腳本,用來(lái)與我們的合約進(jìn)行交互:
fund-contract.js
request-data.js
read-contract.js
可以通過(guò)從npx truffle exec調(diào)用它們。首先,我們必須為合約轉(zhuǎn)入LINK資金,這可以通過(guò)運(yùn)行以下命令來(lái)完成:
npx truffle exec scripts/fund-contract.js --network live
部署后,輸出顯示我們的合約地址以及交易地址。我們也可以在ropsten瀏覽器上查看。
請(qǐng)注意,完成后,在交易過(guò)程中支付了1個(gè)LINK,表明我們的合約已得到資金。接下來(lái),我們現(xiàn)在可以通過(guò)運(yùn)行以下命令來(lái)請(qǐng)求合同中的數(shù)據(jù):
npx truffle exec scripts/request-data.js --network live
這是您發(fā)出請(qǐng)求在Chainlink瀏覽器中的展示(在我們的示例中,我們使用Ropsten,但它對(duì)Rinkeby,Kovan和Mainnet也同樣適用)。正如您所見(jiàn),Chainlink節(jié)點(diǎn)接收了我們的請(qǐng)求,并在執(zhí)行作業(yè)之前等待3個(gè)塊確認(rèn)?,F(xiàn)在我們準(zhǔn)備讀取Chainlink節(jié)點(diǎn)給我們回復(fù)的合約狀態(tài),由履約交易表示(以紅色突出顯示)。
最后,為了讀取數(shù)據(jù),我們運(yùn)行了read-contract腳本。特別需要說(shuō)明的是,這個(gè)操作會(huì)運(yùn)行得很快,因?yàn)槲覀儧](méi)有創(chuàng)建交易,我們只是閱讀智能合約的當(dāng)前狀態(tài)。
npx truffle exec scripts/read-contract.js --network live
在閱讀數(shù)據(jù)時(shí)注意我們的輸出,我們得到一個(gè)數(shù)字,以USD * 100顯示LINK的當(dāng)前價(jià)格(本文寫作時(shí)該值為22094)。這是由于我們的智能合約request-data.js中指定的倍數(shù)。
_Request-data.js。TRUFFLE_CL_BOX_TIMES是一個(gè)環(huán)境變量,用于覆蓋默認(rèn)值100。此值用于處理數(shù)據(jù)的精度(在這種這個(gè)例子中是,以美元為單位的ETH價(jià)格),因?yàn)镾olidity無(wú)法處理小數(shù)。這些值可以根據(jù)您的實(shí)際情況來(lái)更改。
得益于Truffle的強(qiáng)大功能,開(kāi)發(fā)智能合約從未如此簡(jiǎn)單。我們希望您喜歡使用我們的Chainlink Truffle Box,讓您可以在網(wǎng)絡(luò)上進(jìn)行完整的測(cè)試,部署和交互合約。
來(lái)源:?Chainlink資訊