Qtum量子链Howard《智能合约全栈解读》——Jeth技术分享会

量子链Qtum2018-06-14 10:51:33  阅读 -评论 0

Qtum量子链Howard《智能合约全栈解读》——Jeth技术分享会点击上方蓝字关注QTUM公众号,了解最新行业资讯

Qtum量子链Howard《智能合约全栈解读》——Jeth技术分享会

拿话筒为Qtum量子链DApp平台核心工程师

区块链技术中智能合约却是必不可少的核心技术,这一款被称为可以打开新经济钥匙的技术颠覆了传统互联网,现实是智能合约的技术在程序员中能够编写的却寥寥无几,6月10号Qtum量子链核心开发工程师Howard在Jeth技术线下交流会中详细解释了智能合约的全栈技术实现全过程,通过Howard的分享相信让你也实现从一个想法到完成自己的智能合约。 

01智能合约——开启全球协作系统

区块链本质上是基于共识机制的,共识机制又是层层递进的,为了达到所谓的social scalability,这样的信任和共识会逐步从个人扩展到亲友,再到社区、城市、国家乃至全球。区块链和智能合约的存在就是要提高人与人之间的合作,共同创造社会价值。合作的前提是信任,但是有时候熟人都难以相信,更别说是陌生合作者了,智能合约的意义就是把信任从人与人之间转移到区块链上。智能合约能降低他们合作的风险,达成共识。只要有信任,友谊的小船就不会翻。所以从另一个角度来说,智能合约可以理解成为一种 “社会扩容科技”。在区块链技术出现以前各国政府都需要花费大量成本维持社会秩序和信任基础,这些支出与GDP的占比从36%-58%不等。所以区块链出现,以计算机去代替人肉堆积出来的信任机制。社会治安需要警察来维持、社会正义需要法官和律师来维护,这些都是巨大的成本。

但是有了区块链,许多社会规则规范可以写在算法中,利用算法来维持秩序

我们在现实世界里面签订合约也许只是一张薄薄的纸,但它后面需要有律师和公证人、在发生问题的时候需要仲裁。所以在一纸合约的背后是由一个巨大的信任体系来支持。智能合约就是用计算机来替代了这些成本。

02

智能合约如何实现新经济?

为什么智能合约如此有趣,是因为它不仅可以执行一些简单的逻辑和存储,它还具有金融属性,可以处理一些与财富相关的内容。


如果你在自己的服务器上面写一个处理钱的东西还要求别人往你的服务器上打钱这事情是不会有人愿意去干的。但如果你将它实现在智能合约上,信任是由Qtum量子链这样的平台担保的,就完全不一样了。

我们这边做了一个“透明公益”的概念,透明化公益捐赠。每捐赠一次就可以在记账本上记上一次。具体捐了多少,几次,什么时间,这些信息都是在链上公开的。


我们需要初始化和设定管理员,就比如我们可以选一个最有公信力的机构,具有管理合约和取款的权限。当然任何人都可以捐款。我们也可以设定一些条件比如捐赠金额下限。最后,我们限制只有有管理员可以取款。

Qtum量子链Howard《智能合约全栈解读》——Jeth技术分享会

这个“公益捐赠”的代码很少,一共也就 20 多行。

先看一下这个初始化的函数,它是一个构建函数。

Qtum量子链Howard《智能合约全栈解读》——Jeth技术分享会

在这里我们可以看到 msg.sender,这是当前创建该合约的人。我们有 owner 这个变量,我们可以拿来存储管理员的地址。构建函数做的事情就只是把msg.sender 存储在 owner 这个变量。

Qtum量子链Howard《智能合约全栈解读》——Jeth技术分享会

接下来我们再来看看 donate 这个函数,也就是捐款的函数。我们可以看到 require 断言,也就是如果我们想要调用函数的话必须需要满足的一些要求。msg.value则是用户打款的金额,我们要求必须大于千分之一个以太坊。如果打款金额符合要求,智能合约就会记录一次 “感谢捐赠” 的日志。

Qtum量子链Howard《智能合约全栈解读》——Jeth技术分享会

这个函数执行完毕,msg.value 的金额就会存入我们这个公益链的余额。

接下来我们再看看取款的这个函数。刚刚在捐款的部分我们说过 msg.value 这个变量,只要大于千分之一个以太坊,就可以被计入公益链中。这边的 withdraw 函数的功能就是把链上存储的钱转出给他人。大家可以看到这边的 require 函数的要求,执行withdraw的必须是管理员,也就是管理捐款的机构。

Qtum量子链Howard《智能合约全栈解读》——Jeth技术分享会

智能合约平台和传统的web服务有相似之处但也不尽相同。


比如web服务通常是由供应商提供服务器支持,有供应商买单来支付运算的费用,但是在EVM平台的话用户需要做的计算产生的费用都是由自己来买单,这也就是gas模型的概念,执行每一项操作都会产生成本;另一点就是由用户掌握权限,比如以往我们使用支付宝转账,是由支付宝的服务器来判断是否允许进行该操作。但在 EVM上,类似的权限是由用户自己在客户端上控制的。只要用户本人签名,在服务端验证之后即可执行。性能上来说,区块链网路的每一个节点都是在重复运算,而且每一条数据都会在每一个节点上重复存储。虽然以太坊拥有20000多个全节点,但实际上它们做的事情是一样的,并没有任何性能的提升。

Qtum量子链Howard《智能合约全栈解读》——Jeth技术分享会

比起我们所熟悉的web服务平台,在中心化平台上做应用还是有很多的障碍。速度慢、成本高、易用性差、Transaction的生命周期复杂。

03去中心化应用/智能合约/以太坊虚拟机全栈解读

Qtum量子链Howard《智能合约全栈解读》——Jeth技术分享会

我们一起来看看当用户在 DApp 的 UI 做了一个操作,后面会引发一连串的什么事情。

这里有个为 SimpleStore 的合约。它做的事情很简单,只有一个 set 方法,让我们去改变 value 这个存储变量的值。

Qtum量子链Howard《智能合约全栈解读》——Jeth技术分享会

Qtum量子链Howard《智能合约全栈解读》——Jeth技术分享会

我们可以比较一下 Web 2.0 和Web 3.0 的架构有什么不一样,不同层做不同的事。

在前端,Web 2.0 就是HTML5,在微信、浏览器或者手机端运行。在web 3.0中大家说的是 DApp。这里差别不到。用户做一个操作,Web 2.0 的应用就会向后台发送请求做一些处理。在web 3.0上用户需要做的事情时在本地签名去创建 transaction,把它再递交给区块链让区块链去处理。

在 web 2.0大部分API 使用了 JSON 编码,而在 web 3.0 传递给服务的数据格式是 ABI encoding。数据递交给后端了,在 web 2.0中,我们使用的是服务器。而在 web 3.0 我们则是使用智能合约去实现商务逻辑。

服务层之下,web 2.0 就是对接 Linux 或者 Windows 这些操作系统,提供数据存储或者网路请求。web 3.0 的操作系统就是 EVM,除了执行业务逻辑,它还提供了一些金融的服务,比如转账,或者调用其他合约。

在最下层,在web 2.0 中数据一般是会存储在关联数据库中。而在web 3.0中数据会存储在 Merkle Tree 的数据结构。Merkle Tree 就像一个 Git 仓库。

Qtum量子链Howard《智能合约全栈解读》——Jeth技术分享会

我们展开看看前端要做的事情:

其实很简单,前端就是将链上的数据结构化,再展现给用户。它也可以有一些输入框让用户递交数据,传递到链子上。但我们要看看普通 web 和 DApp 的纯客户端有何区别。

大家接触最多的可能是 coinbase 或者 binance 这些交易平台。虽然他们涉及区块链,但他们并不是真正意义的 DApps。这些平台控制着权限,用户并没有掌控权。用户必须相信这些平台不会作恶(或者被黑)。


DApp 更讲究的是让用户自己去控制权限和私钥。所有的授权由用户在本地签名。

Qtum量子链Howard《智能合约全栈解读》——Jeth技术分享会

我们看看 REMIX IDE,这是针对以太坊设计的一个可以用于代码编写的应用。

这里我们看到有一个 set 的按钮, 和相对应的输入栏。我在这里输入666再按下 set,它就会发送一个事务去调用智能合约,把它的变量修改成666。

Qtum量子链Howard《智能合约全栈解读》——Jeth技术分享会

按下按钮之后,RPC会递交这个事务。

我们这边可以看到的是 ETH_SENTRANSACTION 这个RPC 请求.它需要传两个参数,from 是从哪个账号发这个事务,data 就是我们具体需要传输的数据。


在 QTUM 上面相对应的 RPC 方法是sendToContract, 基本是一样的概念。

Qtum量子链Howard《智能合约全栈解读》——Jeth技术分享会

在我们递交了RPC请求后,该请求就会被传播到整个点对点的网络上面。过一会儿事务会被网路接受,执行,并确认下来。在这个界面可以看到刚刚我们 RPC 上传的这个事务。这里关注一下Input Data,这是我们传入的数据。

Qtum量子链Howard《智能合约全栈解读》——Jeth技术分享会

我们再来了解一下智能合约的编码。当我们传递数据给智能合约的时候,我们必须要以 ABI 编码的形式去格式化数据,智能合约才会知道要去处理。事务传递上去的数据可以分成两个部分,前四个字符是它的方法选择器,后面是参数。方法的名字和它参数的类型取一个 Hash,再取该前四个字节。参数是 000...29a, 也就是之前传的 666,用 16 进位。

Qtum量子链Howard《智能合约全栈解读》——Jeth技术分享会

交易传递到网路上,矿工就会去处理。处理这笔交易的节点会把合约的代码从链上读取并加载到EVM中进行执行,把事务的数据加载到合约的工作区域。

Qtum量子链Howard《智能合约全栈解读》——Jeth技术分享会

EVM不仅是个虚拟机,同时也是个操作系统,它能够执行一些高阶的服务。我们这边可以看到智能合约会编译成EVM的字节码。这里面有很基本的加减乘除。但最关键的是最后面的 sstore的指令,它的效果是把 666 的这个数据存入区块链。

Qtum量子链Howard《智能合约全栈解读》——Jeth技术分享会

将EVM的字节码写成伪代码方便大家理解。

calldata 就是事务的数据,我们获取前四个字节,作为方法选择器。接下来,我们要匹配方法选择器匹配上了要跳转到哪里去。在这个例子,如果匹配上了,会跳到 tag_4 去继续执行

接下来会从 calldata 读取参数。最后调用 sstore 把值存储到 0x0 这个位置。

Qtum量子链Howard《智能合约全栈解读》——Jeth技术分享会

sstore 这个指令就是写入数据库了。以太坊的底层数据库很像Git的数据仓库。我们写入的书这个树结构的底层。只要数据修改,从子叶到根的路径的哈希全部都会变。这个图里面的 TopHash 可以理解为数据库的版本号。我们只要知道数据变了,版本号一定会变,就够了。

Qtum量子链Howard《智能合约全栈解读》——Jeth技术分享会

数据库有变化,MerleTree 的版本号就会边。这个变动会被矿工写入到区块里面。这就是我们最终的目标。

智能合约全栈的解读让我们了解到了智能合约通过技术手段来打开新经济信任协作的大门,Qtum量子链致力于开发最好用的底层工具帮助更多工程师加入区块链技术大潮从而促进区块链商业经济的崛起,我们永远干货满满,永远在路上。

Qtum量子链Howard《智能合约全栈解读》——Jeth技术分享会

Howard 是《Deep Dive Into Ethereum Virtual Machine》一书的作者,该书深度剖析了 Solidity 和以太坊的原理。目前,Howard 任 Qtum 量子链 DApp 平台核心工程师,负责开发工具和数据库。Howard 在创业界拥有10年的产品开发经验,并且对构建去中心化产品充满热情。

Qtum量子链Howard《智能合约全栈解读》——Jeth技术分享会

Jeth 是由掘金技术社区主办,以太坊社区基金会、以太坊爱好者与 ConsenSys 协办,围绕以太坊技术开发主题的系列线下活动。每期 Jeth 会邀请以太坊开发领域的优秀技术团队和工程师在线下分享技术干货。旨在为开发者提供线下技术交流互动机会,帮助开发者成长。

Qtum量子链Howard《智能合约全栈解读》——Jeth技术分享会

关注Qtum量子链(qtumchain)公众号,回复关键字查阅Qtum量子链相关资料,以下是部分文档关键字

回复:‘白皮书’,查看《Qtum量子链白皮书,设计原理,实现方案,及应用》

回复:‘未来’,查看《Qtum量子链未来2年技术路线规划-简略版》

回复:‘指南’,查看《首篇Qtum量子链区块链开发指南系列面世》

回复:‘专访’,查看《Nasdaq专访Qtum:区块链会成为世界最大的信任服务商》

回复:‘文档’,查看英文版本《Qtum量子链实现文档》

回复:‘中文文档’,查看中文版本《Qtum量子链实现文档》

Qtum量子链Howard《智能合约全栈解读》——Jeth技术分享会

Qtum量子链Howard《智能合约全栈解读》——Jeth技术分享会

声明:链世界登载此文仅出于分享区块链知识,并不意味着赞同其观点或证实其描述。文章内容仅供参考,不构成投资建议。投资者据此操作,风险自担。此文如侵犯到您的合法权益,请联系我们kefu@lianshijie.com

参与讨论 (0 人参与讨论)

相关推荐

市场总结:比特币达到年内高点19,850美元,同时ETH期权市场交易员高度看涨ETH

市场总结:比特币达到年内高点19,850美元,同时ETH期权市场交易员高度看涨ETH

与此同时,ETH期权交易员也在为ETH创下新纪录的潜力押下重金。翻译:Maya 据CoinDesk 20的数据显示,比特币价格在截至撰稿时间前的24小时内创下历史新高,交易额高达19,850美元。

以太坊市值超过GM, CME, 及科技股,未来走向如何?

以太坊市值超过GM, CME, 及科技股,未来走向如何?

虽然以太坊拥有类似规模的市值,但它与上述公司完全不同。总而言之,可以说以太坊的潜力远高于绝大多数上市公司,但这并不意味着投资者会不考虑评估其市值与成长型科技公司的对比。

为什么以太坊2.0信标链主网正式启动,而ETH价格却大幅下跌?

在最近的回调中,以太坊的原生加密货币以太坊的价格比比特币的下跌幅度更大。由于以太坊2.0升级网络的推出,以太坊的大幅修正令人惊讶。尽管如此,以太坊价格在短短两个小时内就下跌了11%,许多交易者对此措手不及。

birich合约课堂 -什么是USDT正向数字货币合约?

一、什么是USDT正向合约USDT保证金合约是一种以USDT为保证金的合约产品,全程USDT结算,以USDT来计算盈亏,认知和理解更直观。保证金和盈利不受行情波动影响,我们通常称之为正向合约。一句话总结:您只要持有USDT,就可以直接做多个主流币种的合约交易,而不需要持有多个币种再去做一一对应交易。二、USDT保证金合约与币本位合约的区别币本位合约:又叫反向合约,以BTC、EOS等本位货币作为结算

CITEX(C网交易所)第四届实盘合约交易赛圆满落幕

CITEX(C网交易所)第四届实盘合约交易赛圆满落幕

2020年11月19日,为期八天的CITEX第四届实盘合约交易赛圆满收官。本次活动参人数共3521人,充值金额超30万USDT,日成交数1800笔以上,7天总交易金额突破8000万美金。其中幽灵投研金牌分析师幽灵线上一对一实时分享合约交易策略,准确率基本保持在85%,获得众多用户的一致好评。合约收益王 单笔斩获3652USDT收益大赛开始之初,单笔收益排行几乎以秒级刷新。11月12日,单笔最高收益

首届区块链服务网络BSN全球技术创新发展峰会将于11月27日在武汉召开

首届区块链服务网络BSN全球技术创新发展峰会将于11月27日在武汉召开

为了贯彻落实党中央、国务院关于加快推动区块链技术和产业创新发展的战略部署,把握区块链技术在新的技术革新和产业变革中的重要作用和重大机遇。11月27日,由国家信息中心、湖北省发展和改革委员会主办,区块链服务网络发展联盟、中国移动通信集团湖北有限公司承办的"首届区块链服务网络BSN全球技术创新发展峰会暨湖北区块链技术创新大会",将在湖北武汉东湖国际会议中心长江厅隆重开幕。识别海报二维码观看大会直播本次

智慧高速公路就是简单的加一些高新技术?

智慧高速公路就是简单的加一些高新技术?

智慧高速公路每个人的理解都不一样,可能你们的理解就是利用"互联网+、大数据、云技术、物联网、移动网络等"技术,为智慧高速公路实现透彻全面、实时准确的智慧感知;宽带泛在、稳定可靠的智能传输;协同共享、强大高效的智慧管理;跨界融合、及时精准的智慧服务;准确无感、快速便捷的智能收费。智慧化是不是就能解决上述需求呢?我认为,T/Q:13823152801/2723379296智慧化不能解决所有问题。想通过

缠论快枪手:11.20什么是现货 什么是合约 合约和现货有什么区别?

缠论快枪手:11.20什么是现货 什么是合约 合约和现货有什么区别?

鉴于很多币友反映的一些问题,例如:不太明白什么是合约、与现货区别到底在哪、加了杠杆风险是不是特别大、听说玩合约风险很大为什么好多人还在玩合约、听过很多爆仓事件后自己不敢接触合约了等等,我们用此篇文章向大家阐述一下,希望大家能对合约有个基本的了解。其实现货与合约是两个不同的交易机制,就好比炒股和炒期货,各有优劣。不同的交易机制就有不同的操作方法,大家可以理解为使用不同的工具为你获利。我们先来谈谈现货

麦妖榜
更新日期 2019-09-03
排名用户贡献值
1牛市来了30910
2BitettFan24187
3等待的宿命23810
4区块大康20369
5六叶树20310
6linjm122719429
7天下无双16192
8lizhen00215280
9让时间淡忘14586
10yelanyi050511349
返回顶部 ↑