智能合约开发者的Chainlink使用秘籍
智能合约开发者可以获得哪些核心功能?
2.访问任何API接口——通过POST和GET等方法访问任何API接口
3.Chainlink VRF——创建可验证的随机数
Chainlink价格数据
如果你的智能合约需要输入精准的去中心化加密货币价格,Chainlink价格数据是完美解决方案。Chainlink价格数据用起来非常简单,只需要写几行solidity代码就可以实现,其中包含一个函数调用,用来获取所需的价格数据。
pragma solidity ^0.6.7;import "@chainlink/contracts/src/v0.6/interfaces/AggregatorV3Interface.sol";
contract PriceConsumerV3 {
AggregatorV3Interface internal priceFeed; constructor() public { priceFeed = AggregatorV3Interface(feedAddress); } function getLatestPrice() public view returns (int) { (
uint80 roundID, int price, uint startedAt, uint timeStamp, uint80 answeredInRound ) = priceFeed.latestRoundData(); return price; } }
访问任何API接口
这个功能非常强大,可以为你的智能合约解锁无限可能,覆盖任何资产并以任何方式与现实世界交互。我们之前发过一篇关于将 智能合约连接至任何API接口 的文章,这篇文章教大家如何通过Chainlink轻松将智能合约连接至链下数据.
Chainlink VRF
Chainlink VRF可以在链下生成随机数,因此不存在链上随机数的这些问题,并同时使用加密手段证明随机数没有被篡改。这项技术是去中心化随机数领域的重大突破,开发者和用户可以通过加密方式验证随机数在生成过程中没有被篡改。这个功能将催生出许多创新的智能合约应用。 游戏物品创建 市场的价值高达几十亿美元,并正在扩展至区块链游戏领域。有了VRF,游戏中就可以基于真实可验证的随机数创建NFT奖励。具体操作方法是:请求合约先将种子值(seed value)输入Chainlink预言机。接着,预言机使用种子及其秘钥生成随机值,并与加密证明一起发送至VRF验证合约。由于VRF合约知道预言机公钥,而且公钥对应的是私钥以及种子值,因此可以验证加密证明。如果有节点的数据被操控,证明就无法与VRF合约的计算结果匹配,因此会被拒收。VRF合约对上报的随机数进行验证,这与用MD5值快速验证下载文件内容类似,但不同的是,VRF合约用的不是简单的哈希值,而是非对称密钥对和加密证明。那么区块链开发者应如何使用这个强大的新功能呢?其实这个功能和我们的聚合价格数据一样,非常容易集成。下面的示例代码是合约接入VRF数据的标准模板。
pragma solidity 0.6.6; import “@chainlink/contracts/src/v0.6/VRFConsumerBase.sol”;你只需要导入VRF,用VRF合约地址和秘钥哈希值构建智能合约,然后再调用两个函数:getRandomNumber(发送客户端生成的uint256种子)和fulfillRandomness(这是VRF合约使用的回调函数,用来返回验证过的随机值),然后就搞定了!只需要一次导入、一个构造函数和两个函数,就可以在智能合约中添加可验证的随机数了。contract RandomNumberConsumer is VRFConsumerBase {
bytes32 internal keyHash; uint256 internal fee; uint256 public randomResult; constructor() VRFConsumerBase( 0x2e184F4120eFc6BF4943E3822FA0e5c3829e2fbD, // VRF Coordinator 0x20fE562d797A42Dcb3399062AE9546cd06f63280 // LINK Token ) public {
keyHash = 0x757844cd6652a5805e9adb8203134e10a26ef59f62b864ed6a8c054733a1dcb0; fee = 0.1 * 10 ** 18; // 0.1 LINK } /** * Requests randomness from a user-provided seed */ function getRandomNumber(uint256 userProvidedSeed) public returns (bytes32 requestId) { require(LINK.balanceOf(address(this)) > fee, "Not enough LINK - fill contract with faucet"); return requestRandomness(keyHash, fee, userProvidedSeed); } /**
希望本文能帮助大家更深入地了解Chainlink的功能和作用。无论是安全的DeFi价格数据、触发合约的API接口还是输入到游戏中的可验证随机数,Chainlink通通可以帮你实现!