【译】完全理解以太坊智能合约

发表于 5年以前  | 总阅读数:2169 次

这篇文章是我看到的介绍以太坊智能合约原理最经典的文章,尤其是后半部分,作者原作者 Gjermund Bjaanes, 本文为翻译。

大家可能听说过“智能合约”这个概念,也许还知道它们是可以在区块链上运行的“代码”。

但是如何在区块链上运行代码呢? 或许大家还不是很理解,这篇文章将解释智能合约如何在以太坊区块链上运行。

如果对编程有所理解会对理解本文有所帮助,因为这篇文章会包含一些简单代码,为了简洁清楚,本文中的一些技术细节略有简化,但这些概念是正确的。

快速了解区块链

不关注细节的话,区块链技术的核心概念是分布式账本。 它是许多参与者共享的特定类型的数据库。

这个特殊的数据库只是一个交易列表,记录着网络中发生的每笔交易。每个人都可以拥有自己的交易列表备份,再加上强有力的货币激励措施消除各方之间信任成本。

传统交易通常引入第三方(双方信任的中间人)来解决相互不信任的人进行的交易,如:支付宝、Paypal 、银行。

使用区块链,可以把信任放在一个网络中,不在需要第三方,它通过强有力的激励去规避作弊行为(简而言之:遵循规则更有利可图)。

分布式账本

更具体一点:区块链网络是一堆机器,它们都具有相同的交易列表,由于每个人都有相同的列表,因此很难欺骗网络接受虚假交易。 通过与一些加密算法和货币激励相结合,只要大家都遵循规则就可以构建一个安全的区块链网络。

通过这种方式也使得区块链几乎无法篡改。 改变历史记录的唯一方法是让大多数节点(矿工)同意这样做。

如果想更深入地介绍区块链,还可以参考原作者的另一篇文章:什么是区块链(英文)

什么是智能合约?

以太坊与比特币很大的不同是以太坊拥有智能合约的概念。 比特币是数字货币-价值存储。 而以太坊不单单是数字货币,“智能合约”这个名称有点误导。 它不是真正的合约、也不是特别智能,它们只是可以区块链上运行代码。

首先要了解的是智能合约是以太坊网络上的一种特殊帐户。 我们有用户帐户,还可以拥有智能合约帐户

用户帐户有:

  • 地址(有点像我们的银行帐号 - 比特币也有同样的概念)
  • 余额(我有多少钱: 以太)

智能合约账户有:

  • 地址
  • 余额(有多少钱: 以太)
  • 状态
  • 代码

地址是帐户的唯一标识符,与常规用户帐户一样。

余额也与常规用户帐户相同。 不同的是,智能合约的余额意味着代码可以拥有资金,它可以管理资金。因此如果代码不正确,它可能会错误处理这笔资金。

智能合约帐户的状态是智能合约中声明的所有变量和变量的当前状态。 它的工作方式与大多数编程语言中的类中的变量变量相同。 实际上,最简单方法去理解智能合约可以类比为一个类实例化对象,唯一的区别是这个对象永远存在区块链网络中(除非程序进行自毁)。

智能合约的代码是编译后可以在以太坊客户端和节点可以运行的字节码。 它是在创建智能合约时执行的代码,它包含我们可以调用的函数。 就像面向对象编程语言中的对象一样。

旁注:智能合约更有趣地方:他们可以调用其他智能合约,这开启了创造一个自主代理的能力,这些代理可以自己进行交易。

contract Counter {
    uint counter;

    function Counter() public {
        counter = 0;
    }
    function count() public {
        counter = counter + 1;
    }
}

假设我们使用上面的代码创建一个智能合约。 代码有一个类型为uint(无符号整数) 名为“counter” 的变量。 counter变量的内容(值)就是该合约的状态。 每当我们调用count()函数时,此智能合约的区块链状态将增加1,这个状态是对任何人都可见的。

智能合约账户结构

后面将用更多示例来介绍它的工作原理,不过得先介绍下以太坊和比特币在交易层面的区别。

以太坊和比特币在交易层面的区别

比特币交易非常简单,它只做一件事,就是进行交易。 忽略细节,这一切都归结为TO(谁收钱),FROM(谁汇款)和AMOUNT(多少钱)。 这让比特币网络中的参与者可以传递价值并存储价值。

以太坊很大的不同是其交易还有一个DATA字段。 DATA字段支持三种类型的交易:

  • 价值传递 (和比特币相同)
    • TO :收款地址
    • DATA :留空或留言信息
    • FROM :谁发出
    • AMOUNT :发送多少
  • 创建合约
    • TO :留空 (这就是触发创建智能合约的原因)
    • DATA :包含编译为字节码的智能合约代码
    • FROM :谁创建
    • AMOUNT :可以是零或任何数量的以太,它是我们想要给合约的存款。
  • 调用合约函数
    • TO: 目标合约账户地址
    • DATA: 包含函数名称和参数 - 标识如何调用智能合约函数
    • FROM :谁调用
    • AMOUNT : 可以是零或任意数量的以太,例如可以支付合约服务费用。

虽然实际交易有更多复杂的细节,但核心概念就是这些。

让我们看一些更具体的例子,说明这些交易长什么样。

以太坊交易

价值传递

{
    to: '0x687422eEA2cB73B5d3e242bA5456b782919AFc85',
    value: 0.0005
    data: ‘0x’ // 也可以附加消息
}

非常简单,就是转移一定数量的以太到某个地址,如果我们愿意也可以向交易添加消息。

创建智能合约

{
    to: '',
    value: 0.0
    data: ‘0x6060604052341561000c57xlb60405160c0806……………’
}

如上所述,TO为空表示创建智能合约,DATA包含编译为字节码的智能合约代码。

调用合约方法

{
    to: '0x687422eEA2cB73B5d3e242bA5456b782919AFc85’, //合约
    value: 0.0
    data: ‘0x6060604052341561000c57fe5b60405160c0806……………’
}

函数调用信息放在DATA变量中,把这个交易信息发送到要调用的智能合约的地址,下面会一些它是如何做的细节,我们先了解这个概念。

关于成本和执行

可以想象,我们不能一直在区块链上免费运行计算量很大的程序。

代码的执行由调用者以称为Gas的方式支付费用。 Gas是运行以太坊虚拟机的燃料。 我们可以将其视为每次执行指令的付款。

在发起调用时,我们必须设置此调用上预计花费的最大gas消耗量(Gas Limit)。 例如,如果我们调用的代码进入永久循环,执行花费不会超过我们设定的最大消耗量(Gas Limit)。

Gas 执行费用由网络的矿工(他们是运行代码的节点)决定。

当然还有很多关于Gas的内容,我们先了解这么多,如果想深入了解以太坊的这一部分,请看看这篇consensys的精品文章:以太坊,Gas,燃料和费用 (英文)

智能合约是如何运行的?

当智能合约部署到以太坊网络时,任何人都可以调用智能合约的功能(当然也可能存在某些安全原因阻止人们使用的功能,但不妨碍我们自由尝试)。

在智能合约上调用函数在很多方面和“正常”编程类似 - 当然在执行方面存在一些差异。

假设我们有一个“MyObject”类型的对象。 该对象有一个名为“myFunction”的函数。 要调用它,我们可以简单地引用对象的实例,调用哪个函数以及调用它的参数。 像这样:

myObjectReference.myFunction(parameters);

如果函数返回任何值,则可以把它保存在变量中:

myVariable = myObject.myFunction(parameters);

从概念上讲,调用智能合约是一回事。 唯一的区别是我们必须将有关调用的信息放入交易中,对其进行签名并发送到以太坊网络中执行。

假设想用一些参数调用智能合约“0x0123456”上函数“myFunction”,大概包含以下四个步骤:

智能合约调用步骤

现在,当交易被打包放入区块链时,状态的改变将反映在整个网络中。

世界计算机

许多人称以太坊为世界计算机。 这不算一个糟糕的比喻,它确实像一个由全世界维护的虚拟机!

有一点要记住:虽然智能合约是图灵完整的,理论上可以做任何事情,但它们并不适合繁重的计算工作。

以太坊世界计算机就像一台老旧的慢速计算机,可以运行简单的程序。 基于成本和安全性考虑,保持以太坊智能合约小而简单至关重要。

合约的计算越多,运行它的成本就越高。 合约越复杂,就越有可能出现安全漏洞。 智能合约中的安全漏洞是很难修复的,因为区块链的不可篡改特性。

世界计算机

智能合约应用:Token (通证或代币)

解释一下通证是如何工作的。 那些在ICO中每个人都赞不绝口的代币,就是一个智能合约,我们自己也可以在以太坊上创建自己的代币。

大多数这些代币都是在以太坊上创建的,这个概念非常简单,我们需要关注以下几个信息:

  1. 总供应量
  2. 帐号
  3. 账户中的金额
  4. 代币的流动

通过用户和金额之间的简单映射,可以实现1,2和3:

Map<Account, Double> usersAndTheirMoney;

使用构造函数,我们可以在自己的帐户中设置初始供应量(或在任意其他中帐户中分配):

public Token(Account initialAccount, double initialSupply) {
  usersAndTheirMoney.put(initialAccount, initialSupply);
}

代币的移动是通过简单的功能完成的,只需从一个帐户中减去并添加到另一个帐户:

public transfer(Account from, Account to, double amount) {
  verifySenderOfMoneyIsCaller(from);
  verifySenderOfMoneyHasEnoughMoney(from, amount);
  usersAndTheirMoney.put(from, usersAndTheirMoney.get(from)-amount);
  usersAndTheirMoney.put(to, usersAndTheirMoney.get(to)+amount);
}

这与我们在以太坊中用于创建通证的完全相同的概念。

不过以太坊有自己的编程语言Solidity,使用Solidity编写代码大概是这个样子:

contract MyToken {
    mapping (address => uint256) public balances;
    function MyToken(uint256 initialSupply) {
        balances[msg.sender] = initialSupply;
    }   

    function transfer(address to, uint256 amount) public {
        balances[msg.sender] -= amount;
        balances[to] += amount;
    }
}

为了简单省去了一些细节,可以参考这篇文章创建一个标准的ERC20代币

想学习在以太坊上编程可以学习这门课程以太坊DAPP开发实战

本文的英文原文链接为:http://www.gjermundbjaanes.com/understanding-ethereum-smart-contracts/

加入知识星球,和一群优秀的区块链从业者一起学习。 深入浅出区块链 - 打造高质量区块链技术博客,学区块链都来这里,关注知乎微博

 相关推荐

刘强东夫妇:“移民美国”传言被驳斥

京东创始人刘强东和其妻子章泽天最近成为了互联网舆论关注的焦点。有关他们“移民美国”和在美国购买豪宅的传言在互联网上广泛传播。然而,京东官方通过微博发言人发布的消息澄清了这些传言,称这些言论纯属虚假信息和蓄意捏造。

发布于:1年以前  |  808次阅读  |  详细内容 »

博主曝三大运营商,将集体采购百万台华为Mate60系列

日前,据博主“@超能数码君老周”爆料,国内三大运营商中国移动、中国电信和中国联通预计将集体采购百万台规模的华为Mate60系列手机。

发布于:1年以前  |  770次阅读  |  详细内容 »

ASML CEO警告:出口管制不是可行做法,不要“逼迫中国大陆创新”

据报道,荷兰半导体设备公司ASML正看到美国对华遏制政策的负面影响。阿斯麦(ASML)CEO彼得·温宁克在一档电视节目中分享了他对中国大陆问题以及该公司面临的出口管制和保护主义的看法。彼得曾在多个场合表达了他对出口管制以及中荷经济关系的担忧。

发布于:1年以前  |  756次阅读  |  详细内容 »

抖音中长视频App青桃更名抖音精选,字节再发力对抗B站

今年早些时候,抖音悄然上线了一款名为“青桃”的 App,Slogan 为“看见你的热爱”,根据应用介绍可知,“青桃”是一个属于年轻人的兴趣知识视频平台,由抖音官方出品的中长视频关联版本,整体风格有些类似B站。

发布于:1年以前  |  648次阅读  |  详细内容 »

威马CDO:中国每百户家庭仅17户有车

日前,威马汽车首席数据官梅松林转发了一份“世界各国地区拥车率排行榜”,同时,他发文表示:中国汽车普及率低于非洲国家尼日利亚,每百户家庭仅17户有车。意大利世界排名第一,每十户中九户有车。

发布于:1年以前  |  589次阅读  |  详细内容 »

研究发现维生素 C 等抗氧化剂会刺激癌症生长和转移

近日,一项新的研究发现,维生素 C 和 E 等抗氧化剂会激活一种机制,刺激癌症肿瘤中新血管的生长,帮助它们生长和扩散。

发布于:1年以前  |  449次阅读  |  详细内容 »

苹果据称正引入3D打印技术,用以生产智能手表的钢质底盘

据媒体援引消息人士报道,苹果公司正在测试使用3D打印技术来生产其智能手表的钢质底盘。消息传出后,3D系统一度大涨超10%,不过截至周三收盘,该股涨幅回落至2%以内。

发布于:1年以前  |  446次阅读  |  详细内容 »

千万级抖音网红秀才账号被封禁

9月2日,坐拥千万粉丝的网红主播“秀才”账号被封禁,在社交媒体平台上引发热议。平台相关负责人表示,“秀才”账号违反平台相关规定,已封禁。据知情人士透露,秀才近期被举报存在违法行为,这可能是他被封禁的部分原因。据悉,“秀才”年龄39岁,是安徽省亳州市蒙城县人,抖音网红,粉丝数量超1200万。他曾被称为“中老年...

发布于:1年以前  |  445次阅读  |  详细内容 »

亚马逊股东起诉公司和贝索斯,称其在购买卫星发射服务时忽视了 SpaceX

9月3日消息,亚马逊的一些股东,包括持有该公司股票的一家养老基金,日前对亚马逊、其创始人贝索斯和其董事会提起诉讼,指控他们在为 Project Kuiper 卫星星座项目购买发射服务时“违反了信义义务”。

发布于:1年以前  |  444次阅读  |  详细内容 »

苹果上线AppsbyApple网站,以推广自家应用程序

据消息,为推广自家应用,苹果现推出了一个名为“Apps by Apple”的网站,展示了苹果为旗下产品(如 iPhone、iPad、Apple Watch、Mac 和 Apple TV)开发的各种应用程序。

发布于:1年以前  |  442次阅读  |  详细内容 »

特斯拉美国降价引发投资者不满:“这是短期麻醉剂”

特斯拉本周在美国大幅下调Model S和X售价,引发了该公司一些最坚定支持者的不满。知名特斯拉多头、未来基金(Future Fund)管理合伙人加里·布莱克发帖称,降价是一种“短期麻醉剂”,会让潜在客户等待进一步降价。

发布于:1年以前  |  441次阅读  |  详细内容 »

光刻机巨头阿斯麦:拿到许可,继续对华出口

据外媒9月2日报道,荷兰半导体设备制造商阿斯麦称,尽管荷兰政府颁布的半导体设备出口管制新规9月正式生效,但该公司已获得在2023年底以前向中国运送受限制芯片制造机器的许可。

发布于:1年以前  |  437次阅读  |  详细内容 »

马斯克与库克首次隔空合作:为苹果提供卫星服务

近日,根据美国证券交易委员会的文件显示,苹果卫星服务提供商 Globalstar 近期向马斯克旗下的 SpaceX 支付 6400 万美元(约 4.65 亿元人民币)。用于在 2023-2025 年期间,发射卫星,进一步扩展苹果 iPhone 系列的 SOS 卫星服务。

发布于:1年以前  |  430次阅读  |  详细内容 »

𝕏(推特)调整隐私政策,可拿用户发布的信息训练 AI 模型

据报道,马斯克旗下社交平台𝕏(推特)日前调整了隐私政策,允许 𝕏 使用用户发布的信息来训练其人工智能(AI)模型。新的隐私政策将于 9 月 29 日生效。新政策规定,𝕏可能会使用所收集到的平台信息和公开可用的信息,来帮助训练 𝕏 的机器学习或人工智能模型。

发布于:1年以前  |  428次阅读  |  详细内容 »

荣耀CEO谈华为手机回归:替老同事们高兴,对行业也是好事

9月2日,荣耀CEO赵明在采访中谈及华为手机回归时表示,替老同事们高兴,觉得手机行业,由于华为的回归,让竞争充满了更多的可能性和更多的魅力,对行业来说也是件好事。

发布于:1年以前  |  423次阅读  |  详细内容 »

AI操控无人机能力超越人类冠军

《自然》30日发表的一篇论文报道了一个名为Swift的人工智能(AI)系统,该系统驾驶无人机的能力可在真实世界中一对一冠军赛里战胜人类对手。

发布于:1年以前  |  423次阅读  |  详细内容 »

AI生成的蘑菇科普书存在可致命错误

近日,非营利组织纽约真菌学会(NYMS)发出警告,表示亚马逊为代表的电商平台上,充斥着各种AI生成的蘑菇觅食科普书籍,其中存在诸多错误。

发布于:1年以前  |  420次阅读  |  详细内容 »

社交媒体平台𝕏计划收集用户生物识别数据与工作教育经历

社交媒体平台𝕏(原推特)新隐私政策提到:“在您同意的情况下,我们可能出于安全、安保和身份识别目的收集和使用您的生物识别信息。”

发布于:1年以前  |  411次阅读  |  详细内容 »

国产扫地机器人热销欧洲,国产割草机器人抢占欧洲草坪

2023年德国柏林消费电子展上,各大企业都带来了最新的理念和产品,而高端化、本土化的中国产品正在不断吸引欧洲等国际市场的目光。

发布于:1年以前  |  406次阅读  |  详细内容 »

罗永浩吐槽iPhone15和14不会有区别,除了序列号变了

罗永浩日前在直播中吐槽苹果即将推出的 iPhone 新品,具体内容为:“以我对我‘子公司’的了解,我认为 iPhone 15 跟 iPhone 14 不会有什么区别的,除了序(列)号变了,这个‘不要脸’的东西,这个‘臭厨子’。

发布于:1年以前  |  398次阅读  |  详细内容 »
 相关文章
去中心化交易所(DEX)协议整理 5年以前  |  4382次阅读
详解以太坊默克尔压缩前缀树-MPT 5年以前  |  3137次阅读
以太坊交易回执-Receipt 5年以前  |  2856次阅读
墨客区块链(MOAC BlockChain) 助记词 5年以前  |  2840次阅读
以太坊基础配置 5年以前  |  2767次阅读
 目录