Author

Topic: 【研究会】开源 Bitcoin P2P电子货币系统背后的技术(五)(转) (Read 953 times)

sr. member
Activity: 560
Merit: 250
作者: 李雪愚

挖矿与块(Blocks)

接下来讲的是什么是挖矿,以及交易单在P2P网络上的存放,其实这个过程也是挖矿的过程。

所有的交易单是以Block的形式在Bitcoin P2P网络上存放的。每一个Block包含了最近所有的有效交易单。Block中最为重要数据为:
最近交易单集合
Nonce随机数
前一个块的散列值

在造币的Node总在侦听网络,接收信息,然后各自将接收到的新交易打包到一个新block(CBlock Class in main.h)。在块交易单集合中的第一个交易单总是“造币单”:给创建该块的人以新的货币,节点只需要校验货币金额是否合法即可:形成一个合法的新块得到的回报是初始金额为50BTC,每产生210,000块的时候这个金额减半(大约每隔4年会发生一次)。产生合法的新块是不容易的,需要通过无数次的计算尝试得到,另外如果大家都在计算同一个新块,那么还存在竞争关系,这个时候只有最困难(Difficulty)的那个块(指整个块链的困难度值加起来最大的)才会被网络认可。另外如果块中的某笔交易size大于该块中交易单的平均size,那么该笔交易单会被收取一笔小的交易费用。
块的数据结构

块的数据结构可以分为块头(block header)和块体(block body)
块头(Block Header)

块头的数据是用于校验块、产生块ID(256位散列值),这个块ID也是决定块是否合法的数字。计算块ID的公式如下:
BlockID = SHA256(SHA256(Block_Header))

块头(Block Header)的内容如下:
ver: 版本号(4字节)
prev_block: 前一个块的256位散列值
mrkl_root: 所有交易单的256位散列
time: 时间戳(4字节)
Bits: 一个紧凑格式的4字节的数字,它表示一个256位的当前目标(Target)数值,这也表示困难度(Difficulty),最后产生块的ID值必须不大于目标值才能被接受(如果有多人同时产生同一个块,那么最困难的将被接受)。这个数值会每隔2016个block(网络大约每小时创建6个块,创建2016块大约2周)调整一次,当产生前一个2016块的时间大于2周的时候,难度值将会被调低,当小于两周的时候难度值将被调高(关于Target和Difficulty详见后述)。
nonce: 32位随机数。节点在产生Block的时候,会增量尝试改变nonce的值,直到产生的块的散列值符合bits的要求
计算目标(Target)和困难度(Difficulty)
计算目标(Target)

计算目标(Target)是一个256位的数值,块的散列值ID必须小于或等于该目标数值,放可被接受。块头中的BITS是一个用紧凑的4字节格式表示的目标(Target)数值,它表示一个256位的当前目标数值,方式如下:
//假设BITS为:
BITS = 0x1B0406CC
//那么target的数值则是:
Target = 0x0406CC * 2^(8*(0x1B-3))= 0x00000000000406CC000000000000000000000000000000000000000000000000
当前网络的目标值为:Current target。
困难度(Difficulty)

困难度(Difficulty)表示该块ID的计算难度,值越大表示越困难,1表示最容易。

1困难度(Difficulty)的Target被定义为:
0x1D00FFFF(BITS)

展开后:
0x00FFFF * 2^(8*(0x1D - 3)) = 0x00000000FFFF0000000000000000000000000000000000000000000000000000

因此困难度的计算公式为:1 困难度(Target) / 当前目标

我们可以在这里查看当前网络的困难度:Current difficulty(BitCoin的 getDifficulty 接口输出)。也可以通过这个网站查看困难度值的变化情况图:Graphs。

块体(Block Body)

Block Body 实际上就是交易单的集合。

你可以在这个网站上看到当前网络所有的交易单(Blocks):  https://blockexplorer.com/

一个具体的块的示例:
{
   //hash: 自身ID的sha256散列值
  "hash":"0000000000001470ed62a9d73c1c74a4b3754e18db0abb057be5ad5ffed659bb",
  "ver":1,
  "prev_block":"000000000000158a4051185f339d59227b776ac6bfe6120fa18293b5c08644a8",
  "mrkl_root":"c5341062635c427b79a730dca8d4a5eb6a482fa21f82cc37c84ae01ea5945fc3",
  "time":1307565484,
  "bits":438145839,
  "nonce":2323396371,
  //交易单数量
  "n_tx":6,
  "size":2193,
  "tx":[
    {
      "hash":"67dbdbc6c4a49bc3364d34aebe76b6f470ced66eb731f9d099d0da6c58e466cf",
      "ver":1,
      "vin_sz":1,
      "vout_sz":1,
      "lock_time":0,
      "size":135,
      "in":[
        {
          "prev_out":{
            "hash":"0000000000000000000000000000000000000000000000000000000000000000",
            "n":4294967295
          },
          "coinbase":"042f931d1a022301"
        }
      ],
      "out":[
        {
          "value":"50.04000000",
          "scriptPubKey":"049db428c19890bb7706bebdcf69a93c192daef8a73eb7035e2600468b4e1f83d4c2134640f6c61 9e5521c2050ebc9be9e9c502fdab655a570236418e5c2e95137 OP_CHECKSIG"
        }
      ]
    },
    {
      "hash":"c96eb8f874d105e24121cdc5918440c85af27b797013679796fcc26e40938ad2",
      "ver":1,
      "vin_sz":1,
      "vout_sz":2,
      "lock_time":0,
      "size":258,
      "in":[
        {
          "prev_out":{
            "hash":"c8caedb7edb2665b8543916a1e6b1dee2bf1733f75b4604c423db08efa570d65",
            "n":0
          },
          "scriptSig":"3045022100b47c10ebd2413c575510563363fe9cad7f0fdcbefca9dd219bd345bcfeff98a102204 9d7037c0be3493650cb2a410a655394678e75a28b8f4cd587644813ccee383801
          041f5853d9d43b81af0999a4add012e6580db5edc7dabf99bc2aff1a01b1296e7004b73b10a9e2d 3ebe0d7377c545aacc56e24aff1c9b130e0721332315e414f72"
        }
      ],
      "out":[
        {
          "value":"3.98000000",
          "scriptPubKey":"OP_DUP OP_HASH160 22718315d786b8f64510be88ad590760de676a59 OP_EQUALVERIFY OP_CHECKSIG"
        },
        {
          "value":"0.01000000",
          "scriptPubKey":"OP_DUP OP_HASH160 d52804c9bc12e7a7186e53b41784dcd2afed9a92 OP_EQUALVERIFY OP_CHECKSIG"
        }
      ]
    },
    {
      "hash":"cd74421dd3d32346bdbef02cde4bc0ed19b5cc15621f761b465a869b2f51287c",
      "ver":1,
      "vin_sz":2,
      "vout_sz":2,
      "lock_time":0,
      "size":437,
      "in":[
        {
          "prev_out":{
            "hash":"e38b71a89071be2820ce95841da03ba8bac77d536d9ac5fe5347136e9bbca104",
            "n":1
          },
          "scriptSig":"3045022100ed5c3626adf84a6d364d7b58fb182ee3bd35758a883ebe2e642e83f4103e91cd02206 3f61a1d89c1a30f713c2ca277c08c1c4ceb585babef82301f738fdc2312329d01
          047b4277bb4c23988986c44552156130d4155a1020ec411ca4a07904191d9054de705ec2b79a461 55a0d59e8a39b5d450ac73d485b082789b6dad55d5e2230f597"
        },
        {
          "prev_out":{
            "hash":"a6fc46a5a4a6b202c644cc4854feb2d8cf7befcf695ad810346c8dfb4cc18138",
            "n":1
          },
          "scriptSig":"304402207de219304bfca0e2d93524a2547767ce5044501bb0d9107e04d35cf3d644136d0220124 4a1ce47c2f3aab6c205e75e433371efb01dad5073d316bf68488ea1ad064301
          04d74d74c0f2bd415a94090c83bbe10b4949c7ee8f3bb957352d02fb50f3e1ddc5ab79a28b1228e af2986339a3735e32869019d4894f34a46645288a68900ef6a5"
        }
      ],
      "out":[
        {
          "value":"0.01000000",
          "scriptPubKey":"OP_DUP OP_HASH160 e95281e139fc37bb2aabd84028835c6513a6ac99 OP_EQUALVERIFY OP_CHECKSIG"
        },
        {
          "value":"2.01000000",
          "scriptPubKey":"OP_DUP OP_HASH160 234c6c8644008de240d90753904789868100786c OP_EQUALVERIFY OP_CHECKSIG"
        }
      ]
    },
    {
      "hash":"9d4f130995dbc1ddc5346c109992c0779aa44122195eff51dc00109afc5cad7d",
      "ver":1,
      "vin_sz":1,
      "vout_sz":2,
      "lock_time":0,
      "size":258,
      "in":[
        {
          "prev_out":{
            "hash":"d84cd74d4b470f96379fa9737c43be544e4e57f33e83fc8bf26f232ec5ea97b5",
            "n":0
          },
          "scriptSig":"3045022100d8f3bbb19b4d2593649b4f6ac0074a772ff78fce1fb60e7957c7d99d2627931802205 ad4774f58af0b52e37f87592bea7bae84c883c9230e722962f2e52e7eb061e201
          04732060c3f57ccc0703e05f86f442e45617b446ebca7e9f6c96ca1ec754b9d8a9f2bd727a15c78 21cbca0498c2b7f60081873a450f29c5937e9593407166dc71b"
        }
      ],
      "out":[
        {
          "value":"30.26538895",
          "scriptPubKey":"OP_DUP OP_HASH160 7fa1d78819360231c6bc1b23ff644e9124da075f OP_EQUALVERIFY OP_CHECKSIG"
        },
        {
          "value":"4.76000000",
          "scriptPubKey":"OP_DUP OP_HASH160 847f4729a1464d7a2103796cca32022fe0481d58 OP_EQUALVERIFY OP_CHECKSIG"
        }
      ]
    },
    {
      "hash":"68050dc3810310e1e5e9eb3464b1581a353de523a6f26d8b978370bd63880eb7",
      "ver":1,
      "vin_sz":4,
      "vout_sz":1,
      "lock_time":0,
      "size":766,
      "in":[
        {
          "prev_out":{
            "hash":"07a39559553efb329af1538e0fc8a037f20048a83b2278a5041975054e425c3e",
            "n":17
          },
          "scriptSig":"3046022100c3ce1ee6c222d74ff9c97d5729e5c6702c3cabdb61ea0fb3ae8632eae36f03fb02210 09cea5a9f94fe14e4673fd87f75750e1d151f6e846c371d8e4af72b5d213bb5c001
          04ee9e80055248ed804ca6724b2d784c91eec04abdc4ec00b14dc01e56c90513a85453026acf90f 1cb1bdd3e3ca07035be40d0b3e3ac6076b5b12bd3234ac8c20b"
        },
        {
          "prev_out":{
            "hash":"07f95bfdd09e98bf7ce0543e8fdd82f9e8532449ab7167f69aa3d1f030399b96",
            "n":0
          },
          "scriptSig":"3044022011f922460d01986255a6f5e5ce88586bb3a9a32edc836e420d2347dae9df12e1022018d 9d4e48dea2b821e01d3253dfaa03af801d01e79ab4eb3ef48f22f84f196aa01
          04398f321ea6140c6ad51fea724f7c13e1df6c43afb8e4f6f9ab2385b6e18d8eae52516a0b34875 12a3dbeb36109d3fcb6391fbc156518c96f57467f97dc55d0a3"
        },
        {
          "prev_out":{
            "hash":"6c93900990b712fbf2a386ba53bc3aad8f5bcdda73b855a24628d7eae80cf3f9",
            "n":0
          },
          "scriptSig":"3046022100b688feeb1012f913b6366b5b9bd5313238d00b61b48a0e3956c33d1dffc9a1f202210 0ed159808e8a732e646ba5af7ed5a0d896c7db0a10757aeccc9c58a67ec42ec7501
          047e79adbe50ae668041d2b08702c12de83fdaecb866b261755cbba27fe344c6fc67f3fc2593edc 0bb053b0fde62c4d42d152b6525c10bde365d80a8d2d8d77a85"
        },
        {
          "prev_out":{
            "hash":"ed416acb1373bcce28ec63e6e600e0da7f8892b557591bc0386210c56e8c034f",
            "n":1
          },
          "scriptSig":"3046022100c1ffdf383d108a9b1e8e33ed3ef8bd6b368b1ed0584ac187eb0897c90422fc5b02210 0f7bfb8f0b17c3b121943622a4d04a8a818391c68028b6a63d9cd2536d9f3714501
          04ee9e80055248ed804ca6724b2d784c91eec04abdc4ec00b14dc01e56c90513a85453026acf90f 1cb1bdd3e3ca07035be40d0b3e3ac6076b5b12bd3234ac8c20b"
        }
      ],
      "out":[
        {
          "value":"1.69000000",
          "scriptPubKey":"OP_DUP OP_HASH160 71b9ea593ba56d1159493cb2b37a03f368fb6c40 OP_EQUALVERIFY OP_CHECKSIG"
        }
      ]
    },
    {
      "hash":"4e6e47f0fa7a559219be309db20c5c17296956304cf47dc8c52910c24b505a92",
      "ver":1,
      "vin_sz":1,
      "vout_sz":2,
      "lock_time":0,
      "size":258,
      "in":[
        {
          "prev_out":{
            "hash":"897f67e6ec0b5a64b511c2052d05f0e2437811260041bb0915f2c40879025215",
            "n":1
          },
          "scriptSig":"304502200dbe53f77f947b12dfabb737e0862c1f2d37515f6293b06c08710ccdb69419d6022100b 379ab597d8d17034f1654f20e68c72930050342884743869b6421ee7eaad83801
          04bdd996cd29ca3d34604306de8983d1fadf978ae43c12c1e832ce803ae57241cd7762a40dc1e5f 6176ca3b0caac622c82e271b59c66fb1f8fa8225930a8807edf"
        }
      ],
      "out":[
        {
          "value":"0.04000000",
          "scriptPubKey":"OP_DUP OP_HASH160 50e44bb02555c7084e08cda95eb43a9c621fa0ac OP_EQUALVERIFY OP_CHECKSIG"
        },
        {
          "value":"0.03000000",
          "scriptPubKey":"OP_DUP OP_HASH160 ecd8f97222481950eed4f98db82455635ccb86b4 OP_EQUALVERIFY OP_CHECKSIG"
        }
      ]
    }
  ],
  "mrkl_tree":[
    "67dbdbc6c4a49bc3364d34aebe76b6f470ced66eb731f9d099d0da6c58e466cf",
    "c96eb8f874d105e24121cdc5918440c85af27b797013679796fcc26e40938ad2",
    "cd74421dd3d32346bdbef02cde4bc0ed19b5cc15621f761b465a869b2f51287c",
    "9d4f130995dbc1ddc5346c109992c0779aa44122195eff51dc00109afc5cad7d",
    "68050dc3810310e1e5e9eb3464b1581a353de523a6f26d8b978370bd63880eb7",
    "4e6e47f0fa7a559219be309db20c5c17296956304cf47dc8c52910c24b505a92",
    "f4462bd30c529d154dc1b35d8f68961441e09ffaceaa25da17eb1814101f8ad5",
    "1961263895b63d4760f81eda7ae94848eb68e2170b79a224ba704a3c21fd6feb",
    "0427a2dbd54fa6ec034d704336fa255f6c139e6d7b9bf803714cfbc9dcc61b85",
    "42441420d09c91336e69bae9f7eb39b1c6d90562028de3094bea5f675a25a082",
    "4af79ccb4bf857df3e75a50106b15ef35aa73a209efa5089f2f2193ff70ab93d",
    "c5341062635c427b79a730dca8d4a5eb6a482fa21f82cc37c84ae01ea5945fc3"
  ]
}

转自http://www.showmuch.com/a/20110618/123447.html
Jump to: