1

1) 次のコマンドを使用して、プライベート イーサリアム ネットワークをセットアップします。

$geth --genesis <genesis json file path> --datadir <some path to an empty  
folder> --networkid 123 --nodiscover --maxpeers 0 console

2) アカウントを作成した

3) 次に、miner.start() コマンドを使用してマイナーを開始します。

しばらくすると、イーサが自動的にアカウントに追加されましたが、プライベート ネットワークに保留中のトランザクションはありません。では、マイナーはどこからイーサを入手できるのでしょうか?

ネットワークでトランザクションをインスタンス化していませんでしたが、マイナーを起動すると、何らかのトランザクションがログに記録されていることがわかりました。

ログは次のとおりです。

I0118 11:59:11.696523 9427 backend.go:584] Automatic pregeneration of ethash  
DAG ON (ethash dir: /Users/minisha/.ethash)
I0118 11:59:11.696590 9427 backend.go:591] checking DAG (ethash dir:   
/Users/minisha/.ethash)
I0118 11:59:11.696728 9427 miner.go:119] Starting mining operation (CPU=4 
TOT=5)
true
> I0118 11:59:11.703907 9427 worker.go:570] commit new work on block 1 with 0
txs & 0 uncles. Took 7.109111ms
I0118 11:59:11.704083 9427 ethash.go:220] Generating DAG for epoch 0 (size 
1073739904) (0000000000000000000000000000000000000000000000000000000000000000)
I0118 11:59:12.698679 9427 ethash.go:237] Done generating DAG for epoch 0, it  
took 994.61107ms
I0118 11:59:15.163864 9427 worker.go:349]

私のジェネシスブロックコードは次のとおりです。

{
“nonce”: “0xdeadbeefdeadbeef”,
“timestamp”: “0x0”,
“parentHash”: 
“0x0000000000000000000000000000000000000000000000000000000000000000”,
“extraData”: “0x0”,
“gasLimit”: “0x8000000”,
“difficulty”: “0x400”,
“mixhash”: 
“0x0000000000000000000000000000000000000000000000000000000000000000”,
“coinbase”: “0x3333333333333333333333333333333333333333”,
“alloc”: {
}
}

私のネットワークは分離されており、ノードが 1 つしかない (ピアがない) ため、この動作にかなり混乱しています。どんな洞察も大歓迎です。

4

2 に答える 2

2

あなたのクライアントは空のブロック (トランザクションを含まない) をマイニングし、ブロックごとに 5 ETH のマイニングされたブロックの報酬を得ています。

プライベート ブロックチェーンで空のブロックを防止したい場合は、ethクライアント (C++ 実装) の使用を検討する必要があります。

gethクライアントの場合、クライアントの動作を変更する JavaScript スクリプトを使用できます。どのスクリプトも次のコマンドでロードできますjs: geth js script.js.

var mining_threads = 1

function checkWork() {
    if (eth.getBlock("pending").transactions.length > 0) {
        if (eth.mining) return;
        console.log("== Pending transactions! Mining...");
        miner.start(mining_threads);
    } else {
        miner.stop(0);  // This param means nothing
        console.log("== No transactions! Mining stopped.");
    }
}

eth.filter("latest", function(err, block) { checkWork(); });
eth.filter("pending", function(err, block) { checkWork(); });

checkWork();
于 2016-01-21T11:15:29.010 に答える