Aegis now covers four coins across two-step coin+network picks: BCH (mainnet + chipnet), TRX (mainnet + Nile), SC (mainnet), DGB (mainnet). - Sia (SC): pulled the standalone siawallet's lib into bundled-addons/bchwallet/lib/sia/ and wrote lib/chain-sia.js exposing the common adapter shape. The very first SC wallet the user adds in Aegis reuses purpose "siawallet/mainnet/0" so pre-Aegis funds carry over automatically; subsequent SC sub-accounts start at "bchwallet/sc/mainnet/1". Per-wallet walletd URL setting; empty URL shows a "Point Aegis at a walletd node" gate in the panel. - Vault-derive gate now honors a manifest-declared `absorbs` list, so Aegis's addon.json can list `absorbs: ["siawallet"]` and the derive() guard accepts paths under either the current id or the absorbed one — the mechanism a superseding add-on uses to inherit an older add-on's keyspace without orphaning funds. - DigiByte (DGB): lib/chain-dgb.js ports the relevant bits of the SilentCode Digibyte design — SLIP-44 coin type 20, BIP84 native SegWit (m/84'/20'/0'/0/x → dgb1q…) via ripemd160(sha256(pubkey)) + bech32. ElectrumX-DGB backend reuses lib/electrum.js (public wss:50022 pool). BIP143 P2WPKH sighash + witness-tx serialize implemented inline (no FORKID — DGB uses standard Bitcoin sighash). Derivation cross-checked against a known BIP39 vector in scratchpad/verify-dgb.mjs — the address for "abandon×11 about, m/84'/20'/0'/0/0" is dgb1q9gmf0pv8jdymcly6lz6fl7lf6mhslsd72e2jq8, matching iancoleman.io/bip39. - Panel: SVG coin logos for SC (green disc with S) and DGB (blue octagon with D) alongside the BCH/TRX marks. Chain-specific settings block per coin (walletd URL for SC; derivation path for DGB). Balance render uses BigInt-safe arithmetic so 24-decimal SC amounts don't lose precision on the way through the panel; amount input on SC returns a hastings string. - Every chain adapter's snapshot fits the panel's shared shape (address/balance/history/etc.), so future chains only need a new chain-<x>.js file, a COINS registry entry, a matching case in mountWallet, and an SVG logo. Standalone siawallet addon stays as-is on disk; users can delete it once they've confirmed Aegis shows the same balance. Nothing here disables it.
29 lines
1,008 B
JavaScript
29 lines
1,008 B
JavaScript
// Key tree for the Sia wallet: index i -> ed25519 key via walletd's
|
|
// KeyFromSeed(root, i), address = standard unlock hash of the public key.
|
|
// Private keys stay inside this module; sign() is the only way out.
|
|
module.exports = function makeKeys({ sia }) {
|
|
class WalletKeys {
|
|
constructor(root32) {
|
|
this._root = Uint8Array.from(root32);
|
|
this._cache = new Map();
|
|
}
|
|
entry(index) {
|
|
let e = this._cache.get(index);
|
|
if (!e) {
|
|
const k = sia.keyFromSeed(this._root, index);
|
|
e = { index, pub: k.pub, address32: k.address32, address: k.address, _priv: k.priv };
|
|
this._cache.set(index, e);
|
|
}
|
|
return e;
|
|
}
|
|
sign(entry, msg) { return sia.sign(entry._priv, msg); }
|
|
// Revealed only on explicit user action in Settings.
|
|
get seedHex() { return sia.toHex(this._root); }
|
|
wipe() {
|
|
for (const e of this._cache.values()) e._priv.fill(0);
|
|
this._cache.clear();
|
|
this._root.fill(0);
|
|
}
|
|
}
|
|
return { WalletKeys };
|
|
};
|