phpはどのように自分のブロックチェーンを構築しますか?


PHPプログラミング言語でブロックチェーンを構築するには、ブロックチェーン自体が非常に簡単な概念であり、非常に簡単なデータ構造であり、デジタル通貨は複雑であるが、ブロックチェーンではなく、複雑な原因は共通認識アルゴリズムであり、掘削メカニズムと彼らの上で運行されているすべてであるが、ブロックチェーン自体は理解しやすい.ブロックチェーンがどのように機能しているかを本当に理解する前に、何を知っておく必要がありますか.ハッシュhashとは何かを知る必要がありますか.どのように働いていますか?
ハッシュは基本的にあるデータのデジタル署名であり、例えば映画を撮ることができ、hashしてデジタル署名を得ることができる.電子メールを持って、hashとデジタル署名を得ることができます.1つの字を持ってもいいし、hashを持ってもいいし、どんなデータを持ってもいいし、hashを持ってもいいし、hash値を得ることができます.データにデジタル署名するだけです.
このhashハッシュは実際にどのように働いていますか?深く理解してみましょう.
PHPでブロックチェーンを構築します.これは非常に簡単です.プログラミングが少し分かれば、別の言語でもできます.プログラミングが分からなければ、どのように働いているのか大体理解できると思います.ハッシュhashについて話しましょう.

    $list1 = ["a","b","c"];
    $list2 = ["a","b","c"];
    echo "list 1: ".md5(serialize($list1));
    echo "
list 2: "
.md5(serialize($list2)); ?>

ご覧のように、私たちは2つのリストを持っています.私たちはa、b、cを含む2つのリストを持っています.これはデータです.これはhashを試みた文字列です.リスト1と2からどのようなデジタル署名を得たかを見てみましょう.
出力結果:
list 1: ec10e0c7a344da191700ab4ace1a5e26
list 2: ec10e0c7a344da191700ab4ace1a5e26

この2つのハッシュ文字列またはデジタル署名が得られると、この2つは同じであることがわかります.
リストt 1の内容を変更すると、たとえば次のようになります.

    $list1 = ["aaa","b","c"]; //Changed
    $list2 = ["a","b","c"];
    echo "list 1: ".md5(serialize($list1));
    echo "
list 2: "
.md5(serialize($list2)); ?>

これを実行します.
list 1: 97f4361000fdba1732a50f1771c9d830
list 2: ec10e0c7a344da191700ab4ace1a5e26

私たちが全く異なるデジタル署名を得たのを見ることができます.だから、もし私が小さな修正をしただけで、私はデータに介入しているだけで、私はこのリストの中の何かを変えようとしています.私は完全に異なるデジタル署名を得ることができます.これはブロックチェーン技術の基礎です.ブロックチェーンはブロックのリストです.基本的にはブロックからなるチェーンテーブルと各ブロックは前のブロックのデジタル署名を保持し、次のブロックのデジタル署名は現在のブロックのデジタル署名に基づいているので、常に関連付けられています.次の署名は現在の署名に基づいており、現在の署名は以前の署名に基づいているので、過去のものを変更すると、すべての署名を破ることになります.彼らは全然違うように見えます.
エンコード方法
実際にブロックチェーン符号化に入りましょう.私たちが最初にしなければならないことはBlockクラスについて話します.この場合、私たちのブロックは非常に簡単になります.それは3つのものしか含まれません.それはブロックで発生した取引リストに含まれます.それは前のハッシュまたはデジタル署名の前のブロックを含み、ハッシュ自体も含まれます.このハッシュは取引と以前のハッシュに基づいているので、誰かが前のブロックで何かを変更すると、デジタル署名の現在のブロックが変更され、次のブロックのデジタル署名が変更されます.
あなたの好きなIDEを使用して空のPHPプロジェクトを再生成し、私はローカルホスト環境でXAMPPを使用します.
新しいファイルblock.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

    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 "
Block 1: "
.$block1->getBlockHash(); echo "
Block 2: "
.$block2->getBlockHash(); ?>

出力結果:
Genesis Block: d9c559b57e148b19802d8e70555f0303
Block 1: 29e9e5a309aae81243fdf73112253c74
Block 2: fbff8f664f6b4069bf7288cb1b86cb3a

現在のハッシュは以前のハッシュに基づいています.もしあなたが以前の取引を変更したら、あなたのすべてのデジタル署名が有効になります.例えば、genesisTransactionで、私は11から12を変更しました.それは出力が全く違います.

    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 "
Block 1: "
.$block1->getBlockHash(); echo "
Block 2: "
.$block2->getBlockHash(); ?>

出力結果:
Genesis Block: d9c559b57e148b19802d8e70555f0303
Block 1: 29e9e5a309aae81243fdf73112253c74
Block 2: fbff8f664f6b4069bf7288cb1b86cb3a

あなたはいかなる取引の変化を見ることができて、1つのブロックの中のいかなるデータは未来のブロックチェーンの中のすべてのデジタル署名を伝播して変えることができて、これはブロックチェーンの仕事の原理で、もし私が何を変えたら、すべての人は私のデジタル署名が他の人とは全然違うことを見て、だからこれは私が他の人をだましていることを意味します.私が一人一人に言ったように、ねえ、一人でビットコインをたくさんくれました.ここはブロックチェーンです.一人一人確認してください.誰もがそれを見て、私たちはこのブロックチェーンがこれを確認できないことを知っています.私たちは自分のバージョンのブロックチェーンを持っているので、デジタル署名はまったく違います.だから、これはできません.
それらのデジタル署名を通じてブロックのハッシュをリンクする基本的な概念を理解してほしい.あなたのPHPでこの例を実現しましょう.
======================================================================
また、イーサー坊でブロックチェーンがどのように使われているかを直接見たい場合は、次のチュートリアルを学ぶことができます.
php以太坊は、主にphpを使用してスマート契約開発のインタラクションを行い、アカウントの作成、取引、振替、コイン開発、フィルタとイベントなどの内容を紹介しています.
その他のブロックチェーンチュートリアル:
  • C#イーサー坊は、主にC#開発ベースの使用方法を説明する.Netのイーサー坊アプリケーションには、アカウント管理、ステータスと取引、スマート契約開発とインタラクション、フィルタ、イベントなどが含まれています.
  • web 3 jチュートリアルは、主にjavaとandroidプログラマーに対してブロックチェーンを太坊で開発したweb 3 jの詳細です.
  • 以太坊チュートリアルでは、主にスマート契約とdappアプリケーション開発を紹介し、入門に適しています.
  • 以太坊開発、主にnodeの使用を紹介した.js、mongodb、ブロックチェーン、ipfsは中心化された電子商取引DApp実戦を実現し、進級に適している.
  • pythonイーサー坊は、主にpythonエンジニアに対してweb 3を使用する.pyはブロックチェーンエーテル坊開発の詳細を行う.
  • EOSインテリジェント契約とDApp開発入門チュートリアル.内容はEOSツールチェーン、口座と財布、発行コイン、インテリジェント契約開発と配置、コードとインテリジェント契約の相互作用などの核心知識点をカバーし、最後にreactと各知識点を運用してDAppの開発を完成する.

  • 汇智网オリジナル翻訳、転載は出典を明記してください.ここは原文です