了解 BigchainDB 中事务的状态
Knowing the status of a transaction in BigchainDB
我向我的 BigchainDB 实例发送了一个交易。
bdb = BigchainDB(url_of_instance_with_port)
如果我运行
bdb.transactions.retrieve(txid)
,我得到以下信息:
{'inputs': [{'owners_before': ['31LBKyjyd6GEA7R88mnHwthMf2ygtyB8xGDv1dZHfkqu'],
'fulfills': None,
'fulfillment': 'pGSAIB3NDv0SG46f7PYdtgzMezpc8Kq8F1nR0Y1Brwe5zbkQgUDWwwaRXj4yx9Z49f76L33feu9iUhNYUs0B3oPyLllUDZrHopIoHRt0FeBLd_5Yt-m1riyc3-0jYNdM0VAyGwAG'}],
'outputs': [{'public_keys': ['31LBKyjyd6GEA7R88mnHwthMf2ygtyB8xGDv1dZHfkqu'],
'condition': {'details': {'type': 'ed25519-sha-256',
'public_key': '31LBKyjyd6GEA7R88mnHwthMf2ygtyB8xGDv1dZHfkqu'},
'uri': 'ni:///sha-256;cfREMIEIaEdXKEfokspCcfiu9jSYvlfeq6zwdj2x3Fw?fpt=ed25519-sha-256&cost=131072'},
'amount': '1'}],
'operation': 'CREATE',
'metadata': {...},
'asset': {...},
'version': '2.0',
'id': '61b7f06a106d7db4e5cbaaf23f160d934c7e6e5ef6ab1df7c1eefca1def6ea18'}
然而,bdb.blocks.get(txid)
超时并且区块状态保持不变,即即使区块零也不包含任何交易。 为什么?我该如何进一步调试?
这又引出了我的另一个问题,BigchainDB 中的挖矿 是什么概念?什么时候创建块?
如果 bdb.blocks.get(txid)
调用超时,那么这可能是 Python 驱动程序中的一个错误,除非您进行调用时 BigchainDB 网络已关闭,在这种情况下它当然会超时出去。你能再试一次吗,即 post 一个新的交易,然后再做 bdb.blocks.get(txid)
。如果它再次超时,那么可以尝试使用您的网络浏览器进行相同的 HTTP 请求,即在您的地址栏中输入如下内容:
http://your-hostname:port/api/v1/blocks?transaction_id=blahblahblah
然后按 Enter 键,看看它是否有效。如果不是,则节点有问题。如果它确实有效,那么 Python 驱动程序有问题。
如果 Python 驱动程序有问题,请在 https://github.com/bigchaindb/bigchaindb-driver/issues/new
提交新问题
关于挖矿
BigchainDB 节点不会像某些比特币或以太坊节点那样做 "mining"。 BigchainDB 网络中的节点使用 Tendermint 共识机制以不同的方式实现拜占庭容错 (BFT) 共识。 BFT 共识的理论和实践可以追溯到 20 世纪 70 年代后期(尽管 BFT 术语是在 80 年代初期才出现的),所以这并不是一个新想法; Tendermint 只是较新的 BFT 共识之一 algorithms/protocols.
我向我的 BigchainDB 实例发送了一个交易。
bdb = BigchainDB(url_of_instance_with_port)
如果我运行
bdb.transactions.retrieve(txid)
,我得到以下信息:
{'inputs': [{'owners_before': ['31LBKyjyd6GEA7R88mnHwthMf2ygtyB8xGDv1dZHfkqu'],
'fulfills': None,
'fulfillment': 'pGSAIB3NDv0SG46f7PYdtgzMezpc8Kq8F1nR0Y1Brwe5zbkQgUDWwwaRXj4yx9Z49f76L33feu9iUhNYUs0B3oPyLllUDZrHopIoHRt0FeBLd_5Yt-m1riyc3-0jYNdM0VAyGwAG'}],
'outputs': [{'public_keys': ['31LBKyjyd6GEA7R88mnHwthMf2ygtyB8xGDv1dZHfkqu'],
'condition': {'details': {'type': 'ed25519-sha-256',
'public_key': '31LBKyjyd6GEA7R88mnHwthMf2ygtyB8xGDv1dZHfkqu'},
'uri': 'ni:///sha-256;cfREMIEIaEdXKEfokspCcfiu9jSYvlfeq6zwdj2x3Fw?fpt=ed25519-sha-256&cost=131072'},
'amount': '1'}],
'operation': 'CREATE',
'metadata': {...},
'asset': {...},
'version': '2.0',
'id': '61b7f06a106d7db4e5cbaaf23f160d934c7e6e5ef6ab1df7c1eefca1def6ea18'}
然而,bdb.blocks.get(txid)
超时并且区块状态保持不变,即即使区块零也不包含任何交易。 为什么?我该如何进一步调试?
这又引出了我的另一个问题,BigchainDB 中的挖矿 是什么概念?什么时候创建块?
如果 bdb.blocks.get(txid)
调用超时,那么这可能是 Python 驱动程序中的一个错误,除非您进行调用时 BigchainDB 网络已关闭,在这种情况下它当然会超时出去。你能再试一次吗,即 post 一个新的交易,然后再做 bdb.blocks.get(txid)
。如果它再次超时,那么可以尝试使用您的网络浏览器进行相同的 HTTP 请求,即在您的地址栏中输入如下内容:
http://your-hostname:port/api/v1/blocks?transaction_id=blahblahblah
然后按 Enter 键,看看它是否有效。如果不是,则节点有问题。如果它确实有效,那么 Python 驱动程序有问题。
如果 Python 驱动程序有问题,请在 https://github.com/bigchaindb/bigchaindb-driver/issues/new
提交新问题关于挖矿
BigchainDB 节点不会像某些比特币或以太坊节点那样做 "mining"。 BigchainDB 网络中的节点使用 Tendermint 共识机制以不同的方式实现拜占庭容错 (BFT) 共识。 BFT 共识的理论和实践可以追溯到 20 世纪 70 年代后期(尽管 BFT 术语是在 80 年代初期才出现的),所以这并不是一个新想法; Tendermint 只是较新的 BFT 共识之一 algorithms/protocols.