【发布时间】:2017-11-08 19:37:55
【问题描述】:
我正在使用web3j 和Geth 测试以太坊智能合约。
Geth 正在运行这样的脚本:
PASSFILE=/var/folders/_l/kl9pdj2x50v7416j8htb6w740000gn/T/pwd6597172766860806720.tmp
DATADIR=/var/folders/_l/kl9pdj2x50v7416j8htb6w740000gn/T/geth808290308908087582
IPCPATH=/var/folders/_l/kl9pdj2x50v7416j8htb6w740000gn/T/geth808290308908087582/geth.ipc
geth --datadir $DATADIR account new --password $PASSFILE
geth --datadir $DATADIR \
--ipcpath $IPCPATH \
--dev \
--rpc \
--mine \
--networkid 1999
(路径在测试中生成)。
使用web3j-maven-plugin 生成智能合约包装器。
问题是每次send() 调用都需要几秒钟:
private TransactionReceipt deployFeature_() throws Exception {
logger.info("Deploying feature ...");
return contract.deployFeature(featureKey).send();
}
日志(您可以看到 1 笔交易耗时 16 秒):
166955 [main] INFO FeatureTest - Deploying feature ...
182006 [main] INFO FeatureTest - Checking feature is listed ...
Web3j 通过 IPC 连接:
web3 = Web3j.build(new UnixIpcService(ipcPath));
如何加快调用速度?如果使用TestRPC 进行测试,每次调用只需不到一秒!由于Geth 以--dev 开头,因此它会自行生成创世文件,因此我无法更改难度。我还可以看到块的开采速度非常快:
INFO [11-09|00:34:39] Commit new mining work number=9 txs=0 uncles=0 elapsed=2.000s
INFO [11-09|00:34:39] Successfully sealed new block number=9 hash=b869ca…870644
INFO [11-09|00:34:39] ???? block reached canonical chain number=4 hash=c758a0…a529af
INFO [11-09|00:34:39] ???? mined potential block number=9 hash=b869ca…870644
INFO [11-09|00:34:39] Commit new mining work number=10 txs=0 uncles=0 elapsed=84.12µs
INFO [11-09|00:34:40] Successfully sealed new block number=10 hash=5e81a9…fc1364
INFO [11-09|00:34:40] ???? block reached canonical chain number=5 hash=465c2b…78461a
INFO [11-09|00:34:40] ???? mined potential block number=10 hash=5e81a9…fc1364
由于某些原因,调用并不快。我能做什么?
【问题讨论】:
-
尝试使用适当的缓存值启动
geth --cache XXX。默认为 128MB -
我刚刚尝试过
--fast --cache=1024,但每笔交易仍会持续约 15 秒,尽管每 1 秒会挖掘一次区块
标签: blockchain ethereum mining geth