ブロックチェーンの学習備忘録

教材

www.udemy.com

Blockの構成要素

  1. previous hash
  2. transactions
  3. nonce
  4. timestamp

Proof of Work

  • previous hash+transactions+nonceでhashを求め、mining difficultyと一致するnonceを求める。
  • nonceは0...nでインクリメントしていく
  • mining difficultyはおおよそ10分で計算完了程度に調整される

Mining

  • 自アドレスへのmining award分のtransactionを含めたProof of Workを行い、新規Blockの作成を試みる。

Private keyとPublic key

  • ECDSA(curve=NIST256p)を使用して作成(bitcoin

Blockchain addressの作成

  1. Creating a public key with ECDSA
  2. SHA-256 for the public key
  3. Ripemd160 for the SHA-256
  4. Add network byte
  5. Double SHA-256
  6. Get checksum
  7. Concatenate public key and checksum
  8. Encoding the key with Base58

Transactionの署名

  • transaction
  • sender private key を使用してsignatureを作成
sha256 = hashlib.sha256()
sha256.update(str(transaction).encode('utf-8'))
message = sha256.digest()
private_key = SigningKey.from_string(bytes().fromhex(self.sender_private_key), curve=NIST256p)
private_key_sign = private_key.sign(message)
signature = private_key_sign.hex()

Transactionの認証

  • transaction
  • sender public key
  • signature を使用してtransactionを認証
sha256 = hashlib.sha256()
sha256.update(str(transaction).encode('utf-8'))
message = sha256.digest()
signature_bytes = bytes().fromhex(signature)
verifying_key = VerifyingKey.from_string(bytes().fromhex(sender_public_key), curve=NIST256p)
verified_key = verifying_key.verify(signature_bytes, message)

ブロックチェーンノード間のコンセンサス

  • 最も長いチェーンが採用される