主页 > 安卓版imtoken钱包 > 以太坊编程语言Solidity在波场异步调用中的应用
以太坊编程语言Solidity在波场异步调用中的应用
描述
目前,以太坊的编程语言Solidity还很基础。 Tron 也使用 Solidity,因此具有相同的局限性。
目前,Solidity 将智能合约简化为仅存储值并进行一些基本数学运算。 并且大部分智能逻辑都写在智能合约之外:在 DAPP 中或在服务器中。
TRON中异步调用的两种情况是什么?
· 外部呼叫。 ..到数据库、Web 服务、(分布式)文件系统、邮件服务,到 NodeJS oracle 以克服 Solidity 限制等。
· 自动回调。 ..合同本身调用代码(例如股息支付)。
为了实现这两个场景以太坊编程,我们需要对 TRON 进行扩展。 方法如下:
第一步:下载客户端库
输入下面的链接下载客户端库,
第二步:创建智能合约
您可以重用位于客户端库中的 HelloSeaman_v1.sol 示例。 只需从 usingCaptainJSAtTron_v2 扩展你的合同,整个魔法就会开始发生:
pragma solidity ^0.4.25;
导入“./usingCaptainJSAtTron_v2.sol”;
合同 HelloSeaman_v1 正在使用 CaptainJSAtTron_v2 {
构造函数()公共{}
. ..
}
在TRON中实现异步调用,只需使用Run-方法执行NodeJS代码,或者调用Callback方法进行简单的回调。
. ..
uint 常数 EXAMPLE1 = 1;
uint 常量 EXAMPLE2 = 2;
function Demo() 公共应付
{
运行(EXAMPLE1,“json:?
对=ETHUSD",
"result.XETHZUSD.a[0]", "-", 2, 5000);
回调(示例 2、20、100000);
}
函数 CaptainsResult(uint UniqueIdentifier,
string Result, bool IsError) external onlyCaptainsOrdersAllowed {
发出 LogEvent(
concat("CaptainsResult 收到 UID = ",
uintToString(UniqueIdentifier), " 和 ", Result) 的结果
);
}
函数 CaptainsCallback(uint UniqueIdentifier) 外部
onlyCaptainsOrdersAllowed {
发出 LogEvent(
concat("回调接收到 UID = ", uintToString(
唯一标识符))
);
}
第三步:调用TronWeb的智能合约
将合约部署到 SHASTA 后,编辑 GitHub 存储库中的 Test-Shasta-public.js 文件,
1. 添加您的私钥(第 6 行)
2.更改合约的地址(第11行)-否则你会调用我的演示合约地址
3. 在第一次运行时调用 SetCaptainsAddress()
const TronWeb = require('tronweb');
const SHASTA = '';
const tronWeb = new TronWeb(
沙斯塔,沙斯塔,沙斯塔,
'《你的私钥在这里'
);
const OwnersWalletAtSHASTA = "《你的 shasta 钱包地址》";
. ..
const HelloSeaman_v1AtSHASTA = "TB4TEvEnbjM66ici2QjP92rpYkJWJPJajS";
. ..
功能运行测试(){
var Budget = ToTRX(0.01);
var 转账 = ToTRX(0.5);
console.log("RunTest / Budget = " + Budget + ", Transfer Value =
" + 转移);
SeamansContract.Run(1,“数学:log2(16)”以太坊编程,“”,“mathjs”,1,预算)。
send({shouldPollResponse: true, callValue: Transfer}).catch(函数(
错误){ console.log(错误); }).then(console.log("运行已执行"));
}
函数 SetCaptainsAddress() {
console.log("SetCaptainsAddress to " + CaptainsAddressAtSHASTAhex
);
海员合同。 SetCaptainsAddress(CaptainsAddressAtSHASTAhex)。
发送({shouldPollResponse: true, callValue: 0}).catch(函数(错误)
{ console.log(err); }).then( console.log("SETCAPTAINSADDRESS EXECUTED"
));
}
功能演示(){
console.log("演示运行...");
SeamansContract.Demo().send({ shouldPollResponse: true, callValue:
ToTRX(1)}).catch(function(err) { console.log(err); }).then
( console.log("演示已执行"));
}
异步函数 Go() {
. ..
SeamansContract = 等待 tronWeb.contract().at(HelloSeaman_v1AtSHASTA
);
SetCaptainsAddress();
// 运行测试();
//演示();
}
去();
呼叫完成。 SHASTA 仍然值得我们关注。