💎 欢迎来到第二章。 在本章中,我们将讨论一系列主题。我们简要回顾了内存布局和 TVM 实例化。现在,我们将深入探讨信息的处理和交易的真正本质。我们还将讨论合约中信息验证的重要性。此外,我们还将检查 TON 中现有的费用,并探讨如何将合约设计原则应用于不同的应用程序。最后,我们将讨论 TON 平台如何促进可扩展和安全应用程序的开发。 7 [ n3 Q H* q. C# h1 g
📝 您还将了解到:6 `% G) @) s1 C! A$ h' k7 T
TON 可扩展性的关键在于限制在任何一个地方完成的工作量,因为 TON 可以在不同合约之间进行扩展,但每个单独的合约本身并不具备可扩展性。 , b1 ~5 I3 \) ] M! u; k
本课我们将讨论 TON 的内存布局和 TVM 操作。$ `! F$ w, Z% _9 a( M
! l& K' B" _. c2 _/ h2 ^
我们从 TON 的独特功能 "Cell "开始。
1 y* l% n h0 l: j0 ~* H7 f9 k. p8 m
Cells。什么是Cell?🔶 Cell - TON 区块链中整个数据结构的小型构建块。 每个Cell最多可包含 1023 位数据🔸和四个指向其他Cell的引用🔗。这样就可以使用Cell构建任意复杂的嵌套数据结构。 ❗ 因此,在 TON 中无法像在以太坊中那样分配任意大小的数组。在 TON 中,你必须使用Cell树🌳。 ' O2 _/ n% E4 [
为什么使用Cell?❗ 这一设计决策的最酷之处在于,区块链的整个状态都可以有效地进行Merkle(默克尔)化,这意味着你可以创建 Merkle(默克尔)证明,即区块链中任何状态下任何部分数据的加密证明。 当你扩展到一个拥有多个分片和独立验证器组的大型系统🌐时,需要验证某些组的行为是否正确,是否违反了系统规则,这一点至关重要。这就需要有效的紧凑型梅克尔证明来证明系统中任何参与者有无不当行为。 # V# X H5 \/ G |8 x8 l
TVM 中的更多类型。TVM 有足够多的类型可供选择:TVM 所使用的所有数据类型都可以由合约中的代码从其自身的存储空间中读取,在堆栈中进行操作,然后通过输出保护创建新的存储空间。如果执行成功 ✔️,TVM 将从内存中卸载,并在其位置上存储合约的新状态。 " w6 X8 `9 _2 Z( e6 X
内存布局。让我们来谈谈合约可用的内存布局。 内存布局的唯一可用选项是合约中的Cell树。 ❓ 但如何在系统中存储列表、字典和集合呢? 😟 要做到这一点并不容易,因为Cell非常紧凑,而且它们形成了一棵树。 为了帮助开发人员实现这一点,TON 在 TVM 和更高级语言 FunC 的层面上提供了各种工具,帮助您以更有效的方式使用Hashmap(哈希图),并使用Cell作为底层实现。
& H, `/ M( Q q( Z7 D% l8 f TON 可扩展性的关键。❗ TON 可扩展性的关键是限制在某个单个位置完成的工作量,因为 TON 是可以跨合约扩展的,但每个单独的合约本身并不具备可扩展性。 ❓ 需要牢记的关键事项是什么? 对于少量数据,嵌套Cell是完全可以接受的。 如果你创建的系统只有极少数参与者,比如一个多签名合约,那么你可以将这些数据直接存储在合约的哈希图中,这样数据量就会相当小。但是,如果你要构建一个拥有数百万用户的系统,那么你就应该考虑使用通证来代表用户的参与,并避免在合约中存储这些用户的清单。 Cell有一个内置的确定性哈希算法,可以唯一识别树中任何部分的任何Cell,这既可用于重复数据删除,也可用于压缩。 例如,当合约用完支付租金的钱时,其当前状态就会从区块链中卸载。它被完全遗忘,但网络仍然存储着存储Cell的哈希值。这就意味着,用户以后可以提供与该哈希值相匹配的Cell的原始🌲树,并重新激活合约,这样合约的状态就可以通过其整个存储的哈希值得到完全保留。
' F3 R, Q) c0 h w& n6 c! K
$ _2 ?5 w; _4 l* E结论。以下是一些主要成果:
& A0 F( A: [1 K- ^. b# X📝 现在你知道了 TON 的有趣之处在于,整个区块链中的所有数据结构、您自己的智能合约以及共识协议中的所有标准数据结构,都是建立在cell之上的。 cell是 TON 区块链整个数据结构的一个小组件。每个cell最多有 1023 位数据,最多有四个指向其他cell的引用。因此,您可以使用cell构建任意复杂和嵌套的数据结构。 当合约收到传入的信息时,验证节点会实例化 TVM,这是一个基于堆栈的特殊用途虚拟机,旨在执行 TON 字节码。该虚拟机加载了合约的当前状态及其当前代码,状态和代码都存储在cell中。现在,所有这些数据都被加载到 TVM 中,TVM 的工作实际上就是检查代码、执行代码、验证所有与GAS成本相关的网络规则以及所有操作的正确性,最后返回错误或新的合约状态,并将其存储在原处。 ! g1 T* l8 t3 c
7 q( k/ [& O X* H1 B% ~ S1 F0 z0 t/ H" h# B
% R8 G9 a. h7 B$ ~, H6 \: }5 S4 y8 u3 ~4 ~& V
|