智能合约:自执行代码如何在区块链上运行

智能合约:自执行代码如何在区块链上运行

智能合约是存储在区块链上的一种程序,一旦某笔交易或另一份合约调用它,它就会自动执行代码中写明的条款。程序是一组计算机指令。区块链是一种共享的记录,新的条目会依次被添加进去。交易是发送给区块链的请求。

智能合约存放在哪里?

智能合约存储在区块链上的某个地址中。地址是区块链上用于标识用户或智能合约的标识符。合约的代码以及代码所保存的数据都存储在该地址中。状态是智能合约所保存的数据,使得这些数据在合约下次运行时依然存在。

部署智能合约,是指通过一笔携带该代码的交易,将合约代码放到区块链上。部署完成后,合约就拥有了一个地址,其他交易可以被发送到这个地址。

智能合约是如何运作的?

当一笔交易或另一份合约调用智能合约的某个函数时,该合约便会运行。调用函数是指请求合约运行该函数。函数是合约代码中一段具名的部分。发送到合约地址的交易会指明要调用的函数,并提供该函数所需的数据,也就是输入。

区块链网络的节点负责运行智能合约的代码。节点是运行区块链网络软件、并与网络中其他计算机相连的计算机。当代码改变了合约的状态时,这一变化会被记录在区块链上。

账户是区块链上的一条记录,拥有地址和余额。余额是指账户所持有的该区块链原生币的数量。原生币是区块链的本位单位,例如比特币网络上的 BTC。

以以太坊为例,按照其官方文档的说明,账户分为两种。用户账户由持有私钥的人掌控。私钥是用于对交易进行签名的秘密数字。合约账户则保存代码,智能合约就存储在合约账户的地址中。

对智能合约的调用,既可能来自用户账户,也可能来自另一份合约。在本文中,“自执行”这一说法指的是:合约一旦被调用,其代码就会执行其中的指令。它并不是指合约会自行启动运行,因为合约账户只能在收到交易后才会发出消息作为回应。

下面用一个虚构的例子来说明一次调用的过程。真实的合约在数据存储方式和函数写法上各不相同。在这个例子中,一份合约为两个地址分别记录了若干个“单位”。单位是合约所记录的一种计数。地址 A 拥有 100 个单位,地址 B 拥有 20 个单位。

  1. 某个用户账户发送一笔交易,调用该合约的 transfer 函数,请求将 30 个单位从地址 A 转移到地址 B。
  2. 节点运行该合约的代码。
  3. 代码检查地址 A 是否至少拥有 30 个单位。
  4. 代码将地址 A 的余额减少到 70 个单位,并将地址 B 的余额增加到 50 个单位。
  5. 这一变化被记录在区块链上。无论调用前还是调用后,两个地址持有的单位总数都是 120 个。

智能合约能持有什么、能做什么?

和用户账户一样,智能合约也可以持有该区块链原生币的余额。智能合约还可以在其状态中保存各种记录,比如为每个地址记录一个计数,而对其某个函数的调用可以改变这些记录。

智能合约可以调用其他合约,这使得一份合约的代码能够使用另一份合约的函数。函数还可以记录一个“事件”,这是区块链上的一种通知,区块链之外的软件可以监听这类通知。

代币合约是一种用于创建和追踪代币的智能合约。与原生币不同,代币是通过智能合约在现有区块链上发行的单位。代币标准是一份公开发布的规范,规定了代币合约应提供哪些函数和事件。

是什么决定了智能合约的行为?它还能改变吗?

存储在智能合约地址中的代码决定了该合约会做什么。智能合约执行的是其代码所写的内容,这可能与作者原本的意图有所不同。合约部署后,其地址中存储的代码本身不会改变,但合约可以被设计成:其运行的行为是可以被替换的。

也就是说,智能合约仍然可以被设计成行为可被替换的形式。一份合约可以存储另一份合约的地址,并将调用转发给它。如果第一份合约在设计时就允许所存储的地址被更改,那么在第一份合约地址保持不变的情况下,实际运行的行为就可以发生变化。采用这种设计的合约,还可以设定哪些账户有权更改它所转发调用的目标地址。

比特币中与智能合约对应的机制是什么?

比特币是一个以 BTC 为原生币的加密货币网络,它有一个与智能合约对应的机制,那就是脚本。脚本是用比特币脚本语言写成的一条规则,必须满足这条规则,一定数量的 BTC 才能被转移。截至 2026 年 10 月,比特币的官方文档将其脚本语言描述为“有意保持简化”。BTCFi,即“比特币原生金融”的简称,是各方用来统称围绕 BTC 构建的各类金融活动的标签,其中包括智能合约以及其他设计方案。

什么是智能合约的代码审查?

智能合约的代码审查,是指由作者以外的人员对合约代码进行检查,寻找其中的错误。审计是进行代码审查的一种方式。审查也可能遗漏错误,因此审查结果并不能证明合约代码完全没有问题。

智能合约有哪些局限性?

如果没有预言机,智能合约只能使用其所运行的那条区块链上的数据。预言机是一种将外部数据发送给合约的服务。外部数据是指未存储在该合约所在区块链上的数据,例如外部日期或外部结果。

已部署的智能合约代码中如果存在错误,除非该合约在设计时就允许其行为被替换,否则这个错误将会一直存在。

2025年11月27日

GoMining 新闻

您可能会对以下内容感兴趣