node.js - 如何等到数据添加到多链中的块中?
问题描述
我正在尝试通过以下代码在流中添加数据。
mc.publish({ stream: "datastream", key: "through", data: packet }).then(x => {
sucess++;
//total_size += passedSize;
callback(null, sucess);
}).catch(y => {
//sucess++;
//total_size += passedSize;
callback(null, sucess);
})
当数据添加到未使用的池中时,此代码返回回调,但我想等到它添加到块中。
这是我使用的参数。
chain-protocol = multichain # Chain protocol: multichain (permissions, native assets) or bitcoin
chain-description = MultiChain buchain # Chain description, embedded in genesis block coinbase, max 90 chars.
root-stream-name = root # Root stream name, blank means no root stream.
root-stream-open = true # Allow anyone to publish in root stream
chain-is-testnet = false # Content of the 'testnet' field of API responses, for compatibility.
target-block-time = 2 # Target time between blocks (transaction confirmation delay), seconds. (2 - 86400)
maximum-block-size = 1000000000 # Maximum block size in bytes. (1000 - 1000000000)
# Global permissions
anyone-can-connect = false # Anyone can connect, i.e. a publicly readable blockchain.
anyone-can-send = false # Anyone can send, i.e. transaction signing not restricted by address.
anyone-can-receive = false # Anyone can receive, i.e. transaction outputs not restricted by address.
anyone-can-receive-empty = true # Anyone can receive empty output, i.e. without permission grants, asset transfers and zero native currency.
anyone-can-create = false # Anyone can create new streams.
anyone-can-issue = false # Anyone can issue new native assets.
anyone-can-mine = false # Anyone can mine blocks (confirm transactions).
anyone-can-activate = false # Anyone can grant or revoke connect, send and receive permissions.
anyone-can-admin = false # Anyone can grant or revoke all permissions.
support-miner-precheck = true # Require special metadata output with cached scriptPubKey for input, to support advanced miner checks.
allow-arbitrary-outputs = false # Allow arbitrary (without clear destination) scripts.
allow-p2sh-outputs = true # Allow pay-to-scripthash (P2SH) scripts, often used for multisig. Ignored if allow-arbitrary-outputs=true.
allow-multisig-outputs = true # Allow bare multisignature scripts, rarely used but still supported. Ignored if allow-arbitrary-outputs=true.
# Consensus requirements
setup-first-blocks = 60 # Length of initial setup phase in blocks, in which mining-diversity,
# admin-consensus-* and mining-requires-peers are not applied. (1 - 31536000)
mining-diversity = 0.3 # Miners must wait <mining-diversity>*<active miners> between blocks. (0 - 1)
admin-consensus-upgrade = 0.5 # <admin-consensus-upgrade>*<active admins> needed to upgrade the chain. (0 - 1)
admin-consensus-admin = 0.5 # <admin-consensus-admin>*<active admins> needed to change admin perms. (0 - 1)
admin-consensus-activate = 0.5 # <admin-consensus-activate>*<active admins> to change activate perms. (0 - 1)
admin-consensus-mine = 0.5 # <admin-consensus-mine>*<active admins> to change mining permissions. (0 - 1)
admin-consensus-create = 0.0 # <admin-consensus-create>*<active admins> to change create permissions. (0 - 1)
admin-consensus-issue = 0.0 # <admin-consensus-issue>*<active admins> to change issue permissions. (0 - 1)
# Defaults for node runtime parameters
lock-admin-mine-rounds = 10 # Ignore forks that reverse changes in admin or mine permissions after this many mining rounds have passed. Integer only. (0 - 10000)
mining-requires-peers = true # Nodes only mine blocks if connected to other nodes (ignored if only one permitted miner).
mine-empty-rounds = 10 # Mine this many rounds of empty blocks before pausing to wait for new transactions. If negative, continue indefinitely (ignored if target-adjust-freq>0). Non-integer allowed. (-1 - 1000)
mining-turnover = 0.5 # Prefer pure round robin between a subset of active miners to minimize forks (0.0) or random equal participation for all permitted miners (1.0). (0 - 1)
# Native blockchain currency (likely not required)
initial-block-reward = 0 # Initial block mining reward in raw native currency units. (0 - 1000000000000000000)
first-block-reward = -1 # Different mining reward for first block only, ignored if negative. (-1 - 1000000000000000000)
reward-halving-interval = 52560000 # Interval for halving of mining rewards, in blocks. (60 - 1000000000)
reward-spendable-delay = 1 # Delay before mining reward can be spent, in blocks. (1 - 100000)
minimum-per-output = 0 # Minimum native currency per output (anti-dust), in raw units.
# If set to -1, this is calculated from minimum-relay-fee. (-1 - 1000000000)
maximum-per-output = 100000000000000 # Maximum native currency per output, in raw units. (0 - 1000000000000000000)
minimum-relay-fee = 0 # Minimum transaction fee, per 1000 bytes, in raw units of native currency. (0 - 1000000000)
native-currency-multiple = 100000000 # Number of raw units of native currency per display unit. (0 - 1000000000)
# Advanced mining parameters
skip-pow-check = false # Skip checking whether block hashes demonstrate proof of work.
pow-minimum-bits = 1 # Initial and minimum proof of work difficulty, in leading zero bits. (1 - 32)
target-adjust-freq = -1 # Interval between proof of work difficulty adjustments, in seconds, if negative - never adjusted. (-1 - 4294967295)
allow-min-difficulty-blocks = false # Allow lower difficulty blocks if none after 2*<target-block-time>.
# Standard transaction definitions
only-accept-std-txs = true # Only accept and relay transactions which qualify as 'standard'.
max-std-tx-size = 100000000 # Maximum size of standard transactions, in bytes. (1024 - 100000000)
max-std-op-returns-count = 1024 # Maximum number of OP_RETURN metadata outputs in standard transactions. (0 - 1024)
max-std-op-return-size = 2097152 # Maximum size of OP_RETURN metadata in standard transactions, in bytes. (0 - 67108864)
max-std-op-drops-count = 5 # Maximum number of OP_DROPs per output in standard transactions. (0 - 100)
max-std-element-size = 32768 # Maximum size of data elements in standard transactions, in bytes. (128 - 32768)
如何做那个多链?任何想法?
提前致谢。
解决方案
看起来该publish
函数返回一个您可以txid
稍后stream
使用txid
getstreamitem
然后您的代码将如下所示:
mc.publish({ stream: "datastream", key: "through", data: packet }).then(txId => {
checking = true
while(checking) {
mc.getstreamitem({ stream: "datastream", txid: txId}).then(res => {
checking = false
sucess++;
//total_size += passedSize;
callback(null, sucess);
}).catch(err => {
checking = false
callback(err, sucess);
})
// you can delay here or something
}
}).catch(y => {
//sucess++;
//total_size += passedSize;
callback(null, sucess);
})
您可以将 while 替换为其他一些轮询机制。我刚刚在这里写了一个临时版本。
PS:我没有multichain
具体的经验。这是我第一次看到他们的文档。该文档对我来说看起来很不方便。
推荐阅读
- time-complexity - 大于 1 的常数的大 O 表示法
- php - 使用 Codeigniter 将带有会话数据的数据插入数据库
- youtube-iframe-api - 如何从 youtube iframe 播放器获取 TimeRanges?
- c# - 解析 json 响应 c#
- javascript - 如何使 HTML 表格的 tbody 滚动?
- excel - 气候:计算连续降雨天数
- dart - text justify 无法与阿拉伯语的 RichText 一起正常工作
- perl - 我有 csv 文件我可以知道如何在 linux 中用下划线替换列标题中的空格吗
- azure-logic-apps - 如何使用多个 HTTP 请求调用程序创建单个逻辑应用程序
- amazon-web-services - 将 AWS SSL 添加到外部 DNS