StorageProvider.defaultOptions() sets feeModel: { model: 'sat/kb', value: 1 }, but both ARC endpoints the library ships with currently require 100 sat/KB:
curl -s https://arc.taal.com/v1/policy | jq .policy.miningFee → {"satoshis":100,"bytes":1000}
curl -s https://arc.gorillapool.io/v1/policy | jq .policy.miningFee → {"satoshis":100,"bytes":1000}
(queried 2026-06-04)
So a wallet created with defaults broadcasts at 1 sat/KB and the transaction silently sits unmined — no rejection is surfaced, which makes it easy to ship unknowingly.
Path: packages/wallet/wallet-toolbox/src/storage/StorageProvider.ts (defaultOptions()), read by createAction via storage.feeModel.
Suggested fix: default to the broadcaster's live policy via GET /v1/policy (policy.miningFee), the way py-sdk's LivePolicy fee model does — that tracks whatever each endpoint enforces. Minimum: bump the default to 100 sat/KB.
Happy to open a PR.
StorageProvider.defaultOptions()setsfeeModel: { model: 'sat/kb', value: 1 }, but both ARC endpoints the library ships with currently require 100 sat/KB:(queried 2026-06-04)
So a wallet created with defaults broadcasts at 1 sat/KB and the transaction silently sits unmined — no rejection is surfaced, which makes it easy to ship unknowingly.
Path:
packages/wallet/wallet-toolbox/src/storage/StorageProvider.ts(defaultOptions()), read bycreateActionviastorage.feeModel.Suggested fix: default to the broadcaster's live policy via
GET /v1/policy(policy.miningFee), the waypy-sdk'sLivePolicyfee model does — that tracks whatever each endpoint enforces. Minimum: bump the default to 100 sat/KB.Happy to open a PR.