简介

托管服务与非托管服务

  • 托管服务--由对存放资金负责的一方运营的服务。(在线交易所)在线交易所会带来风险,因为交易所可能被黑客攻击,资金可能被盗,而且无法追回。
  • 非托管服务--不持有用户资金的服务,用户对资金有直接的个人控制权。此类服务将所有资产掌握在用户手中,因此黑客攻击系统变得更加困难。

区块链、账户和交易

  • 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,其独特的指针移动方式,仅需要我们依次解析相应数据即可,无需在做其它复杂操作。

参考:

  1. https://docs.tact-lang.org/ref/core-cells