【问题标题】:Understanding Blockchain smart contract了解区块链智能合约
【发布时间】:2021-05-08 22:58:33
【问题描述】:

我通过在互联网上学习并提出问题来了解区块链和比特币的一些基础知识。 区块链:它是一个分布式数据库,记录保存并共享给所有连接的节点。每个交易块都有其前一个块的哈希值,因此它不受回火影响。通过一些共识机制添加块。区块一旦添加到链中,就无法删除。

比特币:比特币是一种通过区块链技术实现的加密货币。这也是首次成功实施 区块链技术。比特币交易流程如下-

连接到比特币区块链网络的任何节点都可以生成传播到所有连接节点的交易。由于每个节点都有所有以前的记录,每个节点首先验证交易并与发送方和接收方的交易历史进行比较。

  1. 在某个时间点,节点尝试与所有 使用 PoW 共识机制等待交易。
  2. 这里共识机制的难点在于找到hash 具有多个前导零的 to 块。
  3. 如果一个节点在哈希中获得目标数量的前导零, 该节点的块将被添加到区块链中。然后其他节点 将验证此块。
  4. 最终将被添加到比特币区块链数据库中。 然后类似的工作将继续添加下一个块。

我无法理解智能合约在区块链上的运作方式。我知道在智能合约中,每笔交易都是一种计算机脚本/程序(例如,如果某些条件,则执行某些东西)。但是计算机程序是如何被执行的呢?交易如何得到验证?以及如何达成共识?我无法理解所有这些问题。

如果有人能按照我上面解释的比特币区块链的方式解释智能合约,那就太好了。

【问题讨论】:

标签: blockchain bitcoin smartcontracts


【解决方案1】:

不要将比特币用作了解智能合约是什么以及它们如何包含在区块链中的参考。这不是比特币的目的,所以要真正理解智能合约的集成,会缺少几个部分。

很抱歉没有直接回答你的问题,我只是认为需要更详细的解释才能真正理解智能合约是如何包含/执行的。

当您询问智能合约时,让我们以以太坊的实际示例来解释它们如何包含在区块链中以及如何与它们交互。 (主要思想与其他智能合约区块链类似)

Accounts :

让我们从区分两种类型的以太坊账户开始:

  • 外部拥有的账户 (EOA)
  • 合同帐户 (CA)

外部拥有的帐户:

EOA 是您在比特币中已经知道的,即持有私钥和公共地址的用户。 EOA 是自主/主动的(您可以随时决定对您的帐户进行某些操作)。

EOA 可以发送公共交易,因为它可以使用其私钥对其进行签名。

合约账户:

CA 没有私钥,只有公共地址,因为您必须能够唯一标识区块链上的智能合约。 CA 仅是被动的(CA 帐户操作将始终是 EOA 操作的结果)。

CA 帐户无法像 EOA 那样发送公共交易,因为它没有公钥,因此无法使用公钥查看它。

在以太坊中存在这种账户状态的概念。

基本上是从地址(EOA 和 CA)到特定状态的映射。

特定账户的状态包含诸如余额和随机数(该账户创建的交易/合约的数量)等信息,对于 CA,这通过代码散列和存储散列进行扩展。

Transactions

交易可以是:

  • 智能合约创建
  • 从账户 A 到账户 B 的价值/数据传输。

智能合约创建:

此交易没有具体的收款地址。 它在“数据”字段中包含包含智能合约代码的数据。 只要此交易包含在区块中并达成共识,区块链状态就会更新以适应新的智能合约。

将确定性地为您的智能合约提供一个 EOA 地址(请参阅this thread 了解有关如何完成的说明),并在包含合约代码的智能合约的帐户状态中添加一个新映射。您现在可以将转账交易发送到您的智能合约地址。

价值/数据从账户 A 转移到账户 B。

现在假设您要调用智能合约的方法“setName”。 您或任何人都可以将交易从您的账户地址 (A) 发送到智能合约地址 (B),并在“数据”字段中提供相关信息(调用哪个方法、参数等)。

执行本身将在以太坊虚拟机 (EVM) 中进行,您的合约代码将在该虚拟机中进行解释,并记录对帐户状态的任何更改。

考虑到所有这些,我想你的问题的答案会更清楚:

但是计算机程序是如何被执行的呢?

它在节点上的 EVM 内执行。此执行将在调用智能合约的 EOA 交易中找到它的起源。执行的结果是账户状态的变化。

如何验证交易?

智能合约不能发出交易,因为它们被称为 CA 账户。创建或调用智能合约的原始 EOA 交易与任何其他交易一样经过验证,并提交给区块链的正常共识方案。

混淆可能来自这样一个事实,即智能合约可以将资金发送到另一个地址(EOA 或 CA),但它们不会以公开交易的形式这样做。

这是可能的,因为智能合约是确定性的,因此,如果您拥有区块链,您将拥有所有的智能合约创建和智能合约调用,以交易形式在区块链中进行,并且在 EVM 中执行智能合约可以更改账户状态。因此,如果您在执行期间将资金从(账户 A - EOA)发送到(账户 B - CA)并转发到 EVM 内的(账户 C - EOA 或 CA),它会被记录并重放,因为一切都是确定性的。

因此,如果智能合约做了非法的事情(花费超过其余额),那么触发它的原始交易是无效的。

如何达成共识?

对于智能合约的行为没有明确的共识,它只直接涉及区块和交易。

虽然整个答案都是针对以太坊的,但我希望它能让您更好地了解智能合约在区块链系统中的集成。

【讨论】:

    【解决方案2】:

    您应该对第一个拥有智能合约的区块链以太坊做更多的研究。

    将这些合同视为条件或服务水平协议。假设您和我正在开展业务,如果我不遵守协议,资金将返还给您。否则,交易被处理。

    这可以通过以太坊虚拟机 (EVM) 实现。这是以太坊昂贵的另一个原因,因为链上的每个区块都有一些在虚拟环境中执行的 cade。

    对您来说一个好的项目是构建自己的区块链并使用 Solidity 创建智能合约。 Solidity 是以太坊上使智能合约成为可能的编程语言。

    【讨论】:

      猜你喜欢
      • 2017-09-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-09
      相关资源
      最近更新 更多