SiaFoundation / walletd

A new Sia wallet
https://sia.tech/software/walletd
MIT License
15 stars 6 forks source link

BIP-39 only #23

Closed ukd1 closed 1 week ago

ukd1 commented 11 months ago

I have a 28/29 word seed, and it doesn't seem to be supported. Will / can this be addressed so older users can use walletd?

lukechampine commented 11 months ago

Yes -- walletd seeds are, to an extent, backwards-compatible with siad seeds. Specifically, the difference is:

siad:
- convert 28-word phrase into a 32-byte seed
- to derive key n, compute H(seed || n)

walletd:
- convert 12-word phrase into 16 bytes of entropy
- hash 16 bytes into a 32-byte seed
- to derive key n, compute H(seed || n)

So supporting siad seeds shouldn't require any big architectural changes.

One of the practical problems, though, is that siad generates tons of addresses. Essentially every transaction will result in at least one new address being generated (to receive the "change output"). There are users out there with tens of thousands of addresses! walletd's watch-only design means that all of those addresses have to be manually imported, which is slow and resource-intensive. So we want to encourage people to "sweep" the full balance of their siad seed into a new walletd address, rather than importing the siad seed directly. This could be accomplished with a standalone script, similar to https://gist.github.com/lukechampine/e25330d7cc636cd37d4abe4211dedb40

ukd1 commented 11 months ago

@lukechampine thanks understood, and I'd be a little worried about a standalone script over something built in to the app. Do you think suggesting a sweep inside the app for folks with older seeds would be viable?

lukechampine commented 11 months ago

yeah, true, should probably be built-in functionality 👍🏻

n8maninger commented 1 week ago

We are not currently planning to support legacy seeds inside the app because of the additional complexity in scanning for siad/Sia-UI addresses. This may change in the future, but for now the best path forward is to create a new wallet in walletd and sweep the funds from the existing wallet.