智能合约地址
在 TON 区块链上,每个行为者(包括钱包和智能合约)都有一个地址。这些地址对于接收和发送信息和交易至关重要。智能合约地址有两种主要格式:原始地址和用户友好地址。
地址组成
TON 上的每个地址都由两个主要部分组成:
- 工作链 ID(Workchain ID):带符号的 32 位整数,表示合约属于哪个工作链(例如,"-1 "表示主链,"0 "表示基础链)。
- 账户 ID(Account ID):合约的唯一标识符,主链和底层链的长度一般为 256 位。
原始地址与用户友好地址
原始地址
原始地址只包含基本要素:
- 工作链 ID(例如,"-1 "表示主链)
- 账户 ID:256 位唯一标识符
示例:
-1:fcb91a3a3816d0f7b8c2c76108b8a9bc5a6b7a55bd79f8ab101c52db29232260
.
然而,原始地址有两个主要问题:
- 它们缺乏内置的错误检查功能,这意味着复制错误可能导致资金损失。
- 它们不支持可反弹/不可反弹选项等附加功能。
用户友好的地址
一个方便用户的地址通过以下方式解决了这些问题:
- Flags:表示地址是可跳转的(针对合约)还是不可跳转的(针对钱包)。
- ** Checksum**:2 字节错误校验机制 (CRC16),有助于在发送前检测错误。
- ** Encoding**:使用 base64 或 base64url 将原始地址转换为可读的简洁形式。
例如,同样的原始地址可以转换成用户友好的地址,如
kf/8uRo6OBbQ97jCx2EIuKm8Wmt6Vb15+KsQHFLbKSMiYIny
(base64)
用户友好型地址可防止出错,并允许在交易失败的情况下退回资金,从而使交易更加安全。
地址状态
TON 上的每个地址都可以处于以下状态之一:
- Nonexist:地址没有数据(所有地址的初始状态)。
- Uninit:地址有余额,但没有智能合约代码。
- Active:该地址已启用智能合约代码和余额。
- Frozen:由于存储费用超过余额,地址被锁定。
地址格式之间的转换
要在原始地址和用户友好型地址之间进行转换,可以使用 TON API 或 ton.org/address 等开发工具。这些工具可实现无缝转换,并确保在发送交易前格式正确。
有关如何处理这些地址的更多细节,包括编码示例和事务安全性,请参阅 Addresses Documentation 中的完整指南。