2016-01-19 3 views
2

1) Я частная Эфириума сеть с помощью следующей командыEthereum частную сеть установки добычи

$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”: { 
} 
} 

Поскольку моя сеть изолирована и иметь только один узел (не пэров), я совершенно смущенный этим поведением. Любые идеи были бы весьма полезны.

ответ

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(); 
+0

Теоретически блок будет создан только в том случае, если есть транзакция, настолько смущенная этим поведением. Однако это происходит только в частной сети, не так ли? – Brain

+0

№ Пустые блоки происходят также в общедоступной сети. См. http://etherscan.io/blocks. Сеть организована таким образом, что блоки регулярно добываются, каждые ~ 17 с. Возможно, в этот период транзакций нет. –

+0

Большое спасибо за этот скрипт ... он работает хорошо. В последней версии пакета eth метод stop() не принимает параметр и загрузка скрипта не выполняется. – geekay

0

Вы можете попробовать EmbarkJS, который может запустить geth клиент с mineWhenNeeded опции на частной сети. Это будет только мое, когда появятся новые транзакции.