基于solidity智能合约在tron网络中进行异步调用
2019-06-26 11:25 栏目:经验之谈 来源: 查看()
目前,以太坊的编程语言Solidity仍然非常基础。 Tron也使用Solidity,因此具有相同的局限性。
目前,Solidity简化了智能合约,仅存储值并执行一些基本的数学运算。大多数智能逻辑都是在智能合约之外编写的:在DAPP或服务器中。
#ON中的两种异步调用是什么?
·外部调用.到数据库,Web服务,(分布式)文件系统,邮件服务,NodeJS oracle以克服Solidity限制等。
·自动回调.合同本身的代码(例如股息支付)。
为了实现这两种情况,我们需要扩展ON。这是怎么做到的:
第1步:下载客户端库
输入以下链接下载客户端库,
https://github.com/CaptainJavaScript/Tron
第2步:创建智能合约
您可以重用位于客户端库中的HelloSeaman_v1.sol示例。简单地从使用CaptainJSAtTron_v2扩展你的合同,整个魔法将开始发生:
Pragma solidity ^ 0.4.25;
导入'./usingCaptainJSAtTron_v2.sol';
合约HelloSeaman_v1正在使用CaptainJSAtTron_v2 {>
constructor()public {}
}
要在ON中实现异步调用,只需使用Run-method执行NodeJS代码,或调用Callback方法进行简单回调。
..
Uint常数EXAMPLE1=1;
Uint常数EXAMPLE2=2;
功能演示()公共支付
{>
运行(例1,'json:https://api.kraken.com/0/public/Ticker?
Pair=ETHUSD',
'result.XETHZUSD.a [0]',' - ',2,5000);
回调(例2,20,100000);
}
函数CaptainsResult(uint UniqueIdentifier,
字符串 结果,bool IsError)external onlyCaptainsOrdersAllowed {
发出LogEvent(
concat('CaptainsResult收到UID=',
uintToString(UniqueIdentifier),'和结果',结果)
);
}
函数CaptainsCallback(uint UniqueIdentifier)外部
onlyCaptainsOrdersAllowed {
发出LogEvent(
concat('回调收到UID=',uintToString(
UniqueIdentifier))
);
}
第3步:致电TronWeb的智能合约
在将合同部署到SHASTA之后,从GitHub存储库编辑Test-Shasta-public.js文件,
1.添加您的私钥(第6行)
2.更改合同地址(第11行) - 否则您将拨打我的演示合同地址
3.第一次运行时调用SetCaptainsAddress()
Const TronWeb=require('tronweb');
Const SHASTA='https://api.shasta.trongrid.io';
Const tronWeb=新的TronWeb(
SHASTA,SHASTA,SHASTA,
'<你的私钥在这里'
);
Const OwnersWalletAtSHASTA='<您的shasta钱包地址>';
..
Const HelloSeaman_v1AtSHASTA='TB4TEvEnbjM66ici2QjP92rpYkJWJPJajS';
..
函数RunTest(){>
var Budget=ToX(0.01);
var Transfer=ToX(0.5);
console.log('RunTest/Budget='+ Budget +',传输值=
'+转移);
SeamansContract.Run(1,'math: log2(16)','','mathjs',1,Budget)。
发送({shouldPollResponse: true,callValue: Transfer})。catch(功能(
)
错误){console.log(错误);然后(console.log('RUN EXECUTED'));
}
函数SetCaptainsAddress(){>
console.log('SetCaptainsAddress to'+ CaptainsAddressAtSHASTAhex
);
SeamansContract.SetCaptainsAddress(CaptainsAddressAtSHASTAhex)。
发送({shouldPollResponse: true,callValue: 0})。catch(function(err)
{console.log(err); })。然后(console.log('SETCAPTAINSADDRESS EXECUTED'
));
}
函数演示(){>
console.log('Demo run .');
SeamansContract.Demo()。send({shouldPollResponse: true,callValue:
ToX(1)})。catch(function(err){console.log(err);})。然后
(console.log('DEMO EXECUTED'));
}
异步函数Go(){>
SeamansContract=await tronWeb.contract()。at(HelloSeaman_v1AtSHASTA
);
SetCaptainsAddress();
//RunTest();
//Demo();
}
去();
通话结束。 SHASTA仍然值得我们关注。
售前客服二维码
文章均源于网络收集编辑侵删
提示:仅接受技术开发咨询!
郑重申明:资讯文章为网络收集整理,官方公告以外的资讯内容与本站无关!