加入收藏 | 设为首页 | 会员中心 | 我要投稿 河北网 (https://www.hebeiwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 建站 > 正文

PHP也能实现区块链?基本布局篇

发布时间:2018-08-18 01:15:30 所属栏目:建站 来源:列旭松
导读:技能沙龙 | 邀您于8月25日与国美/AWS/转转三位专家配合切磋小措施电商拭魅战 弁言 什么是区块链?官方的表明是:区块链是一个漫衍式记账体系,是藉用暗码学串接并掩护其内容的串通买卖营业记录(又称区块)。每一个区块包括了前一个区块的加密散列、对应的时刻戳
副问题[/!--empirenews.page--] 技能沙龙 | 邀您于8月25日与国美/AWS/转转三位专家配合切磋小措施电商拭魅战

PHP也能实现区块链?基本布局篇

弁言

什么是区块链?官方的表明是:区块链是一个漫衍式记账体系,是藉用暗码学串接并掩护其内容的串通买卖营业记录(又称区块)。每一个区块包括了前一个区块的加密散列、对应的时刻戳记以及买卖营业数据(凡是用默克尔树算法计较的散列值暗示),这样的计划使得区块内容具有难以被篡改的特征。用区块链所串接的漫衍式账本能让两方有服从地记载买卖营业,且此买卖营业可永世被磨练。

但这个表明对付初学者来说太抽象了,以是接下来我们将会行使PHP来实现一个浅显的区块链来加深对区块链的领略。

区块

各人应该玩过成语接龙,法则是这样:我先说一个成语“人上人海”,下一个玩家必要行使我说的成语的最后一个字作为下一个成语的开头,就是说必要行使“海”这个字作为新成语的开头,这时就可以接一个“天各一方”。

而区块链的情势有点像成语接龙,就是下一个区块必需行使上一个区块的Hash值作为根据来天生下一个区块。如下图:

PHP也能实现区块链?基本布局篇

这样做的甜头是:从恣意一个区块开始都可以通过前一个区块的Hash值可以不绝的追溯整条区块链,直到创世区块(也就是区块链的第一个区块)。假若有人恶意进攻,也必需变动整条区块链的数据。可是计较Hash值是一个耗时的操纵,以是要变动整条区块链的数据根基是不行能到达,这就担保了区块链的安详性。

下面我们行使PHP代码来界说区块:

  1. <php  
  2. class Block {  
  3.     public $prevHash;  
  4.     public $hash;  
  5.     public $timeStamp;  
  6.     public $data;  

prevHash、hash和timeStamp这几个字段在区块链中被称为区块头,区块的Hash值行使SHA-256算法计较。计较要领如下:

  1. <php  
  2. class Block {  
  3.     ...  
  4.     public function setBlockHash() {  
  5.         $data = serialize($this);  
  6.         $this->hash = hash('sha256', $data);  
  7.     }  
  8. }  

起首我们行使serialize()函数把整个区块序列化,然后行使hash()函数计较区块的Hash值,并赋值给hash字段。

区块工具的结构函数如下:

  1. <php  
  2. class Block {  
  3.     ...  
  4.     public function __construct($prevHash, $data) {  
  5.         $this->prevHash = $prevHash;  
  6.         $this->timeStamp = time();  
  7.         $this->data = $data;  
  8.         $this->setBlockHash();  
  9.     }  
  10. }  

其它我们提供一个获取区块Hash值的要领:

  1. <?php  
  2. class Block  
  3. {  
  4.     ...  
  5.     public function getBlockHash()  
  6.     {  
  7.         return $this->hash;  
  8.     }  

区块链

前面说了,区块链就是凭证必然的法则毗连起来的区块,毗连的法则就是下一个区块的区块头中必需包括前一个区块的Hash值。我们编写一个区块链工具来生涯整条区块链,代码如下:

  1. <?php  
  2. include('block.php');  
  3. class Blockchain  
  4. {  
  5.     public $blocks = [];  
  6. }  

区块链工具内部行使了一个数组来生涯全部的区块,现阶段我们还没有行使到数据库来生涯区块链,以是此刻只必要把区块链生涯在内存即可。

(编辑:河北网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读