Learn blockchain by building one in node.js
ๅ่ฝ
- ๅญฆไน ๅบๅ้พ็ๆผ็คบdemo
- ็ฎๅ็ๆ็ฟใไบคๆใP2P็ฝ็ป็ๅฎ็ฐ
- ไธ็ณปๅdemoๆผ็คบๅฝไปค๏ผ่พ ๅฉ็่งฃblockchain
ๅฎ่ฃ
npm install -g iblockchain
ไธๆ
ๆง่กiblockchain ๅ ่ฟๅ
ฅdemo้กต้ข
Welcome to iblockchain !
Commands:
help [command...] Provides help for a given command. exit Exits application. mine ๅผๅงๆ็ฟ blockchain ๆฅ็ๆดไธชๅบๅ้พ [bc] pending ๆฅ็่ฟๆฒกๆๆๅ
่ฟๅบๅ็ไบคๆ trans <to> <amount> ็ปไบบ่ฝฌ่ดฆ blance [address] ๆฅ็ๅฐๅ็ไฝ้ข pub ๆฌๅฐๅ
ฌ้ฅ(ๅ
ฌ้ฅๅฐฑๆฏๅฐๅ) prv ๆฌๅฐ็ง้ฅ detail <index> ๆฅ็็ฌฌnไธชๅบๅ็่ฏฆๆ
peer ๆฅ็P2P็ฝ็ป่็น --------ๆๆฏๅๅฒ็บฟ-------- hash <value> [ๆผ็คบ] ่ฎก็ฎsha256ๅๅธ minedemo <data> <difficulty> [ๆผ็คบ] ๆ็ฟ่ฎก็ฎ้ป่พ getpub <value> [ๆผ็คบ] ๆ นๆฎ็ง้ฅ่ฎก็ฎๅบๅ
ฌ้ฅ(็ง้ฅๅ ๅฏ ๅ
ฌ้ฅ่งฃๅฏ๏ผๅ
ฌ้ฅๅฏไปฅไป็ง้ฅ่ฎก็ฎๅบๆฅ) sign <value> <prv> [ๆผ็คบ] ็จ็ง้ฅๅ ๅฏไฟกๆฏ ๅพๅฐ็ญพๅ verify <value> <pub> <sig> [ๆผ็คบ] ไฝฟ็จ็ญพๅ ๆ ก้ชไฟกๆฏ <ๆถๆฏ> <ๅ
ฌ้ฅ> <็ญพๅ> valid [ๆผ็คบ] ๅบๅ้พๆฏๅฆๅๆณ update <index> [ๆผ็คบ] ็ฏกๆน<index>ไธชblock็ๆฐๆฎ,็ฌฌไธไธช่ฝฌ่ดฆไฟกๆฏamount+1 mineblock <index> [ๆผ็คบ] ๅฏน<index>ไธชไธ็ๅบๅๆฐๆฎ้ๆฐๆ็ฟ,ไฝฟๅ
ถๅๆๅๆณ็ๅฐๅๅ
iblockchain => [ไฟกๆฏ]: UDPๆๅก็ๅฌๅฎๆฏ: 0.0.0.0:51881 [ไฟกๆฏ]: ๆดๆฐๆฌๅฐๅบๅ้พ iblockchain => // ็ปง็ปญ่พๅ
ฅๅฝไปค ไฝ้ชๅ่ฝ
ไฝ้ชไธไธไธ
ๆฅ็ๆดไธชๅบๅ้พๆฐๆฎ
iblockchain => blockchain
// output
โโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโ โ index โ previousHash โ timestamp โ data โ hash โ nonce โ โโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโค โ 0 โ "0" โ 1538669227813 โ "Welcome to iblocโฆ โ "00000aa1fbf27775โฆ โ 979911 โ โโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโค โ 1 โ "00000aa1fbf27775โฆ โ 1538988895613 โ [ โ "0000050c2b1b65a0โฆ โ 69438 โ โ โ โ โ { โ โ โ โ โ โ โ "from": "0", โ โ โ โ โ โ โ "to": "0414b351โฆ โ โ โ โ โ โ โ "amount": 100, โ โ โ โ โ โ โ "sig": "3046022โฆ โ โ โ โ โ โ โ "timestamp": 15โฆ โ โ โ โ โ โ โ } โ โ โ โ โ โ โ ] โ โ โ โโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโค โ 2 โ "0000050c2b1b65a0โฆ โ 1538988929584 โ [ โ "000001ee70cd40e8โฆ โ 766700 โ โ โ โ โ { โ โ โ โ โ โ โ "from": "0", โ โ โ โ โ โ โ "to": "0429b0e2โฆ โ โ โ โ โ โ โ "amount": 100, โ โ โ โ โ โ โ "sig": "3044022โฆ โ โ โ โ โ โ โ "timestamp": 15โฆ โ โ โ โ โ โ โ } โ โ โ โ โ โ โ ] โ โ โ โโโโโโโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโโโโโโ
ๆ็ฟ,ๆฐๅขๅบๅ mine
iblockchain => mine
// output [ไฟกๆฏ]: ๆ็ฟ็ปๆ ็จๆถ4.30s , ็ฎไบ806180ๆฌก, ๅๅธๅผๆฏ00000c3633bd15a4b2c45bbc9373658694b55c078de4777bec28e10cea9e53fd๏ผๅ
ฅ่ดฆ100 ่ฏท็ฌ็บณ
โโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโ โ index โ previousHash โ timestamp โ nonce โ hash โ data โ โโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโค โ 14 โ "00000b93ccf0c0b6โฆ โ 1539017632369 โ 806180 โ "00000c3633bd15a4โฆ โ [ โ โ โ โ โ โ โ { โ โ โ โ โ โ โ "from": "0", โ โ โ โ โ โ โ "to": "041ad79cโฆ โ โ โ โ โ โ โ "amount": 100, โ โ โ โ โ โ โ "sig": "3045022โฆ โ โ โ โ โ โ โ "timestamp": 15โฆ โ โ โ โ โ โ โ } โ โ โ โ โ โ โ ] โ โโโโโโโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโโโโโโ
ๆฅ็ๆฌๅฐๅฐๅ๏ผๅ ฌ้ฅ๏ผ pub
iblockchain => pub
//output
041ad79cddfcc575efdae26e46e14a13c600967aff1db6d7eba66f770d585c542dfaed897f72b5bc40595f5601a868837f63bface539350ac6d013b99d17a0fbeb
่ฝฌ่ดฆ trans
iblockchain => trans 0446b3de736bca3db5e19a7db06e56851a0a45fd07bbf74a355ef91f480151ff9ee7720367b4010c525bada702df62c98768d6a34bdd066e69653ad92e8f99f065 20
//output โโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโ โ from โ to โ amount โ sig โ timestamp โ โโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโค โ "041ad79cddfcc575โฆ โ "0446b3de736bca3dโฆ โ 20 โ "3045022100804809โฆ โ 1539017836747 โ โโโโโโโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโโโโโโ
ๆฅ็่ฟๆฒกๆๅ ็ไบคๆ pending
iblockchain => pending
//output โโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโ โ from โ to โ amount โ sig โ timestamp โ โโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโค โ "041ad79cddfcc575โฆ โ "0446b3de736bca3dโฆ โ 20 โ "3045022100804809โฆ โ 1539017836747 โ โโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโค โ "041ad79cddfcc575โฆ โ "0446b3de736bca3dโฆ โ 12 โ "30460221008b13a5โฆ โ 1539017874219 โ โโโโโโโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโโโโโโ
ๆฅ็ๅฐๅไฝ้ข(้ป่ฎคๆฌๅฐ)) blance
iblockchain => blance 041ad79cddfcc575efdae26e46e14a13c600967aff1db6d7eba66f770d585c542dfaed897f72b5bc40595f5601a868837f63bface539350ac6d013b99d17a0fbeb
{
"address": "041ad79cddfcc575efdae26e46e14a13c600967aff1db6d7eba66f770d585c542dfaed897f72b5bc40595f5601a868837f63bface539350ac6d013b99d17a0fbeb",
"blance": 168
}
โโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโ
โ address โ blance โ
โโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโค
โ "041ad79cddfcc575โฆ โ 168 โ
โโโโโโโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโโโโโโ
ๆฅ็็ฝ็ป่็นๅ่กจ peer
iblockchain => peer //output โโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโ โ port โ address โ โโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโค โ 8001 โ "47.94.5.240" โ โโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโค โ 8002 โ "42.56.89.132" โ โโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโค โ 59838 โ "124.127.208.135" โ โโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโค โ 27122 โ "123.114.48.94" โ โโโโโโโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโโโโโโ
ๆผ็คบๅฝไปค
ๅธฎๅฉ help
iblockchain => help
่ฎก็ฎsha256ๅๅธ hash
iblockchain => hash imooc
//output 5401cc2e57b309427fd10963f8b8ee58545284e35bfba0e00780369307e54849 โโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโ โ hash โ value โ โโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโค โ "5401cc2e57b30942โฆ โ "imooc" โ โโโโโโโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโโโโโโ
ๆผ็คบๆ็ฟ้ป่พ minedemo
iblockchain => minedemo imooc 2
// output [ไฟกๆฏ] ๆฐๆฎๆฏ imooc0 ๅๅธๅผๆฏ25c771cbd916307a0417ebf4f8a705e8319bb100c93db4cde74f4fbca7da54d6 [ไฟกๆฏ] ๆฐๆฎๆฏ imooc1 ๅๅธๅผๆฏ3b8368f43662598160ade6788b0504d789700c59574613c3dffb8b467aab8d5f [ไฟกๆฏ] ๆฐๆฎๆฏ imooc2 ๅๅธๅผๆฏf3cf53d3b2d6f83ac857e8e018ee4bbd78c1fdd5d96660b20116d2bc6a4e281e ...็็ฅๅพๅคๆก [ไฟกๆฏ] ๆฐๆฎๆฏ imooc248 ๅๅธๅผๆฏe6e8c271edec6c1b6f2b4bfa9725fecc0fe50356dcec47766440da2e29837e88 [ไฟกๆฏ] ๆฐๆฎๆฏ imooc249 ๅๅธๅผๆฏd1e79e718588ae125252d88c4a373934ebab3a9b1015f50d89329a151b78e406 [ไฟกๆฏ] ๆฐๆฎๆฏ imooc250 ๅๅธๅผๆฏ008781ebdfdff9e1660841b4ab159f2cb6c3fca3217865366c30a1912d620cc5
ๆ นๆฎ็ง้ฅ็ฎๅบๅ ฌ้ฅ getpub
iblockchain => getpub imooc ็ง้ฅimooc่ฎก็ฎๅบ็ๅ
ฌ้ฅ 04c8d1d62200e93e7bbf4b0c65da66d343656a6aebd51c146ed60f9dbbe39a4beededb5bbeeb1660269695d5a6959470c411c07545952e93f80460e76e31fcdde0
RSA็ง้ฅๅ ๅฏ sign
// ๅญ็ฌฆimoocไฝไธบ็ง้ฅ ๅฏนไฟกๆฏimoocrocks่ฟ่ก็ญพๅ iblockchain => sign imoocrocks imooc ็ญพๅ 304402206cc8d37c9e9ac3d679267aa0203550e04e7bb7ee6ba3f6c2193b597aa9bdaa58022029e54e94065c2a377a7632bdda0f51b6bd8e28c8667568459b2329683deb8db8 RSAๅ
ฌ้ฅ้ช่ฏ็ญพๅ verify iblockchain => verify imoocrocks 04c8d....dde0 3044....8db8 true
ๆ ก้ชๅบๅ้พๆฏๅฆๅๆณ valid
iblockchain => valid ๆ ก้ช็ปๆ: true
็ฏกๆนblockchainไบคๆๆฐๆฎ update
iblockchain => update 16 ไฟฎๆนไบ ่ฝฌ่ดฆ้้ขไป20=>21
iblockchain => valid [้่ฏฏ]: ็ฌฌ 16ไธชๅบๅhashไธๅฏน,็ฎๅบ็ๆฏb2f20b3bde5fe69ab5d5092f50222ea57c980902d4709de19563e2e797759efd ๅบๅ้ๆฌๆฅ็hashๆฏ000001b0538910078e426c2989d561a4f715ab11838545ce4efe7838754f5fef ็ๆฅๆฐๆฎ่ขซ็ฏกๆนไบ [้่ฏฏ]: ็ฌฌ16ไธชๅบๅไธๅๆณ ๆ ก้ช็ปๆ: false
้ๆฐๅฏนไธไธชๅบๅๆ็ฟไฟฎๅค mineblock
iblockchain => mineblock 16 [้่ฏฏ]: ็ฌฌ 16ไธชๅบๅhashไธๅฏน,็ฎๅบ็ๆฏb2f20b3bde5fe69ab5d5092f50222ea57c980902d4709de19563e2e797759efd ๅบๅ้ๆฌๆฅ็hashๆฏ000001b0538910078e426c2989d561a4f715ab11838545ce4efe7838754f5fef ็ๆฅๆฐๆฎ่ขซ็ฏกๆนไบ [ไฟกๆฏ]: ๅบๅ16ไฟฎๅคๅฎๆฏ
้ๅบ exit
iblockchain => exit [ไฟกๆฏ]: ็ฝ็ปไธ็บฟ็ต๏ผ็ๆ่ฟๆฎต็ผ ๅ่ง
ไธไบp2p็ฝ็ปไผ ้็ไฟกๆฏ
[ไฟกๆฏ]: ไบคๆๅๆณ ๆฐๅขไธไธ { from: '0444d....bcf1'
[ไฟกๆฏ]: ๆ็ฟ็ปๆ ็จๆถ0.50s , ็ฎไบ69438ๆฌก, ๅๅธๅผๆฏ0000050c2b1b65a01659e85a17dfc3ad96fe8548dfaf694ff88ae478832ac37d๏ผๅ
ฅ่ดฆ100 ่ฏท็ฌ็บณ
[ไฟกๆฏ]: ๅคงๅฎถๅฟซๅปๅๆฐๆๅๆไธชๆๅผ
[ไฟกๆฏ]: ๆไบบๆ็ฟๆๅ๏ผๆไปฌๆญๅ่ฟไฝๅนธ่ฟๅฟ
....
ๆดๅคไฟกๆฏ
- ็ฅไน
- ๅฆไฝๅๅบ่ฟไธชdemo(ๆ็จ)
่็ณป
ๅคงๅฎถๅฏไปฅๅ ๆๅพฎไฟก

ๆ่ ็ดๆฅๆ่ต

ๅ่ฎฎ
MIT