ton智能合约地址,智能合约地址查询

ton智能合约地址一切皆为智能合约​
在TON上,智能合约是使用Actor模型构建的。实际上,在TON中的actor在技术上是以智能合约的形式表示的。这意味着,即使您的钱包也是一个简单的actor

一切皆为智能合约

在TON 中,智能合约是使用参与者模型构建的。事实上,TON 中的参与者在技术上以智能合约的形式表示。这意味着即使是钱包也是简单的参与者(和智能合约)。

通常,参与者处理传入消息、修改内部状态并生成传出消息。因此,TON 区块链上的每个参与者(即智能合约)都必须有一个地址,以便它可以接收来自其他参与者的消息。

以太坊虚拟机(EVM)

在以太坊虚拟机(EVM)中,地址与智能合约完全分离。如果您想了解更多关于差异的信息,欢迎阅读Tal Kol 的文章《TON 区块链让Solidity 开发人员感到惊讶的6 个独特之处》。

智能合约的地址

TON 上运行的智能合约地址通常包括两个主要组成部分:

(workchain_id):表示工作链ID(带符号的32位整数)。

(account_id) 表示账户的地址(64-512 位,具体取决于工作链)

本文档的原始地址概述部分描述了(workchain_id, account_id) 如何出现。

工作链ID和账户ID

工作链ID

正如我们之前看到的,在TON 区块链上最多可以创建2^32 条行为链。我们还注意到,智能合约地址的32位前缀用于识别和链接不同工作链中的智能合约地址。这允许智能合约在TON 区块链上的不同操作链之间发送和接收消息。

目前,只有主链(workchain_id=-1)和基础工作链(workchain_id=0)偶尔会在TON 区块链上执行。

它们都有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 上智能合约地址的交互,让我们解释一下什么是原始地址和用户友好地址。

原始地址和用户友好地址

在简要概述TON 上的智能合约地址如何利用行为链和账户ID(特别是主链和基础链)之后,我们将解释这些地址以两种主要格式表示,这一点很重要。

原始地址:智能合约地址的原始完整表示。用户友好地址:用户友好地址是原始地址的扩展形式,提供更好的安全性和易用性。

下面,我们将详细分析这两种地址类型之间的差异,并解释为什么您应该使用TON 友好地址。

原始地址

原始智能合约地址由工作链ID和账户ID(workchain_id、account_id)组成,显示格式如下:

[十进制workchain_id]:[64十六进制account_id]

下面是带有工作链ID 和账户ID(表示为workchain_id 和account_id)的原始智能合约地址的示例。

-1:fcb91a3a3816d0f7b8c2c76108b8a9bc5a6b7a55bd79f8ab101c52db29232260

注意,地址字符串开头的-1表示属于主链的workchain_id。

状态

地址字符串可以使用大写字母(例如“A”、“B”、“C”、“D”)代替小写字母(例如“a”、“b”、“c”)。“d”等)。

原始地址的问题

使用RAW 地址格式有两个主要问题。

使用原始地址格式时,在发送交易之前无法验证地址并消除错误。 这意味着,如果您在提交交易之前不小心在地址字符串中添加或删除了字符,您的交易将被发送到错误的目的地,并且您的资金将会丢失。使用原始地址格式时,您无法添加特殊标志,例如使用用户友好地址发送交易时使用的标志。 为了更好地理解这个概念,我们将在下面解释可以使用哪些标志。

用户友好地址

用户友好地址的开发是为了保护和简化在现实世界以及互联网上(例如通过公共消息平台或电子邮件服务提供商)共享地址的TON 用户的体验。

用户友好地址结构

一个用户友好的地址总共由36个字节组成,按顺序生成以下组成部分:

[标志- 1 字节] — 附加到地址的标志,用于更改智能合约对传入消息的反应方式。 使用用户友好的地址格式的标志类型包括:

可以弹跳。表示可退回或不可退回的地址类型。 (0x11 表示“可反弹”,0x51 表示“不可反弹”)仅限测试网。表示仅用于测试网的地址类型。在生产网络isUrlSafe 上运行的软件不接受以0x80 开头的地址。弃用标志指示定义为地址的URL 是安全的。所有地址都被视为URL 安全。 [workchain_id – 1 字节] – 工作链ID (workchain_id) 由带符号的8 位整数workchain_id 定义。

(0x00表示基础链,0xff表示主链)

[account_id – 32 字节] – 帐户ID 由工作链中的256 位(大端)地址组成。

地址验证- 2 字节— 对于用户友好的地址,地址验证由CRC16-CCITT 签名的前34 个字节组成。 (例)其实,人性化地址验证的思想类似于所有信用卡使用的Luhn算法,防止用户意外输入不存在的卡号。

这四个主要组成部分的总数为1 + 1 + 32 + 2=36 字节(每个用户友好地址)。

要生成用户友好的地址,开发人员必须使用以下方法对所有36 个字节进行编码:

Base64(即数字、大写和小写拉丁字母、“/”和“+”)、base64url(将“/”和“+”替换为“_”和“-”)

此过程完成后,您将获得一个48 个字符长(不包括空格)的用户友好地址。

DNS 地址标志

TON 可以使用DNS 地址(例如mywallet.ton)来代替原始的、用户友好的地址。事实上,DNS 地址由一个用户友好的地址组成,其中包含所有必要的标志,允许开发人员访问TON 域内DNS 记录中的所有标志。

用户友好地址编码示例

例如,“测试给予者”智能合约(驻留在主测试网链上的特殊智能合约,并向任何请求者发送两个测试代币)使用以下原始地址:

-1:fcb91a3a3816d0f7b8c2c76108b8a9bc5a6b7a55bd79f8ab101c52db29232260

上述“测试提供商”的原始地址必须转换为方便的地址格式。这可以使用前面介绍的Base64 或Base64url 表单来获取,如下所示:

kf/8uRo6OBbQ97jCx2EIuKm8Wmt6Vb15+KsQHFLbKSMiYIny(base64)kf_8uRo6OBbQ97jCx2EIuKm8Wmt6Vb15-KsQHFLbKSMiYIny(base64url)

信息

请注意,Base64 和Base64url 格式都是有效且可接受的。

可弹回与不可弹回地址

可退回地址标志背后的核心思想是发送者资金的安全。

例如,如果目标智能合约不存在,或者交易过程中出现问题,消息将被“弹回”给发送者,并且交易原始价值的剩余价值(所有转账费和燃气费)将被退回。 be(减去)也包括在内。这可以防止发件人意外地将交易发送到无法接受交易的地址并损失资金。

关于可退回地址的特别说明:

ounceable=false 标志通常意味着接收者是钱包。 ounceable=true 标志通常表示具有自己的应用程序逻辑的自定义智能合约(例如DEX)。在此示例中,出于安全原因,不应发送非退回消息。

阅读文档以更好地理解不可退回的消息。

base64加固型表示

与TON 区块链相关的其他二进制数据使用类似的“增强型”base64 用户友好地址来表示。它们根据字节标签的前四个字符进行区分。例如,256 位Ed25519 公钥由按以下顺序创建的36 字节序列表示:

使用0x3E 格式的1 字节标签来表示公钥。 Ed25519 使用0xE6 格式的1 字节标签来表示公钥。 32 字节标签包含Ed25519 公钥的标准二进制表示形式。 2 字节标签包含CRC16-CCITT 的大端表示法的前34 个字节。

使用标准方法将生成的36 字节序列转换为48 字符Base64 或Base64url 字符串。例如,Ed25519公钥E39ECDA0A7B0C60A7107EC43967829DBE8BC356A49B9DFC6186B3EAC74B5477D(通常表示为32字节的序列,例如0xE3、0x9E、0x7D)通过“丰富”表示呈现,如下所示:

Pubjns2gp7DGCnEH7EOWeCnb6Lw1akm538YYaz6sdLVHfRB2

用户友好地址和原始地址的转换

转换原始地址最方便、最简单的方法是使用多个TON API 和其他工具,例如:

ton.org/addresstoncenter 主网API 方法toncenter 测试网API 方法

此外,还有两种方法可以使用JavaScript 转换钱包的用户友好的原始地址。

使用ton.js将地址格式从用户友好或原始格式转换为/。使用tonweb将地址格式从用户友好或原始格式转换为/。

您还可以使用SDK 执行类似的转换。

以上#ton智能合约地址源网络相关内容仅供大家参考。相关信息请参见官方公告。

原创文章,作者:CSDN,如若转载,请注明出处:https://www.sudun.com/ask/91634.html

(0)
CSDN's avatarCSDN
上一篇 2024年6月22日 下午9:43
下一篇 2024年6月22日 下午10:37

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注