简介
托管服务与非托管服务
- 托管服务--由对存放资金负责的一方运营的服务。(在线交易所)在线交易所会带来风险,因为交易所可能被黑客攻击,资金可能被盗,而且无法追回。
- 非托管服务--不持有用户资金的服务,用户对资金有直接的个人控制权。此类服务将所有资产掌握在用户手中,因此黑客攻击系统变得更加困难。
区块链、账户和交易
- TON 是状态转换的分类账,这是比转账账本更宽泛的概念
- TON 区块链无法立即获取另一个合约的状态,唯一可能的选择是通过消息通信来实现,因此 TON 是异步的。
- TON 中的网络可以保证任何信息都能送达,但无法保证需要多长时间。
- 每份合约都有自己的小区块链。
- 验证者的共识保证了信息最终能够送达,不会被重播,资金也不会被重复消费。
ton架构的局限性:
👀 合约无法看到自身以外的任何事物。通过将合约相互隔离,TON 可以无限扩展。
🌐 TON 智能合约的概念与互联网上的计算机非常相似。为了使用其他合约状态,该合约必须向外发送一条信息,也许稍后就会收到想要的回复。就像每台计算机都是独立的一样,它们有自己的数据,单独编程,不知道自己的信息何时以及如何被他人处理。
信息和交易
- ✉️ 信息 - 两个合约之间发生的事情。它携带少量代币和任意数据到合约地址。
- 💎 交易 - 合约上的活动,包括运行合约代码、更新合约状态和发出新信息。
TON 的双层区块链系统(双轨制)
主链:
- 不可分片。
- 费用昂贵。
- 无法扩展。
- 它只包含网络配置和来自不同验证器组的所有子链的快照。
基础链:
- 虚拟的
基础链是虚拟的,因为它实际上包含了所有这些不同的账户,这些账户可以无限分片到每个单独的账户,并可以拆分和合并到分片链中。基础链是虚拟的,因为它实际上包含了所有这些不同的账户,这些账户可以无限分片到每个单独的账户,并可以拆分和合并到分片链中。
交易处理延迟
提交交易大约需要 10 到 12 秒(5到6秒到basechain,5到6秒到mastechain),而信息链则需要更长的时间。初始交易可预测后续结果,减少了对每一步确认的担忧。
BTC、ETH vs Ton
- 比特币区块链的整个状态就是当前未使用账户的列表
- 以太坊试图推广比特币的理念,使其对开发者来说更加灵活。
- 以太坊的出发点是,每个账户不仅可以拥有谓语,还可以拥有任意的内部存储空间。
- 在以太坊中,账户之间可以相互通信,账户可以向另一个账户同步发送信息,就像在单个应用程序中调用函数一样。
- 以太坊模式非常灵活,对开发者非常友好,但原则上完全不可扩展,因为它将开发者和所有合约暴露在系统的全局存储和全局状态之下。
- TON 中的合约不允许查看全局状态,它们只能查看自己的状态,与其他合约通信的唯一方式是异步消息传递。
- 在 TON 中,合约可以分片,而在比特币中,所有合约的所有状态都存储在一个单一的全局未用输出状态中。
- TON 优化了无限的灵活性和无限的可扩展性,但这是以开发人员的经验为代价的。
例子:储存/加载一个Cell
本示例中所用到的函数可参考Cells, Builders and Slices
get fun getCell(num: Int): Cell{
let start: Builder = beginCell();
return start.storeUint(num,7).storeAddress(myAddress()).endCell();
}
该函数是一个构造Cell的get函数,我们在改Cell中储存了两个变量,第一个是num,它是7个字节的Int类型的数据;第二个数据是一个地址类型的数据,也就是该合约的地址。
get fun getLoad(p: Int): Load{
let c: Cell = self.getCell(p);
let fuzz: Slice = c.beginParse();
let num: Int = fuzz.loadInt(7);
let owner: Address = fuzz.loadAddress();
let load: Load = Load{
num,
owner
};
return load;
}
在这个get函数中,我们使用一个Slice类型的fuzz来解析Cell,其独特的指针移动方式,仅需要我们依次解析相应数据即可,无需在做其它复杂操作。