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