• Stars
    star
    134
  • Rank 270,967 (Top 6 %)
  • Language
    JavaScript
  • License
    MIT License
  • Created about 6 years ago
  • Updated about 6 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Learn blockchain by building one in node.js

iblockchain logo

Downloads Version License

功能

  • 学习区块链的演示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

More Repositories

1

programmer-job-blacklist

🙈程序员找工作黑名单,换工作和当技术合伙人需谨慎啊 更新有赞
Shell
28,408
star
2

fe-advanced-interview

前端进阶面试指南
JavaScript
1,309
star
3

email-helper

Generate your business emails in seconds (by OpenAI)
TypeScript
743
star
4

it-roadmap

大圣的前端学习路线图
Python
527
star
5

vue3-vs-vue2

《前端会客厅第一期代码》和尤大聊vue3的 提升
HTML
410
star
6

self-employed-workbook

写给自己的程序员自由职业工作手册
394
star
7

woniu-cmdb

👻写配置文件生成增删改查系统
HTML
266
star
8

geektime-vue-course

极客时间代码
Vue
241
star
9

imooc-echarts

imooc的echarts入门教程
HTML
223
star
10

vue-tiny-rate

⭐️ The smallest rating component for Vue2.x , use character★ and ☆ support mpvue
Vue
181
star
11

vue3-book

vue3源码分析3.0.0-beta.12 https://www.yuque.com/woniuppp/vue3
Vue
172
star
12

file-upload

面试造火箭系列
Vue
143
star
13

algorithm-camp

javascript算法训练营
JavaScript
141
star
14

footprint

🎎记录去过的足迹
HTML
136
star
15

iconjs

:trollface: favico for fun
JavaScript
97
star
16

upload

文件上传思路
Vue
96
star
17

vue-master-lesson

Vue精英训练营
Vue
85
star
18

ailemente

vite+ts的组件库演示代码,element音译 ailemente
Vue
46
star
19

weiyouyi

JavaScript
44
star
20

benben

笨笨小助理(by OpenAI)
TypeScript
42
star
21

kkb-vue3

JavaScript
41
star
22

interview

我常问的一些面试题
41
star
23

understand-preact

preact+compat源码注释
JavaScript
34
star
24

hongbaoshu

红宝书精读训练营
HTML
30
star
25

professional-javascript-for-web-developer

红宝书第四版代码
JavaScript
30
star
26

js-algorithm

学习算法的js实现
JavaScript
27
star
27

tiny-rate

The Smallest Rating Component for fun
JavaScript
25
star
28

react-tiny-rate

⭐️ The smallest rating component for React , use character★ and ☆
JavaScript
22
star
29

react_bronze_to_king

React 从青铜到王者系列教程代码
JavaScript
17
star
30

shengxinjing.cn

个人博客
Vue
17
star
31

vue-master

vue学习代码
16
star
32

pytail

python实现tail -f功能,仅供学习
Python
16
star
33

douban_spider

豆瓣图书爬虫,根据isbn查信息
JavaScript
14
star
34

angular-lite

学习es6 webpack 手写angular造个轮子
JavaScript
13
star
35

reverse-print

反转打印的88W行代码JS实现
JavaScript
12
star
36

moyu

摸鱼
Python
12
star
37

shengxinjing

关于我
9
star
38

vue-action-next

vue实战课程代码
TypeScript
7
star
39

kkb-mp

小程序公开课代码
JavaScript
6
star
40

fullstack-challenges

前端挑战题解
5
star
41

awesome-pm

教产品经理和程序员撕逼教程
5
star
42

marrow-of-javascript

前端会客厅第二期代码-爱民老师
HTML
5
star
43

react-boss

react+node最佳实践的招聘应用
4
star
44

vue3-workshop

vue3训练营
4
star
45

saoleide

TypeScript
3
star
46

cuir

toy vue3 for education
3
star
47

f2eblog

写一点前端基础教程
JavaScript
3
star
48

zhihu_zhuanhan

知乎专栏文章收集工具
Python
2
star
49

static

static files
Shell
2
star
50

fis-postprocessor-annotate

在fis里继承ng-annotate的功能
JavaScript
2
star
51

jarvis

程序员个人助理小程序
2
star
52

blogimgs

1
star
53

sandbox-vue

sandbox wapper for vue3
1
star
54

zhixing_top10

知行十大小程序
JavaScript
1
star
55

awesome-books

读书笔记,gitbook
1
star
56

pythonmyadmin

phpmyadmin的python简易版
1
star
57

vue3-static-table

JavaScript
1
star
58

for-debug

1
star
59

funny-frontend

HTML
1
star
60

scroll-demo

HTML
1
star
61

zhixing_spider

Python
1
star
62

react-dev-to-online

目录
1
star
63

books_to_read

狗哥和蘑菇想读的书
1
star
64

learn-vue3-by-build-one

学习vue3
1
star