[BlockChain]カートリッジツリーの実装を試みる(JavaScript)
13226 ワード
メルケル樹の概念
メルケルツリーの概念はNAVERブログで簡単に説明されている.
初めてこの言葉を聞いた人は、リンクをクリックして簡単に読むことをお勧めします.
メルケルツリーコードを使用して実装
1.開発環境
1.開発環境
Ubuntu-20.04
2.使用する言語
Javascript
3.モジュールの使用
4.完全なソースコード
githubリンク
5.実施目標
カートリッジツリーの作成方法と検証方法について説明します.
6.実施過程
1)必要なモジュールのインストール
$ npm i merkletreejs crypto-js
2)SHA 256を使用して暗号化を試みる
// Import modules
const SHA256 = require("crypto-js/sha256");
// Check output of SHA256()
console.log("SHA256('a') : ", SHA256("a"));
console.log("SHA256('a').toString() : ", SHA256("a").toString());
crypto-js
のSHA256
関数の出力値は、64ビット16進数を示します.toString()
関数は、必要な形状のハッシュ値を出力します.テストする配列を作成し、すべての内部要素をハッシュします.
// Create an array and convert it into hash using SHA256
const testSet = ['a', 'b', 'c', 'd', 'e']
const testArray = testSet.map((v) => SHA256(v).toString());
console.log(testArray)
3)メルケルツリーの作成
上に作成したテスト配列を使用して、インクカートリッジツリーを作成します.
// Import modules
const SHA256 = require("crypto-js/sha256");
const { MerkleTree } = require("merkletreejs");
...
// Create a merkleTree of testArray
const testMerkleTree = new MerkleTree(testArray, SHA256);
console.log("testMerkleTree : ", testMerkleTree);
// Get merkleRoot
const merkleRoot = testMerkleTree.getRoot();
console.log("merkleRoot : ", merkleRoot);
出力された値から見ると、以下の情報が存在する.
leaves
:サブノードのない最下位ノードlayers
:各レイヤに存在するノードを表し、最後のレイヤ(元は最上位ノード)にMerkle Root
がある.4)検証
最後に、上に作成したメルケルツリーに属しているかどうかを確認します.
4-1)メルケルツリーに存在する値の検証
...
// Verify valid hash, 'a'
const testValue_valid = "a";
const leaf_valid = SHA256(testValue_valid).toString();
const proof_valid = testMerkleTree.getProof(leaf_valid)
const result_valid = testMerkleTree.verify(proof_valid, leaf_valid, merkleRoot)
console.log('leaf_valid : ', leaf_valid);
console.log('proof_valid : ', proof_valid);
console.log('result_valid : ', result_valid);
proof_valid
値を表示すると、どの値とどの順序で比較されるかがわかります.leaves
が奇数の場合は、下図のように操作します.詳細については、Verifiable data structuresを参照してください.
4-2)メルケルツリーに存在しない値の検証
...
// Verify invalid hash, 'u'
const testValue_invalid = "u";
const leaf_invalid = SHA256(testValue_invalid).toString();
const proof_invalid = testMerkleTree.getProof(leaf_invalid);
const result_invalid = testMerkleTree.verify(proof_invalid, leaf_invalid, merkleRoot);
console.log('leaf_invalid : ', leaf_invalid);
console.log('proof_invalid : ', proof_invalid);
console.log('result_invalid : ', result_invalid);
値が存在しないため、
proof
は空の配列を返し、result
はfalseを返します.7.終了
自分で作成したアルゴリズムではないが,モジュールを用いてメルケルツリーがどのように検証されたかを理解できる.
このように,ブロックチェーンにおいて,
Peer
ごとにすべてのトランザクションデータがなくても,有効に検証できるとはどういう意味であるか.これから使い方をもっと勉強しなければなりません.
Reference
この問題について([BlockChain]カートリッジツリーの実装を試みる(JavaScript)), 我々は、より多くの情報をここで見つけました https://velog.io/@imysh578/BlockChain-머클트리-구현해보기-JavaScriptテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol