I'm testing Ethereum smart contracts with web3j
and Geth
.
Geth is running with scripts like that:
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
(paths are generated in tests).
Smart contract wrappers are generated with web3j-maven-plugin
.
The problem is that every send()
invocation takes few seconds:
private TransactionReceipt deployFeature_() throws Exception {
logger.info("Deploying feature ...");
return contract.deployFeature(featureKey).send();
}
log (you can see 1 transaction took 16 seconds):
166955 [main] INFO FeatureTest - Deploying feature ...
182006 [main] INFO FeatureTest - Checking feature is listed ...
Web3j is connected over IPC:
web3 = Web3j.build(new UnixIpcService(ipcPath));
How can i speed-up invocations? If testing with TestRPC
every invocations takes much less than a second! Since Geth
is started with --dev
it generates genesis file itself so i can't change difficulty. Also i can see blocks are mined very fast:
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
For some reason invocations are not fast. What can i do?
It's web3j
feature/issue and you can change this behaviour:
https://github.com/web3j/web3j/issues/231