Commit Graph
24 Commits
Author SHA1 Message Date
DragonX DevelopersandClaude Opus 5 7f5474ef82 version: 0.1.2, from a single constant
Bump for the GetTransaction crash fix, and make the version one value
instead of two literals that could drift.

It was duplicated: cmd/server/main.go had `var version = "0.1.1"` for
--version, and frontend/service.go had "0.1.1-dragonxlightd" inline in
the LightdInfo reply. The gRPC one is the load-bearing copy -- it is
walletrpc/service.proto:48, so every client reads it, and it is the only
way to tell from off-box which build a node is running.

That property is the point of bumping now rather than later. With it, a
rollout can be verified by probing each endpoint over TLS and reading
the advertised version, instead of shelling in to compare binary
checksums, and instead of the only alternative positive test -- calling
GetTransaction on a mempool txid, which proves the fix by crashing any
node that does not have it.

Verified: --version prints 0.1.2, and a GetLightdInfo probe against a
test instance returns 0.1.2-dragonxlightd where production still returns
0.1.1-dragonxlightd.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FU87LdsJZiZkfq1eXubpeo
2026-08-26 10:33:51 -05:00
DragonX DevelopersandClaude Opus 5 62358df198 frontend: stop an unconfirmed transaction from killing the daemon
GetTransaction asserted the height out of getrawtransaction's reply
without checking it:

    txHeight = txinfo.(map[string]interface{})["height"].(float64)

dragonxd emits "height" only for a transaction that is in a block --
rawtransaction.cpp puts it inside `if (!hashBlock.IsNull())` -- so every
mempool transaction comes back without the key. The assertion then runs
nil.(float64) and panics. Nothing recovers it: grpc-go v1.24.0 installs
no recovery interceptor (there is no recover() in its server.go) and
this daemon adds none, so the panic takes down the whole process and
every wallet connected to that endpoint with it.

Any client can trigger it deliberately: broadcast a transaction, then
ask for it before it is mined. GetMempoolStream, added in b1b0d45,
hands out unconfirmed txids by design, so ordinary 0-conf use walks
straight into it.

Verified against a live mempool transaction on this node, whose reply
has neither "height" nor "blockhash": the old expression panics with
"interface conversion: interface {} is nil, not float64"; the new one
returns cleanly.

An unconfirmed transaction is now reported as tip+1, which is what
GetMempoolStream already advertises for the same transactions
(mempool.go:109).

Also harden GetSaplingInfo, which had six more unchecked assertions on
the getblockchaininfo reply. Those run on the block-ingestor goroutine,
where a panic is equally fatal. The top-level object is asserted once
and every field is read with the comma-ok form; a missing field now
degrades instead of crashing.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FU87LdsJZiZkfq1eXubpeo
2026-08-26 10:27:12 -05:00
DanSandClaude Opus 4.8 2bab58c6d2 lightwalletd: adaptive reorg-lag tip + non-blocking startup coinsupply
Adaptive-lag: advertise a tip that trails the real tip by a reorg-rate-driven
lag (GetLatestBlock/GetLightdInfo) so wallets anchor shielded spends at a
settled height during reorg churn. Configurable via
-adaptive-lag/-lag-min/-lag-max/-lag-window; monitor_lwd.sh runs
-lag-min 4 -lag-max 12 -lag-window 30.

Startup coinsupply: the informational startup coinsupply RPC (result used only
for a log line) blocked the gRPC bind for minutes on a node whose supply index
is cold, keeping the lite endpoint down on every restart while it also starved
the block-cache ingestor. Run it in a goroutine so the bind is never blocked;
clients still get coinsupply on demand via the GetCoinsupply RPC.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-21 01:05:10 -05:00
DanS ec1c479156 Increase block cache size to 400k for faster wallet sync
- Increase default cache-size from 40,000 to 400,000 blocks
- Add Python gRPC protobuf bindings for testing
2026-03-21 03:50:55 -05:00
DanS f4ef38c42f fix sapling activation height and consensus branch id 2026-03-20 06:11:38 -05:00
dan-s daab197a01 update for dragonx binary changes, added monitor script 2026-03-04 15:28:02 -06:00
jahway603 0f21f457a6 changed DenioD's github lightwalletd links to git.hush.is lightwalletd links 2020-11-27 22:13:24 -05:00
Denio 01e1d766a0 add coinsupply rpc to lightwalletd 2019-12-05 21:37:35 +01:00
Denio 0978322f62 add longestchain and notarized to lightinfod 2019-12-02 11:42:50 +01:00
Denio a269cd1e6b add difficulty to lightdinfo 2019-12-02 10:35:38 +01:00
DenioD f6fa52fde1 port to hush 2019-10-15 14:38:55 +02:00
Aditya Kulkarni e68b202928 Display hash properly 2019-10-09 15:07:11 -07:00
Aditya Kulkarni c688de510e Store serialized bytes in cache 2019-10-01 11:05:43 -07:00
Aditya Kulkarni de305ad0f0 Max reorg limit 2019-09-30 14:13:20 -07:00
Aditya Kulkarni f8bec5fd2b Handle reorgs > 10 blocks 2019-09-30 13:54:30 -07:00
Aditya Kulkarni 8e6259b258 Add cache invalidation for reorg'd blocks 2019-09-26 11:31:06 -07:00
Aditya Kulkarni a8cc2424a2 Thread safe cache with separate ingestor 2019-09-25 21:15:32 -07:00
Aditya Kulkarni fbb75e8f20 Return consensusBranchId 2019-09-25 17:46:05 -07:00
Aditya Kulkarni 6f56b8b8e9 Store compactBlocks 2019-09-25 17:18:27 -07:00
Aditya Kulkarni d503752588 Block Cache 2019-09-25 15:55:37 -07:00
Aditya Kulkarni 80d6dab9f8 WIP cache 2019-09-25 14:54:15 -07:00
Aditya Kulkarni d56fe7bf1a Remove SQL from grpc server 2019-09-25 13:28:55 -07:00
Aditya Kulkarni d59757571d Remove UTXOs call 2019-09-25 11:43:54 -07:00
Aditya Kulkarni 3b4573c4f0 Add chainname and activation height to getinfo 2019-09-18 21:16:15 -07:00