飞猪币官网欢迎您!

首页 > 资讯 > 正文

代码展示飞猪币和区块链

发布时间:2018-08-27 09:46:39

不难想象,这样的机制是存在冲突的隐患的,就是这么巧,两个矿工同时制作了一个正确的区块,那么此时不必二选一,可以将原来线性的区块链改成树状。

但是这样会导致未来在A、B后都会增加相应的区块,那么谁长谁将作为主链延伸下去,另一个也许会渐渐被遗忘,除非哪天它变得更长。

好啦,这就是区块链最基本的知识,接下来应该谈谈优缺点了。
 

世界上没有一样东西可以称为完美无瑕的,要知道区块链一样,虽然它被扣上了可以颠覆未来的帽子,但是仍然存在它的局限性:1.时效性。很容易发现,区块链中存在很多的验证、传递环节,这就会导致其时效性较差。2、能耗,这点也是显而易见的,区块链需要大量无用计算来控制区块的生成时间。所以区块链不适用于高时效的网络中。

至于区块链的优点,诸如安全、去中心化等等在网络上已经描述的非常清楚,这里就不再赘述。接下来我用一段python代码来简单实现一个挖矿的流程。

 

代码示例

首先创建一个表示区块链的类:

初始化函数中的chain表示当前的区块链,我会在其中存储区块对象;pitmen表示为这个区块链服务的矿工们,这个列表中也会存有矿工对象;results则会存储每个阶段产生的区块;new_block方法是创建区块的方法,如果当前生成的区块为第一个区块,则产生创世区块。

下面看看区块链类型的方法:
飞猪币

last_block会返回当前区块链的最后一个区块对象。
飞猪币

get_trans方法则用来随机生成一份交易信息。

飞猪币

这是生成区块的核心部分,这个方法主要分成两个部分:根据传参区分是否是创世区块,如果需要的是创世区块,那就由该类型自动生成一个区块占据区块链的头一个位置。如果需要生成的是普通区块,那么则会将一些基本信息分发给矿工们进行挖矿操作。我在这里设置了6个矿工,为了公平起见,这里也开了个多线程尽量让矿工们同时收到消息从而可以同时进行挖矿操作。按理说,最先挖矿成功的矿工会将消息发给其他矿工,其他矿工会立刻停止进行校验,但由于时间有限,这一步校验环节我没有实现。在这里,我允许所有矿工都完成工作,并提交成果和相应的工作时间,生成耗时最短的区块讲作为正确的区块添加到区块链上。本质上也是依照了“快者优先”的区块链生成原则。

说了半天,区块内部到底是什么样的呢?

飞猪币

我用了一个相对简单的类型表示区块,在这里区块就是一个非常简单的数据结构,这里的所有字段在上述中已经有了详细的说明,因此不再赘述。

那么我们再看看矿工,毕竟矿工才是区块链的生产者和推动者,地位最为核心。矿工类中我设计了两个方法,一个mine方法,也就是挖矿的意思,用来生成新的区块,并会返回该区块生成的用时长短。

飞猪币

另一个方法是hash生成的方法,生成原则我自己意淫了一个,大家莫怪,因为本人计算机的实在不给力,区块的成功标准很简单,就是用sha256生成的编码最后结尾是0就满足要求,如果改成00,那会半天看不到结果。

下面我们看下这套实例的运行结果,我设置了一个长度为6的区块链,由于第一个区块是创世区块,所以真正开始创建的区块是从第二个开始的,大家注意index。

这是6个矿工完成的第一区块:

飞猪币

可以看到,难度值,根据上文所说,这是反应一个区块生成的难易程度的,难度高的,在我这里会表示这个矿工为了得到这个区块进行了多少次尝试。看到这里也许你会问:为什么难度最大的时间并没有明显长呢?也就是用时并没有按照难度的增加而增加。我猜想应该是因为我的示例算法简单,因此结果也不是十分精确,如果计算量达到一定的规模,应该会有明显的差距。(如果有高人知道,可以回复我,在此谢过!)第三到第六个的区块创建结果格式是与之一样的,就不刷屏了。

最后看下整个区块链的结果:

飞猪币

这就是由这6个矿工依次创建的六个区块,根据hash值环环相扣。

接上篇从大众的角度来解说飞猪币和区块链

联系我们

Flypigcoin@qtum.org

Flypigcoin版权所有 © 2018