<?php
class Block {
public $prevHash;
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);
$this->hash = hash('sha256', $data);
}
public function getBlockHash()
{
return $this->hash;
}
}
class Blockchain
{
public $blocks = [];
public function __construct()
{
$this->blocks[] = new Block('', 'Genesis Block');
}
public function addBlock($data)
{
$prevBlock = $this->blocks[count($this->blocks)-1];
$this->blocks[] = new Block($prevBlock->getBlockHash(), $data);
}
}
$bc = new Blockchain();
$bc->addBlock('This is block1');
$bc->addBlock('This is block2');
foreach ($bc->blocks as $block) {
printf("PrevHash: %s\n", $block->prevHash);
printf("Hash: %s\n", $block->hash);
printf("Data: %s\n", $block->data);
printf("\n");
}
结果:
PrevHash:
Hash: 35fec6c8af446a0480c0b6eb2fdbee9eb9553ad6eef8e52ea55e01fe6a52645a
Data: Genesis Block
PrevHash: 35fec6c8af446a0480c0b6eb2fdbee9eb9553ad6eef8e52ea55e01fe6a52645a
Hash: de9c7cf4217f22bcee225076a57ccc5281c7a2a65e14a9f2b645e4924449a954
Data: This is block1
PrevHash: de9c7cf4217f22bcee225076a57ccc5281c7a2a65e14a9f2b645e4924449a954
Hash: aec6f71220d213b2842b0a222fbe459332fe7d9de0f8b83e92a55b40a14d1292
Data: This is block2
https://blog.csdn.net/weixin_42633269/article/details/85129441