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