怎么在电脑上建立自己的网站,网站建设与管理总结心得,网络文化经营许可证价格,大学两学一做专题网站以太坊为例#xff1a;什么是智能合约#xff1f;智能合约怎么部署、调用、执行#xff1f;智能合约的原理#xff1f;智能合约存在哪儿#xff1f;如何区分调用的是智能合约#xff1f;世界状态数据库、EVM、智能合约它们之间的关系#xff1f;
什么是智能合约
指的是…以太坊为例什么是智能合约智能合约怎么部署、调用、执行智能合约的原理智能合约存在哪儿如何区分调用的是智能合约世界状态数据库、EVM、智能合约它们之间的关系
什么是智能合约
指的是“一套以数字形式指定的承诺包括合约参与方可以在上面执行这些承诺的协议”。早在1994年美国计算机科学家尼克·萨博Nick Szabo就提出了智能合约的概念。
智能合约是一种基于区块链技术的自动执行合约的计算机程序。它们是一组以代码形式编写的、在区块链上运行的规则和逻辑。智能合约定义了在满足特定条件时应该执行的操作而无需中介方的干预。
以太坊是最为著名的支持智能合约的区块链平台之一。在以太坊中智能合约是用一种称为Solidity的编程语言编写的。这些合约代码被部署到以太坊区块链上并由全网节点验证执行。智能合约的执行结果和状态存储在区块链上确保了透明性和不可篡改性。
智能合约可以执行各种任务包括但不限于转移数字货币管理数字身份执行投票和投资等。由于其自动执行和透明的特性智能合约在去除信任第三方的同时提供了更多的安全性。
智能合约怎么部署、执行
拿以太坊来说可以在以太坊虚拟机EVM中部署和调用智能合约。 在以太坊上合约的执行是通过向合约地址发送交易来触发的。合约地址是由合约创建者的地址和创建者账户的 nonce 生成的所以在区块链上唯一标识一个合约。
执行合约的过程如下 创建合约 首先有人创建者通过发送一个特殊的交易称为合约创建交易来部署合约。这个交易包含了合约的字节码即合约的编译后的代码以及其他必要的参数。在这个交易中创建者将以太币ETH发送到合约地址作为合约的初始资金。 合约创建交易 这个合约创建交易被广播到整个以太坊网络并被矿工包含在一个区块中。 区块链确认 矿工通过执行交易中的合约字节码来创建新的区块。这就是合约在以太坊网络中的创建过程。 触发合约 一旦合约被创建任何人都可以通过向合约地址发送交易来调用合约。这个交易中包含了调用合约的数据也就是要执行的合约函数及其参数。 合约执行 当这个交易被矿工打包并写入区块链后以太坊网络中的每个节点都会执行合约的字节码模拟合约的执行过程。这确保了所有节点都达成相同的结果。
通过这种方式合约的执行是通过向合约地址发送交易并将要执行的数据包含在交易中来触发的。以太坊网络的节点根据交易中的数据按照合约的逻辑执行相应的操作。
智能合约的原理 在上面的图中展示了智能合约的结构它一般具有“值”和“状态”两个属性代码中用If-Then和What-If语句预置了合约条款的相应触发场景和响应规则。智能合约经多方共同协定、各自签署后随用户发起的交易transaction,Txn提交经P2P网络传播、矿工验证后存储在区块链特定区块中。用户得到返回的合约地址及合约接口等信息后即可通过发起交易来调用合约。“矿工”受系统预设的激励机制激励将贡献自身算力来验证交易。
“矿工”收到合约创建或调用交易后在本地沙箱执行环境如以太坊虚拟机中创建合约或执行合约代码合约代码根据可信外部数据源[也称为预言机Oracle Machines]和世界状态的检查信息自动判断当前所处场景是否满足合约触发条件以严格执行响应规则并更新世界状态。交易验证有效后被打包进新的数据区块。新区块经共识算法认证后链接到区块链主链所有更新生效。
以太坊虚拟机EVM
EVM是一个计算引擎有助于智能合约的部署和操作。没有EVM就不可能在以太坊协议上执行软件程序。因此EVM是以太坊核心架构的关键部分。
虚拟机
虚拟机是模拟物理计算机行为的程序。虚拟机有它的存储和处理单元在你的电脑上作为进程运行。这有点像一台电脑在另一台电脑上运行。
虚拟机类似于普通的Windows或MacOS软件。这里的区别在于虚拟机被设计为执行更高级的功能。此外与常规操作系统不同虚拟机无法访问计算机的其他部分如存储或带宽。
如果你使用模拟器在PC上玩过Android游戏那么虚拟机可能很熟悉。虽然模拟器和虚拟机有很大不同但它们都接近硬件的能力可以在“Sandbox(沙盒)”环境中执行代码。
图灵完备性
英国数学家艾伦·图灵Alan Turing发明了第一台图灵机器它是当今计算机的先驱。只要有足够的时间和资源图灵整机可以处理任何计算无论多么复杂。
现在让我们将这些想法结合起来定义以太坊虚拟机
以太坊虚拟机EVM是一个巨大的虚拟机允许部署和执行代码。您只需安装必要的客户端软件即可访问EVM并使用它在以太坊上执行程序。本质上EVM充当“世界计算机”在分散的环境中执行软件操作。
由于没有集中控制EVM由几个个人/公司维持这些个人/公司向系统提供计算能力以换取奖励。因此它有助于创建任何一方都无法单方面关闭的抗审查应用程序。
EVM是图灵完备的因为它可以用于执行各种复杂度的计算。这就是以太坊与比特币的区别因为比特币是图灵不完整的限制了其功能。
比特币的主要功能是“分布式账本”它规定了价值转移的规则。除了处理价值转移以太坊通过EVM还支持智能合约的部署。因此以太坊被描述为“分布式状态机”。
“State”状态是指在任何时间点有关系统的信息。在以太坊中状态指的是特定时刻存在的地址、账户余额和智能合约代码。每个事务都会导致以太坊的状态发生变化状态转换这种变化会反映在整个网络中。
智能合约存在哪儿
在以太坊中合约的代码并不一直存储在以太坊虚拟机EVM中。相反合约的代码在合约被创建时被写入区块链并存储在区块链的合约账户中。
当你部署一个合约时一笔特殊的交易会被创建其中包含合约的字节码即合约的二进制表示。这笔交易会触发区块链上的一个区块其中包含了合约的创建并在合约账户中存储了合约的字节码。
合约地址是通过合约创建者的地址和创建者账户的 nonce 计算得到的。这确保了合约地址在以太坊网络中的唯一性。
当你向一个合约地址发送交易时以太坊节点会检查这个地址是否与合约地址匹配。如果匹配以太坊节点将执行合约账户中存储的合约代码并提供交易数据供合约执行。
合约账户
在以太坊中合约账户的存储方式与普通账户有所不同。合约账户并不像普通账户那样关联着私钥和地址而是关联着合约代码和存储空间。
合约账户的存储位置是以太坊的世界状态数据库中。以太坊使用类似数据库的结构来存储全网状态其中包括账户余额、合约代码、合约存储数据等。这个数据库的每个状态都对应一个区块因此以太坊的全网状态会随着每个区块的产生而更新。
具体而言合约账户的数据存储在该账户的地址下。合约地址是由创建合约的交易的发送者地址和发送者账户的 nonce 值计算得到的。这个地址唯一地标识了一个合约账户并在以太坊的世界状态数据库中存储了该合约的代码和数据。
需要注意的是虽然合约账户的地址是由创建者和 nonce 计算得到的但账户的私钥并不直接存在。私钥用于签署交易和控制账户而合约账户没有私钥其执行是由交易触发的依赖于合约代码的逻辑。
世界状态数据库
在以太坊中世界状态数据库是一个持久性的、全局的状态存储系统用于跟踪和管理整个以太坊区块链网络上的账户和合约的状态信息。它的作用主要包括 存储账户信息 世界状态数据库存储了每个账户的当前余额、合约代码、合约存储数据等信息。 提供全局状态 通过记录每个账户的状态世界状态数据库提供了全局的区块链状态反映了每个账户的当前情况。 支持智能合约 智能合约是以太坊上的自动执行代码合约的状态和数据存储在世界状态数据库中。这使得合约可以随着交易和区块的执行而改变状态。 存储区块链历史 世界状态数据库还存储了区块链的历史状态每个区块都对应一个状态。这使得可以回溯查看历史状态验证交易的有效性。
原理 世界状态数据库的原理涉及默克尔树和数据结构的设计。每个区块包含一个状态根这个状态根是默克尔树的根节点包含了所有账户状态的哈希值。当一个新的区块生成时世界状态数据库会更新新的状态被计算并存储形成新的状态树。这确保了数据的不可篡改性和完整性。
通过采用默克尔树结构以太坊实现了高效的状态变化和验证机制。当需要验证一个账户的状态时只需检查相应的默克尔证明即可而不需要遍历整个数据库。这样的设计在保持全局一致性的同时提高了性能和可扩展性。
在以太坊中每个节点都有自己的本地世界状态数据库。这是因为以太坊是一个分布式的区块链网络每个节点都需要独立地维护和更新自己的状态数据库。每个节点都通过区块链网络接收和验证交易执行智能合约然后更新本地的世界状态。
尽管每个节点都有自己的本地状态数据库但由于区块链的共识机制最终每个节点都应该达到相同的共识状态。这就是分布式共识的核心概念尽管每个节点可能从不同的出发点开始但通过共识算法最终它们将达到相同的状态即相同的世界状态。这确保了整个网络的一致性。
如何区分我调用的是智能合约
以太坊中交易中包含一个称为 to 的字段该字段指定了交易的接收者地址。如果 to 字段为 null 或未设置那么这笔交易将被认为是一个合约创建交易。
当你发送一个交易给一个合约地址时以太坊网络通过这个地址找到相应的合约并执行合约中与交易数据相对应的函数。这是通过交易中的输入数据称为 input data来实现的。
合约的地址是由合约的创建者和创建者账户的 nonce 生成的所以在区块链上是唯一的。当你向一个合约地址发送交易时以太坊网络知道这个地址是一个合约地址因此会执行与交易数据相对应的合约代码。
简而言之以太坊知道你调用的是一个合约而不是一个简单的交易主要是通过交易中的 to 字段和交易的输入数据。如果 to 字段指定了一个合约地址以太坊网络就会执行该合约中与输入数据相对应的函数。
世界状态数据库、EVM、智能合约的关系
在以太坊中世界状态数据库World State、EVMEthereum Virtual Machine和智能合约之间有密切的关系。以下是它们之间的关系 EVM与智能合约 执行环境 EVM是以太坊的运行时环境负责执行智能合约的字节码。智能合约代码 智能合约是由开发者用 Solidity、Vyper 等语言编写的程序代码。这些代码被编译成EVM可执行的字节码。 EVM与世界状态数据库 状态维护 EVM通过读取和更新世界状态数据库来维护智能合约的状态。状态读写 在执行智能合约时EVM可以读取状态世界数据库中的当前状态并根据智能合约的执行结果更新这些状态。 世界状态数据库与智能合约 状态存储 世界状态数据库是以太坊的全局数据库存储了所有账户包括用户账户和智能合约账户的当前状态。智能合约状态 智能合约的状态包括变量值等信息被存储在世界状态数据库中。每个智能合约都有一个唯一的地址对应世界状态数据库中的一个条目。
综合而言智能合约通过EVM执行并在执行过程中读写世界状态数据库。EVM作为虚拟机执行智能合约的字节码而世界状态数据库则负责存储智能合约和账户的当前状态。这三者的协同工作构成了以太坊上智能合约的执行和状态管理机制。