1. 程式人生 > >比特幣情景分析

比特幣情景分析

INV訊息
The inv message (inventory message) transmits one or more inventories of objects known to the transmitting peer. It can be sent unsolicited to announce new transactions or blocks, or it can be sent in reply to a getblocks message or mempool message.

The receiving peer can compare the inventories from an inv message against the inventories it has already seen, and then use a follow-up message to request unseen objects.

Bytes Name Data Type Description
Varies count compactSize uint The number of inventory entries.
Varies inventory inventory One or more inventory entries up to a maximum of 50,000 entries.

The following annotated hexdump shows an inv message with two inventory entries. (The message header has been omitted.)

02 ................................. Count: 2

01000000 ........................... Type: MSG_TX
de55ffd709ac1f5dc509a0925d0b1fc4
42ca034f224732e429081da1b621f55a ... Hash (TXID)

01000000 ........................... Type: MSG_TX
91d36d997037e08018262978766f24b8
a055aaf1d872e94ae85e9817b2c68dc7 ... Hash (TXID)

兩種情況獲取到區塊
1.被動
收到peer發來的inv訊息 -> 傳送getheaders訊息 -> 收到peer發來的headers訊息 -> 傳送getdata訊息 -> 收到peer發來的block訊息

搞清楚節點什麼情況下主動傳送inv訊息

2.主動
local節點發送getheaders,peer節點接收到getheaders訊息後進行邏輯處理後返回headers訊息,local節點收到header訊息後會發生getdata訊息,peer節點接收到getdata訊息後會返回block訊息,local節點收到block訊息後進行區塊處理。

可根據log檢視這個過程:

..........

2018-09-07T03:03:54Z dnsseed thread exit
2018-09-07T03:03:54Z socket closed
2018-09-07T03:03:54Z disconnecting peer=3
2018-09-07T03:03:54Z Cleared nodestate for peer=3
2018-09-07T03:03:55Z received: inv (73 bytes) peer=2
2018-09-07T03:03:55Z got inv: tx ad5ed4c0c91c1483d4a54b4865463f840aeb0e3ad7ed70d8c982c8b231794cf4  new peer=2
2018-09-07T03:03:55Z got inv: tx 4a2ff8c8b639429109217a734c735ec931ccca921becf90125ea0ecee3d07de2  new peer=2
2018-09-07T03:03:55Z received: headers (162003 bytes) peer=1
2018-09-07T03:03:55Z more getheaders (2000) to end to peer=1 (startheight:540287)
2018-09-07T03:03:55Z sending getheaders (741 bytes) peer=1
2018-09-07T03:03:55Z Protecting outbound peer=1 from eviction
2018-09-07T03:03:55Z Requesting block 00000000839a8e6886ab5951d76f411475428afc90947ee320161bbf18eb6048 (1) peer=1
2018-09-07T03:03:55Z Requesting block 000000006a625f06636b8bb6ac7b960a8d03705d1ace08b1a19da3fdcc99ddbd (2) peer=1
2018-09-07T03:03:55Z Requesting block 0000000082b5015589a3fdf2d4baff403e6f0be035a5d9742c1cae6295464449 (3) peer=1
2018-09-07T03:03:55Z Requesting block 000000004ebadb55ee9096c9a2f8880e09da59c0d68b1c228da88e48844a1485 (4) peer=1
2018-09-07T03:03:55Z Requesting block 000000009b7262315dbf071787ad3656097b892abffd1f95a1a022f896f533fc (5) peer=1
2018-09-07T03:03:55Z Requesting block 000000003031a0e73735690c5a1ff2a4be82553b2a12b776fbd3a215dc8f778d (6) peer=1
2018-09-07T03:03:55Z Requesting block 0000000071966c2b1d065fd446b1e485b2c9d9594acd2007ccbd5441cfc89444 (7) peer=1
2018-09-07T03:03:55Z Requesting block 00000000408c48f847aa786c2268fc3e6ec2af68e8468a34a28c61b7f1de0dc6 (8) peer=1
2018-09-07T03:03:55Z Requesting block 000000008d9dc510f23c2657fc4f67bea30078cc05a90eb89e84cc475c080805 (9) peer=1
2018-09-07T03:03:55Z Requesting block 000000002c05cc2e78923c34df87fd108b22221ac6076c18f3ade378a4d915e9 (10) peer=1
2018-09-07T03:03:55Z Requesting block 0000000097be56d606cdd9c54b04d4747e957d3608abe69198c661f2add73073 (11) peer=1
2018-09-07T03:03:55Z Requesting block 0000000027c2488e2510d1acf4369787784fa20ee084c258b58d9fbd43802b5e (12) peer=1
2018-09-07T03:03:55Z Requesting block 000000005c51de2031a895adc145ee2242e919a01c6d61fb222a54a54b4d3089 (13) peer=1
2018-09-07T03:03:55Z Requesting block 0000000080f17a0c5a67f663a9bc9969eb37e81666d9321125f0e293656f8a37 (14) peer=1
2018-09-07T03:03:55Z Requesting block 00000000b3322c8c3ef7d2cf6da009a776e6a99ee65ec5a32f3f345712238473 (15) peer=1
2018-09-07T03:03:55Z Requesting block 00000000174a25bb399b009cc8deff1c4b3ea84df7e93affaaf60dc3416cc4f5 (16) peer=1
2018-09-07T03:03:55Z sending getdata (577 bytes) peer=1
2018-09-07T03:03:55Z received: inv (217 bytes) peer=1
2018-09-07T03:03:55Z got inv: tx e38e0d65525d99edcaf922a219f3737fac4a8bc86edf5160a3caa4114fddcbad  new peer=1
2018-09-07T03:03:55Z got inv: tx c096ae719c8c60eed3b8593c82319971e4b2f36a31c718522d4b0b303d01246f  new peer=1
2018-09-07T03:03:55Z got inv: tx 2c12572233c47fe8aeeb87e10f882b479d23cfd9f301edb7c857fdbe149be383  new peer=1
2018-09-07T03:03:55Z got inv: tx 4c4ea50a54083243764a5583e307d2909b3097f45789d190f42aebfcc37b7086  new peer=1
2018-09-07T03:03:55Z got inv: tx 86cb2f7d603103c442d57cc182c4c344fa53157e279ef2bd86f48a22b148eb9b  new peer=1
2018-09-07T03:03:55Z got inv: tx e0796cbf67ac0c27e9335490f337d112aa016c5d9e2a055b265c49502f31df82  new peer=1
2018-09-07T03:03:57Z received: headers (162003 bytes) peer=1
2018-09-07T03:03:57Z more getheaders (4000) to end to peer=1 (startheight:540287)
2018-09-07T03:03:57Z sending getheaders (773 bytes) peer=1
2018-09-07T03:03:57Z received: block (215 bytes) peer=1
2018-09-07T03:03:57Z received block 00000000839a8e6886ab5951d76f411475428afc90947ee320161bbf18eb6048 peer=1
2018-09-07T03:03:57Z ProcessNewBlock(), pblock=CBlock(hash=00000000839a8e6886ab5951d76f411475428afc90947ee320161bbf18eb6048, ver=0x00000001, hashPrevBlock=000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f, hashMerkleRoot=0e3e2357e806b6cdb1f70b54c3a3a17b6714ee1f0e68bebb44a74b1efd512098, nTime=1231469665, nBits=1d00ffff, nNonce=2573394689, vtx=1)
  CTransaction(hash=0e3e2357e8, ver=1, vin.size=1, vout.size=1, nLockTime=0)
    CTxIn(COutPoint(0000000000, 4294967295), coinbase 04ffff001d0104)
    CScriptWitness()
    CTxOut(nValue=50.00000000, scriptPubKey=410496b538e853519c726a2c91e61e)

, fForceProcessing=true
2018-09-07T03:03:57Z AcceptBlock(), fAlreadyHave=false
2018-09-07T03:03:57Z AcceptBlock(), blockPos.IsNull()=false
2018-09-07T03:03:57Z ActivateBestChain()
2018-09-07T03:03:57Z ConnectBlock(), hashAssumeValid.IsNull()=false
2018-09-07T03:03:57Z ConnectBlock(), fScriptChecks=true
2018-09-07T03:03:57Z ConnectBlock(), block.vtx.size()=1
2018-09-07T03:03:57Z ConnectBlock(),  blockundo.vtxundo.size()=0
2018-09-07T03:03:57Z Pre-allocating up to position 0x100000 in rev00000.dat
2018-09-07T03:03:57Z UpdateTip: new best=00000000839a8e6886ab5951d76f411475428afc90947ee320161bbf18eb6048 height=1 version=0x00000001 log2_work=33.000022 tx=2 date='2009-01-09T02:54:25Z' progress=0.000000 cache=0.0MiB(1txo)
2018-09-07T03:03:57Z ActivateBestChain(), pindexFork != pindexNewTipRequesting block 000000003ff1d0d70147acfbef5d6a87460ff5bcfce807c2d5b6f0a66bfdf809 (17) peer=1

...............

3.peer節點挖出新區塊後廣播區塊,local節點收到該區塊。
下面的log是local節點啟動後從peer節點同步區塊時的debug.log訊息記錄,注意,這裡所有的區塊都只包含一筆創幣交易。

2018-09-07T07:39:27Z 




2018-09-07T07:39:27Z Bitcoin Core version v0.17.99.0-0786c5d93 (release build)
2018-09-07T07:39:27Z InitParameterInteraction: parameter interaction: -whitelistforcerelay=1 -> setting -whitelistrelay=1
2018-09-07T07:39:27Z Assuming ancestors of block 0000000000000000002e63058c023a9a1de233554f28c7b21380b6c9003f36a8 have valid signatures.
2018-09-07T07:39:27Z Setting nMinimumChainWork=0000000000000000000000000000000000000000000000000000000000000000
2018-09-07T07:39:27Z Using the 'sse4(1way),sse41(4way)' SHA256 implementation
2018-09-07T07:39:27Z Using RdRand as an additional entropy source
2018-09-07T07:39:27Z Default data directory /home/y/.bitcoin
2018-09-07T07:39:27Z Using data directory /home/y/.bitcoin
2018-09-07T07:39:27Z Using config file /home/y/.bitcoin/bitcoin.conf
2018-09-07T07:39:27Z Using at most 125 automatic connections (1024 file descriptors available)
2018-09-07T07:39:27Z Using 16 MiB out of 32/2 requested for signature cache, able to store 524288 elements
2018-09-07T07:39:27Z Using 16 MiB out of 32/2 requested for script execution cache, able to store 524288 elements
2018-09-07T07:39:27Z Using 2 threads for script verification
2018-09-07T07:39:27Z scheduler thread start
2018-09-07T07:39:27Z HTTP: creating work queue of depth 16
2018-09-07T07:39:27Z No rpcpassword set - using random cookie authentication.
2018-09-07T07:39:27Z Generated RPC authentication cookie /home/y/.bitcoin/.cookie
2018-09-07T07:39:27Z HTTP: starting 4 worker threads
2018-09-07T07:39:27Z Using wallet directory /home/y/.bitcoin/wallets
2018-09-07T07:39:27Z init message: Verifying wallet(s)...
2018-09-07T07:39:27Z Using BerkeleyDB version Berkeley DB 4.8.30: (April  9, 2010)
2018-09-07T07:39:27Z Using wallet wallet.dat
2018-09-07T07:39:27Z BerkeleyEnvironment::Open: LogDir=/home/y/.bitcoin/wallets/database ErrorFile=/home/y/.bitcoin/wallets/db.log
2018-09-07T07:39:27Z net: setting try another outbound peer=false
2018-09-07T07:39:27Z Cache configuration:
2018-09-07T07:39:27Z * Using 2.0MiB for block index database
2018-09-07T07:39:27Z * Using 8.0MiB for chain state database
2018-09-07T07:39:27Z * Using 440.0MiB for in-memory UTXO set (plus up to 286.1MiB of unused mempool space)
2018-09-07T07:39:27Z init message: Loading block index...
2018-09-07T07:39:27Z Opening LevelDB in /home/y/.bitcoin/blocks/index
2018-09-07T07:39:27Z Opened LevelDB successfully
2018-09-07T07:39:27Z Using obfuscation key for /home/y/.bitcoin/blocks/index: 0000000000000000
2018-09-07T07:39:27Z LoadBlockIndexDB: last block file = 0
2018-09-07T07:39:27Z LoadBlockIndexDB: last block file info: CBlockFileInfo(blocks=0, size=0, heights=0...0, time=1970-01-01...1970-01-01)
2018-09-07T07:39:27Z Checking all blk files are present...
2018-09-07T07:39:27Z Initializing databases...
2018-09-07T07:39:27Z Pre-allocating up to position 0x1000000 in blk00000.dat
2018-09-07T07:39:27Z Opening LevelDB in /home/y/.bitcoin/chainstate
2018-09-07T07:39:27Z Opened LevelDB successfully
2018-09-07T07:39:27Z Wrote new obfuscate key for /home/y/.bitcoin/chainstate: a8ad4a2a90bfe28f
2018-09-07T07:39:27Z Using obfuscation key for /home/y/.bitcoin/chainstate: a8ad4a2a90bfe28f
2018-09-07T07:39:27Z init message: Rewinding blocks...
2018-09-07T07:39:27Z  block index              62ms
2018-09-07T07:39:27Z init message: Loading wallet...
2018-09-07T07:39:27Z [default wallet] nFileVersion = 179900
2018-09-07T07:39:27Z [default wallet] Keys: 0 plaintext, 0 encrypted, 0 w/ metadata, 0 total. Unknown wallet records: 0
2018-09-07T07:39:27Z [default wallet] Performing wallet upgrade to 169900
2018-09-07T07:39:28Z [default wallet] keypool added 2000 keys (1000 internal), size=2000 (1000 internal)
2018-09-07T07:39:28Z [default wallet] Wallet completed loading in            1182ms
2018-09-07T07:39:28Z [default wallet] setKeyPool.size() = 2000
2018-09-07T07:39:28Z [default wallet] mapWallet.size() = 0
2018-09-07T07:39:28Z [default wallet] mapAddressBook.size() = 0
2018-09-07T07:39:28Z UpdateTip: new best=000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f height=0 version=0x00000001 log2_work=32.000022 tx=1 date='2009-01-03T18:15:05Z' progress=0.000000 cache=0.0MiB(0txo)
2018-09-07T07:39:28Z Failed to open mempool file from disk. Continuing anyway.
2018-09-07T07:39:28Z mapBlockIndex.size() = 1
2018-09-07T07:39:28Z nBestHeight = 0
2018-09-07T07:39:28Z torcontrol thread start
2018-09-07T07:39:28Z Bound to [::]:8333
2018-09-07T07:39:28Z Bound to 0.0.0.0:8333
2018-09-07T07:39:28Z init message: Loading P2P addresses...
2018-09-07T07:39:28Z ERROR: DeserializeFileDB: Failed to open file /home/y/.bitcoin/peers.dat
2018-09-07T07:39:28Z Invalid or missing peers.dat; recreating
2018-09-07T07:39:28Z Flushed 0 addresses to peers.dat  1ms
2018-09-07T07:39:28Z init message: Loading banlist...
2018-09-07T07:39:28Z ERROR: DeserializeFileDB: Failed to open file /home/y/.bitcoin/banlist.dat
2018-09-07T07:39:28Z Invalid or missing banlist.dat; recreating
2018-09-07T07:39:28Z Flushed 0 banned node ips/subnets to banlist.dat  11ms
2018-09-07T07:39:28Z init message: Starting network threads...
2018-09-07T07:39:28Z DNS seeding disabled
2018-09-07T07:39:28Z net thread start
2018-09-07T07:39:28Z addcon thread start
2018-09-07T07:39:28Z init message: Done loading
2018-09-07T07:39:28Z trying connection 192.168.51.176 lastseen=0.0hrs
2018-09-07T07:39:28Z msghand thread start
2018-09-07T07:39:28Z opencon thread start
2018-09-07T07:39:28Z Added connection peer=0
2018-09-07T07:39:28Z sending version (103 bytes) peer=0
2018-09-07T07:39:28Z send version message: version 70015, blocks=0, us=[::]:0, peer=0
2018-09-07T07:39:28Z received: version (103 bytes) peer=0
2018-09-07T07:39:28Z sending verack (0 bytes) peer=0
2018-09-07T07:39:28Z sending getaddr (0 bytes) peer=0
2018-09-07T07:39:28Z receive version message: /Satoshi:0.17.99/: version 70015, blocks=17, us=[::]:0, peer=0
2018-09-07T07:39:28Z added time data, samples 2, offset +0 (+0 minutes)
2018-09-07T07:39:28Z received: verack (0 bytes) peer=0
2018-09-07T07:39:28Z New outbound peer connected: version: 70015, blocks=17, peer=0
2018-09-07T07:39:28Z sending sendheaders (0 bytes) peer=0
2018-09-07T07:39:28Z sending sendcmpct (9 bytes) peer=0
2018-09-07T07:39:28Z sending sendcmpct (9 bytes) peer=0
2018-09-07T07:39:28Z sending ping (8 bytes) peer=0
2018-09-07T07:39:28Z initial getheaders (0) to peer=0 (startheight:17)
2018-09-07T07:39:28Z sending getheaders (69 bytes) peer=0
2018-09-07T07:39:28Z sending feefilter (8 bytes) peer=0
2018-09-07T07:39:28Z received: sendheaders (0 bytes) peer=0
2018-09-07T07:39:28Z received: sendcmpct (9 bytes) peer=0
2018-09-07T07:39:28Z received: sendcmpct (9 bytes) peer=0
2018-09-07T07:39:28Z received: ping (8 bytes) peer=0
2018-09-07T07:39:28Z sending pong (8 bytes) peer=0
2018-09-07T07:39:28Z received: getheaders (485 bytes) peer=0
2018-09-07T07:39:28Z Ignoring getheaders from peer=0 because node is in initial block download
2018-09-07T07:39:28Z received: feefilter (8 bytes) peer=0
2018-09-07T07:39:28Z received: feefilter of 0.00001000 BTC/kB from peer=0
2018-09-07T07:39:28Z received: pong (8 bytes) peer=0
2018-09-07T07:39:28Z received: headers (1378 bytes) peer=0
2018-09-07T07:39:28Z Requesting block 000000005c131ac012847c6468ffbb49286785ab4c3723fe3e16bcedabe465fe (1) peer=0
2018-09-07T07:39:28Z Requesting block 000000004aed11654a812fb2363d4507326860b630e5e7cdbb0fda6ff6c085e6 (2) peer=0
2018-09-07T07:39:28Z Requesting block 000000002d0e73d35a1c1bd116d5cbc2d2861012cb8d3681fb572fedcf3bd5f9 (3) peer=0
2018-09-07T07:39:28Z Requesting block 0000000082157040ceb3ca4cfb9fa928da799de67a9c27cab25d2619382d3fd6 (4) peer=0
2018-09-07T07:39:28Z Requesting block 000000008b55f545f93531c53a0cc1643cffd3b202488fde8b2307e1098888a8 (5) peer=0
2018-09-07T07:39:28Z Requesting block 0000000063e5429ebe62c7cc7284834eb358b3dd1b09af0e8d468ca3093bf27e (6) peer=0
2018-09-07T07:39:28Z Requesting block 000000005b8f1756fa5cf9447096b633d6638305b7793b738cc206e698a87cbb (7) peer=0
2018-09-07T07:39:28Z Requesting block 0000000045f70e70423be482c7793d93c36400511139393513a804d6a9a76806 (8) peer=0
2018-09-07T07:39:28Z Requesting block 0000000002cf9201186e6ef01bb6a4ceb69cb4caf641f3e2e20f03a439b95c03 (9) peer=0
2018-09-07T07:39:28Z Requesting block 00000000e882e2c41651ae4eb14e345b8608e938007efb9ec8385bfccb1ee6f4 (10) peer=0
2018-09-07T07:39:28Z Requesting block 00000000eb97338dc30aa8320b667617954638901b05739e4ffc7ad3833a9f89 (11) peer=0
2018-09-07T07:39:28Z Requesting block 00000000671eb0b5d7b5ba448a9681dd48e603eeda9a8e6876de28a68d0a25d6 (12) peer=0
2018-09-07T07:39:28Z Requesting block 0000000074d54f0baf51cc11bb4ab1ec7f88df8a9c21e7f4ba88a1aa170b45ad (13) peer=0
2018-09-07T07:39:28Z Requesting block 000000001464cbd27983f403af4a506d93364ce8e6d07c2ff8b94adf90ffb9b6 (14) peer=0
2018-09-07T07:39:28Z Requesting block 00000000fc326ac2fa2784d9c5a39121f31a9fa29c5c84b9b9d27e526de8101f (15) peer=0
2018-09-07T07:39:28Z Requesting block 00000000cd164ead893dfb18b8485e67499f9aed1326ab40e5b2db82b3e2486a (16) peer=0
2018-09-07T07:39:28Z sending getdata (577 bytes) peer=0
2018-09-07T07:39:28Z received: block (226 bytes) peer=0
2018-09-07T07:39:28Z received block 000000005c131ac012847c6468ffbb49286785ab4c3723fe3e16bcedabe465fe peer=0
2018-09-07T07:39:28Z ProcessNewBlock(), pblock=CBlock(hash=000000005c131ac012847c6468ffbb49286785ab4c3723fe3e16bcedabe465fe, ver=0x20000000, hashPrevBlock=000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f, hashMerkleRoot=6f2926ca39177fd1e17714e23011e332617995137fcd40d0d1583afff048ad59, nTime=1536214807, nBits=1d00ffff, nNonce=481834768, vtx=1)
  CTransaction(hash=6f2926ca39, ver=2, vin.size=1, vout.size=2, nLockTime=0)
    CTxIn(COutPoint(0000000000, 4294967295), coinbase 510101)
    CScriptWitness()
    CTxOut(nValue=50.00000000, scriptPubKey=21037db3acbf7a34e89033556b26d1)
    CTxOut(nValue=0.00000000, scriptPubKey=6a24aa21a9ede2f61c3f71d1defd3f)

, fForceProcessing=true
2018-09-07T07:39:28Z Pre-allocating up to position 0x100000 in rev00000.dat
2018-09-07T07:39:28Z UpdateTip: new best=000000005c131ac012847c6468ffbb49286785ab4c3723fe3e16bcedabe465fe height=1 version=0x20000000 log2_work=33.000022 tx=2 date='2018-09-06T06:20:07Z' progress=0.000000 cache=0.0MiB(1txo)
2018-09-07T07:39:28Z Requesting 
            
           

相關推薦

情景分析

INV訊息 The inv message (inventory message) transmits one or more inventories of objects known to the transmitting peer. It can be s

程式碼分析5 挖礦程式碼分析

本文描述礦工處理執行緒,通過本文學習,可以瞭解礦工挖礦的大致流程。主要包含挖礦費用交易的產生、當前交易池的打包處理,工作量證明等相關內容。流程圖(參考網路)如下所示:。 礦工處理函式1.void ThreadBitcoinMiner(void* parg)2.{ vfThreadRunning[3]

程式碼分析4 挖礦程式碼分析

本文描述礦工處理執行緒,通過本文學習,可以瞭解礦工挖礦的大致流程。主要包含挖礦費用交易的產生、當前交易池的打包處理,工作量證明等相關內容。流程圖(參考網路)如下所示:。 礦工處理函式1.void ThreadBitcoinMiner(void* parg)2.{ vfThreadRunning[3]

程式碼分析8 區塊校驗和確認

比特幣節點接收到一個區塊以後,都會進行校驗和確認,如下參考網路圖: 關鍵看看對區塊中的交易進行進一步的校驗程式碼:1.// First transaction must be coinbase, the rest must not be2.if (vtx.empty() || !vtx[0].IsCoinB

程式碼分析7 交易校驗

每一個收到交易,比特幣節點都驗證該交易,有效的交易將被傳遞到各個附近節點,這將確保只有有效的交易才會在網路中傳播, 而無效的交易將會在第一個節點處就被廢棄。校驗選項列表:每一個節點在校驗每一筆交易時,都需要對照一個長長的標準列表1、交易語法與資料是否正確2、輸入與輸出列表都不能空(>=1)3、交易大小

原始碼分析--深入理解交易

交易是比特幣最重要的一塊,比特幣系統的其他部分都是為交易服務的。前面的章節中已經學習了各種共識演算法以及比特幣PoW共識的實現,本文來分析比特幣中的交易相關的原始碼。 1 初識比特幣交易     通過比特幣核心客戶端的命令getrawtransaction和decoder

程式碼分析11 儲存機制

比特幣儲存機制  比特幣儲存系統由兩部分組成: kv 資料庫(levelDB)索引和普通資料檔案。普通檔案用於儲存區塊鏈資料,kv 資料庫用於儲存區塊鏈元資料。用於儲存區塊鏈資料的普通檔案以 blk00000.dat , blk00001.dat 檔名格式組成。其中 index 目錄儲存用於儲存區塊元資料。普

原始碼分析--P2P網路初始化

     區塊鏈和AI無疑是近期業界當之無愧的兩大風口。AI就不說了,區塊鏈從17年各種數字貨幣被炒上了天,一下成為了人們街頭巷議的焦點,本文撇開數字貨幣的投資不說,僅僅從技術層面來剖析一下區塊鏈各個部分的原理。畢竟目前已經有包括BAT等巨頭在內的許多公司投入到了區塊鏈的研發

原始碼分析-網路(二)

比特幣原始碼分析-網路(二) https://www.jianshu.com/p/4b42d8698f35   眾所周知,比特幣網路是採用的P2P網路體系,所以,沒有明顯的客戶端與服務端的區別或者是概念,每一個節點既是自身的客戶端,又是其它節點的服務端。 在sync.h中,

程式碼分析方法總結

最近我開始學習區塊鏈,一邊分析比特幣程式碼,一邊按照自己的理解實現了一遍(https://github.com/hindsights/xbtc),雖然功能不太完善,好在是基本上把比特幣的架構和重要技術細節理清楚了。現在回想起來,整個過程還算順利,但也走了一些彎路

原始碼分析--埠對映

    上一篇文章分析了比特幣P2P網路中,一個節點是如何發現並連線到相鄰節點的。在P2P網路中,一個節點既是客戶又是伺服器,它還要接受其他節點的連線,為網路中其他節點提供服務。這篇文章著重分析一下比特幣P2P網路中是如何通過upnp來實現埠對映的。1 從騰訊的一道面試題說起

原始碼分析--架構

     前面的一系列文章我們結合原始碼對比特幣的主要模組進行了梳理和分析。本文我們將這些模組拼接起來,看看比特幣的整體架構。      比特幣的整體架構圖如下:            (1)P2P網路層       完成P2P的組網,網路連線管理,節點狀態的維護,為

原始碼分析(二十二)

用最簡單的術語來說,挖礦就是不斷重複計算區塊頭的雜湊值,修改一個引數(即nonce欄位),直到生成的雜湊值與特定的target相匹配的一個過程。 1、挖礦的流程 閱讀原始碼前先參考《精通比特幣》梳理一遍節點挖礦的流程: (1). 構建一個空區塊,稱為候

原始碼情景分析之script指令碼驗證(1)

Bitcoin script是一種簡單的指令執行框架1)指令碼概述指令碼主要由兩部分構成:指令碼物件CScript和執行函式VerifyScript。指令碼物件分為兩類:scriptSig和scriptPublicKeyscriptSig位於交易中的txin中,而script

原始碼情景分析之bloom filter精讀

上一篇SPV錢包裡utxos同步提到了bloom filter,這一章節我們將從原始碼分析角度來個深度解剖Bloom filter基本原理 An example of a Bloom filter, representing the set {x, y, z}. The co

原始碼情景分析之script指令碼驗證(2)

    通過上一篇的分析,我們應該已經對script有了一定的理解,這章節我們以原始碼分析的方式來了解下指令碼驗證執行流程    bitcoin節點在處理一條交易時就需要驗證交易的txin,由於一條交易可能包含多個txin,因而需要執行多個指令碼驗證,自然需要並行化,因而系統

原始碼情景分析之SPV錢包輕量級錢包

SPV錢包最理想的實現方案是,伺服器是全節點,SPV錢包通過伺服器驗證和發起交易,查詢交易歷史,本地做交易封裝,即signRawTransaction和使用者互動。SPV節點不需要執行bitcoin core程式碼,由於需要監聽先的交易事件,需要伺服器通過JPush類似的機制主動通知SPV錢包新的交易等事件。

的算力分析

style 調用 傳說 總結 這一 設計 對賬 加工 獲取 比特幣是近年興起的一種新的虛擬貨幣,它的一個突出特征,就是去中心化,即不存在一個或者多個固定核心作為交易樞紐。交易只存在於買賣雙方之間。 現以國內比較流行的礦場模式為例,整個比特幣的生產流程可以劃分為以下幾個環節:

分析網絡:一種去中心化、點對點的網絡架構

比特幣 區塊鏈 比特幣采用了基於互聯網的點對點(P2P:peer-to-peer)分布式網絡架構。比特幣網絡可以認為是按照比特幣P2P協議運行的一系列節點的集合。本文來分析下比特幣網絡,了解它跟傳統中心化網絡的區別,以及比特幣網絡是如何發現相鄰節點的。中心化網絡為了更好的理解P2P網絡,我們先來看看傳

關於2018年價格的分析

數字貨幣 區塊鏈 比特幣 關於2018年比特幣價格的分析(本文講述了關於比特幣未來的趨勢,以及從技術層面上對比特幣算法的實現進行了剖析)Different people have different views!!!關於2比特幣的前景,大致有兩種觀點。第一個觀點認為地下經濟的需求推高了比特幣價格(