php区域链如何做,PHP之区域块链

//区域块链

//block 区块

// chain 链

//data

//之前区块的has值

//自己的has值 : 他是由存储在区块链的信息算出来的 (data + 之前数据has)

class Block {

public $data; //传入数据

private $previousMash;

public function __construct($data,$previousMash){

$this->data = $data;

$this->previousMash = $previousMash;

$this->hash = $this->computerHash();

}

//行程has秘钥

public function computerHash(){

return hash(‘sha256‘,$this->data);

}

}

//区块-的-链

//生成祖先

class Chain{

public function __construct(){

$this->chain = [$this->bigBang()];

}

//生成祖先数据

public function bigBang(){

return  new Block(‘我是祖先‘,‘99999‘);

}

public function getLatestBlock(){

return $this->chain[count($this->chain)-1];

}

//验证这个区域块链是否合法

//当前数据是否被篡改

//验证区块的previousHash 是否等于priviousHash

public function validateChain(){

if(count($this->chain) === 1){

if($this->chain[0]->hash !== $this->chain[0]->computerHash()){

return false;

}

return true;

}

//this.chain[1] 第二个区块

//我们第二个区域块开始验证

//验证最后一个区块 count($this->chain)-1

for($i = 1;$ichain)-1;$i++){

$blockToValidate = $this->chain[$i];

//当前数据有没有被篡改

if($blockToValidate->hash !== $blockToValidate->computerHash()){

echo ‘数据篡改‘;

return false;

}

//当前验证区域块previousHash是否等于previous区域块的hash

$previousBlock = $this->chain[$i-1];

if($blockToValidate->previousHash !== $previousBlock->hash){

echo ‘前后块链断裂‘;

return false;

}

}

return true;

}

//添加区块到区域块链上

public function addBlockToChain($newBlock){

//data

//找到最后一个block的has

//这个has就是新区域块链的priviousHash

$newBlock->priveiousHash = $this->getLatestBlock()->hash;

$newBlock->hash = $newBlock->computerHash();

array_push($this->chain,$newBlock);

}

}

//生成块

$Block =  new Block(‘转账十元123‘,‘123‘);

// echo ‘

‘;

// print_r($Block);

//生成链

// $Chain = new Chain();

// echo ‘

‘;

// print_r($Chain);

$Block1 =  new Block(‘转账十元‘,‘123‘);

// echo ‘

‘;

// print_r($Block);

$Chain = new Chain();

$Chain ->addBlockToChain($Block);

$Chain ->addBlockToChain($Block1);

echo ‘

‘;

print_r($Chain);

// print_r($Chain -> validateChain());

//尝试篡改数据

$Chain->chain[1]->data = ‘我最好看‘;

echo ‘

‘;

print_r($Chain);

var_dump($Chain -> validateChain());

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值