区块链是一个不可变的记录链,称为块,可促进交Y,有助于跟踪Z产并记录数据和文件,其具有去中心化、不可篡改、全程留痕、集体维护、公开透明等特点,基于这些特点,区块链技术可以开√发出自带信任体系特征的系统,实现多个主体之间的协作信任与一致行动。
在这次的实战演练中,我们将介绍如何让你的智能合约连接到Twitter API。具体来说,我们将解释如何从智能合约中发出一条推文,但是围绕社交媒体进行数据分析和智能合约的执行所展示出来的可能性却是无限的。
构造函数
pragma solidity^0.6.12;
import"https://github.com/smartcontractkit/chainlink/evm-contracts/src/v0.6/ChainlinkClient.sol";
contract ChainlinkTwitter is ChainlinkClient{
address private oracle;
bytes32 private jobId;
uint256 private fee;
uint256 public statusCode;
//only the contract owner should be able to tweet
address payable owner;
modifier onlyOwner{
require(msg.sender==owner);
_;
}
constructor()public{
setPublicChainlinkToken();
oracle=0x4CF0507fe3236DedDbE6cD18508f35D9b5e16e7C;//oracle address
jobId="948db03c9576480a8fa0545bee5b28ab";//job id
fee=11*10**17;//1.1 LINK
owner=msg.sender;
}
我们从熟悉的ChainlinkClient导入和继承开始。导入ChainlinkClient合约包含了构建请求、提交给一个或多个Chainlink节点,并接收回复所需的所有功能。只需定义你选择的oracle地址,该节点为其Twitter Job提供的作业规范ID(job spec ID),并定义该节点处理请求所需的费用。此外,我们还定义了onlyOwner修饰符,这样只有创建合约的地址才能通过这个合约发推特。
Tweet函数
//tweets the supplied string
function tweet(string memory twt)public onlyOwner{
Chainlink.Request memory req=buildChainlinkRequest(jobId,address(this),this.fulfill.selector);
//req.add("endpoint","https://api.twitter.com/1.1/statuses/update.json");
req.add("status",twt);
req.add("copyPath","statusCode")
sendChainlinkRequestTo(oracle,req,fee);
}
//callback function
function fulfill(bytes32 _requestId,uint256 _statusCode)public recordChainlinkFulfillment(_requestId){
statusCode=_statusCode;
}
构建了合约之后,发推特就非常简单了。tweet函数接收要推送的字符串,创建请求结构体,并将其提交给定义的Chainlink节点。请求结构中需要两个字段:status和copyPath。status,即我们希望发布的推文,在Twitter外部适配器中被定义为一个输入,该节点将运行它来完成这项工作。而copyPath则是所有Chainlink节点支持的默认适配器的一部分,它告诉节点如何解析JSON输出。此外,endpoint可以指定为不同的Twitter端点,具有不同的功能,但适配器默即可发布推文状态,因此目前不需要关心这一参数。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。