
降息与大炮齐飞 市场共跌
By: Johan
TON(The Open Network) 是一个去中心化的区块链平台,由 Telegram 团队最初设计和开发。TON 的目标是提供一个高性能和可扩展的区块链平台,以支持大规模的去中心化应用(DApps) 和智能合约。
TON 如此特殊,它是易用的,它与 Telegram 深度结合,使得普通人也能轻易使用代币;它又是复杂的,它与其他区块链有着截然不同的架构,而且使用非主流的 FunC 智能合约语言。今天我们从账号、Token、交易的角度讨论一下 TON 的特点及用户资产安全问题。
账号生成
TON 账号地址的生成方式与大多数区块链都不同,它是一个智能合约地址。首先,开局一个私钥,TON 主要使用 Ed25519 算法生成公钥,生成流程如下:
这里有两种形式的公钥,一种是由私钥计算出的原始公钥,形如:
E39ECDA0A7B0C60A7107EC43967829DBE8BC356A49B9DFC6186B3EAC74B5477D
另一种是“美化”后的公钥,它携带了公钥的一些信息和校验位,形如:Pubjns2gp7DGCnEH7EOWeCnb6Lw1akm538YYaz6sdLVHfRB2
如果认为得到公钥就能像以太坊那样得到账号地址就太天真了,仅仅有用户的公钥还不足以计算出用户的账号地址。我们刚刚说了,用户的账号地址是一个智能合约地址,但是我们连账号都没有,怎么部署智能合约?正确的顺序是先计算地址,接收一点初始金额的代币,然后就可以部署合约。账号地址的计算过程如下图所示:
用户的地址也有多种形式,首先是原始形式,形如:
0:b4c1b2ede12aa76f4a44353944258bcc8f99e9c7c474711a152c78b43218e296
以及用户友好形式,形如:
细心观察这几个地址就可以看出,它们只有首尾几个字符存在差别,中间的 `account_id` 是一样的,但是我们还是无法看出公钥和账号地址之间的关系,其实玄机就藏在开头的 `initial data` 中,它包含了一个用户的公钥,用户就是通过它掌握钱包合约的所有权。`workchainId` 很好理解,TON 并不是只有一条单链,它由非常多的分片组成,每个分片是整个网络的一部分,处理特定的一组账号和交易。为了定位和管理智能合约,需要明确指出它们位于哪个分片中。`Bounceable` 和 `Non-bounceable` 有什么区别?这和智能合约的工作机制相关,我们先继续往下看。
钱包合约
以下是一个用户钱包合约的一段源代码,可以看到它在接收到用户的消息时读取了 4 个参数。
没错,这个用户的钱包合约在部署的时候,需要传入一些初始参数,其中就包含了一个 256 位的 public_key 信息,这样就确保了每个用户使用相同的合约代码时,有一个独立的合约地址。用户发起的一切交易都需要对 `in_msg` 签名,然后通过自己的钱包合约验证签名(check_signature) 后,由合约去调用链上的一切操作。从这里我们也可以推断出,一个用户的公钥其实是可以对应无数钱包地址的,只需要部署不同源代码的钱包或者不同的初始化数据,就能得到完全不同的合约地址。
Jetton Token
Token 是资产在链上的表现形式,所以它是我们需要了解的一个基本元素。Jetton 是 TON token 的标准形式,Jetton 由两部分合约组成,Jetton-minter 和 Jetton-wallet:
代币被发行时,会创建一个 Jetton-minter 合约,合约初始化记录了代币的总量、管理员、钱包代码等信息。
代币被分发给用户时,Minter 合约会为用户部署一个钱包合约,并在合约初始化时记录用户的余额、所有权、代币 Minter 合约地址、用户钱包代码等信息,每个用户都会独立部署一个合约。注意,这里创建的合约是用于管理特定 Jetton 代币的钱包合约,与用户的账号钱包合约并不相同,这里的 owner_address 记录的是用户的账号钱包地址。
当用户 Alice 给用户 Bob 转账时,调用关系如下:
Alice 在链下的 APP 签名,并通过调用她的钱包合约下达操作指令。这些指令会进一步调用她的代币钱包进行转账。当 Bob 的代币钱包收到代币后,它会通知 Bob 的钱包合约(即 Bob Jetton-wallet 的 Owner 地址)。如果交易过程中有剩余的 Gas,还会返回给响应地址,通常为 Alice 的账号合约。
这是 Tonviewer 浏览器解析的一笔 Jetton 代币转账:
一个 ERC20 转账最少只需要调用一个合约,而一笔 Jetton 代币转账至少要调用四个合约,这么做是为了让转账可以在链上并发进行,提高交易效率。
交易
当 TON 中的某个帐户发生某些事件时,它会引发一笔交易,最常见的事件是“接收某个消息”,交易包括以下内容:
最初触发合约的传入消息(存在特殊的触发方式)
由传入消息引起的合约行动,例如更新合约的存储(可选)
发送给其他参与者的传出消息(可选)
免责声明:数字资产交易涉及重大风险,本资料不应作为投资决策依据,亦不应被解释为从事投资交易的建议。请确保充分了解所涉及的风险并谨慎投资。OKEx学院仅提供信息参考,不构成任何投资建议,用户一切投资行为与本站无关。
和全球数字资产投资者交流讨论
扫码加入OKEx社群
industry-frontier