我已经使用以下客户端创建了一个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()
这开始开采大量街区。
我的问题是,如果我拥有自己的私人网络并且只提交了一笔交易,那么这些街区会从哪里来。 这会添加太多块,我的块大小不必要地增加。 如何只挖掘我提交的交易?
答案 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
},
....