真正理解以太坊智能合约

  • 时间:
  • 浏览:3
  • 来源:大发时时彩-大发时时彩平台_大发时时彩网投平台

图片版权所属:站长之家

声明:本文来自于微信公众号蓝狐笔记(ID:lanhubiji ),授权站长之家转载发布。

前言:智能合约你这个词你机会听过无数遍,但有十有几个 人真正理解你这个是智能合约?本文帮你深入理解以太坊智能合约。本文作者是Gjermund Bjaanes,由“蓝狐笔记”社群的“Dyna”翻译。

你机会听说过“智能合约”,甚至机会知道它们是在区块链上运行的代码。

但在等你怎么才能 才能 有益于在区块链上运行代码?这有的是都都可不能否够轻易理解的简单概念。

本文解释了智能合约是怎么才能 才能 在以太坊区块链上运行的。对编程的基础理解机会有所帮助,机会本文蕴藏了许多用于举例的简单代码。为了清晰起见,本文将其中的许多技术细节稍微进行了错综复杂,但概念是有效的。

区块链-快速入门

这里不讲太难来太少细节,区块链技术的核心概念是分布式账本。它是并有的是在众多参与者之间共享的特殊类型的数据库。

你这个特殊的数据库就让 有一三个小 交易列表,记录了网络中趋于稳定的每一笔交易。每自己有的是有一三个小 副本。你这个去中心化分布结合强有力的货币激励办法, 消除了各方之间信任的必要性。

传统意义上,自己之间的信任是通过中间人,即第三方来避免的,比如Paypal、银行。与你不信任的人之间的交易将通过双方都信任的中间人进行。

有了区块链,你这个需求消失了。机会你都都可不能否够把你的信任放上去网络上,在这里,强有力的激励办法消除了作弊欺骗的欲望(简而言之:遵守规则更有利可图)。

更具体地说:区块链网络是一组机器,它们记录着相同的交易列表副本(你这个,从A转给B的钱)。

机会每自己有的是相同的列表,许多许多太难欺骗网络接受错误的交易。结合许多加密算法和货币奖励以便遵守规则,你的网络会非常安全。

所有你这个也使得区块链几乎是不可变的,机会改变历史记录的唯一办法是获得全网大多数人的同意。

你这个是智能合约?

区别于比特币,以太坊最大的不同是引入了智能合约的概念。比特币是数字货币,以太坊也是数字货币,但远不止你这个。

“智能合约”你这个名称有点误导人。它们有的是真正的合约,就让 有点智能。它们就让 许多都都可不能否够运行在区块链上的代码 - 机会说是计算机逻辑运算。

首先,我将介绍有关智能合约是以太坊网络上的并有的是特殊账户。你有用户账户,你还有智能合约账户。

有一三个小 用户账户包括:

  • 有一三个小 地址(你这个于你的银行账号-它也趋于稳定于比特币上)

  • 余额(我有十有几个 钱)

有一三个小 智能合约账户包括:

  • 有一三个小 地址

  • 余额(以太坊)

  • 有一三个小 情况表

  • 代码

地址和普通账户的地址是一样的,它是该账户的唯一识别符。

余额和普通账户也是一样的概念。唯一令人激动的是,智能合约上的余额因为分析代码都都可不能否够拥有金钱。它都都可不能否够避免你这个钱,也机会机会编码错误而造成避免不当。

智能合约帐户的情况表是智能合约中声明的所有字段和变量的当前情况表。它的工作办法与大多数编程语言中类的字段变量相同。事实上,有一三个小 类的实体化对象机会是理解智能合约的最简单办法。唯一的区别是你这个对象是永久趋于稳定的(除非被编程为自我毁灭)。

智能合约的代码是编译好的字节代码,以太坊客户机和节点都都可不能否够在中间运行。它是在创建智能合约时执行的代码,但会 蕴藏都都可不能否够调用的函数。就像面向对象编程的语言中的任何对象一样。

关于智能合约的趣事:它们都都可不能否够调用其它的智能合约。这就开启了创建自主代理的能力,你这个代理都都可不能否够自己花钱和进行交易

假设我用中间的代码创建了有一三个小 智能合约。该代码有有一三个小 名为counter的字段,类型为uint(整数)。counter变量的内容是本合约的情况表。每当我调用count()函数时,任何人都能看到你这个智能合约在区块链上的情况表机会加1。

稍后你要要们 将通过更多的例子来解释它是怎么才能 才能 工作的,但首先我还要回到以太坊和比特币的交易,并以此来解释许多事情。

交易水平上,以太坊VS比特币

比特币交易非常简单。你都都可不能否够只做一件事。并有的是类型的交易。略过许多细节,一切都都都可不能否够归结为TO(付给,谁在收钱),FROM(来自于,谁在付钱)和AMOUNT(数量,十有几个 钱)。这使得比特币成为并有的是价值储存手段,有益于在网络参与者之间传递价值。

以太坊的不同之趋于稳定于交易还有有一三个小 “DATA”(数据)字段。该“DATA”字段支持并有的是类型的交易:

  • 价值转移(和比特币一样)

    •  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(parameters);

调用有一三个小 智能合约在概念上是一样的。唯一的区别是,你还要将调用相关的所有信息放上去交易中,对其签名并发送到网络上来执行。

假设你你要调用函数myFunction,其暗蕴藏智能合约“0x0123456”里的许多参数。调用智能合约分四步:

现在,当交易被放上去区块链中的有一三个小 块,该情况表变化便会被记录在整个网络中。

世界计算机

你要要们 把以太坊称为世界计算机。这是个不错的虚实结合 。它就像一台由整个世界来维护的虚拟机。

但会 请记住:我随便说说智能合约是图灵完备的,但会 理论上都都可不能否够做任何事情,但它们不太适合繁重的计算工作。

以太坊世界计算机就像一台运行简单多线程 的老式慢速计算机。机会成本和安全性,保持以太坊的智能合约小而简单是至关重要的。

合约还要的计算量太难多,运行的成本就越大。合约越错综复杂,就越有机会趋于稳定安全漏洞。但会 智能合约中的安全漏洞是太难避免的——毕竟区块链是不可变的。

举例:通证

回归重点,我还要解释一下通证是怎么才能 才能 工作的。

大多数你这个通证有的是在以太坊上创建的,但会 概念非常简单(它运行良好,但会 太简单了,以至于几乎都都可不能否够说是愚蠢的)。

怎么才能 才能 使用Javascript或许多编程语言编写有一三个小 简单的货币系统?你都都可不能否够在有一三个小 文件中完成所有的操作。你真正还要记录的是:

1. 总供应量

2. 账户

3. 账户中的余额

4. 资金流向

通过用户和余额之间的简单映射,你都都可不能否够得到 123 的答案:

该map就让 把有一三个小 账户映射到一笔钱。

使用构造函数(constructor),你都都可不能否够在自己的帐户中设置初始供应量 (或分布在任意数量的账户中)

资金的流动是通过简单的函数来完成的,即从有一三个小 账户中减去,但会 添加就让 账户上。 

创建通证与你要要们 在以太坊使用的概念完整版相同。当然,还有许多更错综复杂和额外的功能,但会 基本概念非常简单。

以下就让 基本的通证合约在以太坊编程语言中呈现的样子(再次重申:为清晰起见进行了错综复杂):

这就让 基础编程概念。我认为这说明了以太坊作为有一三个小 平台的力量。通过许多简单的代码,你都都可不能否够凭空生成有一三个小 代币,它本质上就让 由世界计算机记录的许多变量。欢迎来到新的互联网。