智能合约地址
本节将描述TON区块链上智能合约地址的特点,并解释在TON上,actor与智能合约是如何等同的。
一切皆为智能合约
在TON上,智能合约是使用Actor模型构建的。实际上,在TON中的actor在技术上是以智能合约的形式表示的。这意味着,即使您的钱包也是一个简单的actor(以及一个智能合约)。
通常,actor处理传入消息,改变其内部状态,并生成传出消息。这就是为什么TON区块链上的每一个actor(即智能合约)都必须有一个地址,以便能够从其他actor接收消息。
在以太坊虚拟机(EVM)上,地址与智能合约完全分离。欢迎阅读Tal Kol的文章"TON 区块链的六个独特之处,会让 Solidity 开发者感到惊讶" 了解更多差异。
智能合约的地址
在TON上运行的智能合约地址通常包含两个主要组成部分:
-
(workchain_id):代表工作链ID(一个有符号的32位整数)
-
(account_id) 代表账户的地址(根据工作链不同,为64-512位,)
在本文档的原始地址概述部分,我们将讨论**(workchain_id, account_id)** 是如何呈现。
工作链ID和账户ID
工作链ID
正如我们之前所见,在TON区块链上可以创建多达2^32
个工作链。我们还注意到,32位前缀的智能合约地址用于识别并链接到不同工作链中的智能合约地址。这允许智能合约在TON区块链的不同工作链之间发送和接收消息。
如今,TON区块链中仅运行主链(workchain_id=-1)和不定期地运行基本工作链(workchain_id=0)。
它们都有256位地址,因此,我们假设workchain_id是0或-1,工作链中的地址正好是256位。
账户ID
TON的所有账户ID都在主链和基本链(或基本工作链)上使用256位地址。
实际上,账户ID (account_id) 被定义为智能合约对象的哈希函数(专指SHA-256)。每个在TON区块链上运行的智能合约都存储两个主要组件。这些包括:
- 编译后的代码。智能合约的逻辑以字节码形式编译。
- 初始状态。合约在链上部署时的值。
最后,为了准确地推导出合约的地址,需要计算与**(初始代码,初始状态)** 对象相对应的哈希。目前,我们不会深入研究TVM的工作方式,但重要的是要理解TON上的账户ID是使用这个公式确定的: : account_id = hash(初始代码,初始状态)
随着本文档的深入,我们将进一步深入技术规格和TVM及TL-B方案的概述。现在我们熟悉了account_id的生成以及它们与TON上智能合约地址的交互,接下来让我们解释什么是原始地址和用户友好地址。