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可实现为关联数组,存在两种类型
- ED25519-SHA-256
- 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”
}
}