什么是单元(Cell)
TON 的有趣之处在于,整个区块链中的所有数据结构、自己的智能合约以及共识协议中的所有标准数据结构,都是建立在单元(CELL)之上的。
单元是 TON 区块链中数据结构的最小构件。每个单元格最多有 1023 位数据,最多有四个指向其他单元格的引用。因此可以使用单元格构建任意复杂和嵌套的数据结构。
但同时,在 TON 中无法像在以太坊中那样分配任意大小的数组。在 TON 中,必须使用单元树,必须将数据分割成 1023 bits的块,略小于 128 字节。而且,还必须考虑要把数据树建得多扁平或多深。
为什么用CELL
这一设计决策的结果是,区块链的整个状态都可以有效地进行 Merkle 化,这意味着可以创建 任意的Merkle 证明,即区块链中任何状态下任何部分数据的加密证明。
当扩展到一个拥有多个分片和独立验证组的大型系统时,这一点至关重要,因为需要验证某些验证组的行为是否正确,是否违反了系统规则,就需要有效的merkle proof来证明系统中是否有任何参与者的不当行为。
TVM支持的数据类型
TVM 有足够多的类型可供选择:
1.单元格
2.整数
3.257 位整数(允许您表示适用于加密工作和金融操作的各种整数)。
当合约收到传入的消息时,验证节点会实例化 TVM,这是一个基于堆栈的特殊用途虚拟机,旨在执行 TON 字节码。TVM加载合约的当前状态及其当前代码,而状态和代码都存储在单元格中。当所有数据都被加载到 TVM 中后,它的就会浏览代码、执行代码、验证所有与gas成本相关的规则以及所有操作的正确性,最后返回错误或新的合约状态,并将其存储在原处。
TVM 可以使用的所有数据类型都可以由合约中的代码从其自身的存储空间中读取,并在堆栈中进行操作,然后通过输出保护创建新的存储空间。如果执行成功 ,那么 TVM 将从内存中卸载,并在其位置上存储合约的新状态。
TON 可扩展性的关键
TON 中的可扩展性限制是指在任何一个单独的合约中完成的工作量,因为 每个单个合约本身并不具备可扩展性。,但是TON 可以无限制的跨合约扩展。
❓ 需要注意哪些关键事项?
1.对于少量数据,嵌套cell是完全可以接受的,比方说一个多签合约,将这些数据直接存储在合约的 hashmap 中,数据量就相当小。但是,如果要构建一个拥有数百万用户的系统,那么就应该考虑使用代币来代表用户的参与度,并避免在合约中存储这些用户的名单。
2.CELL中内置了一个哈希确定性算法,可以用于识别单元(CELL)树中任何部分的任何单元格,这既可用于数据删除,也可用于压缩。例如,当合约租期租金rent balance用完时,其当前状态就会从区块链中offloaded,但网络仍然存储着原来的存储单元的哈希值。这就意味着,用户以后可以提供与该哈希值相匹配的单元树,验证哈希值后并重新激活合约,这样,合约的状态就可以通过其整个存储的哈希值完全保留下来。
总之,TON上的所有活动都基于cells,而数据结构(单元树)的深度和广度将影响链上执行的gas fee多少。