基于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仍然值得我们关注。
微信二维码
售前客服二维码

文章均源于网络收集编辑侵删

提示:仅接受技术开发咨询!

郑重申明:资讯文章为网络收集整理,官方公告以外的资讯内容与本站无关!
NFT开发,NFT交易所开发,DAPP开发 Keywords: NFT开发 NFT交易所开发 DAPP开发