PHPはブロックチェーンを構築します(ソースコードを含む)
php はブロックチェーン (ソース コードを含む) を構築します
PHP プログラミング言語を使用して構築しますブロックチェーン、ブロックチェーン自体は非常に単純な概念であり、非常に単純なデータ構造です。デジタル通貨は非常に複雑ですが、ブロックチェーンはそうではありません。ブロックチェーンが複雑である理由は、コンセンサスアルゴリズム、マイニングメカニズム、およびそれらで実行されるすべてです。しかし、ブロックチェーン自体は理解するのが非常に簡単です。ブロックチェーンがどのように機能するかを本当に理解する前に、何を知っておく必要がありますか?ハッシュとは何ですか?それらはどのように機能するのでしょうか?
ハッシュは基本的に、ある種のデータのデジタル署名です。たとえば、映画を撮ってハッシュしてデジタル署名を取得したり、電子メールを撮ってハッシュしてデジタル署名を取得したりできます。デジタル署名 ; 単語を取得してハッシュ化することもできます。任意のデータを取得してハッシュ化すると、ハッシュ値を取得できます。データにデジタル署名するだけです。
このハッシュは実際にはどのように機能するのでしょうか?詳しく見てみましょう。
PHP でブロックチェーンを構築します。これは非常に簡単です。プログラミングを少し知っていれば、何も知らなくても別の言語で行うこともできます。プログラミングについては、まだどのように機能するかについては大体理解できると思いますので、ハッシュについて話しましょう。
<?php $list1 = ["a","b","c"]; $list2 = ["a","b","c"]; echo "list 1: ".md5(serialize($list1)); echo "<br/>list 2: ".md5(serialize($list2)); ?>
ご覧のとおり、2 つのリストがあります。a、b、c を含む 2 つのリストがあります。これがデータで、これがハッシュしようとしている文字列です。何を見てみましょうリスト 1 と 2 から得られるデジタル署名の種類。
出力結果:
list 1: ec10e0c7a344da191700ab4ace1a5e26 list 2: ec10e0c7a344da191700ab4ace1a5e26
これら 2 つのハッシュ文字列またはデジタル署名を取得すると、これら 2 つは同じであることがわかります。
list1 の内容を変更すると、たとえば:
<?php $list1 = ["aaa","b","c"]; //Changed $list2 = ["a","b","c"]; echo "list 1: ".md5(serialize($list1)); echo "<br/>list 2: ".md5(serialize($list2)); ?>
これを実行します:
list 1: 97f4361000fdba1732a50f1771c9d830 list 2: ec10e0c7a344da191700ab4ace1a5e26
Completely が得られることがわかります。異なるデジタル署名なので、ちょっとした変更を加えるだけで、データに手を加えるだけで、このリストの何かを変更しようとすると、まったく異なるデジタル署名が得られます。これがブロックチェーン技術の基礎です。ブロックチェーンはブロックのリストであり、基本的にはブロックのリンクされたリストであり、各ブロックは前のブロックのデジタル署名を保持し、次のブロックのデジタル署名は現在のブロックのデジタル署名に基づいているため、ブロックは常にリンクされています。次の署名は現在の署名に基づいており、現在の署名は前の署名に基づいているため、過去に何かを変更すると、すべての署名が破壊され、見た目がまったく違ったものになります。
コーディング方法
実際にブロックチェーンのコーディングに入りましょう。最初に行う必要があるのは、Block クラスについて説明することです。この場合は、私たちのブロックは非常に単純で、含まれるものは 3 つだけです。このブロックで発生したトランザクションのリストが含まれます。前のブロックの以前のハッシュまたはデジタル署名が含まれます。また、ハッシュ自体も含まれます。ハッシュはトランザクションと前のハッシュに基づいているため、誰かが前のブロックで何かを変更すると、現在のブロックのデジタル署名が変更され、次のブロックのデジタル署名も変更されます。
お気に入りの IDE を使用して空の PHP プロジェクトを再生成します。私はローカルホスト環境で XAMPP を使用します。
ここで、新しいファイル block.php を作成し、その中に次のコード スニペットを挿入します。
<?php class Block{ private $previousHash; private $transactions=[]; private $blockHash; function __construct($previousHash,$transactions){ $this->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
<?php include("block.php"); $genesisTransaction = ["a sends 11 bitcoins to b","b sends 44 bitcoins to c"]; $genenisBlock = new Block(0, $genesisTransaction); $block1Transaction = ["a sends 11 bitcoins to b","b sends 44 bitcoins to c"]; $block1 = new Block($genenisBlock->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 "<br/>Block 1: ".$block1->getBlockHash(); echo "<br/>Block 2: ".$block2->getBlockHash(); ?>
出力結果:
Genesis Block: d9c559b57e148b19802d8e70555f0303 Block 1: 29e9e5a309aae81243fdf73112253c74 Block 2: fbff8f664f6b4069bf7288cb1b86cb3a
現在のハッシュが以前のハッシュに基づいていることを確認してください。ハッシュ、以前のトランザクションを変更すると、すべてのデジタル署名が有効になります。たとえば、genesisTransaction で 11 を 12 に変更すると、次のようにまったく異なる出力になります:
<?php include("block.php"); $genesisTransaction = ["a sends 12 bitcoins to b","b sends 44 bitcoins to c"]; //changed 11 to 12 $genenisBlock = new Block(0, $genesisTransaction); $block1Transaction = ["a sends 11 bitcoins to b","b sends 44 bitcoins to c"]; $block1 = new Block($genenisBlock->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 "<br/>Block 1: ".$block1->getBlockHash(); echo "<br/>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 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

あなたが経験豊富な PHP 開発者であれば、すでにそこにいて、すでにそれを行っていると感じているかもしれません。あなたは、運用を達成するために、かなりの数のアプリケーションを開発し、数百万行のコードをデバッグし、大量のスクリプトを微調整してきました。

Visual Studio Code (VS Code とも呼ばれる) は、すべての主要なオペレーティング システムで利用できる無料のソース コード エディター (統合開発環境 (IDE)) です。 多くのプログラミング言語の拡張機能の大規模なコレクションを備えた VS Code は、

JWTは、JSONに基づくオープン標準であり、主にアイデンティティ認証と情報交換のために、当事者間で情報を安全に送信するために使用されます。 1。JWTは、ヘッダー、ペイロード、署名の3つの部分で構成されています。 2。JWTの実用的な原則には、JWTの生成、JWTの検証、ペイロードの解析という3つのステップが含まれます。 3. PHPでの認証にJWTを使用する場合、JWTを生成および検証でき、ユーザーの役割と許可情報を高度な使用に含めることができます。 4.一般的なエラーには、署名検証障害、トークンの有効期限、およびペイロードが大きくなります。デバッグスキルには、デバッグツールの使用とロギングが含まれます。 5.パフォーマンスの最適化とベストプラクティスには、適切な署名アルゴリズムの使用、有効期間を合理的に設定することが含まれます。

文字列は、文字、数字、シンボルを含む一連の文字です。このチュートリアルでは、さまざまな方法を使用してPHPの特定の文字列内の母音の数を計算する方法を学びます。英語の母音は、a、e、i、o、u、そしてそれらは大文字または小文字である可能性があります。 母音とは何ですか? 母音は、特定の発音を表すアルファベットのある文字です。大文字と小文字など、英語には5つの母音があります。 a、e、i、o、u 例1 入力:string = "tutorialspoint" 出力:6 説明する 文字列「TutorialSpoint」の母音は、u、o、i、a、o、iです。合計で6元があります

このチュートリアルでは、PHPを使用してXMLドキュメントを効率的に処理する方法を示しています。 XML(拡張可能なマークアップ言語)は、人間の読みやすさとマシン解析の両方に合わせて設計された多用途のテキストベースのマークアップ言語です。一般的にデータストレージに使用されます

静的結合(静的::) PHPで後期静的結合(LSB)を実装し、クラスを定義するのではなく、静的コンテキストで呼び出しクラスを参照できるようにします。 1)解析プロセスは実行時に実行されます。2)継承関係のコールクラスを検索します。3)パフォーマンスオーバーヘッドをもたらす可能性があります。

PHPの魔法の方法は何ですか? PHPの魔法の方法には次のものが含まれます。1。\ _ \ _コンストラクト、オブジェクトの初期化に使用されます。 2。\ _ \ _リソースのクリーンアップに使用される破壊。 3。\ _ \ _呼び出し、存在しないメソッド呼び出しを処理します。 4。\ _ \ _ get、dynamic属性アクセスを実装します。 5。\ _ \ _セット、動的属性設定を実装します。これらの方法は、特定の状況で自動的に呼び出され、コードの柔軟性と効率を向上させます。
