社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  区块链

零基础学区块链(一)

青蛙要fly • 6 年前 • 1007 次点击  

零基础学区块链(一)

开头:

最近因为项目需要,都在学习区块链,提到区块链,大家第一反应肯定是比特币,在我最刚开始学习的时候是去看的比特币的相关知识。这次先讲解大概的概念。后续再写详细的技术内容。

用具体的例子来说明:

小A,小B,小C是同一个公司的同事。所以他们每天中午一起吃饭。

1.

每次付钱时候因为大家没有那么多零钱,所以就说好了每天先让一个人帮忙付了饭钱。比如今天是小A付的饭钱,付了24块。然后回去后再平分,然后明天可能就是小B付了40块钱再平分。慢慢的,大家觉得这样也很烦了。说每天都要算账还钱,还不如一个月统一给一次。

2.

为了记账方便,大家就先说好,上面的欠钱记录先放在公司的公用服务器上面,在服务器的桌面上新建了一个文本记事本,这样三个人都可以去访问添加内容。

3.

但是上面这样会出现问题,当我们记账的内容过多的时候,我们会忘记中间某一天到底是谁付的,很正常,一个月哪里每天的记得住,这时候就存在漏洞了。三个人中的某个人可以去改中间某一天的数据

(假设小B最近手头比较紧,所以把别人付的饭钱写成了自己付的,让别人欠自己钱)。

修改前数据:

小B,小C 需给 小A  24元
小B,小C 需给 小A  30元
小A,小C 需给 小B  10元
小B,小C 需给 小A  10元
......
......
......
小A,小B 需给 小C  22元  (这一条被修改了)

修改后数据:

小B,小C 需给 小A  24元
小B,小C 需给 小A  30元
小A,小C 需给 小B  10元
小B,小C 需给 小A  10元
......
......
......
小A,小C 需给 小B  22元   (这一条被修改了)

4.

于是大家想要么弄个签名,对写过的数据进行加密,这样也就不怕会有上面的情况了。 于是决定用非对称加密方式来进行加密(PS:学习链接:(白话解释 对称加密算法 VS 非对称加密算法)) 这样,大家用自己的私钥来对写的内容加密,然后把自己的公钥公开,要检验的时候就直接可以用相应的公钥查看即可,如果可以成功查看,说明这个内容没有被修改过。这时候我们不怕内容被改过了。而我们的内容也变成了

asdflkajfkldjfas234ljkjdfs --->(相当于(小B,小C 需给 小A  24元) + 小A的私钥 )
fdkalsjfasdjl34ljlsdflj --->(相当于(小B,小C 需给 小A  30元) + 小A的私钥 )
jfldsajfkj1231lk --->(相当于(小A,小C 需给 小B  10元) + 小B的私钥)
......
......
......

5.

但是这样还会有个问题,我修改不行,我直接拷贝全部内容不就可以了。 修改前:

asdflkajfkldjfas234ljkjdfs --->(相当于(小B,小C 需给 小A  24元) + 小A的私钥 )
fdkalsjfasdjl34ljlsdflj --->(相当于(小B,小C 需给 小A  30元) + 小A的私钥 ) 
jfldsajfkj1231lk --->(相当于(小A,小C 需给 小B  10元) + 小B的私钥) <这行被修改,直接替换上面的一行的全部内容>
......
......
......

修改后:

asdflkajfkldjfas234ljkjdfs --->(相当于(小B,小C 需给 小A  24元) + 小A的私钥 )
fdkalsjfasdjl34ljlsdflj --->(相当于(小B,小C 需给 小A  30元) + 小A的私钥 ) 
fdkalsjfasdjl34ljlsdflj --->(相当于(小B,小C 需给 小A  30元) + 小A的私钥 )  <这行被修改>
......
......
......

这时候你用公钥去检查也是没有问题的,所以我们单纯内容加密不够,所以我们想到前面加上了日期,变成了

asdflkajfkldjfas234ljkjdfs --->(相当于(2月2号:  小B,小C 需给 小A  24元) + 小A的私钥 )
fdkalsjfasdjl34ljlsdflj --->(相当于(2月3号: 小B,小C 需给 小A  30元) + 小A的私钥 )
jfldsajfkj1231lk --->(相当于(2月4号: 小A,小C 需给 小B  10元) + 小B的私钥)
......
......
......

这时候就算你直接把上面一行拷贝覆盖下面的一行也没用了,因为不然就有二行的日期一样,明显作假了。

6.

因为每天都要自己去往服务器上的文件写东西,小A他们开始嫌太麻烦了,说我只要把(日期 + 内容 + 私钥)合并后的内容发出来,让别人去服务器上添加进去到记事本就好了。但是平白无故肯定没人愿意,所以他们对办公室其他同事说:你们谁帮我们记账,我们每个月会请你一瓶饮料,并且每帮忙记一笔账,我们会额外给你一笔记账费(比如记录了小A,小B需要给小C 40元,记录者可以拿中间的1元,小C只能拿到39元,类似手续费),于是好几个同事都踊跃参与,但是并不需要这么多人来记内容,毕竟人多了。请的饮料也就多了。所以决定让要记账的同事们自己来决赛,既然大家都是程序员,就用一个有难度的比赛,做数学题目,谁能最快的做出题目,谁就有资格来帮忙记内容。

7.

好不容易一个月到了,我们要开始结算饭钱了,结果小A需要给小B和小C各自200元,可是小A因为最近花销大,就双手一摊说反正我没钱,我就只能欠着你们了。小B和小C很生气,所以从第二个月开始,小A每次都要给小B和小C看过他的钱包。证明他有钱,他们二个才会愿意先付钱。

8.

一天公司的服务器坏了,而且已经这个月到了最后几天,已经记了二十几天了,我们记账的文本也看不到了,小A,小B,小C都傻眼了,他们三个终于知道了不要把鸡蛋放在一个篮子里面的道理了。事已至此,只能吃一堑长一智。在下个月记账的时候多备份几个地方。所以他们在公司的三台服务器上都放上了这个记事本,然后每次写新的内容,就三个地方都去写。

9.

因为大家都在一个记事本里面记,记一个月倒也还好,可是当小A,小B,小C用这种方式一起吃饭吃了N个月后,txt里面的内容就越来越多了。每次打开,都要往下翻好久才能继续记东西,于是他们就决定一个月用一个记事本,到了第二个月,就再新建一个记事本。

10.

因为大家为了更好的统计这个饭钱,所以在每个月结束后在上方写着这个月一共的饭钱,并且记住上个月吃了多少钱,方便比较。

饭钱小账1:

上个月一共吃了1000元
这个月一共吃了1200元

asdflkajfkldjfas234ljkjdfs --->(相当于(2月2号:  小B,小C 需给 小A  24元) + 小A的私钥 )
fdkalsjfasdjl34ljlsdflj --->(相当于(2月3号: 小B,小C 需给 小A  30元) + 小A的私钥 )
jfldsajfkj1231lk --->(相当于(2月4号: 小A,小C 需给 小B  10元) + 小B的私钥)
......
......
......





    
饭钱小账2:

上个月一共吃了1200元
这个月一共吃了1100元

asdflkajfkldjfas234ljkjdfs --->(相当于(3月2号:  小B,小C 需给 小A  24元) + 小A的私钥 )
fdkalsjfasdjl34ljlsdflj --->(相当于(3月3号: 小B,小C 需给 小A  30元) + 小A的私钥 )
jfldsajfkj1231lk --->(相当于(3月4号: 小A,小C 需给 小B  10元) + 小B的私钥)
......
......
......


然后我们这样中间一个账本因为某种原因被改了的话,这个月的总花费就变了,然后下个月上面记着的上个月的花费就对应不起来了,也就会发现中间某个账本应该被改动过了,出了问题。

这么长的一个故事看完后,我们比特币的大致基本概念也就懂了。具体的信息下次我再深入解释。

我们来看对比脑图:

结尾:

哪里不对,欢迎大家喷,哈哈,后续继续详细的讲解。


今天看啥 - 高品质阅读平台
本文地址:http://www.jintiankansha.me/t/ZMCvbMSdhM
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/9753
 
1007 次点击  
文章 [ 1 ]  |  最新文章 6 年前
小智
Reply   •   1 楼
小智    6 年前

推荐两个区块链以太坊开发的教程

一个适合区块链新手的以太坊DApp开发教程:

http://xc.hubwiz.com/course/5a952991adb3847553d205d1

一个用区块链、星际文件系统(IPFS)、Node.js和MongoDB来构建以太坊DApp电商平台的教程:

http://xc.hubwiz.com/course/5abbb7acc02e6b6a59171dd6