{"author":{"address":"0xC38C63baf07505160D1292B1B9FA4955333e609b","user":"https://learnblockchain.cn/people/7979"},"content":{"body":"# 一、Ton介绍\r\nTon是一条L1链，最早由Telegram主导开发，后续因为监管原因，交由社区和 TON 基金会运营。\r\n截至12月10日，Ton生态整体TVL为3亿（峰值TVL为8亿），排在所有公链第28名，和Scroll，Starknet的TVL在同一梯队（数据来源于defillama）。生态层面，TVL在1M以上的项目有14个，涵盖Dex，Staking，借贷，衍生品交易，生态整体不算丰富，多以Meme为主。\r\n\r\n# 二、Ton链架构\r\n\r\n## 1、AccountChain、SharedChain、WorkChain\r\nTon链是一条非EVM兼容的分片链，链的底层元素为AccountChain：同一个用户的一系列交易。\r\n**User1 AccountChain： [Tx1 -\u003e Tx2] -\u003e [Tx3 -\u003e Tx4 -\u003e Tx5] -\u003e [] -\u003e [Tx6]\r\nUser2 AccountChain：[Tx1] -\u003e [Tx2 -\u003e Tx3 -\u003e Tx4] -\u003e [Tx5 -\u003e Tx6]**\r\n\r\n交易是批处理的，因此交易可能会被切割到不同的区块里。\r\n\r\n将许多用户的交易数据存储在一起，这样的一组AccountChain构成了SharedChain的概念。\r\n在SharedChain的基础上自定义交易规则，地址格式，智能合约功能，就可以创建一个WorkChain。\r\n\r\n创建WorkChain的成本很高，需要得到2/3的投票来创建。TON 允许创建最多个2^30WorkChain，每个WorkChain最多可细分为2^60多个分片。\r\n\r\n![image.png](https://img.learnblockchain.cn/attachments/2024/12/p6UiWMTW675812fb44b0a.png)\r\n\r\n## 2、MasterChain 和 BaseChain\r\n目前，TON 中只有 2 个WorkChain：MasterChain 和 BaseChain。\r\n\r\nBaseChain 用于用户的日常交易，它的交易费用比较便宜。\r\n\r\nMasterChain 对 TON 具有至关重要的功能。用于消息路由和事务执行的同步，以及各条WorkChain之间的跨链通信。\r\n\r\n\r\n\r\n## 3、区块结构\r\nTon链区块号为**WorkChain-Shared-Seqno**结构\r\n\r\n![image.png](https://img.learnblockchain.cn/attachments/2024/12/KIlVraT567581309413f3.png)\r\n\r\nMasterChain中包含的交易为治理交易，通常为预编译合约Elector Contract，Config Contract发出的交易。\r\n\r\n![image.png](https://img.learnblockchain.cn/attachments/2024/12/CNAE0ViL6758131614c80.png)\r\n\r\nMasterChain区块会关联BaseChain区块。\r\n\r\n![image.png](https://img.learnblockchain.cn/attachments/2024/12/ydEua3R567581323320e2.png)\r\n\r\nMasterChain的seqNo与BaseChain的seqNo都是递增的，但MasterChain的seqNo+1，可能BaseChain的seqNo保持不变。\r\n\r\n如MasterChain区块号为-1,8000000000000000,42342361，关联的WorkChain区块号为：\r\n- 0,2000000000000000,47450852\r\n- 0,6000000000000000,47470215\r\n- 0,a000000000000000,47202199\r\n- 0,e000000000000000,47385438\r\nMasterChain的下一个区块-1,8000000000000000,42342362，关联的WorkChain区块号为：\r\n- 0,2000000000000000,47450853（+1）\r\n- 0,6000000000000000,47470216（+1）\r\n- 0,a000000000000000,47202199（+0）\r\n- 0,e000000000000000,47385438（+0）\r\n- \r\nBaseChain中包含的交易为用户交易，分散在不同的分片中。\r\n\r\n![image.png](https://img.learnblockchain.cn/attachments/2024/12/sLwwUtYv6758132e4ac85.png)\r\n\r\n\r\n## 4、消息和交易\r\n消息分为外部消息和内部消息，外部消息是指区块链外部发送来的消息，如发起Ton转账，外部消息传递到用户的钱包合约中。内部消息是指区块链内部互相传递的消息，如转账时两个钱包合约传递的消息。\r\n\r\n![image.png](https://img.learnblockchain.cn/attachments/2024/12/UMnv1zC86758133dd0442.png)\r\n\r\n交易是发生在合约内部中的执行逻辑，如上面这笔转账，有两笔交易，一笔交易发生在合约A，一笔交易发生在合约B。整个交易链路如果有n个内部消息，则会有n+1笔交易。\r\n\r\nTon的交易是异步执行的，因此一笔完整的交易链路可能跨多个区块。\r\n\r\n如一笔Telegram Wallet转账给多个用户的交易。\r\n\r\n![image.png](https://img.learnblockchain.cn/attachments/2024/12/z60OYdTJ6758134d70006.png)\r\n\r\n- A-A External-In message对应的交易hash为3d93d583afb4ce36ce74c4f557a14890d793ec6eec0472a7e0f19c63616200c2，区块号为(0,a000000000000000,47191557)\r\n- A Internal message对应的交易hash为1b6ccc607b7129fb54187cb06548dccb300c1577886bc37ee4de02fa049b7452，区块号为(0,a000000000000000,47191557)\r\n- A-B  Internal message对应的交易hash为f5ddcc9a81533af09e0c04b2f3778e6c6e8f0c0bc10aa66b5693bf7603c7fe75，区块号为(0,6000000000000000,47458959)\r\n\r\n从A发出消息到B收到Ton，跨了多个区块。\r\n通常交易所会将提币交易的External-In message对应的交易hash作为提币hash返回给用户，供用户查询，但这笔交易是主交易（如3d93d583afb4ce36ce74c4f557a14890d793ec6eec0472a7e0f19c63616200c2），用户收到提币交易可能在下级交易（如f5ddcc9a81533af09e0c04b2f3778e6c6e8f0c0bc10aa66b5693bf7603c7fe75）\r\nTON 交易在一次确认后不可逆转。\r\n\r\n## 5、Ton地址格式\r\nTon的地址格式分为原始地址和用户友好地址。\r\n\r\n**原始地址**，由工作链ID+账户ID组成。如下：\r\n0:c7e3d90d4314bbb7ff24c35410aa20814806d4ed87fffe0369ad7b15fb900fed，0地址字符串开头的 ，这表示地址属于 BaseChain.\r\n\r\n**用户友好地址**，总共由 36 个字节组成。由标志类型+工作链ID+账户ID+地址校验位组成，使用友好地址，可以改变智能合约对收到消息的处理方式，这是与原始地址不同的地方，并且可以校验地址是否有效。如下\r\nUQDH49kNQxS7t_8kw1QQqiCBSAbU7Yf__gNprXsV-5AP7Rkz（base64url格式的标志类型为Non-bounceable地址）\r\nEQDH49kNQxS7t_8kw1QQqiCBSAbU7Yf__gNprXsV-5AP7UT2（base64url格式的标志类型为Bounceable地址）\r\n\r\n**isBounceable**：一种安全机制，当目标智能合约不存在时，向其地址转账，该消息将会被“bounced”，会返还给发送者交易原始价值的剩余部分（减去所有转账和交易）汽油费，这可确保发送方不会丢失发送到无法接收交易的地址的资金。\r\n- bounceable =false 标志通常意味着接收者是钱包。\r\n- bounceable =true 标志通常表示自定义智能合约（例如，DEX），出于安全原因，不应发送不可退回的消息。\r\n\r\n地址格式分为base64和base64url，这两者都是有效的。\r\n- base64（即数字、大小写拉丁字母、'/' 和 '+'）\r\n- base64url（用 '_' 和 '-' 代替 '/' 和 '+'）\r\n地址转换工具：https://ton.org/address/\r\n\r\n## 6、Ton钱包\r\n上面看到的Ton钱包，与以太坊钱包不同，不是有了私钥之后就可以直接使用。\r\nTon钱包本质是一个智能合约。需要部署钱包合约之后，才能实现钱包的相应逻辑。\r\n\r\n![image.png](https://img.learnblockchain.cn/attachments/2024/12/xiusjOum6758135bc3b45.png)\r\n\r\n可以看到一个钱包对应有多个账户，每个账户的地址不同。这不是同一地址的不同表示，而是因为钱包合约版本不同，导致产生多个地址。\r\n\r\n钱包地址由钱包合约代码及初始化参数决定，初始化参数包含用户公钥，因此每个用户生成的钱包地址都是不同的。对于同一个用户，因为钱包合约代码不同，因此生成的钱包地址也不同。\r\n\r\n目前最多使用，支持最广泛的是V3r2，V4r2版本的钱包。\r\n\r\n**V1钱包**\r\n它只允许一次发送一笔交易，除了签名和序列号(seqno)，它不检查任何东西。\r\n这个版本基本上没有在常规应用中使用，因为它存在一些主要问题：\r\n- 无法从合约中检索seqNo和publicKey\r\n- 没有valid_until检查，交易有可能会很长时间之后才被确认。\r\n第一个问题在V1r2和V1r3中得到修复。r字母代表修订版本。\r\n\r\n**V2钱包**\r\n这个版本引入了valid_until参数，用于设置交易的时间限制，以防交易经过太长时间后才被确认。这个版本也没有公钥的get方法，它在V2r2中被添加。\r\n\r\n**V3钱包**\r\n这个版本的钱包初始化参数中引入了subwallet_id参数，允许使用同一个公钥创建多个钱包（用户可以只有一个种子秘钥创建多个钱包，不同的subwallet_id将会改变钱包地址）。\r\n\r\n**V4​钱包**\r\n它是目前最新的钱包版本。引入了插件功能，这个功能允许开发者实现用户钱包的复杂逻辑。\r\n\r\n## 7、Jetton\r\nJetton 是 TON 区块链上的同质化代币标准。等同于ERC20。\r\n\r\nJetton 由两部分合约组成，Jetton-minter 和 Jetton-wallet：\r\n\r\n![image.png](https://img.learnblockchain.cn/attachments/2024/12/xKr2U3gj6758136742739.png)\r\n\r\n代币发行时，会创建一个 Jetton-minter 合约，合约初始化记录了代币的总量、管理员、钱包代码等信息。\r\n\r\n代币被分发给用户时，Minter 合约会为用户部署一个钱包合约，并在合约初始化时记录用户的余额、所有权、代币 Minter 合约地址等信息，每个用户都会独立部署一个合约。这个合约与用户钱包合约不同，是专属于这个Jetton代币的钱包合约，里面owner_address记录的是用户钱包合约的地址。\r\n\r\n![image.png](https://img.learnblockchain.cn/attachments/2024/12/YWUqUIVV6758136ef06b0.png)\r\n\r\n\r\n## 三、Ton与ETH区别\r\n\r\n**Ton虚拟机为TVM，不兼容EVM，Ton智能合约开发语言为Fift，Func。**\r\n\r\n**Ton智能合约需要支付租金**，不同与以太坊合约，只有部署时需要支付gas费，Ton的合约，在存续期仍然需要支付费用，每个智能合约都持有 TON 代币余额，并使用该余额支付租金。如果智能合约用完了钱，它最终将被删除。\r\n\r\n**Ton智能合约间调用是异步的，非原子性的**。将以太坊合约比作是单一节点，任何跨合约之间的调用，都是在同一服务中同步执行的，都是原子性，当任一操作发生失败时，这个调用链路上的修改都会被回滚。而Ton合约更像是多节点服务，不同的智能合约可能位于不同的节点，调用是异步的，如果其中一个调用失败了，需要手动回滚所有更改。\r\n\r\n**Ton智能合约的代码可以升级。**\r\n\r\n**Ton智能合约不支持类似Mapping这种无限制增加数据的变量**，因此Ton合约中用户持有的代币合约放在一个单独的合约中。以太坊合约类似在一个代币表中的余额字段，类型为k-v，存储用户-余额信息。Ton合约除了有一个代币表，还有一个用户代币关联关系表，记录用户持有的代币余额。\r\n\r\n**Ton的钱包和地址是分开的**，以太坊的钱包和地址是等价的，用户的地址是公钥转换而来的，用户持有的原生币或者代币，都是和地址关联的。而Ton地址的Ton钱包是分开的，Ton钱包是一个合约，用户持有的原生币或者代币是和Ton钱包关联的。用户可以创建多个Ton钱包，这些钱包可以有不同的功能，并且拥有不同的地址。","title":"Ton生态分析"},"history":null,"timestamp":1733825712,"version":1}