Chainlink是领先的区块链项目之一,它构建了第一个为智能合约提供外部数据的去中心化预言机网络。Truffle通过提供强大的开发框架,帮助智能合约开发人员创建,测试和部署智能合约。Chainlink在其的博文中表示,他们的Chainlink Truffle Box得到了一些重大的升级!如果你有幸参加了Trufflecon 2019,那么你已经看到了这些改进,同时也感谢Chainlink的Thomas Hodges所带来的演讲。如果您想开始开发您自己的Chainlink智能合约,您可以按照此处的指南获取Chainlink的Truffle Box。
本文将从Truffle Scripts开始展示这些全新的产品。Truffle Scripts创建了一种更方便的与合约交互的方法,为合约转入LINK,从而可以请求数据,并且在读取合同的数据时只用三个命令。为了演示此功能,我们首先需要设置我们的环境变量:MNEMONIC和RPC_URL。
使用(以太坊)区块链需要支持该链的钱包,其中最受欢迎的选择之一是MetaMask。您可以非常方便的在几分钟之内拥有自己的以太坊钱包,轻松地与各种dApp交互。在帐户生成期间,您将看到您的秘密12字种子短语,称为助记词。(请不要与任何人您的助记词;如果有人知道你的助记词,他们将会获取到你的地址和私钥)。请务必将此助记词存储在安全的地方,因为稍后我们还将要用到它来完成我们的示例。
此外,您还需要为MetaMask钱包提供测试网络Ropsten上的LINK和ETH资金,以便为Ropsten Ethereum Testnet上的交易提供交易费用。
注意:从测试水龙头为您的帐户转入资金时,请确保从默认的以太坊主网络切换到Ropsten测试网络,以正确查看您在Ropsten测试网络上的资金。您可以通过Etherscan跟踪在Ropsten Testnet上进行的任何交易。
我们的第二个环境变量将需要(以太坊客户端的)RPC URL。一些流行的RPC连接服务包括Infura,LinkPool和Fiews。在建立有效的RPC连接和向地址转入资金后,您就可以将智能合约部署到测试网络上了。
上面显示的是将MetaMask钱包链接到Truffle所需的环境变量,可以在truffle-config.js中找到。
获得所需的所有数据后,可以通过终端命令设置环境变量:
export RPC_URL=your_url_here export MNEMONIC=’your 12 words here’
部署
我们现在准备在公共测试网络上部署我们的智能合约。
首先,运行命令:
npm run migrate:live
这将编译所有智能合约,然后开始部署它们。
注意:您可能会遇到Chainlink合约的一些编译警告。这只是因为LINK token最初部署的是较旧版本的Solidity。鉴于此合约仅在您运行测试时部署,因此可以忽略这些警告。
我们的一个合约部署的控制台输出。这个交易可以在这里找到。
部署我们的Migrations和MyContract花费了我们ETH,这就是为什么我们需要提前从水龙头中转入资金。现在我们的合约已经部署,我们可以利用三个帮助脚本为LINK(我们从Chainlink水龙头获得的)提供MyContract,创建请求和读取状态。
这是位于脚本目录中的3个帮助脚本,用来与我们的合约进行交互:
fund-contract.js
request-data.js
read-contract.js
可以通过从npx truffle exec调用它们。首先,我们必须为合约转入LINK资金,这可以通过运行以下命令来完成:
npx truffle exec scripts/fund-contract.js –network live
部署后,输出显示我们的合约地址以及交易地址。我们也可以在ropsten浏览器上查看。
请注意,完成后,在交易过程中支付了1个LINK,表明我们的合约已得到资金。接下来,我们现在可以通过运行以下命令来请求合同中的数据:
npx truffle exec scripts/request-data.js –network live
这是您发出请求在Chainlink浏览器中的展示(在我们的示例中,我们使用Ropsten,但它对Rinkeby,Kovan和Mainnet也同样适用)。正如您所见,Chainlink节点接收了我们的请求,并在执行作业之前等待3个块确认。现在我们准备读取Chainlink节点给我们回复的合约状态,由履约交易表示(以红色突出显示)。
最后,为了读取数据,我们运行了read-contract脚本。特别需要说明的是,这个操作会运行得很快,因为我们没有创建交易,我们只是阅读智能合约的当前状态。
npx truffle exec scripts/read-contract.js –network live
在阅读数据时注意我们的输出,我们得到一个数字,以USD * 100显示LINK的当前价格(本文写作时该值为22094)。这是由于我们的智能合约request-data.js中指定的倍数。
_Request-data.js。TRUFFLE_CL_BOX_TIMES是一个环境变量,用于覆盖默认值100。此值用于处理数据的精度(在这种这个例子中是,以美元为单位的ETH价格),因为Solidity无法处理小数。这些值可以根据您的实际情况来更改。
得益于Truffle的强大功能,开发智能合约从未如此简单。我们希望您喜欢使用我们的Chainlink Truffle Box,让您可以在网络上进行完整的测试,部署和交互合约。感谢您的阅读,并请继续关注https://blog.chain.link/上的未来更新。