你可能听说过「智能合约」,甚至可能知道它们是在区块链上运行的代码。但是你如何才能在区块链上运行代码?这不是可以轻易理解的简单概念。本文解释了智能合约是如何在以太坊区块链上运行的。对编程的基础理解将会有所帮助,因为本文包含了一些用于举例的简单代码。为了清晰起见,本文将其中的一些技术细节稍微进行了简化,但概念是有效的。
原文标题:《UnderstandingEthereumSmartContracts》
原文作者:GjermundBjaanes
翻译:蓝狐笔记社群Dyna
一、区块链——快速入门
这里不讲太多细节,区块链技术的核心概念是分布式账本。它是一种在众多参与者之间共享的特殊类型的数据库。
这个特殊的数据库就是一个交易列表,记录了网络中发生的每一笔交易。每个人都有一个副本。这种去中心化分布结合强有力的货币激励措施,消除了各方之间信任的必要性。
传统意义上,当事人之间的信任是通过中间人,即第三方来解决的,比如Paypal、银行。与你不信任的人之间的交易将通过双方都信任的中间人进行。
有了区块链,这种需求消失了。因为你可以把你的信任放在网络上,在这里,强有力的激励措施消除了作弊的欲望(简而言之:遵守规则更有利可图)。
共和党众议院领袖麦卡锡呼吁美国决策者更深入地了解比特币:4月13日消息,众议院少数党领袖凯文·麦卡锡呼吁美国的决策者更深入地了解比特币。CNBC的Joe Kernen询问麦卡锡有关美国财政部长耶伦和美联储主席鲍威尔是否应阅读《比特币标准》(一本由经济学家Saifedean Ammous撰写的畅销书)时,麦卡锡回答:“要走向未来,他们不应该忽视比特币……对于那些监管者和执政者来说,最好现在就开始理解比特币对未来而言意味着什么,因为其他国家(尤其是中国)正在向前发展。”麦卡锡警告说,如果不采取行动,美国最终可能落后于中国。(U.today)[2021/4/13 20:15:34]
更具体地说:区块链网络是一组机器,它们记录着相同的交易列表副本(例如,从A转给B的钱)。
因为每个人都有相同的列表,所以很难网络接受错误的交易。结合一些加密算法和货币奖励以便遵守规则,你的网络会非常安全。
所有这些也使得区块链几乎是不可变的,因为改变历史记录的唯一方法是获得全网大多数人的同意。
二、什么是智能合约?
区别于比特币,以太坊最大的不同是引入了智能合约的概念。比特币是数字货币,以太坊也是数字货币,但远不止这些。
声音 | 河北辛集副市长:大力推进“区块链+智能制造”的深入融合:12月27日,河北省钢铁行业“区块链+智能制造”主题峰会在石家庄辛集市举行,峰会由河北省冶金行业协会、中国电信河北分公司、长城新媒体集团主办。辛集市副市长牛军波表示,冶金行业的发展对于辛集市的经济建设起到举足轻重的作用,目前钢铁行业的自动化、信息化的发展已具有良好的基础。大力推进“区块链+智能制造”的深入融合,可以为钢铁行业带来全面的提升,在提高企业竞争力、打造优质产品方面提供有力支持。(长城网)[2019/12/27]
「智能合约」这个名称有点误导人。它们不是真正的合约,也不特别智能。它们只是一些可以运行在区块链上的代码-或者说是计算机逻辑运算。
首先,我将介绍有关智能合约是以太坊网络上的一种特殊账户。你有用户账户,你还有智能合约账户。
一个用户账户包括:
一个地址
余额
一个智能合约账户包括:
一个地址
余额
一个状态
代码
地址和普通账户的地址是一样的,它是该账户的唯一识别符。
动态 | SAP与苏宁将在区块链等领域开展深入研究:在“第9届中德经济技术合作论坛”上,中国国务院总理李克强与德国总理默克尔,共同见证了SAP与苏宁控股集团的战略合作签约。根据合作协议,未来,双方将联合开展技术创新和行业实践,在人工智能、机器学习、区块链、物联网等领域开展课题研究,共同促进数字经济发展。[2018/7/10]
余额和普通账户也是一样的概念。唯一令人激动的是,智能合约上的余额意味着代码可以拥有金钱。它可以处理这些钱,也可能因为编码错误而造成处理不当。
智能合约帐户的状态是智能合约中声明的所有字段和变量的当前状态。它的工作方式与大多数编程语言中类的字段变量相同。事实上,一个类的实体化对象可能是理解智能合约的最简单方法。唯一的区别是这个对象是永久存在的(除非被编程为自我毁灭)。
智能合约的代码是编译好的字节代码,以太坊客户机和节点可以在上面运行。它是在创建智能合约时执行的代码,并且包含可以调用的函数。就像面向对象编程的语言中的任何对象一样。
关于智能合约的趣事:它们可以调用其它的智能合约。这就开启了创建自主代理的能力,这些代理可以自己花钱和进行交易。
假设我用上面的代码创建了一个智能合约。该代码有一个名为counter的字段,类型为uint(整数)。counter变量的内容是本合约的状态。每当我调用count()函数时,任何人都能看到这个智能合约在区块链上的状态将会加1。
赵鹞:政府部门是否应该大胆的鼓励推广区块链需要深入思考:今日,中国政法大学金融创新与互联网金融法治研究中心副秘书长、中国社科院金融研究所支付清算研究中心特约研究员赵鹞发表文章称,区块链技术本身的价值中立性并不会带来基于区块链的经济社会活动的价值中立,当我们还没有准备好如何应对区块链大规模应用所产生的新的、深层次的社会、经济、金融风险时,政府部门是否应该大胆的鼓励、推广,这是需要深入思考的。就好比核能发电,我们没有完全掌握安全、可控的核聚变技术就能用于生产发电吗?显然是不可能的。所以,面对区块链、人工智能等各种破坏性创新技术的推广应用,特别是金融科技的发展,政府、学界、业界和媒体要头脑冷静,切莫用“不可控核聚变发电”。[2018/2/27]
稍后我们将通过更多的例子来解释它是如何工作的,但首先我想回到以太坊和比特币的交易,并以此来解释一些事情。
三、交易水平上,以太坊VS比特币
比特币交易非常简单。你可以只做一件事。一种类型的交易。略过一些细节,一切都可以归结为TO,FROM和AMOUNT。这使得比特币成为一种价值储存手段,能够在网络参与者之间传递价值。
以太坊的不同之处在于交易还有一个「DATA」字段。该「DATA」字段支持三种类型的交易:
中国发展高层论坛将对区块链技术进行深入讨论:2018年中国发展高层论坛将于3月24至26日在北京举行,中国发展研究基金会相关人士表示,中国发展高层论坛在今年迎来了第19届。围绕高质量发展、财税体制改革、供给侧结构性改革与金融政策、全面开放新格局、创新与未来等重大议题,中外方嘉宾将开展深入讨论。此外,参会嘉宾还将对中国改革开放四十周年、全球不平等、新时代的中美关系、一带一路、人工智能时代的产业转型、乡村振兴与农业现代化、金融创新与区块链革命等热点议题进行深入交流。[2018/2/26]
价值转移
TO接收地址;
DATA字段为空或包含要附加的任何消息;
FROM你
AMOUNT是你要发送的以太坊数量
创建智能合约
TO字段为空
DATA字段包含编译为字节代码的智能合约代码
FROM你
AMOUNT可以是0或者任意你想放在合约里的以太坊数量
调用智能合约
TO字段是智能合约账户地址
DATA字段包含函数名称和参数——如何调用智能合约
FROM你
AMOUNT可以是0或者任何数量的以太坊,比如你需要为一项服务合约支付的数目
在这些交易中还有更多的字段和复杂性,但以上这些已经很好地解释了核心概念。让我们看看关于这些交易的一些更具体的例子。
价值转移
非常简单。TO向一个地址发送一定数目的以太坊代币。你也可以为一笔交易加上一条消息。
创建智能合约
正如以上提到的,一个空的TO字段表示创建一份智能合约。DATA字段包含编译为字节代码的智能合约。
调用合约
我们稍后会回到这个问题,但是其主要概念是你将交易发送到你想要调用的智能合约地址,然后将函数调用放在DATA字段中。
四、注意成本和执行
正如你所想象的,你不能一直在区块链上免费运行计算量很大的程序。
代码的执行是由调用者用一种叫做gas的东西来支付的。Gas是运行以太坊虚拟机的燃料。你可以将其视为每次执行指令的费用(就像一行代码)。
你需要为一个特定的合约调用设置可花费的最大gas。比如,如果你调用的代码进入了一个永久循环,将会确保在执行过程中所花费的gas不会超过设置的最大gas。
gas(执行)的成本由网络的矿工(运行代码的节点)决定。关于gas和执行,还有很多知识。但以上这些值得牢牢记住。
五、智能合约如何工作?
当一个智能合约被部署到以太坊网络时,任何人都可以调用智能合约的函数。虽然出于安全考虑该函数可能阻止人们调用,但你可以自由尝试。
假设有一个MyObject类型的对象。该对象有一个名为myFunction的函数。要调用它,只需引用对象的实例、调用哪个函数和使用哪个参数调用。
像这样:
myObjectReference.myFunction(parameters);
该函数返回的任意值,可以将其存在变量中:
myVariable=myObject.myFunction
调用一个智能合约在概念上是一样的。唯一的区别是,你必须将调用相关的所有信息放在交易中,对其签名并发送到网络上来执行。
假设你想要调用函数myFunction,其中包含智能合约「0x0123456」里的一些参数。调用智能合约分四步:
现在,当交易被放进区块链中的一个块,该状态变化便会被记录在整个网络中。
六、世界计算机
许多人把以太坊称为世界计算机。这是个不错的类比。它就像一台由整个世界来维护的虚拟机。
但是请记住:虽然智能合约是图灵完备的,并且理论上可以做任何事情,但它们不太适合繁重的计算工作。
以太坊世界计算机就像一台运行简单程序的老式慢速计算机。由于成本和安全性,保持以太坊的智能合约小而简单是至关重要的。
合约需要的计算量越多,运行的成本就越大。合约越复杂,就越有可能存在安全漏洞。而且智能合约中的安全漏洞是很难处理的——毕竟区块链是不可变的。
举例:通证
回归重点,我想解释一下通证是如何工作的。
大多数这些通证都是在以太坊上创建的,而且概念非常简单。
如何使用Javascript或其他编程语言编写一个简单的货币系统?你可以在一个文件中完成所有的操作。你真正需要记录的是:
总供应量
账户
账户中的余额
资金流向
通过用户和余额之间的简单映射,你可以得到123的答案:
该map只是把一个账户映射到一笔钱。
使用构造函数,你可以在自己的帐户中设置初始供应量
资金的流动是通过简单的函数来完成的,即从一个账户中减去,然后加在另一个账户上。
创建通证与我们在以太坊使用的概念完全相同。当然,还有一些更复杂和额外的功能,但是基本概念非常简单。
以下就是基本的通证合约在以太坊编程语言中呈现的样子(再次重申:为清晰起见进行了简化):
这就是基础编程概念。我认为这说明了以太坊作为一个平台的力量。通过一些简单的代码,你可以凭空生成一个代币,它本质上就是由世界计算机记录的一些变量。欢迎来到新的互联网。
来源链接:www.gjermundbjaanes.com
如今,各类区块链项目如火如荼,五花八门的白皮书如雨后春笋般涌现。初入币圈的小白,往往不看甚至不会看白皮书,就容易被各种真真假假的消息左右,只知道“追涨杀跌”,一不小心就选择了泡沫币、空气币、币,成为一把韭菜,被庄家割了一茬又一茬.
1900/1/1 0:00:00前言:为什么职业扑克选手跟业余选手玩法不同?这跟EV有关。EV期望值是什么?EV跟正确的决策方式有关,跟单次输赢的结果无关,长期的+EV将决定一个人的最终成绩,这对于我们做投资和创业也有启示.
1900/1/1 0:00:00今天封面是《孩子们在海边》,亚瑟.拉科姆。中美的谈判还在继续,据说下一回的探讨主题里,知识产权的部分被列了进去。毕竟美国在这方面没少吃亏,之所以对我们开展技术封锁,就是群众的山寨能力太强.
1900/1/1 0:00:00Dgroup创始人赵东邀朋友分析BFXIEO的潜在风险和回报,对其文章大加赞赏,并表示“我无法完全客观,因为我是股东”.
1900/1/1 0:00:005月1日,EOSREX成功上线,不到24小时,就有超过2000万的EOS参与其中。截止今天发稿时,REX资金池中已经有超过4455万EOS。不到3天时间,“吸金”4455多万EOS.
1900/1/1 0:00:00狂人本着负责,专注,诚恳的态度用心写每一篇分析文章,特点鲜明,不做作,不浮夸!本内容中的信息及数据来源于公开可获得资料,力求准确可靠,但对信息的准确性及完整性不做任何保证,本内容不构成投资建议,据此投资,责任自负.
1900/1/1 0:00:00