Documentation ¶
Index ¶
Constants ¶
const CName = "any-ns.nonce-manager"
Variables ¶
This section is empty.
Functions ¶
Types ¶
type NonceDbItem ¶
TODO: index it
type NonceService ¶
type NonceService interface { // try to determine nonce by looking in DB first, then use network as a fallback GetCurrentNonce(addr ethcommon.Address) (uint64, error) // try to determine nonce by looking at current TX count plus pending TXs in the mem pool // (not reliable, but can be used as a fallback) GetCurrentNonceFromNetwork(addr ethcommon.Address) (uint64, error) // save nonce to DB SaveNonce(addr ethcommon.Address, newValue uint64) (uint64, error) app.Component }
Nonce policy: 1. if nonce is specified in the config file: - read it from config and override the value from DB/network
2. if nonce is in DB: - get nonce from DB
3. if nonce is not in DB: - get nonce from network - mined + pending txs count
if tx is sent and mined succesfully: - save last nonce to DB
if we got "nonce is too low" error the tx is immediately rejected. to fix it: - get nonce from network - send this tx again with +1 nonce
if nonce is higher than needed - tx will be rejected by the network with "not found" error immediately in this case we: - wait for N minutes for all TXs to settle - get new nonce from network - retry sending this tx with new nonce