jim618 (OP)
Legendary
Offline
Activity: 1708
Merit: 1066
|
![](https://bitcointalk.org/Themes/custom1/images/post/xx.gif) |
September 17, 2013, 05:34:33 PM Last edit: September 17, 2013, 05:49:29 PM by jim618 |
|
Hello fellow Trezor developers !
I presume there are a few of us "alts" working on Trezor support at the moment so I would like to have a thread where we can share ideas about implementation.
For instance:
At the moment I am looking at when the user plugs in their Trezor and they want their wallet to appear. If they have already used that particular Trezor on this machine, I want it to reopen the previous wallet and start syncing from where it was before.
Thus I want a naming convention for the wallet file that's stored on the machine (in their user data area most likely).
I was thinking: "trezor-" + hex(hash(master public key from device)) + ".wallet"
The thinking being: + use the 'trezor-" prefix so the user knows what the wallet is. Also this gives some namespace for when other types of hardware wallets come along. + you want to have the name of the wallet based on the MPK rather than the serial id of the device as the user can: 1. Reprogram the device with another seed. 2. Put the seed on another device.
It's the seed that determines the wallet, not the serial id of the Trezor.
I am thinking you'd want to hash the MPK to make it a bit shorter and for privacy reasons. Not sure what length to hash it to yet. Shorter is "friendlier" but you'll get more collisions (in theory). Then convert the hash into simple hex, lowercase.
It is not really a big deal if other wallets use a different naming convention but we will all most likely be tackling the same problems. I would be interested in what other people think.
|
|
|
|
stick
|
![](https://bitcointalk.org/Themes/custom1/images/post/xx.gif) |
September 17, 2013, 06:04:47 PM |
|
Another option would be:
"trezor-" + hex(hash(serial number of the device || master public key from device)) + ".wallet" (where || means concatenation)
I think we have to decide if we want to treat two different devices loaded with the same seed as the same wallet (first option) or not (second one).
|
|
|
|
jim618 (OP)
Legendary
Offline
Activity: 1708
Merit: 1066
|
![](https://bitcointalk.org/Themes/custom1/images/post/xx.gif) |
September 17, 2013, 06:24:39 PM Last edit: September 17, 2013, 06:44:55 PM by jim618 |
|
There are the following possibilities as you state:
Same seed, different Trezor.
Alice has Trezor #1. She initialises it and write down her mnemonic phrase. She uses it for a while and then loses the Trezor #1. She gets hold of Trezor #2 and loads in her previous seed. When she plugs it in, would she expect to:
1) use the same wallet as she had with Trezor #1 2) have a new wallet, which then syncs so she has the same transactions (but she might lose any extra data like labels).
?
edit: or you might have two people with their Trezors programmed with the same seed e.g. husband and wife using the same wallet (?) but they both have their own Trezors.
Same Trezor, different seed. Bob has Trezor #3. He initialises it with one seed. Uses it for a while with a particular wallet. Reprograms it. Pretty clearly the new seed needs a new wallet.
(He could then reprogram it back to the first seed and then the old wallet would be used).
This case isn't a problem I don't think.
|
|
|
|
jim618 (OP)
Legendary
Offline
Activity: 1708
Merit: 1066
|
![](https://bitcointalk.org/Themes/custom1/images/post/xx.gif) |
September 17, 2013, 06:32:28 PM |
|
Is there anything _different_ to one Trezor wallet with a particular seed and _another_ wallet with the same seed ?
Are they distinguishable to the user ?
I guess they may have a different device name and serial id (not sure that is a good enough reason to "split" the wallet) but is there anything else that is different ?
|
|
|
|
jim618 (OP)
Legendary
Offline
Activity: 1708
Merit: 1066
|
![](https://bitcointalk.org/Themes/custom1/images/post/xx.gif) |
September 18, 2013, 07:46:22 PM |
|
Gary has been writing the trezorj Java library which deals with the Trezor communications. To make it a bit easier to see what is going on I have started a TrezorEmulatorUI. Once it's done you'll be able to see the messages going to and fro. Here's what I have so far: ![](https://ip.bitcointalk.org/?u=https%3A%2F%2Fmultibit.org%2FpostImages%2FemulatorUI.png&t=665&c=pUD794JQrwZ8hA) It does not do much for real yet. In the great tradition of emulators it is pig-ugly. :-) I am thinking it could either be used for: 1) wrapping the datastreams to and from your trezor (like a port forwarding network sniffer) or 2) a full emulation (which is why I have added a field for the display and the two soft buttons "Trezor Left Button' and 'Trezor Right Button'). Slush and stick have also created a python emulator but I figure there should be one in the trezorj library. Also I reckon you don't really understand something until you can replicate it.
|
|
|
|
slush
Legendary
Offline
Activity: 1386
Merit: 1097
|
![](https://bitcointalk.org/Themes/custom1/images/post/xx.gif) |
September 22, 2013, 02:10:34 PM |
|
Is there anything _different_ to one Trezor wallet with a particular seed and _another_ wallet with the same seed ?
Are they distinguishable to the user ?
Yes, there's at least these settings: PIN, language, selected coin (you need to be sure that the device is in "btc" mode, as we discussed over email). Personally I prefer the option that two devices will act as one, when they have the same master public key. However what if user connects two devices with the same seed at the same time? :-) What if you'll have the same seed in Trezor and in software walelt? I think client should somehow distinguish between logical wallet (show history, send transaction) and physical device (factory reset, set language, ...).
|
|
|
|
slush
Legendary
Offline
Activity: 1386
Merit: 1097
|
![](https://bitcointalk.org/Themes/custom1/images/post/xx.gif) |
September 22, 2013, 02:13:04 PM |
|
FYI feel free to use git master at https://github.com/trezor/trezor-emu . There should be always the code which passed all my unit tests, because I'm doing active development in other git branches.
|
|
|
|
jim618 (OP)
Legendary
Offline
Activity: 1708
Merit: 1066
|
![](https://bitcointalk.org/Themes/custom1/images/post/xx.gif) |
September 22, 2013, 03:44:36 PM |
|
Yeah I think we'll have to distinquish between BOTH different seeds and different physical trezors as you suggest.
Something, somewhere will break if we don't.
For issues such as 'I created a new wallet and all my labels are missing' I expect we will go down the route Electrum has taken and have a label sync system (if not the exact same one so you can sync labels across multibit and electrum HD wallets).
|
|
|
|
slush
Legendary
Offline
Activity: 1386
Merit: 1097
|
![](https://bitcointalk.org/Themes/custom1/images/post/xx.gif) |
September 22, 2013, 04:23:51 PM |
|
For issues such as 'I created a new wallet and all my labels are missing' I expect we will go down the route Electrum has taken and have a label sync system (if not the exact same one so you can sync labels across multibit and electrum HD wallets).
The idea of label syncing is perfect and we like it as well. Having description of all transactions and addresses on every client is very nice. However, as many other things in Electrum, the implementation is far from optimal. I mean that such system can be designed to work transparently, like all data can be encrypted and signed with key derived directly from the seed, so there's no need for handling the API key, email registration, password recovery and other stuff. Shortly said, lets finalize all current project and then we can prepare new BIP for that :-).
|
|
|
|
jim618 (OP)
Legendary
Offline
Activity: 1708
Merit: 1066
|
![](https://bitcointalk.org/Themes/custom1/images/post/xx.gif) |
September 22, 2013, 04:36:45 PM |
|
Ha ha yes - one thing at a time !
:-)
|
|
|
|
Andreas Schildbach
|
![](https://bitcointalk.org/Themes/custom1/images/post/xx.gif) |
September 23, 2013, 09:13:03 AM |
|
Can we go one step back and explain how to set up the thing? For example, my Raspberry + Trezor sandwich has 3 USB ports - which one is the correct one? Do I need an SD card to boot up? I've never used a Raspberry before.
|
|
|
|
jim618 (OP)
Legendary
Offline
Activity: 1708
Merit: 1066
|
![](https://bitcointalk.org/Themes/custom1/images/post/xx.gif) |
September 23, 2013, 10:31:28 AM |
|
Gary wrote a useful guide on setting up the trezor emulator here: https://github.com/bitcoin-solutions/trezorj/wiki/Trezor-on-Raspberry-Pi-from-scratchThe operating system is on an SD yes. I must admit I bought a prebuilt one when I bought the RasPi so cannot tell you exactly what the distribution is. To talk to it you can plug in an an ethernet cable and use SSH. The little (micro?) USB on the RasPi is power and I think you can use either of the 2 stacked USB for the 'trezor' cable back to your PC. I also got a HDMI cable to hook up a monitor but I know Gary uses ethernet/ssh for everything so does not bother with a monitor. I also plugged in a little wireless keyboard but again you can do without.
|
|
|
|
jim618 (OP)
Legendary
Offline
Activity: 1708
Merit: 1066
|
![](https://bitcointalk.org/Themes/custom1/images/post/xx.gif) |
September 23, 2013, 10:39:38 AM |
|
@Andreas
Are you thinking of adding Trezor support into Bitcoin Wallet using USB on-the-go ?
|
|
|
|
stick
|
![](https://bitcointalk.org/Themes/custom1/images/post/xx.gif) |
September 23, 2013, 12:47:40 PM |
|
The little (micro?) USB on the RasPi is power and I think you can use either of the 2 stacked USB for the 'trezor' cable back to your PC.
For power you can use either of microUSB connectors. If you want to communicate with TREZOR, use the one on the shield (it will also provide power for the RasPi).
|
|
|
|
Andreas Schildbach
|
![](https://bitcointalk.org/Themes/custom1/images/post/xx.gif) |
September 23, 2013, 01:42:07 PM |
|
The little (micro?) USB on the RasPi is power and I think you can use either of the 2 stacked USB for the 'trezor' cable back to your PC.
For power you can use either of microUSB connectors. If you want to communicate with TREZOR, use the one on the shield (it will also provide power for the RasPi). Ok so I take it the only connection I have to make is the USB port on the shield?
|
|
|
|
Andreas Schildbach
|
![](https://bitcointalk.org/Themes/custom1/images/post/xx.gif) |
September 23, 2013, 01:43:21 PM |
|
@Andreas
Are you thinking of adding Trezor support into Bitcoin Wallet using USB on-the-go ?
Well I wanted to try if communication is possible. For it to be usable, I guess someone should build a "mobile" version of the Trezor.
|
|
|
|
stick
|
![](https://bitcointalk.org/Themes/custom1/images/post/xx.gif) |
September 23, 2013, 02:31:50 PM |
|
Ok so I take it the only connection I have to make is the USB port on the shield?
Right.
|
|
|
|
Trongersoll
|
![](https://bitcointalk.org/Themes/custom1/images/post/xx.gif) |
September 23, 2013, 07:27:31 PM Last edit: September 23, 2013, 08:38:35 PM by Trongersoll |
|
What happens to your coin if your trezor device gets broken?
|
|
|
|
jim618 (OP)
Legendary
Offline
Activity: 1708
Merit: 1066
|
![](https://bitcointalk.org/Themes/custom1/images/post/xx.gif) |
September 23, 2013, 08:23:13 PM |
|
When you initialize your trezor it shows on it's screen a 12 word passphrase (similar to Electrum's mnemonic phrase) that you write down.
If you lose your trezor you can then either: + reprogram another trezor with the seed + create a new wallet in a HD compatible wallet client with the new seed. (HD compatible wallet clients don't exist yet but Electrum, Armory and MultiBit are all planning to support it).
If you lose both your trezor AND your 12 word passphrase then you have lost access to your bitcoin.
|
|
|
|
Mike Hearn
Legendary
Offline
Activity: 1526
Merit: 1129
|
![](https://bitcointalk.org/Themes/custom1/images/post/xx.gif) |
September 24, 2013, 01:20:46 PM |
|
Label syncing isn't the right model IMHO.
The right model is that the same private key seed generated by Trezor/your wallet is both used to control your Bitcoins and encrypt your wallet file (literally the .wallet protobuf generated by bitcoinj or other wallet equivalents). Once encrypted that file can then be uploaded to some cloud service, perhaps a P2P DHT run by the community. The files are only small. The public key (or hash of it) would act as the document name to let you redownload the wallet if you need it.
In the case where the cloud backup fails for some reason, it isn't there any more or whatever, the private key you wrote down can be used to get access to your money even if all the other data is lost.
Remember that in future wallets will hold not only keys and labels, but also things like signed payment requests (receipts), micropayment channel state, info for dispute mediation and so on. Lots of stuff.
|
|
|
|
|