停止在私人网络上挖掘geth ethrereum

时间:2016-11-24 07:30:38

标签: blockchain ethereum mining

我已经使用以下客户端创建了一个geth客户端(我已经创建了两个帐户。:

geth --datadir datadir --networkid 123 --rpc --rpcaddr="localhost" --rpccorsdomain="*" --unlock <my account> --minerthreads="1" --maxpeers=0 --mine console

我打开了以太坊钱包并从那里部署了智能合约。在我的geth控制台上收到transactionId和合同地址。

然后我启动了我的Dapp并创建了合同的实例,我正在调用通过web3 API调用契约函数的契约。 调用契约函数但是除非我开始挖掘,否则事务不会在块中提交。 因此我开始miner.start() 这开始开采大量街区。

我的问题是,如果我拥有自己的私人网络并且只提交了一笔交易,那么这些街区会从哪里来。 这会添加太多块,我的块大小不必要地增加。 如何只挖掘我提交的交易?

2 个答案:

答案 0 :(得分:0)

save the below code as startmine.js file

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

And Start the geth Private network with following options

geth .......... . . . . . . .   --rpcapi="web3,eth,miner" --preload "startmine.js" console

This will run miner.start() automatically when you have any pending transactions.

答案 1 :(得分:0)

如果您使用的是 POA,使用更新版本的 geth(至少 1.9.25),将 period 设置为 0 将停止挖掘并使节点在挖掘新区块之前等待交易。这对于专用网络或实验环境来说非常有用。

genesis.json:

....
"clique": {
  "period": 0,
  "epoch": 30000
},
....

Answered previously by M Gopal