1. 字节雪球爱好者社区首页
  2. 基本原理

ByteBall原理解析(五)应用及总结

Byteball的应用

数字资产

Byteball本质上是基于DAG的分布式数据库,数据状态一旦确定则不可逆转。在各种类型的数据中,具有社会普遍意义的数据是比较有价值的,比如个人资产数据。在Byteball中,资产可以发布、转移以及交换,类似于Byteball的基本货币bytes。资产可以代表任何有价值的东西,比如债务、股票、会员积分、通话时间、商品、其它加密货币等。

定义新资产的消息格式为:

unit: {
  ...
  messages: [
    ...
    {
      app: "asset",
      payload_location: "inline",
      payload_hash: "hash of payload",
      payload: {
        cap: 1000000,
        is_private: false,
        is_transferrable: true,
        auto_destroy: false,
        fixed_denominations: false,
        issued_by_definer_only: true,
        cosigned_by_definer: false,
        spender_name_attested: true,
        attestors: [
          "2QLYLKHMUG237QG36Z6AWLVH4KQ4MEY6",
          "X5ZHWBYBF4TUYS35HU3ROVDQJC772ZMG"
        ]
      }
    },
    ...
  ],
  ...
}

在定义新资产时,可以设置以下属性:

  • cap:资产总量,比如bytes的总量为$10^{15}$
  • is_private:资产转移是否公开,比如bytes为公开
  • is_transferrable:资产是否可以在无发行方允许的条件下进行流通,如果不可流通,则资产的收发方中必须有发行方,比如bytes为可流通
  • auto_destroy:资产在发送回发行方时是否自动销毁,比如bytes为不自动销毁
  • fixed_denominations:资产是否以固定面额进行流通(类似纸币),比如bytes可以以任意金额流通
  • issued_by_definer_only:资产是否仅由发行方发布,比如bytes均在创世单元中发布
  • cosigned_by_definer:资产在每次转移时是否必须由发行方共同签名,比如bytes是不需要的
  • spender_attested:资产在使用时用户是否需要通过认证,比如bytes是不需要的
  • attestors:受资产发行方认可的认证地址,可以在后续过程中修改
  • denominations:如果资产具有固定面额,定义面额种类以及各类别总量
  • transfer_condition:资产转移需要的额外条件,语法与地址定义脚本相同(除了不使用sig之外)
  • issue_condition:资产发布需要的额外条件

在定义资产时,每个单元中最多只能有一条asset消息。当资产定义单元发布后,后续都通过引用该单元的hash来引用该资产。资产只能定义一次,除了attestors之外均不能进行修改。资产定义的解释权在发行方,其具体含义由其进行解释。资产定义中的不同属性的组合可以适用不同的场景。

发布资产的消息格式为:

unit: {
  ...
  messages: [
    ...
    {
      app: "payment",
      payload_location: "inline",
      payload_hash: "hash of payload",
      payload: {
        asset: "hash of unit where the asset was defined",
        inputs: [
          {
            type: "issue",
            amount: 1000000,
            serial_number: 1,
            address: "ISSUER ADDRESS" // only when multi-authored
          },
          ...
        ],
        outputs: [
          {
            address: "BENEFICIARY ADDRESS",
            amount: 12345
          },
          ...
        ]
      }
    },
    ...
  ],
  ...
}

总量有限的资产必须在一个交易中全部发布,比如,所有的bytes都是在创世单元中发布的。如果资产总量有限,发布时serial_number必须为1;如果资产总量不受限,每次发布时serial_number必须保证不同。

转移资产与bytes类似,只是需要加上资产的ID,其消息格式为:

unit: {
  ...
  messages: [
    ...
    {
      app: "payment",
      payload_location: "inline",
      payload_hash: "hash of payload",
      payload: {
        asset: "hash of unit where the asset was defined",
        inputs: [
          {
            unit: "hash of source unit",
            message_index: 0,
            output_index: 1
          },
          ...
        ],
        outputs: [
          {
            address: "BENEFICIARY ADDRESS",
            amount: 12345
          },
          ...
        ]
      }
    },
    ...
  ],
  ...
}

隐私资产

公开资产在转移过程中,其内容在交易中是完全公开的。而对于隐私财产,在转移时,仅发送特定时间点资产转移的证据;同时,发送者通过私有通道把资产发送给接收者;接收者可以通过区块链上的资产转移证据来验证是否得到该笔资产。

为了解决双花问题,需要在单元增加新的字段spend_proof,要求:

  • 它仅依赖于其所花费的输出,相同的输出将产生相同的spend_proof
  • 无法通过它逆向推断出所花费输出的任何信息

例如采用如下方式生成spend_proof

spend_proof = hash({
  asset: payload.asset,
  unit: input.unit,
  message_index: input.message_index,
  output_index: input.output_index,
  address: src_output.address,
  amount: src_output.amount,
  blinding: src_output.blinding
})

其中,payload.asset表示需要转移的资产,input则表示花费输出src_output的输入。隐私资产的输出必须包含扰乱因子blinding,它使得无法通过spend_proof来逆向推到出其使用了哪个输出。

对于隐私资产的发行来讲,其spend_proof为:

spend_proof = hash({
  asset: payload.asset,
  address: "ISSUER ADDRESS",
  serial_number: input.serial_number, // always 1 for capped assets
  amount: input.amount, // issue amount
  denomination: 1 // always 1 for arbitrary-amounts payments
})

在发行隐私资产时,由于需要公开表明已发行该资产,因此不需要添加扰乱因子。在资产传递过程中,发送者已知扰乱因子,虽然他可以知道接收者是否花费了这笔资产,但是他无法知道这笔资产的下一个接收者是谁,也就无法继续跟踪该笔资产的进一步流向了。

spend_proof需要添加到区块链单元中,其格式为:

unit: {
  ...
  spend_proofs: [
    {
      spend_proof: "the above hash in base64",
      address: "SPENDING ADDRESS" // only if multi-authored
    },
    ...
  ],
  ...
}

在发送隐私资产时,发送者需要完成以下几件事情:

  • 对每个输出添加扰乱因子
  • 将隐私资产通过私有通道发送给接收者,以及该资产传递所在的区块链单元
  • 对于单元中每个输入,计算相应的spend_proof并加入单元中

接收者需要检查两件事情:

  • 检查收到的隐私资产的hash值是否与区块链单元中的payload_hash相同
  • 检查通过收到的隐私资产计算得到的spend_proof是否与区块链单元中的匹配

接收者可以验证整个资产转移的过程,并能够回溯到该资产的发布单元。

Byteball中提供了一种隐私数字资产blackbytes,其定义如下所示:

{
  cap: 2,111,100,000,000,000,
  is_private: true,
  is_transferrable: true,
  auto_destroy: false,
  fixed_denominations: true,
  issued_by_definer_only: true,
  cosigned_by_definer: false,
  spender_name_attested: false,
  denominations: [
    {denomination: 1, count_coins: 10,000,000,000},
    {denomination: 2, count_coins: 20,000,000,000},
    {denomination: 5, count_coins: 10,000,000,000},
    {denomination: 10, count_coins: 10,000,000,000},
    {denomination: 20, count_coins: 20,000,000,000},
    {denomination: 50, count_coins: 10,000,000,000},
    {denomination: 100, count_coins: 10,000,000,000},
    {denomination: 200, count_coins: 20,000,000,000},
    {denomination: 500, count_coins: 10,000,000,000},
    {denomination: 1000, count_coins: 10,000,000,000},
    {denomination: 2000, count_coins: 20,000,000,000},
    {denomination: 5000, count_coins: 10,000,000,000},
    {denomination: 10000, count_coins: 10,000,000,000},
    {denomination: 20000, count_coins: 20,000,000,000},
    {denomination: 50000, count_coins: 10,000,000,000},
    {denomination: 100000, count_coins: 10,000,000,000}
  ]
}

数据

非结构化数据(文本)

用户可以在Byteball中存储文本信息,消息格式为:

unit: {
  ...
  messages: [
    ...
    {
      app: "text",
      payload_location: "inline",
      payload_hash: "hash of payload",
      payload: "any text"
    },
    ...
  ],
  ...
}

文本可以是任意内容:用户可以利用这个发布不能被篡改的公告、微博等等;也可以存储一些非明文的内容,比如合约的hash值之类的。

结构化数据

用户也可以使用Byteball存储任意的结构化数据,消息格式为:

unit: {
  ...
  messages: [
    ...
    {
      app: "data",
      payload_location: "inline",
      payload_hash: "hash of payload",
      payload: {
        key: "value",
        another_key: {
          subkey: "other value",
          another_subkey: 232
        }
       }
     },
     ...
  ],
...
}

投票

用户可以使用Byteball发起投票,消息格式为:

unit: {
  ...
  messages: [
    ...
    {
      app: "poll",
      payload_location: "inline",
      payload_hash: "hash of payload",
      payload: {
        question: "Should the United Kingdom remain a member of the European Union or leave the European Union?",
        choices: ["Leave", "Remain"]
      }
    },
    ...
  ],
  ...
}

同时,用户可以响应投票,其消息格式为:

unit: {
  ...
  messages: [
    ...
    {
      app: "vote",
      payload_location: "inline",
      payload_hash: "hash of payload",
      payload: {
        unit: "hash of the unit where the poll was defined",
        choice: "Leave"
      }
    },
    ...
  ],
  ...
}

投票的有效性需要由发起投票方来决定,Byteball仅仅检查投票选项是否在给定集合内。比如,如果发起投票方要求只允许经过认证的或在白名单上的用户进行投票,那些无效的投票也会被Byteball记录,需要由发起方自行判别。

认证

用户可以通过Byteball发布和存储个人信息,消息格式为

unit: {
  ...
  messages: [
  ...
    {
      app: "profile",
      payload_location: "inline",
      payload_hash: "hash of payload",
      payload: {
        name: "Joe Average",
        emails: ["joe@example.com", "joe@domain.com"],
        twitter: "joe"
      }
    },
    ...
  ],
  ...
}

用户可以发布任意的个人信息,但是其真实性是无法保证的,只有通过认证的信息才是可信的。

认证消息用于确定用户发布的个人信息的真实性,其消息格式为

unit: {
  ...
  messages: [
    ...
    {
      app: "attestation",
      payload_location: "inline",
      payload_hash: "hash of payload",
      payload: {
        address: "ADDRESS OF THE SUBJECT"
        profile: {
          name: "Joe Average",
          emails: ["joe@example.com"]
        }
      }
    },
    ...
  ],
  ...
}

认证消息中的个人信息不一定与用户自己发布的信息一致,事实上,用户甚至没有自己发布过个人信息。

Byteball中的认证者类似于现实世界中的实名认证,认证某个地址是归属于某个个人或组织。认证方可以向被认证方收取少量费用。一般来讲,见证人节点是需要通过认证的,这样可以提高手信任度。被认证方可以选择不公布认证信息,而只在Byteball中保存认证证据,并在合适的时机公布。

总结

Byteball是一种基于DAG结构的不可逆分布式数据库,它可以存储任何有价值的数据。Byteball中每一个新的数据单元都间接地确认了之前所有数据单元的存在性。对已达到稳定状态的数据单元的修改将变得不可实现。

相比于BTC和ETH,Byteball使用了DAG结构作为底层,并使用见证人作为共识机制,从而具有以下特点:

  • 没有区块,只有交易单元,确认速度快
  • 极少的手续费
  • 交易单元具有最终状态

Byteball中发行了一种用于支付存储的货币bytes,支付费用与所需要存储的数据大小相关。自由开发者可以在Byteball平台上自由开发各种应用,根据不同的应用场景发布相应的数字资产。在Byteball上面可以轻松地实现去中心化交易所、互助保险、赌球、彩票、投票、认证等等功能。Byteball还提供了类似telegram的加密端到端通道,可以实现用户之间的隐私通信。Byteball最与众不同的是,它提供了一种隐私数字资产blackbytes,可以完整地保护使用者的隐私信息。

总的来说,不管从使用技术的先进性,还是其提供功能的多样性,Byteball都是区块链领域中的佼佼者。

版权所有。发布者:guantau,转载请注明出处:https://bbfans.org/2018/05/21/byteball-application-summary/

发表评论

登录后才能评论