今天给大家聊到了区块链如何查询区块高度,以及区块链如何查询区块高度数据相关的内容,在此希望可以让网友有所了解,最后记得收藏本站。
怎样通过RPC命令实现区块链的查询
基本架构如下:
前端web基于socket.io或者REST实现,
后端加一层mongodb/mysql等数据库来代替单机leveldb做数据存储
目的应该是:
1. 加速查询
2. 做更高层的数据分析
3.做分布式数据库
思考:
这些online的查询固然可以方便我们的日常用, 那如何与相关应用集成呢? 我们是否可以通过简单的rpc命令实现同等的效果?
有几个用处:
1 . 大家都可以做自己的qukuai.com或blockchain.info的查询:)
2. 集成RPC命令到自己的店铺,收款后查询用
3. 集成到钱包应用
4. 其他应用场景
cmd分析:
根据高度height查block hash
./bitcoin-cli getblockhash 19999
00000000ba36eb929dc90170a96ee3efb76cbebee0e0e5c4da9eb0b6e74d9124
2. 然后根据block hash查block 信息
./bitcoin-cli getblock 00000000ba36eb929dc90170a96ee3efb76cbebee0e0e5c4da9eb0b6e74d9124
{
"hash" : "00000000ba36eb929dc90170a96ee3efb76cbebee0e0e5c4da9eb0b6e74d9124",
"confirmations" : 263032,
"size" : 215,
"height" : 19999,
"version" : 1,
"merkleroot" : "c1b09fa6bdc0b12b15cc1400d598ffed29dd33b2e282093a48646d1b7b380c98",
"tx" : [
"c1b09fa6bdc0b12b15cc1400d598ffed29dd33b2e282093a48646d1b7b380c98"
],
"time" : 1248291140,
"nonce" : 1085206531,
"bits" : "1d00ffff",
"difficulty" : 1.00000000,
"chainwork" : "00000000000000000000000000000000000000000000000000004e204e204e20",
"previousblockhash" : "000000006eb5c2799b0f5fafab6435daeecef8e7f609b731c9879c3f74f28c73",
"nextblockhash" : "00000000770ebe897270ca5f6d539d8afb4ea4f4e757761a34ca82e17207d886"
}
3. 根据tx查询单笔交易的信息:
没建index时,只能查询自己钱包的信息,若不是钱包的交易,则返回如下:
./bitcoin-cli getrawtransaction c1b09fa6bdc0b12b15cc1400d598ffed29dd33b2e282093a48646d1b7b380c98
error: {"code":-5,"message":"Invalid or non-wallet transaction id"}
那怎么办呢? 直接分析代码找原因:
// Return transaction in tx, and if it was found inside a block, its hash is placed in hashBlock
bool GetTransaction(const uint256 hash, CTransaction txOut, uint256 hashBlock, bool fAllowSlow)
{
CBlockIndex *pindexSlow = NULL;
{
LOCK(cs_main);
{
if (mempool.lookup(hash, txOut))
{
return true;
}
}
if (fTxIndex) {
CDiskTxPos postx;
if (pblocktree-ReadTxIndex(hash, postx)) {
CAutoFile file(OpenBlockFile(postx, true), SER_DISK, CLIENT_VERSION);
CBlockHeader header;
try {
file header;
fseek(file, postx.nTxOffset, SEEK_CUR);
file txOut;
} catch (std::exception e) {
return error("%s : Deserialize or I/O error - %s", __func__, e.what());
}
hashBlock = header.GetHash();
if (txOut.GetHash() != hash)
return error("%s : txid mismatch", __func__);
return true;
}
}
if (fAllowSlow) { // use coin database to locate block that contains transaction, and scan it
int nHeight = -1;
{
CCoinsViewCache view = *pcoinsTip;
CCoins coins;
if (view.GetCoins(hash, coins))
nHeight = coins.nHeight;
}
if (nHeight 0)
pindexSlow = chainActive[nHeight];
}
}
if (pindexSlow) {
CBlock block;
if (ReadBlockFromDisk(block, pindexSlow)) {
BOOST_FOREACH(const CTransaction tx, block.vtx) {
if (tx.GetHash() == hash) {
txOut = tx;
hashBlock = pindexSlow-GetBlockHash();
return true;
}
}
}
}
return false;
}
怎么样在以太坊上查询区块链币
可以输入钱包地址、交易ID、区块哈希或者区块高度等信息直接查询,非常方便。
如果是查询账户余额、账户的历史交易数据等信息,建议直接输入钱包地址查询;如果是查询某笔转账的相关信息,比如是否到账、进展如何,输入交易ID是最方便的。
当然了,区块链浏览器不仅可以查询自己的账户,也可以查询别人的账户以及相关的交易信息,包括比特币创始人中本聪的账户。
区块高度越高说明什么
区块高度(Block height)是指一个区块的高度是指在区块链中它和创世区块之间的块数。区块高度是可以通过该区块在区块链中的位置识别区块的另一种方式。第一个区块,其高度为0,每一个随后被存储在第一个区块之上的区块在区块链中都比前一区块“高”出一个位置,就像箱子一个接一个堆叠在其他箱子之上。
和区块头哈希值不同的是,区块高度并不是唯一的标识符,在区块链的增长过程中可能会出现两个或两个以上的区块有同样的高度,这种情况叫做“区块链分叉”。
区块链是blockchain翻译而来的,看见“链”人们联想到的是长长的链条,它有长度的概念。但在区块链中,并不叫区块长度,而是区块高度,区块链如何查询区块高度你可以把区块链理解为区块堆。
创世区块,即第0块,位于最底层,然后每一块都叠在前一块之上,这样就比较好理解区块高度了。区块链如何查询区块高度我们查询某个区块信息时,除了通过它的哈希,还可以通过它的区块高度进行查询。
区块高度的作用
区块高度是区块的标示符,区块有两个标示符,一是区块头的哈希值,二是区块高度。区块头的哈希值是通过SHA256算法对区块头进行二次哈希计算而得到的数字。区块哈希值可以唯一、明确地“标识”一个区块,并且任何节点通过简单地对区块头进行哈希计算都可以独立地获取该区块哈希值。区块高度是指该区块在区块链中的位置。区块高度并不是唯一的“标识”符。虽然一个单一的区块总是会有一个明确的、固定的区块高度,但反过来却并不成立,一个区块高度并不总是识别一个单一的区块。两个或两个以上的区块可能有相同的区块高度,在区块链里争夺同一位置。
写到这里,本文关于区块链如何查询区块高度和区块链如何查询区块高度数据的介绍到此为止了,如果能碰巧解决你现在面临的问题,如果你还想更加了解这方面的信息,记得收藏关注本站。
标签: #区块链如何查询区块高度
评论列表