PHP实现简易版区块链

2023-11-19

<?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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PHP实现简易版区块链 的相关文章

  • 《机器学习实战》第四章 Python3代码-(亲自修改测试可成功运行)

    由于Peter Harrington所著的这本 机器学习实战 中的官方代码是Python2版本的且有一些勘误 使用Python3的朋友运行起来会有很多问题 所以我将自己在学习过程中修改好的Python3版本代码分享给大家 以供大家交流学习
  • 统计学三大分布(卡方、t、F)即相应概率密度图的R语言实现

    三大统计分布 1 2 chi 2 2分布 设随机变量 X 1
  • Thinking in Java

    Thinking in Java Java编程思想 学习总结心得 一 前序 学习java也已经有大约两年时间 但大多数断断续续 零散没有系统学习 这次经多方推荐购买了一本java学习必读书籍 Thinking in Java 学习之余将书中
  • python3 [入门基础实战] 爬虫入门之智联招聘的学习(一)

    老实说 懵逼啊 这次爬取的是智联招聘上的求职数据 虽然没有仔细正确核对一下数据是否具有重复性 随机抽查了些 数据大部分还是能对上来的 这次爬取的智联招聘上的数据90页 每页60条 主要抓取的是android开发工程的数据 抓取的数据为全国的
  • 行业权威来揭秘,商用PC为什么首选12代酷睿

    第12代酷睿处理器可以提供更卓越的性能 凭借架构先进性让商用台式机和笔记本电脑为用户带来更好的体验 帮助企业和员工效率倍增 作者 九月 来源 PConline 想要让办公效率进一步提升 一台强大的PC设备是必不可少的生产力和内容创作工具 而
  • SQL Server如何建立表关系

    SQL Server怎么建立关系表 用教师表和学生表举例 两表建立关系之前 要检查连接的条件满足否 比如学生表里的外键 教师ID 要和教师表里的主键 教师ID 的数据类型相同 也就是建立关系的条件数据类型要相同 确认条件满足之后开始建立关系
  • 对象式单片机外部模块驱动编写详解——DAC8552为例

    对象式单片机外部模块驱动编写详解 DAC8552为例 对象式驱动原理 DAC8552基本介绍 DAC8552驱动抽象 源码文件及其解释 参考资料 具体的代码和例程请参照以下GitHub仓库 记得给我star哦 https github co
  • 区块链能提供有效的身份管理?

    随着身份盗窃和数据泄露在世界各地越来越多的情况下 身份验证是一个主要问题 对访问数据的人进行身份验证实际上是他们要求的 每天 数以百万计的人在网上进行不同的活动 从研究一个学术话题 到购买新的项目 到在社交媒体平台上发表评论 甚至进行不同的
  • /etc/init.d

    etc init d目录在Linux系统中可是大名鼎鼎 它只负责一件事情 但却涉及到全系统 它包含系统中各种服务的start stop脚本 从acpid到x11 common 其重要性可见一斑 init d 初始化脚本称之为System V
  • 如何生成序号_合并单元格自动添加序号,还在手动输入就out了,学会三组函数公式一秒搞定...

    相信许多同学在用Excel表格登记各类数据的时候 为了规范表格我们经常会用到序号来进行数据标记 许多朋友在更新序号的时候 基本都是手动输入1 2 3等等 然后手动往下拖动 但是这样数据量比较大的时候 就会比较麻烦 而且如果数据是有合并单元格
  • React-Native使用react-native-community/art实现水波纹、音频波动效果

    效果如下 可以通过改变volume值实现动态效果 贴组件代码 复制就能用 依赖package json react native community art 1 1 2 react native 0 61 4 组件代码DancingLine
  • 第一次竞赛-B.连接竹竿

    B 连接竹竿 Alice从市场上买了N根竹竿 每根竹竿都以 节 为单位 这些竹竿中最短的有A节 最长的有B节 其余竹竿各有长短 每根竿的节数也必定在 A B 范围内 现在Alice希望将这些竹竿用连接部件全部接成一根长竹竿 连接部件的长度忽
  • hive详解——RANK()、DENSE_RANK()、ROW_NUMBER()

    概念 RANK 排序相同时会重复 总数不会变 DENSE RANK 排序相同时会重复 总数会减少 ROW NUMBER 会根据顺序排算 实操讲解 现在有一张score表 做查询操作 SELECT RANK over PARTITION BY
  • 初识C++

    目录 前言 什么是C 1 第一个关键字 namespace 1 namespace的用处 2 如果使用命名空间中的变量和函数 2 C 的输入和输出函数 3 缺省参数 4 函数重载 5 引用 1 初识引用 2 引用的类型 3 引用的特性 4
  • 微信小程序领取查看优惠券,会员卡总结

    又见面了 新项目新需求 这次谈谈小程序微信卡券领卡到查看卡券的功能 在做之前 脑子一头雾水 网上查了资料 基本都是领取卡券的介绍 以为很难实现呢 其实主要工作还是在后台配置以及接口处理 前端的工作量不多 主要就是调取小程序提供的卡券接口 a
  • Gephi入学教程基础记录

    Gephi入学教程基础记录 Gephi版本0 8 1 1 CSV数据输入 1 1 中文显示问题 1 2 标签设置 2 自动生成数据 3 编辑工具介绍 1 节点的移动 2 节点的放大和缩小 3 调整节点颜色 4 边的粗细的调整 6 节点的编辑
  • (可能是)完美解决WSL2重启变IP问题

    WSL2的升级对比WSL1 IO升级是巨大的 以及完整的Linux内核 等等都是完美的Linux发行版 Windows10 解决方法有几步一步一步解决 编辑bat脚本 此方法在 microsoft WSL issues 418 获得 开机启
  • Anlios装grouplist 组件之后报错,安装tiger-vncserver

    因为之前升级了一个epel release源 然后containerd也装进去了 但是版本太低 然后以为是runc挡住了 发现没有runc 删完了containerd就可以装了 rpm ivh http mirrors wlnmp com
  • 用数组实现队列和循环队列

    1 先用数组实现一个队列 package com lv queue import java util Scanner public class ArrayQueueDemo public static void main String ar
  • Unity重要知识点

    脚本生命周期 每当脚本被加载时调用一次 1 在Awake中做一些初始化操作 void Awake 初始化public成员 2 在每次激活脚步时调用 void OnEnable 在第一次调用Update之前调用一次Start 即使取消激活 再

随机推荐

  • 通过注册表永久更改cmd控制台的编码为65001

    1 Win R快捷键打开注册表输入regedit 2 路径填入 计算机 HKEY LOCAL MACHINE SOFTWARE Microsoft Command Processor 3 在右边窗口新建字符串值autorun 4 双击打开a
  • Pytest自动化测试框架

    fixture 特点 命令灵活 对于setup teardown可以省略 数据共享 在conftest py配置里写方法可以实现数据共享 不需要import导入 可以跨文件共享 scope的层次及神奇的yield组合相当于各种setup和t
  • win10 ping不通 Docker ip(解决截图)

    背景 win10下载了docker desktop就是这个图 然后计划做一个springboot连接docker docker部署springboot docker 部署springboot 成功 截图 總鑽風的博客 CSDN博客 问题 s
  • 区块链技术及应用概述

    一 基本概念 什么是区块链 区块链是一种以密码学方式保证的不可篡改和不可伪造的分布式账本 关键特点 去中心化 不可篡改性 匿名性 安全可信 区块链架构 1 数据层 主要描述区块链系统的物理形式 它是从Genesis区块开始的区块链链结构 包
  • Java学习笔记11

    API与String 什么是API String String的构造方法 String对象的特点 字符串的比较 获取字符串的字符 什么是API api是application programming interface 应用程序编程接口 S
  • AD20 如何更改标题栏?Altium Designer20 实用技巧系列教程(二)

    AD20 如何更改标题栏 Altium Designer20 实用技巧系列教程 二 视频地址 https www bilibili com video BV1kf4y117TH
  • C语言程序环境剖析——探究从.c到.exe之路

    程序环境 1 程序的翻译环境和执行环境 2 详解编译 链接 2 1 翻译环境 2 2 编译的三部分 预编译 编译 汇编 2 3链接 3 运行环境 1 程序的翻译环境和执行环境 在ANSI C的任何一种实现中 都存在两个不同的环境 翻译环境
  • JavaWeb —— AJAX

    目录 AJAX 基本介绍 A synchronous JavaScript And XML 多用在 1浏览器搜索联想 2用户注册中离开光标 校验数据的正确性 同步和异步的区别 AJAX快速入门 AJAX 基本介绍 A synchronous
  • Manjaro deepin 睡眠后无法唤醒

    最近尝试换了新的桌面 之前是xfce 使用deepin感觉很棒 也很好看 但是遇到下面一个问题 问题 因为我是双系统 因此经常会来回切win linux 但是发现换了deepin桌面后睡眠无法使用了 经常一睡就凉咯 无法唤醒 经过查找问题
  • Activity的四种启动模式和应用场景

    Activity的四种启动模式和应用场景 简介 通过设置ActivityManifestActivity launchMode可以设置Activity的启动模式 默认情况下 使用启动模式 standard 同时 launchMode可以通过
  • 算法编程6:连续子数组的最大和

    问题描述 输入一个整型数组 数组中的一个或连续多个整数组成一个子数组 求所有子数组的和的最大值 要求时间复杂度为O n 示例 输入 nums 2 1 3 4 1 2 1 5 4 输出 6 解释 连续子数组 4 1 2 1 的和最大 为 6
  • CentOS的Linux系统安装docker

    docker的官方网站教程 https docs docker com engine install centos prerequisites 参照官方教程 安装了 yum install y yum utils 搜索其他教程都安装了 yu
  • 字节流、字节流、转换流、打印流

    字节流 字节流 转换流 打印流 一 字符流 概述 字符流只能操作有文字的文件 纯文本文件 字符流的操作原理 字符输入流 先把字节从文件中读取出来 使用的字节流读的 根据文件的编码集把字节数变为对应的字符 把字符 读到内存中 解码的过程 字符
  • react组件状态同步-状态提升

    假设定义组件TemperatureInputSon import React from react class TemperatureInputSon extends React Component constructor props su
  • Linux安装部署Tomcat服务器

    Tomcat Tomcat 服务器是一个免费的开放源代码的Web 应用服务器 属于轻量级应用服务器 在中小型系统和并发访问用户不是很多的场合下被普遍使用 是开发和调试JSP 程序的首选 对于一个初学者来说 可以这样认为 当在一台机器上配置好
  • 【MATLAB第19期】基于贝叶斯Bayes算法优化CNN-LSTM长短期记忆网络的单列时间序列模型及多输入单输出回归预测模型

    基于贝叶斯Bayes算法优化CNN LSTM长短期记忆网络的单列时间序列模型及多输入单输出回归预测模型 前言 前面在 MATLAB第8期 讲解了基于贝叶斯Bayes算法优化LSTM长短期记忆网络的时间序列预测模型 即单输入数据时间序列预测
  • 从“玩枪”到“玩键盘”,退伍军人到程序员的华丽转型

    前言 我的生活平淡无奇 甚至可以说毫无希望 如果你了解我以前的生活 再看到我现在的境况 一定会惊讶 为什么一个人的变化会如此之大 叛逆 事情要从上学时候说起 我从小就是一个叛逆的孩子 贪玩 不爱学习 喜欢 舞枪弄棒 所以在学校的成绩一直都不
  • win10下安装vivado 2018.3之后ise14.7 的impact 无法使用

    软件版本号 操作系统win10 ise14 7 vivado 2018 3 ise14 7 在win10里面问题总结 1 ise14 7 闪退问题 比较好解决 论坛上比较多的解决方法 2 ise 14 7 windows 10 版本的ise
  • Extjs ToolBar动态更改图标

    使用setIconClass方法 Ext getCmp javaEye setIconClass javaEyeCss 其中 javaEye 是toolbar里的一个图标项 javaEyeCss 是css里定义的一个样式 形如 javaEy
  • PHP实现简易版区块链