您的地位:首页>>区块链

想开拓区块链应用,你被solidity拖后腿了吗?

发布光阴>2019-05-19 21:59:39  来源:互联网    采编:即时新闻  配景:

 

  作为一个前端开拓,我接触智能合约开拓已经快一年了,期间也开拓了几个智能合约应用,看过了一些以太坊合约代码。

  在应用Solidity开拓基于EVM的智能合约的过程中曾不行防止的踩过很多坑,因此当我得知迅雷链最近推出了支撑C/C++开拓基于WASM合约的时候,迫不及待的来上手尝试了一番,期望可以或许或许获的比应用Solidity开拓合约时更好的体验。

  如下是一贑atalyst的TRC3模板合约体验及一些简略的合约移植后代码修改的流程,重要介绍一下已经在应用Solidity时出现的成就,和后来应用C/C++在WASM实现中的对比

  Dapp合约开拓阅历

  我已经应用Solidity写过一个溯源存证类的合约,重要便是把用户颠末过程表单提交的一些信息,存入到区块链上。末了按照传统的计划实现,间接将数据库表字段映射到合约里的布局体,然后调用合约办法存储到Map里。

  如果大家有过相似的开拓阅历的话,大都邑碰到一个很间接的成就:stack too deep, try using fewer variables。如下面这段代码:

  pragma solidity ^0.4.20;

  contract Test {

  struct Tstr {

  string a1;

  string a2;

  string a3;

  string a4;

  string a5;

  string a6;

  string a7;

  string a8;

  }

  mapping(uint => Tstr) public tmap;

  function test(string _a1, string _a2, string _a3, string _a4, string _a5, string _a6, string _a7, string _a8) public {

  Tstr memory tstr = Tstr(_a1, _a2, _a3, _a4, _a5, _a6, _a7, _a8);

  tmap[0] = tstr;

  }

  }

  这个错误是因为EVM限制了栈至多能取到stack[15]便是从栈顶向下第16个栈元素的内容,这就导致了如果一个函数办法的入参、返回值、函数内参数的个数如果大于一定量的时候很可能会触发这个错误,实际环境要根据opcode来阐发。

  实践上来说如果合约业务逻辑复杂,总会有不行防止的环境会碰到上述成就。

  比如,实践上咱咱咱们可以或许或许颠末过程拆分合约逻辑,优化代码布局来修复。但这便是一个典型的EVM限制开拓的成就。 另外另有像EVM限制合约Bytecode大小不超过24K,Solidity无法在合约外返回变长数组、没有迭代器来遍历map,不支撑原生string的操纵等等这些成就。

  抱着这些应用Solidity过程中发生的怀疑和对WASM的等待,咱咱咱们来看一下应用C/C++开拓合约的过程。

  应用Catalyst

  首先我从迅雷链的Catalyst对象开端,因为目前为止想颠末过程迅雷链支配WASM范例的合约,还只能颠末过程官方供给的Catalyst做编译测试。

  对Catalyst的应用这里不做过量介绍,因为其实全体和remix的应用体验很切近,只是编译、支配和履行都是颠末过程迅雷链测试环境实现的。

  而Catalyst里供给了一份WASM范例的模板合约,实现的是TRC3模范的token,也便是ERC20的token合约。接触过区块链的应该都知道这因此太坊的token通证刊行模范,而且已经有很多基于Solidity的成熟的实现。

  咱咱咱们以这里的C++实现的token合约模板来解析。

  布局

  可以或许或许看到模板里TRC3 token合约分为三个文件来实现,此中ITRC3.hpp定义了TRC3的必必要实现的办法,和两个事件;TRC3.hpp则继承自ITRC3,并定义了一样平常token所必要的私有属性,私无办法(transfer,approve),并实现为了接口类的办法; TRC3.cpp则是颠末过程thunderchain_main初始化了TRC3的合约实例,定义了一系列ACTION供给对外调用的逻辑入口,并调用TRC3对应办法实现最终函数。

  应用TC宏

  每个文件里都引用了 tcapi.h 头文件,这应该是迅雷链为WASM合约开拓供给的一个对象函数库,比如合约里应用到的address 范例定义、TCStorage的操纵,TCnotify事件操纵等,这些api都是可以或许或许颠末过程迅雷链的文档查到的,链接https://open.onethingcloud.com/site/wasm.htm

  这一段自定义了范型参数的类TCMap,实现私有属性 _balances 和 _allowed

  // Mapping from address to balance

  TCMap

  // Mapping from spender to approvals

  TCMap_allowed{"allowed_"};

  另外合约事件的宏定义及参数的传递如下

  #define EMIT(eventID, arg1, arg2, arg3) {

  void *jsroot = TC_JsonNewObject();

  TC_JsonPutString(jsroot, #arg1, arg1);

  TC_JsonPutString(jsroot, #arg2, arg2);

  TC_JsonPutString(jsroot, #arg3, arg3);

  TC_Notify(_transferEventID, TC_JsonToString(jsroot));

  }

  应用TC_Json相干Api可以或许或许轻松实现json数据,然后颠末过程事件将json string触发。

  其余transfer的常规实现利用C++和迅雷链供给的一些Api,可以或许或许说基本照搬Solidity中对ERC20合约的实现即可。

  ACTION

  从TRC3.cpp合约的实现来看,统统的合约必要有一个名为thunderchainmain的主函数入口,而且颠末过程ACTION case去路由对应的办法调用。thunderchainmain的参数只要两个,便是要履行的办法action名称,和履行办法的参数json。 因为这里将统统的参数都转为json情势传入,而且WASM对栈的应用无穷制,所以不会出现像EVM一样的stack too deep的成就。

  但是这种办法路由的实现办法也是有一些弊端:比如合约调用方必需精确匹配要调用的合约名称,和参数的名称(json参数取值根据参数名获得),否则就会履行到默认action。

  基于上述办法的合约办法调用和查询,是将生意data按照|的情势,action与args以"|"分割,这种实现相比于Solidity基于ABI编码参数和解码返回值,加倍间接。

  对比

  颠末过程对比应用C/C++开拓合约的过程,如今对这种实现有了一些简略的认识。

  从开拓的角度来看,WASM虚构机更多的意义在于带来了一种常见语言(以后也许能支撑更多语言)支撑合约的开拓,使开拓者有了一定的可抉择性。

  而C/C++作为更成熟的语言,大部分的开拓者会有一定的开拓基础。

  编写的便利性获得晋升,平安性也有一定的包管。

  另有一个比较好的地方体如今,跟着越来越多的人加入,对象库和合约被开拓和复用,合约的开拓也将会加倍便捷高效。

  也迎接应用迅雷链开拓的人多跟我相同和交换。




存眷迅诚电脑IT新闻网"大众号(itbear365 ),天天推送你感兴趣的科技内容。

分外提醒:本网内容转载自其余媒体,偏向在于传递更多信息,并不代表本网赞同其概念。其原创性和文中陈述文字和内容未经本站证实,对本文和此中全体或许部分内容、文字的真实性、完备性、实时性本站不作任何包管或许诺,并请自行核实相干内容。本站不承当此类作品侵权行为的间接任务及连带任务。如若本网有任何内容侵犯您的权柄,请实时联系咱咱咱们,本站将会在24小时内处理终了。


返回网站首页 本文来源:互联网

本文评论
迅雷链率先支撑双虚构机 推动区块链行业睁开
迅雷链正在推出更增壮大的开拓环境,以低落程序员咱咱们学习和停止区块链开拓的门坎,从而加快更多区块...
日期:2019-05-19
共识更高效,BOSCore让LIB进入秒级时代
以比特币、以太坊为代表的公链项目向咱咱咱们展现了区块链的弘大睁开远景,可因为区块链自己技术特色,...
日期:2019-05-19
区块链大规模普及: 骤变前夜-RedFox Labs采访实录
大规模普及?目前短期内仍然难以实现
  英国金融市场行为监管局(Financial Conduct Authority...
日期:2019-05-19
迅雷链落地应用案例盘点   解锁区块链技术打开办法
区块链正在“入侵”你的日常生活。
超市里里的生鲜、大米多了一个溯源二维码;合作保险产...
日期:2019-05-19
卞农谈苏宁大快消供给链:万物皆可“盘”
“我想问一个成就,何处楼台先得月?”
日期:2019-05-19
EOS Fund创始人:区块链在航空平安的应用
近日,EOS Fund创始人,驰名区块链技术专家Sean D. Murray接受科帝客采访时,论述了区块链技术在航...
日期:2019-05-19
首部区块链游戏开拓者记载片《我是游戏开拓者》行将上线
相较于2018年,2019年春的区块链行业要冷静很多。
日期:2019-05-19
迅雷事迹持续增长 区块链让同享计算更具商业价值
日前,迅雷发布了2018年Q4季度和整年财报,数据显示,去年Q4季度,迅雷营收为4,230万美元。2018年迅...
日期:2019-05-19
网心科技中标国企同盟链项目 迅雷区块链应用界限再扩大
3月4日,互链脉搏观察到中国招标投标公共效劳平台上,发布了一则国企洽购区块链项偏向中标公告。
日期:2019-05-19
 
友情链接:cad教程网  母婴之家网  广东省技工学校  桥西电化教育网  宿城教育新闻网  黑马机械设备信息网  中国贷款网  华人科技资讯网  燃烧体育网  重金属矿技术网