51行代码实现简单的PHP区块链

2023-11-04

本文原始地址:php区块链demo

今年区块链特别火,我也很火啊。我火什么呢。前几年,公众平台出现,还得花时间去学去看,后来小程序出现,又得花时间精力去学去看。现在比特币、以太坊等去中心化货币带起了区块链的发展。还得学。

没办法,技术改变师姐。不,是改变世界。


前些天看到python写的50行代码实现的简单区块链。今天让我们PHP也实现一下区块链的简单流程。

phper或其他人如有需要可加PHP区块链交流群(370648191/201923866)。

只有一个类、4个方法。可直接运行。

<?php
/**
 * 简单的PHP区块链
 * @author Yoper
 * @PHP技术交流QQ群 370648191
 * @Email chen.yong.peng@foxmail.com
 * @wechat YoperMan
 */
namespace common\library\block;
/**
 * 区块结构
 */
class block{
    private $index;
    private $timestamp;
    private $data;
    private $previous_hash;
    private $random_str;
    private $hash;
    public function __construct($index,$timestamp,$data,$random_str,$previous_hash)
    {
        $this->index=$index;
        $this->timestamp=$timestamp;
        $this->data=$data;
        $this->previous_hash=$previous_hash;
        $this->random_str=$random_str;
        $this->hash=$this->hash_block();
    }
    public function __get($name){
        return $this->$name;
    }
    private function hash_block(){
        $str=$this->index.$this->timestamp.$this->data.$this->random_str.$this->previous_hash;
        return hash("sha256",$str);
    }
}
/**
 * 创世区块
 * @return \common\library\block\block
 */
function create_genesis_block(){
    return new \common\library\block\block(0, time(),"第一个区块",0,0);
}
/**
 * 挖矿,生成下一个区块
 * 这应该是一个复杂的算法,但为了简单,我们这里挖到前1位是数字就挖矿成功。
 * @param \common\library\block\block $last_block_obj
 */
function dig(\common\library\block\block $last_block_obj){
    $random_str = $last_block_obj->hash.get_random();
    $index=$last_block_obj->index+1;
    $timestamp=time();
    $data='I am block '.$index;
    $block_obj = new \common\library\block\block($index,$timestamp,$data,$random_str,$last_block_obj->hash);
    
    //前一位不是数字
    if(!is_numeric($block_obj->hash{0})){
        return false;
    }
    //数数字,返回块
    return $block_obj;
}
/**
 * 验证区块
 * 这也是一个复杂的过程,为了简单,我们这里直接返回正确
 * @param array $data
 */
function verify(\common\library\block\block $last_block_obj){
    return true;
}
/**
 * 生成随机字符串
 * @param int $len
 * @return string
 */
function get_random($len=32){
    $str="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
    $key = "";
    for($i=0;$i<$len;$i++)
    {
        $key.= $str{mt_rand(0,32)};//随机数
    }
    return $key;
}


header("Content-type:text/html;charset=utf-8");
//生成第一个区块
$blockchain=[\common\library\block\create_genesis_block()];
//模拟生成其他区块,我们直接循环生成。实际中,还需要跟踪互联网上多台机器上链的变化,像比特币会有工作量证明等算法,达到条件了才生成区块等
//我们的链是一个数组,实际生产中应该保存下来
$previous_block = $blockchain[0];
for($i=0;$i<=10;$i++){
    if(!($new_block=dig($previous_block))){
        continue;
    }
    $blockchain[]=$new_block;
    $previous_block=$new_block;
    
    //告诉大家新增了一个区块
    echo "区块已加入链中.新区块是 : {$new_block->index}<br/>";
    echo "新区块哈希值是 : {$new_block->hash}<br/>";
    print_r($new_block);
    echo "<br/><br/>";
}

以上文件可以直接运行。运行结果如下:


完善之后,就可以发行自己的货币或者智能合约了。

完。

可加以下微信,拉你进微信区块链行业交流群,请发送验证信息"区块链"。




陈永鹏的csdn博客地址:http://blog.csdn.net/chenyoper

陈永鹏的博客园地址:http://www.cnblogs.com/Yoperchen

性零糖 :http://sex.linglingtang.com

零零糖http://sex.linglingtang.com



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

51行代码实现简单的PHP区块链 的相关文章

  • 以太坊源码学习(一)

    转载自 https blog csdn net karizhang article details 79110981 背景 geth源码一直在不断增加 优化 发展到现在已经非常庞大 第一次看geth源码 会有不小的难度 虽然如此 还是可以从
  • 以太坊ERC-20协议详解

    区块链学习 https github com xianfeng92 Love Ethereum ERC20是以太坊定义的一个 代币标准 https github com ethereum EIPs blob master EIPS eip
  • 最跌宕也最精彩, Poly Network开启加密世界新征程

    毫无疑问 未来跨链协议在整个加密生态系统中的角色将会越来越重要 但同时 一旦出现问题影响范围也相对较大 因此必须要把防范黑客恶意入侵放在首位 并且持续做好必要的安全防护措施 与此同时 安全工作也要成为常态 比如定期进行安全测试 演练 做到未
  • 用Go构建一个简单的区块链

    在本教程中 我将尝试通过帮助你在Go中编写简单的区块链来揭开区块链的广义概念 在本教程中 你应该能够 理解区块链术语 创建自己的简单区块链 了解什么是区块以及如何创建块 了解如何维护区块链的完整性 区块链 一种数字分类帐 以较小的集合排列
  • Solidity中引入的SPDX是什么

    Solidity中引入的SPDX是什么 起因 Solidity 0 6 8 要求引入 SPDX 许可证 否则会出现警告 Warning SPDX license identifier not provided in source file
  • 区块链学习笔记16——以太坊中的交易树和收据树

    十六 以太坊中的交易树和收据树 每次发布一个交易的时候 那些交易会组织成一个交易树 也是一颗Merkle tree跟比特币中的情况是类似的 同时以太坊还增加了一个收据树 每个交易执行完之后会形成一个收据 记录这个交易的相关信息 交易树和收据
  • 区块链技术基本概念

    链客 专为开发者而生 有问必答 此文章来自链客区块链技术问答社区 未经允许拒绝转载 区块链技术根本概念 了解这些名词是一个不错的开端 公钥加密系统 Alice有一把公钥和一把私钥 她可以用她的私钥创建数字签名 而Bob可以用她的公钥来验证这
  • 以太坊燃烧第一个24小时,中文社区在关心什么?

    8月5日 在区块高度 12965000 北京时间8月5日20 33 备受瞩目的以太坊伦敦升级完成 伦敦升级涉及众多提案 其中最令人关注的是EIP 1559 该提案引入销毁机制 让链上费用更合理 同时也一定程度缓解了以太坊的通胀 截至8月6日
  • 重磅发布

    微众银行区块链积极听取社区意见和建议 基于多年研发FISCO BCOS底层开源平台的经验 沉淀了一套 FISCO BCOS应用落地指南 百科式地为FISCO BCOS的应用落地提供操作指引 现将该指南开放回馈社区 获取指南 可在文末添加 小
  • 从 sCrypt 智能合约中访问区块链数据(5)

    在本系列前几部分奠定的基础上 在本文中将演示如何在 BSV 中实现相对锁定时间 而无需新的操作码 OP CheckSequenceVerify 时间锁 时间锁会限制某些 BSV 的支出 直到指定的未来时间或区块高度 有两种类型的时间锁 绝对
  • 10分钟内用Ezo和Python构建以太坊Oracle

    上一篇 我写了用Web3 js构建以太坊Oracle 这个练习给了我一些新的Web3 js 1 0版本知识 许多新的好东西可供选择而且使用它实现一个简单的oracle非常容易 但是 显然必须有更好的方法 Instant Oracles 只需
  • FISCO BCOS——SmartDev-Contract——MarriageEvidence结婚证书合约案例分析

    MarriageEvidence结婚证书合约案例分析 一 合约场景分析 二丶基础合约介绍 1 角色合约 1 功能说明 2 接口说明 3 使用说明 2 存证合约 1 功能说明 2 接口说明 3 使用说明 三丶业务合约介绍 1 结婚证书合约 1
  • 华为云技术开放日(第三季)活动报道

    智能共生 链接未来 华为云技术开放日 第三季 精彩回顾 7 月 29日 8 月 12 日 由华为云与中生代技术社区联合主办的华为云技术开放日 第三季 圆满落下帷幕 本次技术开放日邀请了华为云 MVP 李弋凡 华为公司5G产品线首席架构师廖尔
  • 区块链技术的应用和数字资产,将会是未来不可阻挡的趋势和潮流

    前言 数字资产的发展 很可能是人类近千年金融史上又一次激动人心的变革 如果让你回到七年前重新选择一次投资机会的话 你可能会选择投资股票 然后坐等15年大牛市资产翻几倍 你也可能会投资房地产 然后坐等16年房地产爆发 资产翻番 但你万万想不到
  • 区块链开发之Solidity编程基础(一)

    Solidy是当前编写智能合约的主流语言 概要 sol文件结构 编译开发 引入其他文件 注释 代码注释 文档注释 合约 状态变量 类型 值类型 1 布尔类型 2 整型 3 地址 4 定长字节数组 5 有理数和整型字面量 6 枚举类型 7 函
  • 区块链的几大模块

    共识的分类 POW POW的一般理解 根据难度做SHA256哈希运算 不停寻找Nonce 特定的HASH 前导0的个数越多 代表难度越大 优点是难于计算 一旦收到网络上的区块 能快速验证 难度算法按高度动态调整 维持出块时间不变 POW规范
  • 你也可以构建私有区块链网络

    这是我如何构建私有区块链网络的一篇文章 你也可以 没有什么比自己构建区块链更能帮助理解区块链了 以下是我们将在这篇文章中完成的内容 下图我们以前可能见过 但基本上以太坊区块链网络只是很多EVM 以太坊虚拟机 或连接到每个其他节点的 节点 来
  • 从Java到区块链:如何成为区块链开发人员

    最近这些天 区块链是每个开发人员的谈资 来自各个领域的许多软件开发商现在正试图进入区块链市场 我们与Mobilunity的区块链软件开发人员Eugene Kyselev 讨论了他是如何走出区块链开发方面的第一步的 希望对大家有所帮助 JAX
  • 以太坊构建DApps系列教程(一):应用程序规则和区块链设置

    这将是一个如何使用以太坊区块链构建去中心化应用程序DApps的系列教程 第一篇教程重点介绍应用程序的规则和功能以及设置私有区块链 展示在使用或不使用DAO和应用程序的情况下如何构建自己自定义的以太坊代币 我们要构建3件事 自定义代币 使用代
  • 荐读

    本文转自 链闻 ChainNews 作者 Karen 虽然区块链技术诞生至今不过短短十余年 但是东西方天然的文化差异在加密世界中同样留下了一些痕迹 当社交媒体上关于 东方区块链 只关心币价 利益和投机而只有 西方区块链 才关心底层技术的革新

随机推荐

  • ROS通信编程_服务编程_客户端编程

    系统环境 Ubuntu16 04 实现一个客户端 1 初始化ROS节点 2 创建一个Client实例 3 发布服务请求数据 4 等待Server处理之后的应答结果 在功能包 src下新建文件client cpp 输入以下内容并保存退出 例程
  • 用ScrollView解决Android屏幕显示不全的问题

    当控件比较多而在界面不能完全显示时 如下图所示 可以用ScrollView解决上述问题 使其可以通过垂直滚动将最下面的控件显示出来 ScrollView也是一个Layout布局 可以让它内部的数据显示不下的时候出现滚动条 但需要注意的是 S
  • json对象的使用依赖:

    1 jackso依赖
  • java mysql 自动重连_JDBC实现Mysql自动重连机制的方法详解

    前言 本文主要给大家介绍的是关于jdbc实现mysql自动重连机制的相关内容 分享出来供大家参考学习 下面来一起看看详细的介绍 日志 using the connector j connection property autoreconne
  • JAVA的内存回收机制(快速入门版)

    java内存回收机制 内存回收 是JVM中垃圾回收器提供的一种用于在空闲时间不定时回收无任何对象引用的对象占据的内存空间的一种机制 引用 java中什么是引用 Person xiaoi new Person new person 以pers
  • 什么是NoSQL数据库?它与传统数据库有什么异同以及NoSQL的三大基石和四大类型

    1 NoSQL数据库的特点 灵活的可拓展性 NoSQL数据库在设计之初就是为了满足 横向扩展 的需求 灵活的数据模型 NoSQL数据库采用键 值 列族等非关系模型 允许在一个数据元素里存储不同类型的数据 与云计算紧密融合 NoSQL数据库凭
  • Java中的同步与锁机制详解

    作为Java程序员 我们都知道在编写多线程程序时 需要确保线程之间的同步与互斥 本文将详细介绍Java中的同步与锁机制 1 为什么需要同步与锁 在多线程环境中 如果多个线程同时访问共享资源 可能会导致数据不一致或其他不可预料的结果 为了解决
  • PTA -1012 数字分类

    1012 数字分类 20 分 给定一系列正整数 请按要求对数字进行分类 并输出以下 5 个数字 A 1 能被 5 整除的数字中所有偶数的和 A 2 将被 5 除后余 1 的数字按给出顺序进行交错求和 即计算 n 1 n 2 n 3 n 4
  • zigzag走线原理及应用

    电路板上弯弯扭扭的走线有什么用 往期文章 一文读懂高速互联的阻抗及反射 上 一文读懂高速互联的阻抗及反射 中 前面几篇文章有部分读者反馈太深奥 不好懂 要求来一点轻松易懂的 这不 它来了 本期文章我们来分享近期工作中的一个小故事 一段奇怪的
  • 数据结构学习——循环链表的使用

    一 循环链表的介绍 循环链表是一种特殊类型的链表 其中链表中的最后一个节点指向链表中的第一个节点 形成循环的结构 与普通链表相比 循环链表可以在链表中的任何位置进行遍历 并且可以方便地实现循环操作 在循环链表中 每个节点通常包含一个数据元素
  • vue3定义全局方法

    下面用element puls中的ElMessage组件为例 首先我在我的utils js工具类函数方法中定义了一个方法 代码如下 import ElMessage from element plus import element plus
  • 记网易面试总结

    最近进行了一次网易的社招面试 目前结果未知 但是从网易面试中我还是有一些体会 总结如下 作为非计算机专业的程序员来说 如果要进大厂 数据结构与算法是一定要补的 适度刷下leetcode中的算法题 大厂都好这一口 不要不信邪 我就以身试法了一
  • PHP用正则验证用户名

    在php中 用正则表达式写一个用户名的验证 要求 第一个字符为英文 只能用字母 数字 汉字 下划线 总长度限制在4 9位的昵称
  • vs2017 社区版本离线下载安装包

    百度得来 记录备忘 下载vS 2017 https visualstudio microsoft com zh hans thank you downloading visual studio sku Community rel 15 下载
  • Directx11教程三十八之Pick(拾取技术)

    这节教程是关于Pick 拾取技术的 程序的结构如下 在看这节教程前先弄懂 1 大概了解D3D11的渲染流水线 2 D3D11教程三十七之FrustumCulling 视截体裁剪 上半节教程 弄不懂也没关系 两节教程之间有一些联系 但是由于我
  • 完全二叉树——二叉堆(BinaryHeap)

    前言 优先队列是允许至少下列两种操作的数据结构 insert 插入 以及deleteMin 删除最小者 其中deleteMin的工作是找出 返回 并删除优先队列中最小的元素 insert操作等价于enqueue 入队 而deleteMin则
  • Mysql存储引擎

    目录 Mysql有哪些存储引擎 Mysql存储引擎IMyISAM与InnoDB区别 MyISAM索引与InnoDB索引的区别 InnoDB引擎的4大特性 如何选择存储引擎 一张表 里面有ID自增主键 当insert了17条记录以后 删除了第
  • 解决IDEA无法导入Maven项目jar包的问题 - 已解决

    当我们创建Maven项目的时候 经常会出现导入jar包失败的问题 如下图所示 发现我们导入的依赖下面都有红线 解决方法有以下几种 1 有可能是因为我们将 pom的文件忽略了 解决方法 找到 file gt settings gt Build
  • java jbutton数组_java-JButton需要显示图像数组

    我有一组存储在数组中的图像 我需要像幻灯片一样显示它们 下一个和上一个有两个JButton 它们使用户可以查看图像 但是我无法使按钮起作用 有什么建议吗 谢谢 import java awt Graphics import java awt
  • 51行代码实现简单的PHP区块链

    本文原始地址 php区块链demo 今年区块链特别火 我也很火啊 我火什么呢 前几年 公众平台出现 还得花时间去学去看 后来小程序出现 又得花时间精力去学去看 现在比特币 以太坊等去中心化货币带起了区块链的发展 还得学 没办法 技术改变师姐