热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

php构建一个区块链(含源码)

我们要用PHP编程语言构建区块链,区块链本身就是一个非常简单的概念,它是一个非常简单的数据结构,数字货币是很复杂,但区块链不是,它们复杂的原因是共识算法。在你真正了解区块链,需要知道什么是哈希。

这个hash哈希实际上是如何工作的?让我们深入了解下。

我们将在PHP中构建区块链,这将非常简单,如果你懂一点儿编程,你也可以用另一种语言来做,如果你不懂编程,我想你仍然能够大致理解它是如何工作的,所以让我们来谈谈哈希hash。

list 2: ".md5(serialize($list2));
?>

正如你所看到的,我们有两个列表,我们有两个包含a、b、c的列表,这是数据,这是我们试图hash的字符串,让我们看看我们从列表1和2中得到什么样的数字签名。

输出结果:

list 1: ec10e0c7a344da191700ab4ace1a5e26
list 2: ec10e0c7a344da191700ab4ace1a5e26

你可以看到,当我们得到这两个哈希字符串或数字签名,这两个是相同的。

如果我现在改变list1中的内容,例如:

list 2: ".md5(serialize($list2));
?>

现在我在运行它:

list 1: 97f4361000fdba1732a50f1771c9d830
list 2: ec10e0c7a344da191700ab4ace1a5e26

你可以看到我们得到了完全不同的数字签名,所以如果我只是做一个小的修改,我只是干预数据,我试图改变这个列表中的任何东西,我将得到完全不同的数字签名,这是区块链技术的基础,因为区块链是一个块的列表,基本上是一个由区块组成的链表和每个块保持前一个块的数字签名,并且下一个块的数字签名是基于当前块的数字签名,所以它们总是关联在一起,下一个签名将基于当前签名而当前签名是基于以前的签名,所以如果你改变过去的任何东西,你会打破所有的签名,他们将看起来完全不同。

如何编码

让我们实际进入我们的区块链编码,我们需要做的第一件事是谈论我们的Block类,在这种情况下,我们的块将非常简单,它只包含三个东西,它将包含在该块中发生的交易列表,它将包含先前的哈希或数字签名的前一个块,它也将包含哈希的本身,这个哈希将基于交易和以前的哈希,所以如果任何人改变任何东西在前一块,数字签名的当前块将改变,并改变下一个块的数字签名。

使用你喜欢的IDE重新生成空的PHP项目,我在本地主机环境中使用XAMPP。

现在创建一个新的文件block.php,并在其中放入下面的代码片段。

previousHash = $previousHash;
                             $this->transactiOns= $transactions;
                             $cOntents= [md5(serialize($transactions)),$previousHash];
                             $this->blockHash = md5(serialize($contents));
              }
              function getPreviousHash(){
                             return $this->previousHash;
              }
              function getTransactions(){
                             return $this->transactions;
              }
              function getBlockHash(){
                             return $this->blockHash;
              }
    }
?>

现在创建另一个名为index.php的文件,并使用block.php类来创建一些块。

index.php

getBlockHash(), $block1Transaction);
    $block2Transaction = ["a sends 11 bitcoins to b","b sends 44 bitcoins to c"];
    $block2 = new Block($block1->getBlockHash(), $block2Transaction);
    echo "Genesis Block: ".$genenisBlock->getBlockHash();
    echo "
Block 1: ".$block1->getBlockHash(); echo "
Block 2: ".$block2->getBlockHash(); ?>

输出结果:

Genesis Block: d9c559b57e148b19802d8e70555f0303
Block 1: 29e9e5a309aae81243fdf73112253c74
Block 2: fbff8f664f6b4069bf7288cb1b86cb3a

请看当前哈希将基于以前的哈希,如果你改变了任何先前的交易,你的所有数字签名将生效,例如,在genesisTransaction中,我改变了11到12,它将输出完全不同的,如:

getBlockHash(), $block1Transaction);
    $block2Transaction = ["a sends 11 bitcoins to b","b sends 44 bitcoins to c"];
    $block2 = new Block($block1->getBlockHash(), $block2Transaction);
    echo "Genesis Block: ".$genenisBlock->getBlockHash();
    echo "
Block 1: ".$block1->getBlockHash(); echo "
Block 2: ".$block2->getBlockHash(); ?>

输出结果:

Genesis Block: d9c559b57e148b19802d8e70555f0303
Block 1: 29e9e5a309aae81243fdf73112253c74
Block 2: fbff8f664f6b4069bf7288cb1b86cb3a

你可以看到任何一个交易的变化,在一个块中的任何一个数据将传播和改变未来的区块链中所有的数字签名,这就是区块链的工作原理,因为如果我改变了什么,每个人都会看到我的数字签名完全不同于其他人,所以这意味着我在欺骗别人。就如同我告诉每个人,嘿,一个人给了我很多比特币,这里是区块链,请每个人确认下。每个人将查看它并说清楚,我们知道这个区块链无法确认这一点,因为我们有自己版本的区块链,数字签名会是完全不同,所以这不行。

我希望你能理解通过它们的数字签名将区块的哈希链接在一起的这一基本概念。在你的PHP中实现这个例子吧。

本文转自:https://blog.csdn.net/mongo_node/article/details/81700425

推荐教程:《php教程》

以上就是php构建一个区块链(含源码)的详细内容,更多请关注 第一PHP社区 其它相关文章!


推荐阅读
  • MACElasticsearch安装步骤及验证方法
    本文介绍了MACElasticsearch的安装步骤,包括下载ZIP文件、解压到安装目录、启动服务,并提供了验证启动是否成功的方法。同时,还介绍了安装elasticsearch-head插件的方法,以便于进行查询操作。 ... [详细]
  • 四月份NFT优质榜单
    四月份NFT优质榜单 ... [详细]
  • 范式转移:构建超级应用——胖应用 + 胖协议
    范式转移:构建超级应用——胖应用 + 胖协议 ... [详细]
  • 为元宇宙提供动力的 5 项重要技术
    元宇宙是你肯定听说过的东西。在过去的一年里,每个人都在谈论它。这是技术领域的下一件大事。Bloomberg情报高级行业分析师马修·坎特曼(MatthewKanterman)的分析显 ... [详细]
  • 2018区块链技术及应用峰会(BTA)倒计时5天,中国全日程公布
    2018区块链技术及应用峰会(BTA)中国倒计时5天2018,想要follow最火的区块链技术?你还差一场严谨纯粹的技术交流会——2018区块链技术及应 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • Windows下配置PHP5.6的方法及注意事项
    本文介绍了在Windows系统下配置PHP5.6的步骤及注意事项,包括下载PHP5.6、解压并配置IIS、添加模块映射、测试等。同时提供了一些常见问题的解决方法,如下载缺失的msvcr110.dll文件等。通过本文的指导,读者可以轻松地在Windows系统下配置PHP5.6,并解决一些常见的配置问题。 ... [详细]
  • 本文详细介绍了PHP中与URL处理相关的三个函数:http_build_query、parse_str和查询字符串的解析。通过示例和语法说明,讲解了这些函数的使用方法和作用,帮助读者更好地理解和应用。 ... [详细]
  • 区块链为什么是不可篡改的
    不可篡改是区块链最为重要的特性和应用之一。其是由区块链本身的结构、共识机制、网络拓扑和加 ... [详细]
  • Smrti Lab 和 ArkStream Demo Day 10 个参展新项目一览
    元宇宙、跨链桥、NFT交易市场、期权产品服务商、Layer1、DID、Web3基础设施等领域的被投项目参与路演。 ... [详细]
  • 朱晔的互联网架构实践心得S1E7:三十种架构设计模式(上)【下载本文PDF进行阅读】设计模式是前人通过大量的实践总结出来的一些经验总结和最佳实践。在经过多年的软件开发实践之后,回过头 ... [详细]
  • 前面刚有AWS开战MongoDB,双方“隔空互呛”,这厢又曝出2亿+简历信息泄露——MongoDB的这场开年似乎“充实”得过分了些。长期以来,作为“最受欢迎的NoSQL数据库”,M ... [详细]
  • 美国加密货币交易所Coinbase日前在超级碗上投放广告,这则广告可以说非常有创意,吸引大量用户 ... [详细]
  • 在程序设计竞赛中使用Go语言
    在程序设计竞赛中使用Go语言,Go语言社区,Golang程序员人脉社 ... [详细]
author-avatar
a104989195
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有