Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Blockchain Kyoto #5 〜web上でブロックチェーン実装した〜

Blockchain Kyoto #5 〜web上でブロックチェーン実装した〜

いっしー

July 19, 2018
Tweet

More Decks by いっしー

Other Decks in Technology

Transcript

  1. ϑΟʔϧυ໊ આ໌ Version ιϑτ΢ΣΞʗϓϩτίϧόʔδϣϯ൪߸ Previous Block Hash ਌ϒϩοΫͷϋογϡ஋ Merkle Root

    ϒϩοΫͷશτϥϯβΫγϣϯʹର͢ΔϚʔΫϧπϦʔͷϧʔτϋογϡ Timestamp ϒϩοΫͷੜ੒࣌ࠁʢUnix࣌ؒʣ Difficulty Target ϒϩοΫͷੜ੒࣌ͷproof of workͷdiffuculty Nonce proof of workͰ༻͍ΔΧ΢ϯλ ビットコインのブロック構造 ϑΟʔϧυ໊ આ໌ Block Size ͜ͷ࣍ͷϑΟʔϧυ͔ΒϒϩοΫͷ࠷ޙ·ͰͷσʔλαΠζʢόΠτ୯Ґʣ Block Header Լͷද Transaction Counter ϒϩοΫʹؚ·ΕΔτϥϯβΫγϣϯ਺ Transactions ϒϩοΫʹه࿥͞ΕΔτϥϯβΫγϣϯͷϦετ ◦ブロックの構造 ◦ブロックヘッダの構造
  2. ブロックをもらう Node1 Node2 hashは◦◦です。 hashは△△です。 ʓʓ͸࣋ͬͯΔ ˚˚͸࣋ͬͯ ͳ͍ △△ ☓☓

    □□ 〇〇 ▪▪ ɾ ɾ ɾ 〇〇 ▪▪ ɾ ɾ ɾ □□、☓☓、△△が足りてないよ
  3. ブロックをもらう Node1 Node2 hashは◦◦です。 hashは△△です。 △△ ☓☓ □□ 〇〇 ▪▪

    ɾ ɾ ɾ それください! □□ ☓☓ △△ △△ ☓☓ □□ 〇〇 ▪▪ ɾ ɾ ɾ □□、☓☓、△△が足りてないよ
  4. ブロック構造変更 blocks[newBlock.hash] = { block: { previousHash: newBlock.previousHash, timestamp: newBlock.timestamp,

    data: newBlock.data, nonce: newBlock.nonce }, index: previousBlock.index + 1 } blockchain = [] blockchain.push(newBlock.hash)
  5. ブロックの更新 if (timestampが数値じゃない) { return } else if (hashの先頭1文字が「0」じゃない) {

    return } if (previousHashのブロックが存在する) { blocks配列に入れる。 } else { orphans配列に入れる。 }