PHP实现简易版区块链

<?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
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值