项目作者: CsterKuroi

项目描述 :
Layered Byzantine Fault Tolerant
高级语言: Python
项目地址: git://github.com/CsterKuroi/LBFT.git
创建时间: 2016-11-29T09:39:15Z
项目社区:https://github.com/CsterKuroi/LBFT

开源协议:

下载


LBFT [Proof of Concept]

Layered BFT(Byzantine Fault Tolerant) Blockchain

Requires

  1. Python 3.5+
  2. MPICH2
  3. mpi4py
  4. bigchaindb-driver
  5. bigchaindb

QuickStart

  1. mpirun -np 7 python3 core.py

Topology

  1. +-------------+
  2. | lv3 |
  3. | |---o-
  4. | rank = 6 |
  5. +-------------+
  6. +-------------+ +-------------+
  7. | lv2 | | lv2 |
  8. | | | |---o-
  9. | rank = 4 | | rank = 5 |
  10. +-------------+ +-------------+
  11. +-------------+ +-------------+ +-------------+ +-------------+
  12. | lv1 | | lv1 | | lv1 | | lv1 |
  13. | | | | | | | |---o-
  14. | rank = 0 | | rank = 1 | | rank = 2 | | rank = 3 |
  15. +-------------+ +-------------+ +-------------+ +-------------+

Timeline

  1. (↑)The lv1 nodes create txs, pass them to the lv2 nodes, and the lv2 nodes pass them to the lv3 node
  2. (↓)The lv3 node creates a block, pass it to the lv2 nodes, and the lv2 nodes pass it to the lv1 nodes
  3. (↑)The lv1 nodes validate the block then create votes, pass them to the lv2 nodes, and the lv2 nodes pass them to the lv3 node
  4. (↓)The lv3 node collects all the votes as a votelist, pass it to the lv2 nodes, and the lv2 nodes pass it to the lv1 nodes .If more than 1/2 votes is valid, the node accepts the block.

TaskList

  • [x] topology

  • [x] data_transmission

  • [x] timeline

  • [x] create_tx

  • [x] tx_signature

  • [x] validate_tx_signature

  • [x] tx_list

  • [ ] block_hash

  • [ ] validate_block

  • [ ] block_chain

  • [ ] node_keypairs

  • [x] vote

  • [x] votes_list

  • [x] vote_signature

  • [x] verify_vote_signature

  • [ ] scalability

  • [ ] data_storage

  • [ ] quota

Files

core.py

  1. Topology
  2. data_transmission
  3. timeline

tx.py

  1. Create tx
  2. validate tx

vote.py

  1. Create vote
  2. verify vote
  3. checks if there are enough votes on that block to declare it valid or invalid

Output

  1. block: [
  2. {
  3. 'transaction': {
  4. 'asset': {
  5. 'updatable': False,
  6. 'id': '1879d4ca-19a5-428c-8f5e-7f8f0d11df49',
  7. 'data': {
  8. 'bicycle': {
  9. 'manufacturer': 'bkfab',
  10. 'serial_number': 'abcd1234'
  11. }
  12. },
  13. 'divisible': False,
  14. 'refillable': False
  15. },
  16. 'operation': 'CREATE',
  17. 'metadata': {
  18. 'id': '9e1a50e0-e02e-4221-8094-5172b402a631',
  19. 'data': {
  20. 'planet': 'earth'
  21. }
  22. },
  23. 'fulfillments': [
  24. {
  25. 'owners_before': [
  26. '5hiQu2Jf9bXHhbXreLcYxPC1GyH4L97npm9rvwjXDccz'
  27. ],
  28. 'input': None,
  29. 'fulfillment': 'cf: 4: RdzOBlnP-eg1wibIklfJ-CgEsm66LlHz0YgyqaslOROyz3FLf64T9akgHcfAv6bNIeaBwiYqKXz7vJI7ar7CV8oQP25sp44TCzxZJBoomMBzNb1HQlL_zMhyHXnlGncN',
  30. 'fid': 0
  31. }
  32. ],
  33. 'conditions': [
  34. {
  35. 'owners_after': [
  36. '5hiQu2Jf9bXHhbXreLcYxPC1GyH4L97npm9rvwjXDccz'
  37. ],
  38. 'amount': 1,
  39. 'condition': {
  40. 'uri': 'cc: 4: 20: RdzOBlnP-eg1wibIklfJ-CgEsm66LlHz0YgyqaslORM: 96',
  41. 'details': {
  42. 'type_id': 4,
  43. 'type': 'fulfillment',
  44. 'signature': None,
  45. 'public_key': '5hiQu2Jf9bXHhbXreLcYxPC1GyH4L97npm9rvwjXDccz',
  46. 'bitmask': 32
  47. }
  48. },
  49. 'cid': 0
  50. }
  51. ]
  52. },
  53. 'id': '96d39280816bc7652e577a87c04546ce7ee11d4576f1ae3c07a422ac3ca1f684',
  54. 'version': 1
  55. },
  56. {
  57. 'transaction': {
  58. 'asset': {
  59. 'updatable': False,
  60. 'divisible': False,
  61. 'id': '9560c113-3d61-48d6-b2d2-5d2d6bcc6c08',
  62. 'data': {
  63. 'bicycle': {
  64. 'manufacturer': 'bkfab',
  65. 'serial_number': 'abcd1234'
  66. }
  67. },
  68. 'refillable': False
  69. },
  70. 'operation': 'CREATE',
  71. 'metadata': {
  72. 'id': '1963095e-6615-4433-a434-e6504cdf8137',
  73. 'data': {
  74. 'planet': 'earth'
  75. }
  76. },
  77. 'fulfillments': [
  78. {
  79. 'owners_before': [
  80. '2PMiegwgoqAfzxFs5wVJ6yiotSz2BggEjjKifjHpT5DR'
  81. ],
  82. 'input': None,
  83. 'fulfillment': 'cf: 4: FJXkCJ1SoovqFtveHpEMHz_2pIv8waWU4F4lbyqdGeBtM7rHUTaxuEqZJE-ehxb-wMlEqhsvyHXEu7-745LPEfwDufuTqBOUThP4lhPXTUI8pXVWHnzq0DUFZTIgDNcC',
  84. 'fid': 0
  85. }
  86. ],
  87. 'conditions': [
  88. {
  89. 'owners_after': [
  90. '2PMiegwgoqAfzxFs5wVJ6yiotSz2BggEjjKifjHpT5DR'
  91. ],
  92. 'amount': 1,
  93. 'condition': {
  94. 'uri': 'cc: 4: 20: FJXkCJ1SoovqFtveHpEMHz_2pIv8waWU4F4lbyqdGeA: 96',
  95. 'details': {
  96. 'type_id': 4,
  97. 'type': 'fulfillment',
  98. 'signature': None,
  99. 'public_key': '2PMiegwgoqAfzxFs5wVJ6yiotSz2BggEjjKifjHpT5DR',
  100. 'bitmask': 32
  101. }
  102. },
  103. 'cid': 0
  104. }
  105. ]
  106. },
  107. 'id': '9aaec84aa0ce373793e132d7ab4d4df7cca60150deb6bca695888091c74c7f1b',
  108. 'version': 1
  109. },
  110. {
  111. 'transaction': {
  112. 'asset': {
  113. 'updatable': False,
  114. 'divisible': False,
  115. 'id': '4bf8d2d2-fc8e-43b8-b851-3b3a5a8e1722',
  116. 'data': {
  117. 'bicycle': {
  118. 'manufacturer': 'bkfab',
  119. 'serial_number': 'abcd1234'
  120. }
  121. },
  122. 'refillable': False
  123. },
  124. 'operation': 'CREATE',
  125. 'metadata': {
  126. 'id': '01184ca5-9680-402e-ad89-c95145b2c6cb',
  127. 'data': {
  128. 'planet': 'earth'
  129. }
  130. },
  131. 'fulfillments': [
  132. {
  133. 'owners_before': [
  134. '88KoiDUfJgjDbty6fGFpCfGzTPhCfYDVNLv9mJkF898P'
  135. ],
  136. 'input': None,
  137. 'fulfillment': 'cf: 4: aeIjLq1BFq7sLgg1CHSmZuuwxlol6DM1d4zblI_pUOR3YG0yWKNM4u7mFpOx1edsveEukMvN7FJeOKfr-H6YVlxpZU-qV5GxxOC7S0gaTw5U7F0my8BYvSoZxB_qt6wH',
  138. 'fid': 0
  139. }
  140. ],
  141. 'conditions': [
  142. {
  143. 'owners_after': [
  144. '88KoiDUfJgjDbty6fGFpCfGzTPhCfYDVNLv9mJkF898P'
  145. ],
  146. 'amount': 1,
  147. 'condition': {
  148. 'uri': 'cc: 4: 20: aeIjLq1BFq7sLgg1CHSmZuuwxlol6DM1d4zblI_pUOQ: 96',
  149. 'details': {
  150. 'type_id': 4,
  151. 'type': 'fulfillment',
  152. 'signature': None,
  153. 'public_key': '88KoiDUfJgjDbty6fGFpCfGzTPhCfYDVNLv9mJkF898P',
  154. 'bitmask': 32
  155. }
  156. },
  157. 'cid': 0
  158. }
  159. ]
  160. },
  161. 'id': '4d36c0ac00f6c29c57c62ae80c9ff30695c0b49eaa4066ad7ffd8ae831f9647a',
  162. 'version': 1
  163. },
  164. {
  165. 'transaction': {
  166. 'asset': {
  167. 'updatable': False,
  168. 'id': '13f952aa-164f-479a-8de7-5c5615be9cf2',
  169. 'data': {
  170. 'bicycle': {
  171. 'manufacturer': 'bkfab',
  172. 'serial_number': 'abcd1234'
  173. }
  174. },
  175. 'divisible': False,
  176. 'refillable': False
  177. },
  178. 'operation': 'CREATE',
  179. 'metadata': {
  180. 'id': '40979cee-4096-4157-8645-62bb07dfbab1',
  181. 'data': {
  182. 'planet': 'earth'
  183. }
  184. },
  185. 'fulfillments': [
  186. {
  187. 'owners_before': [
  188. '7pzr8B6EyHQzTtbLZjq4QSAdbaNbj23qqnJcTZCSq7Xx'
  189. ],
  190. 'input': None,
  191. 'fulfillment': 'cf: 4: ZXHTzUaw6YrcfBVvo9SaAmFNeedW9kewRdqIeLuye8s0BHa4L0U4k7PiLXiI_aIxwi2kdj6kTKvxN-psMoe0kl8ZL60uGb_MIJUp3FKhFuIf5gBbz9sCDnUqVOGmm2IE',
  192. 'fid': 0
  193. }
  194. ],
  195. 'conditions': [
  196. {
  197. 'owners_after': [
  198. '7pzr8B6EyHQzTtbLZjq4QSAdbaNbj23qqnJcTZCSq7Xx'
  199. ],
  200. 'amount': 1,
  201. 'condition': {
  202. 'uri': 'cc: 4: 20: ZXHTzUaw6YrcfBVvo9SaAmFNeedW9kewRdqIeLuye8s: 96',
  203. 'details': {
  204. 'type_id': 4,
  205. 'type': 'fulfillment',
  206. 'signature': None,
  207. 'public_key': '7pzr8B6EyHQzTtbLZjq4QSAdbaNbj23qqnJcTZCSq7Xx',
  208. 'bitmask': 32
  209. }
  210. },
  211. 'cid': 0
  212. }
  213. ]
  214. },
  215. 'id': 'b99858376a7a1d6283aaa55dab9b448a9b349f889be5053aa3c8a37d6425b57a',
  216. 'version': 1
  217. }
  218. ]
  1. votes: [
  2. {
  3. 'signature': '4AJ7qUU6CkAxW2ipTPBviuaVn9e7waKE4hah56u4cbwVmcEhH6miYSqZfrG7JnHQQj8zoNk7QnjDkW7gfe9BmfC',
  4. 'vote': {
  5. 'invalid_reason': None,
  6. 'voting_for_block': '1',
  7. 'previous_block': 'Genesis',
  8. 'is_block_valid': True,
  9. 'timestamp': '1482410513'
  10. },
  11. 'node_pubkey': 'FxhfnvpiZbyYPLFz1cD8kdbeNVmHmM8tFcqCrFzLuri'
  12. },
  13. {
  14. 'vote': {
  15. 'invalid_reason': None,
  16. 'voting_for_block': '1',
  17. 'is_block_valid': True,
  18. 'previous_block': 'Genesis',
  19. 'timestamp': '1482410513'
  20. },
  21. 'signature': '3ujTJXzYvKBWMDTQgiDBdyNPcxhF2Mr5oTYMJVUAoFJAUZXi7qhVsfQ6q6brdHMy3ykWBbq5mJo8ToXCHYS2ra6h',
  22. 'node_pubkey': 'HcNPQ25G2qsSytbegM3fbEscPyXhvG64cDVXhzRTXsMF'
  23. },
  24. {
  25. 'signature': '2HzioaYPVgKcsYF9BYHZhtXU2Wm6Xm5fyneybrapsHQF9597GKzLNkzYHTm6CTMzwaa3yrCrRgeFbx7LCsfMiZ6',
  26. 'vote': {
  27. 'invalid_reason': None,
  28. 'voting_for_block': '1',
  29. 'is_block_valid': True,
  30. 'previous_block': 'Genesis',
  31. 'timestamp': '1482410513'
  32. },
  33. 'node_pubkey': '3GfvMY1JY6T3nDzevPmXViE1MtXd7JpGDXamvTKTZTom'
  34. },
  35. {
  36. 'signature': '8rC3q1Ac5hsQsBZpKNUN6rxh9BtZenfeUWDv8xgYZtVZ8S8udm7SGK8XfLbetm5VAfqC5Y34ahktzhumKccUr77',
  37. 'vote': {
  38. 'invalid_reason': None,
  39. 'voting_for_block': '1',
  40. 'previous_block': 'Genesis',
  41. 'is_block_valid': True,
  42. 'timestamp': '1482410513'
  43. },
  44. 'node_pubkey': '3AVtrmkNi3nUzqueec7kGgr8Am11AbCxQStAyCc3kjWw'
  45. },
  46. {
  47. 'signature': '33rzqqtymgwj6VD3p5d3M8mFC9LjVcX47D3duJE3Jkhkg72TZaCrgYtWq5fVemNrr2R9TD65RmuhVPMQYBTBMp2o',
  48. 'vote': {
  49. 'invalid_reason': None,
  50. 'voting_for_block': '1',
  51. 'is_block_valid': True,
  52. 'previous_block': 'Genesis',
  53. 'timestamp': '1482410513'
  54. },
  55. 'node_pubkey': '5UMMbgr4YhJbjXYtu8AkZFXSvJwHM6qLXJYMS2Cn9Ftw'
  56. },
  57. {
  58. 'signature': '2Spg7LQ9VHQbBwwLJYXuhPaegEJZ7dFznsfivEyQZhPr3NH9C9wHjpgtfMuLEENZPM1mUdQsuSZ9AXaRcmnvimGT',
  59. 'vote': {
  60. 'invalid_reason': None,
  61. 'voting_for_block': '1',
  62. 'is_block_valid': True,
  63. 'previous_block': 'Genesis',
  64. 'timestamp': '1482410513'
  65. },
  66. 'node_pubkey': 'Ao1gzjqs9T5JGWqoh2MH6SmykV2coFJsKCAofP7dyMvY'
  67. },
  68. {
  69. 'signature': '28JuaMyUdrM13Zo6sEQpogdjpC7ZCJh35DrptU3evEkfFeYHyBL14txMCHRUCvNiMn8y4TrXpW6Y5aGADvf91LgB',
  70. 'vote': {
  71. 'invalid_reason': None,
  72. 'voting_for_block': '1',
  73. 'is_block_valid': True,
  74. 'previous_block': 'Genesis',
  75. 'timestamp': '1482410513'
  76. },
  77. 'node_pubkey': 'HZaVUaq8aFs3WT9vbnGgoSXfAKgbJ1G5uSHzPTtvhSBM'
  78. }
  79. ]
  1. rank 6: ['VALID', 7, 7]
  2. rank 5: ['VALID', 7, 7]
  3. rank 2: ['VALID', 7, 7]
  4. rank 2 time:0.366696s
  5. rank 4: ['VALID', 7, 7]
  6. rank 0: ['VALID', 7, 7]
  7. rank 0 time:0.440076s
  8. rank 3: ['VALID', 7, 7]
  9. rank 3 time:0.322589s
  10. rank 1: ['VALID', 7, 7]
  11. rank 1 time:0.295617s