ブロックチェーンってなに?
「ブロックチェーン」についての基本的な解説と、実際にPHPを使って簡単なブロックチェーン構築について
1. ブロックチェーンとは?
ブロックチェーンは、デジタル情報を安全かつ透明に記録するための技術です。データは「ブロック」という単位で記録され、これらのブロックが連なって「チェーン」を形成します。この仕組みのおかげで、データの改ざんが極めて困難になります。
2. ブロックチェーンの仕組み
- 分散型ネットワーク: ブロックチェーンは中央サーバーに依存せず、ネットワーク全体にデータを分散して記録します。これにより、システム全体の耐障害性が高まります。
- ハッシュ値: 各ブロックには、前のブロックのハッシュ値が含まれており、チェーン全体のデータの一貫性を保つ役割を果たします。
3. PHPでのブロックチェーン構築手順
では、実際にPHPを使ってブロックチェーンを構築する方法を見ていきましょう。
ステップ1: ブロックの定義
まず、ブロックの構造を定義します。
class Block {
public $index;
public $timestamp;
public $data;
public $previousHash;
public $hash;
public function __construct($index, $timestamp, $data, $previousHash = '') {
$this->index = $index;
$this->timestamp = $timestamp;
$this->data = $data;
$this->previousHash = $previousHash;
$this->hash = $this->calculateHash();
}
public function calculateHash() {
return hash('sha256', $this->index . $this->previousHash . $this->timestamp . json_encode($this->data));
}
}
ステップ2: ジェネシスブロックの作成
次に、ブロックチェーンの最初のブロック(ジェネシスブロック)を作成します。
function createGenesisBlock() {
return new Block(0, strtotime("now"), "Genesis Block", "0");
}
ステップ3: ブロックチェーンの定義
ブロックチェーン全体を管理するクラスを作成します。
class Blockchain {
public $chain;
public function __construct() {
$this->chain = [$this->createGenesisBlock()];
}
public function createGenesisBlock() {
return new Block(0, strtotime("now"), "Genesis Block", "0");
}
public function getLatestBlock() {
return $this->chain[count($this->chain) - 1];
}
public function addBlock($newBlock) {
$newBlock->previousHash = $this->getLatestBlock()->hash;
$newBlock->hash = $newBlock->calculateHash();
array_push($this->chain, $newBlock);
}
}
ステップ4: 新しいブロックの追加
新しいブロックをチェーンに追加する方法を定義します。
$myBlockchain = new Blockchain();
$myBlockchain->addBlock(new Block(1, strtotime("now"), ["amount" => 4]));
$myBlockchain->addBlock(new Block(2, strtotime("now"), ["amount" => 10]));
foreach ($myBlockchain->chain as $block) {
echo "Index: " . $block->index . " Data: " . json_encode($block->data) . " Hash: " . $block->hash . "<br>";
}