<?php
//区块
class Block{
//前一个区块HASH值
public $prevHash;
//当前区块HASH值
public $hash;
//区块生成的时间戳
public $timestamp;
//区块保存的数据
public $data;
public function __construct($prevHash,$data){
$this->prevHash = $prevHash;
$this->timestamp = time();
$this->data = $data;
$this->setBlockHash();
}
public function setBlockHash(){
$data = serialize($this);
//var_dump($data);die();
$this->hash = hash('sha256',$data);
}
public function getBlockHash(){
return $this->hash;
}
}
class BlockChain{
public $blocks = [];
public function __construct(){
$this->blocks[] = new Block('',"zk");
}
public function addBlocks($data){
$prevBlock = $this->blocks[count($this->blocks) - 1];
$this->blocks [] = new Block($prevBlock->getBlockHash(),$data);
}
}
(new Block('','zk'))->setBlockHash();
$blockChain = new BlockChain();
$blockChain->addBlocks('block 1');
$blockChain->addBlocks('blocks 2');
$blockChainList = $blockChain->blocks;
foreach ($blockChainList as $block){
printf("PrevHash:%s\n",$block->prevHash);
printf("Data:%s\n",$block->data);
printf("Hash:%s\n",$block->hash);
printf("\n");
}
结果:
> $ php btc.php PrevHash: Data:zk
> Hash:8689f7e02b4bf853892e6c13bea62c7b1e10f00652494f0d069a63711ead772f
>
> PrevHash:8689f7e02b4bf853892e6c13bea62c7b1e10f00652494f0d069a63711ead772f
> Data:block 1
> Hash:83456b3f7d9d202cb756872fa1c8f774980d708872b8d96e592b424973a33854
>
> PrevHash:83456b3f7d9d202cb756872fa1c8f774980d708872b8d96e592b424973a33854
> Data:blocks 2
> Hash:31effc4968efdab5082917acde81efd1a91e25d8e427c91155330cb73d2c67ea