PHP从零实现区块链(网页版一)基本原型

这篇具有很好参考价值的文章主要介绍了PHP从零实现区块链(网页版一)基本原型。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

源码地址:PHP从零实现区块链(一)基本原型 - 简书

本例只是从网页版实现一下原理,源码非本人所写,只是将原帖的源码更改了一下,变成网页版。

因为只是通过php来了解一下区块链的基本原理,我就不搭建php的控制台实现了。

学习前的准备:

搭建php运行环境,这个我推荐用phpstudy,一键安装,一键启动,很省事。

安装好后,我们启动apache服务器,然后点配置,确定网站的根目录如下:

PHP从零实现区块链(网页版一)基本原型,# php从零实现区块链(网页版),区块链,php,开发语言,区块链

然后我们在根目录www文件夹下,新建一个index.php,输入如下代码:

<?php
echo phpinfo();
?>

保存,然后打开浏览器,输入localhost,如果出现以下页面:

PHP从零实现区块链(网页版一)基本原型,# php从零实现区块链(网页版),区块链,php,开发语言,区块链

则表明安装成功,php运行正常。

2.第一步成功后,我们接下来安装vscode,方便写代码。当然你如果愿意用记事本写,也可以跳过这步,安装vscode就不介绍了,就跟正常安装软件一样。

网页版实现:

接着我们用vscode打开www文件夹。

1.新建block.php文件,输入如下代码保存:

<?php

class Block
{
    /**
     * 当前时间戳,也就是区块创建的时间
     * @var int $timestamp
     */
    public $timestamp;

    /**
     * 区块存储的信息,也就是交易
     * @var string $data
     */
    public $data;

    /**
     * 前一个块的哈希,即父哈希
     * @var string $prevBlockHash
     */
    public $prevBlockHash;

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

    public function __construct(string $data, string $prevBlockHash)
    {
        $this->prevBlockHash = $prevBlockHash;
        $this->data = $data;
        $this->timestamp = time();
        $this->hash = $this->setHash();
    }

    public function setHash(): string
    {
        return hash('sha256', implode('', [$this->timestamp, $this->prevBlockHash, $this->data]));
    }
}

解释:上面创建了一个block类,里面的构造函数:

    public function __construct(string $data, string $prevBlockHash)

需要传入两个参数,块数据data,和上一个块的哈希值prevBlockHash,这两个数据之后都传给了block对应的变量。

但是块里创建了四个变量,还有两个timestamp和hash,没被赋值。

那么timestamp是块创建时间,这个直接用time()赋值就可以了。

而hash是当前块的哈希,这个是动态计算的,所以得块前面三个变量有值了,然后才能获得。

所以后面通过调用setHash获得了哈希。(sethash的功能是将前三个变量数据合在一起,然后进行哈希运算,返回哈希值)

这样的话,我们new book("填此区块数据","填入此区块上一个区块的哈希")就能创建一个块,把两个参数填好,然后块里面就都有数据了。

2.新建BlockChain.php文件,输入如下代码保存:

<?php
require_once 'block.php';
class BlockChain
{
    /**
     * @var Block[] $blocks
     */
    public $blocks;

    public function __construct(Block $block)
    {
        $this->blocks[] = $block;
    }

    // 加入一个块到区块链中
    public function addBlock(string $data)
    {
        $prevBlock = $this->blocks[count($this->blocks) - 1];
        $newBlock = new Block($data, $prevBlock->hash);
        $this->blocks[] = $newBlock;
    }
    // 初始化创世区块
    public static function NewGenesisBlock()
    {
        $block = new Block('Genesis Block', '');

        return new BlockChain($block);
    }
}

注意,因为在blockchain.php里面使用了block.php块里的类,所以开头我们得加上

require_once 'block.php';

引入一下,不然识别不到。

解释:BlockChain是用来管理block类的,它的里面有个block数组变量,用来存储块。

然后还有一个NewGenesisBlock用来创建创世块,因为第一个块里面不存在前一个块哈希值,所以

得有这个函数用来创建第一个块做引子。

在NewGenesisBlock里有个 return new BlockChain(),所以BlockChain的构造函数是配合 

NewGenesisBlock来使用的。

那么运行了newGenesisBlock()函数后,结果就是创建了一个BlockChain对象,并且里面的block数组已经有了一个值block[0]就是创世块。

然后剩下的,通过addBlock来添加块就行了,它是怎么加的呢?

块数据data是需要你传进去的,然后它的上一个哈希值,只要访问BlockChain对象里的block数组最后一位就可以获得。这样我们就有了data和prevBlockHash。

有了这两个,直接调用block类的构造函数new block(data,prevBlockHash)就能创造出区块了。

然后把这个块追加到block[]数组里去就可以了。

3.新建app.php文件,输入如下代码:

<?php
require_once 'BlockChain.php';

$bc = BlockChain::NewGenesisBlock();
$bc->addBlock('i am 2 block');
$bc->addBlock('i am 3 block');

foreach ($bc->blocks as $block){
    print_r($block);
    echo('<hr>');
 }

同样有require_once 'BlockChain.php';App.php使用了BlockChain类。

完成后WWW文件夹下最终如下:

PHP从零实现区块链(网页版一)基本原型,# php从零实现区块链(网页版),区块链,php,开发语言,区块链

那么我们在浏览器输入http://localhost/app.php,运行一下,结果如下:

PHP从零实现区块链(网页版一)基本原型,# php从零实现区块链(网页版),区块链,php,开发语言,区块链

OK,成功运行。 文章来源地址https://www.toymoban.com/news/detail-799409.html

到了这里,关于PHP从零实现区块链(网页版一)基本原型的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • php 原型模式

    一,原型模式,就是先创建好一个原型对象,然后通过拷贝原型对象来生成新的对象。适用于大对象的创建,因为每次new一个大对象会有很大的开销,原型模式仅需内存拷贝即可。 原型模式中的主要角色: 1,抽象原型(Prototype)角色:声明一个克隆自身的接口。 2,具体原

    2024年02月15日
    浏览(26)
  • PHP实践:手把手微信公众号网页授权登录功能实现

    🏆作者简介,黑夜开发者,全栈领域新星创作者✌,CSDN博客专家,阿里云社区专家博主,2023年6月CSDN上海赛道top4。 🏆数年电商行业从业经验,历任核心研发工程师,项目技术负责人。 🏆本文已收录于PHP专栏:PHP进阶实战教程。 🏆另有专栏PHP入门基础教程,希望各位大佬

    2024年02月12日
    浏览(52)
  • 从零开始的PHP开发逆天路——语法

    PHP 脚本在服务器上执行,然后将纯 HTML 结果发送回浏览器。 PHP 脚本可以放在文档中的任何位置。 PHP 脚本以 ?php 开始,以 ? 结束: ?php // PHP 代码 ? PHP 文件的默认文件扩展名是 .php。 PHP 文件通常包含 HTML 标签和一些 PHP 脚本代码。 向浏览器输出文本 \\\"Hello World!\\\": !DOCTYPE htm

    2024年04月17日
    浏览(40)
  • 如何使用PHP开发网页定时刷新功能

    如何使用PHP开发网页定时刷新功能 随着互联网的发展,越来越多的网站需要实时更新显示数据。而实时刷新页面是一种常见的需求,它可以让用户在不刷新整个页面的情况下获得最新的数据。本文将介绍如何使用PHP开发网页定时刷新功能,并提供代码示例。 1.使用Meta标签定

    2024年02月12日
    浏览(60)
  • 【PHP】PHP基本语法

    当解析一个文件时,PHP 会寻找起始和结束标记,也就是 ?php 和 ?,告诉 PHP 开始和停止解析二者之间的代码。此种解析方式使得 PHP 可以被嵌入到各种不同的文档中去,而任何起始和结束标记之外的部分都会被 PHP 解析器忽略。 PHP 有一个 echo 标记简写 ?=, 它是更完整的 ?php

    2024年02月11日
    浏览(49)
  • HTML、PHP实战:搭建一个网页登录页面。

    一、实验环境。 MySQL5.7.26 FTP0.9.60 Apache2.4.39 我这里用的是PHPstudy小皮一键搭建的。 数据库  二、登录页面。 登录页面前端代码 文件名:denglu.html 登录页面后端代码 文件名:denglu.php 使用127.0.0.1跟文件名访问网页。 效果演示   可以看到当我们输入用户名:zhangsan 密码:12345

    2024年02月06日
    浏览(54)
  • PHP取当前网页完整url地址的方法

    PHP获取URL方法汇总: 1.PHP取当前网页完整url地址的方法 2.php 获取当前页面的url地址不包括参数的方法教程 3.php中其它关于获取url地址的操作方法 上面给出两个关于php获取页面完整url地址的函数,会将url中提交的参数也一并获取到,如果我们只单单的获取一个地址而不需要参

    2024年02月07日
    浏览(49)
  • php做网页版剪刀石头布的功能

    实例讲述了php实现的网页版剪刀石头布攻略在玩游网上的设计。分享给大家供大家参考,具体如下:   ?php /* * Created on 2016-11-25 * */ if (isset($_POST[\\\'sub\\\'])) { $what = $_POST[\\\'what\\\']; //需要输入的数组 $my_array = array(\\\"剪刀\\\",\\\"石头\\\",\\\"布\\\"); //获胜规则 $guize = array(array(\\\"剪刀\\\",\\\"布\\\"),array(\\\"布\\\",\\\"石头

    2024年02月17日
    浏览(39)
  • 大学生PHP个人博客网站源码 简单个人动态网站设计模板 PHP毕业设计成品 学生PHP MYSQL日志管理系统网页

    PHP MYSQL个人博客网站作品使用php+mysql开发,系统编码简单,大学生PHP毕业设计水平。系统随处可见增删改查等基本操作,有批量删除之功能,涉及的知识点比较全面。 数据库共6张数据表,表之间有关联,设计合理;系统具有管理员和会员两种用户角色,管理员(即日志的所

    2024年02月12日
    浏览(69)
  • PHP 房产网站系统Dreamweaver开发mysql数据库web结构php编程计算机网页项目

    一、源码特点     PHP 房产网站系统是一套完善的WEB设计系统,对理解php编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。 源码 https://download.csdn.net/download/qq_41221322/88233553 论文 https://download.csdn.net/download/qq_41221322/88233555 PHP 房产网站系统Drea

    2024年02月12日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包