您的方位:主页>>区块链

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

发布时刻:2019-04-30 21:59:39  来历:互联网    采编:即时新闻  布景:

 

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

  在运用Solidity开发依据EVM的智能合约的进程中曾不可避免的踩过许多坑,因而当我得知迅雷链最近推出了支撑C/C++开发依据WASM合约的时分,刻不容缓的来上手尝试了一番,希望能够获的比运用Solidity开发合约时更好的体会。

  以下是我依据Catalyst的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++作为更老练的言语,大部分的开发者会有必定的开发根底。

  编写的便利性得到提高,安全性也有必定的确保。

  还有一个比较好的当地体现在,跟着越来越多的人参加,东西库和合约被开发和复用,合约的开发也将会愈加快捷高效。

  也欢迎运用迅雷链开发的人多跟我沟通和沟通。




重视fun88科技资讯大众号(fun88365 ),每天推送你感兴趣的科技内容。

特别提示:本网内容转载自其他媒体,意图在于传递更多信息,并不代表本网附和其观念。其原创性以及文中陈说文字和内容未经本站证明,对本文以及其间悉数或许部分内容、文字的真实性、完整性、及时性本站不作任何确保或许诺,并请自行核实相关内容。本站不承当此类著作侵权行为的直接职责及连带职责。如若本网有任何内容侵略您的权益,请及时联络咱们,本站将会在24小时内处理完毕。


本文来历:互联网

本文谈论
迅雷链正在推出愈加强壮的开发环境,以下降程序员们学习和进行区块链开发的门槛,然后加快更多区块...
日期:04-30
迅雷链首先支撑双虚拟机 推进区块链职业开展
以比特币、以太坊为代表的公链项目向咱们展现了区块链的巨大开展前景,可因为区块链自身技能特色,...
日期:04-15
想开发区块链运用,你被solidity拖后腿了吗?
大规模遍及?现在短期内依然难以完成
  英国金融市场行为监管局(Financial Conduct Authority...
日期:04-12
一致更高效,BOSCore让LIB进入秒级年代
区块链正在“侵略”你的日常日子。
超市里里的生鲜、大米多了一个溯源二维码;协作稳妥产...
日期:04-02
区块链大规模遍及: 突变前夜-RedFox Labs采访实录
“我想问一个问题,何处楼台先得月?”
日期:03-19
迅雷链落地运用事例盘点   解锁区块链技能打开办法
近来,EOS Fund创始人,闻名区块链技能专家Sean D. Murray承受科帝客采访时,论说了区块链技能在航...
日期:03-19
卞农谈苏宁大快消供应链:万物皆可“盘”
相较于2018年,2019年春的区块链职业要镇定许多。
日期:03-08
EOS Fund创始人:区块链在航空安全的运用
日前,迅雷发布了2018年Q4季度和全年财报,数据显现,上一年Q4季度,迅雷营收为4,230万美元。2018年迅...
日期:03-08
首部区块链游戏开发者纪录片《我是游戏开发者》行将上线
3月4日,互链脉息观察到我国招标招标公共服务平台上,发布了一则国企收购区块链项意图中标布告。
日期:03-05