php实现区块链示例

云游道人 2024-11-15 630 阅读 0评论

在这里,我将展示一个简单的 PHP 区块链实现示例。这个示例将包括区块链的基本结构,包括区块的创建、链的添加,以及简单的验证功能。

区块链基本结构

  1. 区块(Block):包含数据、前一个区块的哈希、当前区块的哈希等信息。

  2. 区块链(Blockchain):由多个区块组成的链。

示例代码

以下是一个简单的 PHP 区块链示例代码:

<?php

class Block {
    public $index;
    public $timestamp;
    public $data;
    public $previousHash;
    public $hash;

    public function __construct($index, $timestamp, $data, $previousHash = '') {
        $this->index = $index;
        $this->timestamp = $timestamp;
        $this->data = $data;
        $this->previousHash = $previousHash;
        $this->hash = $this->calculateHash();
    }

    public function calculateHash() {
        return hash('sha256', $this->index . $this->previousHash . $this->timestamp . json_encode($this->data));
    }
}

class Blockchain {
    public $chain;

    public function __construct() {
        $this->chain = [];
        // 创建创世区块
        $this->createGenesisBlock();
    }

    public function createGenesisBlock() {
        $genesisBlock = new Block(0, date('Y-m-d H:i:s'), 'Genesis Block', '0');
        $this->chain[] = $genesisBlock;
    }

    public function getLatestBlock() {
        return $this->chain[count($this->chain) - 1];
    }

    public function addBlock($data) {
        $latestBlock = $this->getLatestBlock();
        $newIndex = $latestBlock->index + 1;
        $newTimestamp = date('Y-m-d H:i:s');
        $newBlock = new Block($newIndex, $newTimestamp, $data, $latestBlock->hash);
        $this->chain[] = $newBlock;
    }

    public function isChainValid() {
        for ($i = 1; $i < count($this->chain); $i++) {
            $currentBlock = $this->chain[$i];
            $previousBlock = $this->chain[$i - 1];

            // 检查当前区块的哈希是否正确
            if ($currentBlock->hash !== $currentBlock->calculateHash()) {
                return false;
            }

            // 检查当前区块的前一个哈希是否与前一个区块的哈希匹配
            if ($currentBlock->previousHash !== $previousBlock->hash) {
                return false;
            }
        }
        return true;
    }
}

// 示例使用
$myBlockchain = new Blockchain();
$myBlockchain->addBlock(['amount' => 4]);
$myBlockchain->addBlock(['amount' => 10]);

// 打印区块链
foreach ($myBlockchain->chain as $block) {
    echo "Index: " . $block->index . "\n";
    echo "Timestamp: " . $block->timestamp . "\n";
    echo "Data: " . json_encode($block->data) . "\n";
    echo "Previous Hash: " . $block->previousHash . "\n";
    echo "Hash: " . $block->hash . "\n";
    echo "-----------------------------------\n";
}

// 验证区块链
if ($myBlockchain->isChainValid()) {
    echo "区块链是有效的\n";
} else {
    echo "区块链无效\n";
}
?>
      复制

代码说明

  • Block 类:表示区块,包含索引、时间戳、数据、前一个区块的哈希和当前区块的哈希。

  • Blockchain 类:表示区块链,包含一个区块数组,可以创建创世区块、添加新区块、获取最新区块和验证链的有效性。

  • 示例使用:创建一个区块链实例,添加几个区块,并打印区块链的内容和验证结果。

运行示例

将上述代码保存为 blockchain.php,然后在命令行中使用 php blockchain.php 来运行它。你将看到区块链的输出以及有效性验证的结果。

这是一个非常基础的实现,仅用于学习和理解区块链的基本概念。在实际应用中,区块链的实现会更加复杂,并涉及共识算法、网络协议、加密等多个方面。

喜欢就支持以下吧
点赞 0

发表评论

快捷回复: 表情:
aoman baiyan bishi bizui cahan ciya dabing daku deyi doge fadai fanu fendou ganga guzhang haixiu hanxiao zuohengheng zhuakuang zhouma zhemo zhayanjian zaijian yun youhengheng yiwen yinxian xu xieyanxiao xiaoku xiaojiujie xia wunai wozuimei weixiao weiqu tuosai tu touxiao tiaopi shui se saorao qiudale qinqin qiaoda piezui penxue nanguo liulei liuhan lenghan leiben kun kuaikule ku koubi kelian keai jingya jingxi jingkong jie huaixiao haqian aini OK qiang quantou shengli woshou gouyin baoquan aixin bangbangtang xiaoyanger xigua hexie pijiu lanqiu juhua hecai haobang caidao baojin chi dan kulou shuai shouqiang yangtuo youling
提交
评论列表 (有 0 条评论, 630人围观)

最近发表

热门文章

最新留言

热门推荐

标签列表