Comments (3)
From my experience batching Bitcoin request at json-rpc layer is totally not worth it. Just use a threadpool.
from bwt.
Thanks for the tip!
Did you try with high-latency connections, say over Tor?
from bwt.
Did you try with high-latency connections, say over Tor?
No. The use cases I've worked with were all reasonably low latencies.
Just running this in my head, I don't see how batching would be better there either.
The optimization problem here is basically saturating IO throughput both on the network on disk of the fullnode (whichever becomes bottleneck first). Naive implementation blocking on each rpc call under-utilizes resources, wasting the time of the whole round-trip on each call.
Batching gets rid of most round-trips, but still suffers from the round-trip. Just once in N times instead of every time. A thread-pool can keep both the link/fullnode IO saturated 100% time. The amount of work (like serialization&deserialization) is roughly the same - with threadpool there's just more HTTP & JSONRPC envolope parsing, but these are minuscule.
On a long latency link like Tor, one would need more threads in the threadpool to stature the IO ... assuming high throughput. But since both the throughput and latency are (I assume) going to be low, then in practice a threadpool of 2 is going to saturate the connection.
from bwt.
Related Issues (20)
- GPG key expired HOT 2
- document all RPC calls
- Cannot connect to server HOT 1
- Field keypoololdest returned from getwalletinfo should not be required
- rpc blockchain.relayfee peer panicked on 'Option::unwrap()' HOT 1
- https://github.com/btcpayserver/btcpayserver-docker HOT 1
- Compatibility with Bitcoin Core v0.21 HOT 1
- Multi-arch docker images
- Use testmempoolaccept to determine if the transaction is valid prior to custom broadcast
- Switch WebHooks to use ureq/attohttpc
- `error for getwalletinfo: RpcError { code: -32601, message: "Method not found", data: None }` HOT 1
- Feature Request: elements/liquid chains HOT 4
- code: -18, message: "No wallet is loaded" HOT 4
- Feature Request: Add tracked accounts at runtime HOT 2
- Optional ASCII-only console output HOT 3
- Add Taproot support HOT 10
- Support coinbase outputs HOT 2
- Connection via Bitcoin RPC fails in Bitcoin v23 rc2 HOT 7
- Fee field for getrawmempool has moved in Bitcoin v23 rc2
- Allow configuration of separate RPC socket connect timeout
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from bwt.