BigchainDB 2.0 交易模型

交易组件

{
“id”: id,
“version”: version,
“inputs”: inputs,
“outputs”: outputs,
“operation”: operation,
“asset”: asset,
“metadata”: metadata
}

id

事务的ID是事务的SHA3-256哈希值,它是一个字符串

version

该版本指示在验证事务时要使用的事务验证规则,即与该BigchainDB事务规范版本相关联的规则。
eg:

“version”:“2.0”

input

值"inputs"是一个事务输入列表。(它可能在您的编程语言中实现为数组,元组或其他内容。)

每个交易输入花费/转移先前的交易输出

  • CREATE事务必须只有一个输入(即num_inputs == 1)
  • TRANSFER事务必须至少有一个输入(即num_inputs >= 1)

tips:
关于事务概念的BigchainDB root文档页面中有关于事务输入和输出的高级概述:
“资产”是一个核心概念,交易输入和输出是转移资产(或资产份额)的控制权或所有权的机制。资产的金额在交易的输出中编码,每个输出可以单独使用。要花费输出,输出的条件必须由提供相应实现的输入来满足。每个输出可以通过单个输入最多花费一次。

input的基本结构

{
“fulfills”: {
“transaction_id”: transaction_id,
“output_index”: output_index
},
“owners_before”: [public_key_1, public_key_2, etc.],
“fulfillment”: fulfillment
}

fulfills

若该交易是TRANSFER,则其就像一个指向输出的指针
transaction_id是输出所在事务的ID(是该笔资产最后一次交易所产生的id)
output_index是所花费的输出的索引,它是一个整数,而不是一个字符串

例:

{
“ transaction_id ”:“ 107ec21f4c53cd2a934941010437ac74882161bcbefdfd7664268823fc347996 ”,
“ output_index ”:0
}

owners_before

  • 若交易是CREATE,那么值fulfills必须是ctnull(Python中为none),因为没有其他交易输出它正在转移/消费
  • owners_before是一个公钥列表
    • 若交易是CREATE,这其为该笔资产创建者们的公钥
    • 若交易是TRANSFER,这该列表与output中的public_keys列表相同

fulfillment

fulfillment是一个字符串

  • 如果事务是CREATE事务,那么实现必须满足隐含的n- of- n签名条件,即来自n中的每一个的一个签名owners_before。

  • 如果事务是TRANSFER事务,则履行必须满足正在传输/使用的输出中的条件。

无论是CREATE还是TRANSFER交易,input.fulfillment必须有效

output

outputs是一个事务输出列表

{
“condition”: condition,
“public_keys”: [public_key_1, public_key_2, etc.],
“amount”: amount
}

  • public_keys 是一个公钥列表
  • amount 是与该输出关联的资产数量,有时我们也称其为资产的“股数”

condition

基本结构:

{
“details”: subcondition,
“uri”: uri
}

  • subcondition可实现为关联数组,存在两种类型
  1. ED25519-SHA-256
  2. THRESHOLD-SHA-256

例1.(ED25519-SHA-256型)

{
“ type ”:“ ed25519-sha-256 ”,
“ public_key ”:“ HFp773FH21sPFrn4y8wX3Ddrkzhqy4La4cQLfePT2vz7 ”
}

例2.(THRESHOLD-SHA-256)

{
“type”: “threshold-sha-256”,
“threshold”: threshold,
“subconditions”: [subcondition_1, subcondition_2, etc.]
}

operation

  • “CREATE”
  • “TRANSFER”
  • “VALIDATOR_ELECTION”
  • “CHAIN_MIGRATION_ELECTION”
  • “VOTE”

asset

在CREATE交易中,asset可以为ctnull(Python中为None)
asset的结构如下:

{
“data”: {
“desc”: “Laundromat Fantastique”,
“address”: “461B Grand Palace Road”,
“international_laundromat_identifier”: “bx45-am-333”,
“known_issues”: “No known issues. It’s fantastique!”
}
}

metadata

{
“timestamp”: “1510850314”,
“weather_conditions”: “So hot that our crayons melted.”,
“location”: {
“name”: “Death Valley, California”,
“latitude”: “36.457N”,
“longitude”: “116.865W”
}
}

参考网址

猜你喜欢

转载自blog.csdn.net/weixin_44057343/article/details/88064917