1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Go言語でブロックチェーンのシステムを作成する(その5)

Last updated at Posted at 2024-04-21

はじめに

前回は、nonceの実装までやりましたが、今回はマイニングの実装をしていきます。

  • 前回までの記事

  • バージョン
    • Go 1.22.0

マイニングとは

マイニングとは、トランザクションを確認し、新しいブロックをブロックチェーンに追加するプロセスです。
具体的には、以下のステップが含まれます。

  1. トランザクションの収集
  2. nonceの計算(プルーフ・オブ・ワークの計算)
  3. ブロックの追加と報酬の受け取り

1.では、未確認のトランザクションを収集し、新しいブロックにまとめます。
2.では、前回の記事で実装した、nonceを求める計算を行います。そして、正しいハッシュ値を見つけたマイナーは、そのブロックをネットワークに提出できます。
3.では、2.で提出したブロックが他のネットワーク参加者によって受け入れられると、そのブロックはブロックチェーンに追加されます。マイナーはトランザクション手数料の形で、新たに発行される暗号通貨を受け取ります。

実装

マイニングの実装

const (
	MINING_SENDER     = "THE BLOCKCHAIN"
	MINING_REWARD     = 1.0
)

type Blockchain struct {
	transactionPool   []*Transaction
	chain             []*Block
	blockchainAddress string  // 追加
}

func NewBlockchain(blockchainAddress string) *Blockchain {  // 引数を追加
	b := &Block{}
	bc := new(Blockchain)
	bc.blockchainAddress = blockchainAddress  // 追加
	bc.CreateBlock(0, b.Hash())
	return bc
}

func (bc *Blockchain) Mining() bool {
	bc.AddTransaction(MINING_SENDER, bc.blockchainAddress, MINING_REWARD)
	nonce := bc.ProofOfWork()
	previousHash := bc.LastBlock().Hash()
	bc.CreateBlock(nonce, previousHash)
	return true
}

まず、MINING_SENDERとMINING_REWARDの定数を定義しています。
MINING_SENDERは、マイニングした時の報酬をマイナーに送る送信元で、MINING_REWARDは、マイニングした時の報酬の値です。
BlockchainのstructにblockchainAddressを追加します。これは、マイナーに報酬を送るときに、マイナーのaddressを登録していないと報酬が送れないので、Blockchainにアドレスを登録するようにします。
これにより、NewBlockchainを実行するときに、引数としてblockchainAddressを渡して登録するように変更します。
Miningでは、まず、AddTransactionでマイナーに報酬を渡すtransactionsを追加しています。次に、前回実装したProofOfWorkを実行して、nonceを求めます。そしてCreateBlockに、ここで求めたnonceとpreviousHashを渡して、ブロックを追加しています。

おわりに

今回は、マイニングの実装をしていきました。
これで、ブロックチェーンのシステムの基本的な機能は実装できました。

参考

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?