• 人为财死鸟为食亡,看起来很朴素的道理。所谓领袖,就是能把各向异性的人为财死的行为变为各向同性的人为志亡的行动,基础就是靠着为人提供安居乐业的机会,让人不再有分散 2019-07-09
  • 《绝地求生》主机版优化细节:支持4K和60帧 2019-07-09
  • 责任中国人民网2012年度评选揭晓盛典 2019-07-01
  • 莫用“安保”挡了巡视组的路—顾仁的博客—强国博客—人民网 2019-06-23
  • 我国发现一种全新植物:北川驴蹄草 2019-06-23
  • 2018“创客广东”珠海市创新创业大赛总决赛落幕 2019-06-18
  • 中国足球与中国股市谁最牛?请投下你神圣一票 2019-06-02
  • 深刻认识党的领导、人民当家作主、依法治国的有机统一 加强新时代政治文明建设的着力点 2019-06-02
  • 20180531 袁隆平:海水稻打破纪录,杂交稻走向全球 2019-05-29
  • 全力以赴,聚焦盛会 中国共产党第十九次全国代表大会 2019-05-28
  • 摄影师捕捉超强EF3龙卷风 巨大云团画面惊险壮观 2019-05-28
  • 中外资银行优势互补 共同支持“一带一路” 2019-05-21
  • 环球人物金融科技领军人物榜单 2019-05-10
  • 网红章丘铁锅曾一锅难求 如今小作坊停业现滞销 2019-05-09
  • 自私的小萌们眼看着自己的队友挨踹也不出来帮一把? 2019-04-26
  • 您的位置:首页>>区块链

    3d开奖结果:想开发区块链应用,你被solidity拖后腿了吗?

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

    青海快三玩法中奖介绍 www.yhlf.net  

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

      在使用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++作为更成熟的语言,大部分的开发者会有一定的开发基础。

      编写的便利性得到提升,安全性也有一定的保障。

      还有一个比较好的地方体现在,随着越来越多的人加入,工具库和合约被开发和复用,合约的开发也将会更加便捷高效。

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




    关注ITBear科技资讯公众号(itbear365 ),每天推送你感兴趣的科技内容。

    特别提醒:本网内容转载自其他媒体,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕。


    青海快三玩法中奖介绍 本文来源:互联网

    本文评论
    迅雷链率先支持双虚拟机 推动区块链行业发展
    迅雷链正在推出更加强大的开发环境,以降低程序员们学习和进行区块链开发的门槛,从而加速更多区块...
    日期:04-30
    共识更高效,BOSCore让LIB进入秒级时代
    以比特币、以太坊为代表的公链项目向我们展示了区块链的巨大发展前景,可由于区块链本身技术特点,...
    日期:04-15
    区块链大规模普及: 骤变前夜-RedFox Labs采访实录
    大规模普及?目前短期内仍然难以实现
      英国金融市场行为监管局(Financial Conduct Authority...
    日期:04-12
    迅雷链落地应用案例盘点   解锁区块链技术打开方式
    区块链正在“入侵”你的日常生活。
    超市里里的生鲜、大米多了一个溯源二维码;互助保险产...
    日期:04-02
    卞农谈苏宁大快消供应链:万物皆可“盘”
    “我想问一个问题,何处楼台先得月?”
    日期:03-19
    EOS Fund创始人:区块链在航空安全的应用
    近日,EOS Fund创始人,知名区块链技术专家Sean D. Murray接受科帝客采访时,论述了区块链技术在航...
    日期:03-19
    首部区块链游戏开发者纪录片《我是游戏开发者》即将上线
    相较于2018年,2019年春的区块链行业要冷静许多。
    日期:03-08
    迅雷业绩持续增长 区块链让共享计算更具商业价值
    日前,迅雷发布了2018年Q4季度和全年财报,数据显示,去年Q4季度,迅雷营收为4,230万美元。2018年迅...
    日期:03-08
    网心科技中标国企联盟链项目 迅雷区块链应用边界再扩展
    3月4日,互链脉搏观察到中国招标投标公共服务平台上,发布了一则国企采购区块链项目的中标公告。
    日期:03-05
     
  • 人为财死鸟为食亡,看起来很朴素的道理。所谓领袖,就是能把各向异性的人为财死的行为变为各向同性的人为志亡的行动,基础就是靠着为人提供安居乐业的机会,让人不再有分散 2019-07-09
  • 《绝地求生》主机版优化细节:支持4K和60帧 2019-07-09
  • 责任中国人民网2012年度评选揭晓盛典 2019-07-01
  • 莫用“安保”挡了巡视组的路—顾仁的博客—强国博客—人民网 2019-06-23
  • 我国发现一种全新植物:北川驴蹄草 2019-06-23
  • 2018“创客广东”珠海市创新创业大赛总决赛落幕 2019-06-18
  • 中国足球与中国股市谁最牛?请投下你神圣一票 2019-06-02
  • 深刻认识党的领导、人民当家作主、依法治国的有机统一 加强新时代政治文明建设的着力点 2019-06-02
  • 20180531 袁隆平:海水稻打破纪录,杂交稻走向全球 2019-05-29
  • 全力以赴,聚焦盛会 中国共产党第十九次全国代表大会 2019-05-28
  • 摄影师捕捉超强EF3龙卷风 巨大云团画面惊险壮观 2019-05-28
  • 中外资银行优势互补 共同支持“一带一路” 2019-05-21
  • 环球人物金融科技领军人物榜单 2019-05-10
  • 网红章丘铁锅曾一锅难求 如今小作坊停业现滞销 2019-05-09
  • 自私的小萌们眼看着自己的队友挨踹也不出来帮一把? 2019-04-26
  • 重庆百变王牌高手技巧 快乐双彩中3个可有钱 湖北体彩网上投注 广西快乐双彩今天开奖结果l 福建11选5开奖公告 体彩p3和直走势图 竞彩足球比分直播500l 重庆幸运农场手机计划软件手机版下载 湖南幸运赛车综合 下载青海快三开奖查询 3中3平码复式计算器 2013南国七星彩走势图 财神码报网址 91y斗地主记牌器 吉林11选5乐四怎么中奖