主页 > 安卓版imtoken钱包 > 以太坊编程语言Solidity在波场异步调用中的应用

以太坊编程语言Solidity在波场异步调用中的应用

安卓版imtoken钱包 2023-02-28 06:44:26

描述

目前,以太坊的编程语言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 仍然值得我们关注。