主页 > imtoken钱包苹果 > 以太坊智能合约详细介绍
以太坊智能合约详细介绍
前言:智能合约这个词你可能听过无数次,但有多少人真正了解智能合约是什么?本文将帮助您深入了解以太坊智能合约。
您可能听说过“智能合约”,甚至知道它们是在区块链上运行的代码。
但是如何在区块链上运行代码?这不是一个简单易懂的概念。
本文解释了智能合约如何在以太坊区块链上工作。对编程有基本的了解会有所帮助,因为本文包含一些简单的示例代码。为了清楚起见,本文稍微简化了一些技术细节,但概念是有效的。
区块链 - 快速入门
这里不再赘述,区块链技术的核心概念是分布式账本。它是一种特殊类型的数据库,在许多参与者之间共享。
这个特殊的数据库是一个交易列表,记录了网络中发生的每一笔交易。每个人都有一份。这种分散式分配与强大的货币激励相结合,消除了各方之间对信任的需求。
传统上,各方之间的信任是通过中介解决的,即第三方,如 Paypal 和银行。与您不信任的人的交易将通过双方都信任的中介机构进行。
有了区块链,这种需求就消失了。因为您可以信任网络,强大的激励措施消除了作弊的欲望(简而言之:遵守规则更有利可图)。
更具体地说:区块链网络是一组机器,它们记录交易列表的同一副本(例如,从 A 转移到 B 的钱)。
因为每个人都有相同的列表,所以很难欺骗网络接受错误的交易。结合一些密码算法和金钱奖励以遵守规则,您的网络将非常安全。
所有这一切也使得区块链几乎不可变以太坊智能合约的编程语言,因为改变历史的唯一方法是获得整个网络大多数人的同意。
什么是智能合约?
不同于比特币,以太坊最大的不同在于引入了智能合约的概念。比特币是一种数字货币,以太坊也是,但远不止于此。
“智能合约”这个名称有点误导。它们不是真正的合约,也不是特别聪明。它们只是一些可以在区块链上运行的代码——或计算机逻辑操作。
首先,我将介绍智能合约作为以太坊网络上的一种特殊账户。你有用户账户,也有智能合约账户。
用户帐户包括:
地址(类似于您的银行帐号 - 它也存在于比特币上)
余额(我有多少钱)
一个智能合约账户包括:
· 一个地址
· 余额(以太坊)
· 一个状态
·代码
地址与普通账户相同,是账户的唯一标识。
余额和普通账户是同一个概念。唯一令人兴奋的是,智能合约上的余额意味着代码可以拥有钱。它可以处理这笔钱,也可能由于编码错误而处理不当。
智能合约账户的状态是智能合约中声明的所有字段和变量的当前状态。它的工作方式与大多数编程语言中类的字段变量相同。事实上,类的物化对象可能是理解智能合约最简单的方法。唯一的区别是这个对象是永久性的(除非被编程为自毁)。
智能合约的代码是以太坊客户端和节点可以运行的编译字节码。它是创建智能合约时执行的代码,包含可以调用的函数。就像面向对象编程语言中的任何对象一样。
关于智能合约的有趣事实:它们可以调用其他智能合约。这开启了创建可以自己花钱和进行交易的自治代理的能力。
假设我用上面的代码创建了一个智能合约。该代码有一个称为计数器的字段,类型为 uint(整数)。计数器变量的内容就是这个合约的状态。每当我调用 count() 函数时,任何人都可以看到区块链上这个智能合约的状态将增加 1。
稍后我们将通过更多示例解释它是如何工作的以太坊智能合约的编程语言,但首先我想回到以太坊和比特币交易,并解释一些事情。
在交易层面,以太坊 vs 比特币
比特币交易非常简单。你只能做一件事。一种交易。跳过一些细节,这一切都归结为 TO(支付给,谁在收款),FROM(来自,谁在支付)和 AMOUNT(金额,多少)。这使得比特币成为一种能够在网络参与者之间转移价值的价值存储。
以太坊的不同之处在于交易也有一个“DATA”字段。 “DATA”字段支持三种类型的交易:
价值转移(与比特币相同)
· 收货地址
· DATA 字段为空或包含您要附加的任何消息
来自你
AMOUNT 是您要发送的以太币数量
创建智能合约
TO 字段为空(触发创建智能合约)
DATA字段包含编译为字节码的智能合约代码
来自你
· AMOUNT 可以是 0,也可以是你想放入合约中的任意数量的以太坊
创建智能合约
· TO 字段为空(触发创建智能合约)
p>
· DATA 字段包含编译成字节码的智能合约代码
· 来自你
· AMOUNT 可以是 0 或任何你想放入合约的以太坊 Number of Squares
调用智能合约
TO字段为智能合约账户地址
DATA字段包含函数名和参数——如何调用智能合约
· 来自你
· AMOUNT 可以是 0 也可以是任意数量的以太坊,比如你需要为一份服务合约支付的金额
在这些交易中也有更多的领域和复杂性,但上面很好地解释了核心概念。让我们看看这些交易的一些更具体的例子。
以太坊交易
价值转移
这很简单。 TO 将一定数量的以太坊代币发送到一个地址。您还可以向事务添加消息。
创建智能合约
如上所述,空的 TO 字段意味着创建智能合约。 DATA 字段包含编译为字节码的智能合约。
调用合约
我们稍后会回到这个,但主要概念是您将交易发送到调用智能合约地址,然后将函数调用放在 DATA 字段中。
注意成本和执行
正如你所想,你不能一直在区块链上免费运行计算密集型程序。
代码的执行是由调用者以一种叫做gas的东西支付的。 Gas 是运行以太坊虚拟机的燃料。您可以将其视为每次执行指令的成本(如一行代码)。
您需要设置可用于特定合约调用的最大 gas。例如,如果你调用的代码进入了一个永恒的循环,它会保证执行过程中消耗的gas不超过设置的最大gas。
gas 成本(执行)由网络的矿工(运行代码的节点)决定。关于gas和执行还有很多要了解的。但这些都值得牢记。
智能合约如何运作?
当智能合约部署到以太坊网络时,任何人都可以调用智能合约的功能。尽管出于安全原因,此功能可能会阻止人们调用它,但您可以随意尝试。
假设一个 MyObject 类型的对象。该对象有一个名为 myFuncTIon 的函数。要调用它,只需参考对象的实例、调用哪个函数以及使用哪些参数。
像这样:
myObjectReference.myFuncTIon(参数);
此函数返回的任何值都可以存储在变量中:
myVariable = myObject.myFuncTIon(参数);
调用智能合约在概念上是相同的。唯一的区别是你必须将所有关于调用的信息放入事务中,签名并发送到网络来执行。
假设你想用智能合约“0x0123456”中的一些参数调用函数myFuncTIon。调用智能合约有四个步骤:
现在,当一笔交易被放入区块链中的一个区块时,该状态变化会记录在整个网络中。
世界计算机
许多人将以太坊称为世界计算机。这是一个很好的类比。就像一个全世界都在维护的虚拟机。
但请记住:虽然智能合约是图灵完备的,理论上可以做任何事情,但它们并不适合繁重的计算工作。
以太坊世界的计算机就像一台运行简单程序的旧计算机。考虑到成本和安全性,保持以太坊的智能合约小而简单至关重要。
合约需要的计算越多,运行成本就越高。合同越复杂,就越有可能出现安全漏洞。而且智能合约中的安全漏洞很难处理——区块链毕竟是不可变的。
示例:令牌
回到正题,我想解释一下令牌是如何工作的。
这些代币大多是在以太坊上创建的,概念非常简单(效果很好,但简单到几乎是愚蠢的)。
如何使用或其他编程语言编写一个简单的货币系统?您可以在一个文件中完成所有操作。你真正需要记录的是:
1.总供应量
2.帐号
3.账户余额
4.资金流向
通过用户和余额的简单映射,可以得到123的答案:
@ >
地图只是将一个帐户映射到一笔钱。
使用构造函数,您可以在自己的账户中设置初始供应量(或在任意数量的账户中分配)
资金的流动是通过简单的函数完成的,从一个账户中减去并添加到另一个账户中。
创建代币与我们在以太坊中使用的概念完全相同。当然,还有一些更复杂和额外的功能,但基本概念很简单。
这是以太坊编程语言中基本代币合约的样子(再次:为清楚起见进行了简化):
这是基本的编程概念。我认为这说明了以太坊作为一个平台的力量。通过一些简单的代码,你可以凭空生成一个令牌,它本质上是世界计算机记录的一些变量。欢迎来到新的互联网。