本文へスキップ
BecomeCoder

C#実践コース · 第10章 ブロックチェーンとC# · レッスン57

トランザクションとガス

ローカル実施

導入

ブロックチェーンの状態を変える操作(送金など)はトランザクションとして記録されます。トランザクションの実行には手数料**ガス(gas)**がかかります。C#から送金し、この仕組みを体験します。

図解

sequenceDiagram
    participant App as C♯アプリ
    participant Net as Ethereumネットワーク
    App->>Net: 送金トランザクション(署名付き)+ガス代
    Net->>Net: マイナー/バリデータが検証・ブロックに取り込む
    Net-->>App: トランザクションハッシュ(受付)
    Note over Net: 承認(confirmation)を待つ
    Net-->>App: 完了(レシート)

サンプル(読み物)

using Nethereum.Web3;
using Nethereum.Web3.Accounts;

// 秘密鍵からアカウントを作る(秘密鍵は環境変数などから読む。直書き厳禁)
string privateKey = Environment.GetEnvironmentVariable("ETH_PRIVATE_KEY")!;
var account = new Account(privateKey, chainId: 11155111);   // Sepoliaのchainid
var web3 = new Web3(account, "https://sepolia.infura.io/v3/YOUR_PROJECT_ID");

// 0.001 ETH を送金する
var receipt = await web3.Eth.GetEtherTransferService()
    .TransferEtherAndWaitForReceiptAsync(
        "0x送金先アドレス",
        0.001m);   // ETH単位

Console.WriteLine($"トランザクション: {receipt.TransactionHash}");
Console.WriteLine($"使用ガス: {receipt.GasUsed.Value}");
  • トランザクションはブロックチェーンの状態を変える操作(送金・コントラクト実行)。署名(秘密鍵)が必要
  • ガスは実行の手数料。処理が重いほど多く必要(送金は安く、複雑な処理は高い)
  • 送信するとまずトランザクションハッシュ(受付番号)が返り、ブロックに取り込まれるとレシートが得られる
  • 「承認(confirmation)」を待つ非同期処理が基本。...AndWaitForReceiptAsyncが完了まで待ってくれる

詳細手順

  1. スターター149-transaction/starter.zipを開き、秘密鍵を環境変数ETH_PRIVATE_KEYに設定する(コードには書かない)
  2. 送金先に自分の別アドレスを指定してF5実行する
  3. 返ってきたトランザクションハッシュを**Etherscan(テストネット版)**で検索し、記録を確認する
Sepolia EtherscanでトランザクションハッシュからGas使用量やステータスを確認する画面
Etherscanでトランザクションの記録・ガス・ステータスを確認

まとめ

  • 状態変更はトランザクション(署名が必要)、手数料はガス
  • 送信→ハッシュ受付→ブロック取り込み→レシート、という流れ
  • 秘密鍵は環境変数等から読む(直書き・コミット厳禁)

次回: プログラム可能な契約「スマートコントラクト」の呼び出しです。

テンプレート構成(教材制作用メモ)

149-transaction/
└── starter.zip   # Nethereum送金TODO / 環境変数での鍵管理README