PHP 创建区块链

前话

提供一个思路帮助你了解区块链基础运作,文本并不是一个完整的区块链,希望你能举一反三

源码:

https://github.com/ar414-com/phpblock

记住

区块链是一个 不可变的、有序的 被称为块的记录链。它们可以包含交易、文件或任何您喜欢的数据。但重要的是,他们用哈希 一起被链接在一起

需要准备什么?
  • php5.6+

1、Block 区块

块是什么样的?

每个块都有一个索引,一个时间戳(Unix时间戳),一个事务列表, 一个校验(工作证明算法生成的证明)前一个块的哈希

block = {
   
    'index': 2,
    'timestamp': 1506057125,
    'transactions': [
        {
   
            'sender': "8527147fe1f5426f9dd545de4b27ee00",
            'recipient': "a77f5cdfa2934df3954a5c7c7da5df1f",
            'amount': 5,
        }
    ],  
    'proof': 324984774000,
    'previous_hash': "2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824"
}

在这一点上,一个 区块链 的概念应该是明显的 - 每个新块都包含在其内的前一个块的 哈希 。 这是至关重要的,因为这是 区块链 不可改变的原因:如果攻击者损坏 区块链 中较早的块,则所有后续块将包含不正确的哈希值。

新建一个Block类,区块链由N个区块组成,在区块链里,价值信息存储在区块之中。比如,比特币的区块存储交易记录,而交易记录是任何加密货币的核心。除此之外,区块里还包含有技术信息,比如它的版本号,当前的时间戳,以及上一个区块的哈希(Hash)。

<?php
/**
 * Created by PhpStorm.
 * User: ar414.com@gmail.com
 * Date: 2020/2/2
 * Time: 18:42
 */

class Block
{
   
    /**
     * @var integer 索引
     */
    private $index;

    /**
     * @var integer 时间戳
     */
    private $timestamp;

    /**
     * @var array 事务列表
     */
    private $transactions;

    /**
     * @var string 上一块的哈希值
     */
    private $previousHash;

    /**
     * @var integer 由工作证明算法生成的证明
     */
    private $proof;

    /**
     * @var string 当前块的哈希值
     */
    private $hash;

    /**
     * 通过调用方法返回新生成块的哈希
     * 防止外界改动
     * @return string
     */
    public function getHash()
    {
   
        return $this->hash;
    }

    public function __construct($index,$timestamp,$transactions,$previousHash,$proof)
    {
   
        $this->index        = $index;
        $this->timestamp    = $timestamp;
        $this->transactions = $transactions;
        $this->previousHash = $previousHash;
        $this->proof        = $proof;
        $this->hash         = $this->blockHash();
    }

    /**
     * 当前块签名
     * @return string
     */
    private function blockHash()
    {
   
        //我们必须确保这个字典(区块)是经过排序的,否则我们将会得到不一致的哈希值
        $blockArray = [
            'index' => $this->index,
            'timestamp' => $this->timestamp,
            'transactions' => 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值