LedgerHQ / ledger-dotnet-api

.NET API for Ledger
MIT License
48 stars 30 forks source link

Hardwarewallets.Net Feedback #23

Open MelbourneDeveloper opened 6 years ago

MelbourneDeveloper commented 6 years ago

Hey @NicolasDorier ,

Sorry about the lack of contribution lately. I'm still planning on finishing off the Android support, but I've been working on other projects and have very little time.

I'm currently working on https://github.com/MelbourneDeveloper/Hardwarewallets.Net

The idea of this library is on the base level to have a public interface that sits across all hardwarewallets and all coins on all platforms. Your library does not need to implement the public interface. I will include wrappers for the hardwarewallet libraries in the second tier of the library. The plan is to build up the interface bit by bit and slowly implement the interface for KeepKey, Trezor, and Ledger.

This is the main interface: https://github.com/MelbourneDeveloper/Hardwarewallets.Net/blob/master/src/Hardwarewallets.Net.Base/IHardwarewalletManager.cs

You can already see the library in action with unit tests for Trezor and your library: https://github.com/MelbourneDeveloper/Hardwarewallets.Net/tree/master/src/Hardwarewallets.Net.UnitTests

Basically just hoping to get your input on moving forward with this. I'd especially like your input on Bitcoin transaction signing. I'm hoping to also hear from @juanfranblanco on this. Please feel free to submit any pull requests if you think anything looks wrong.

Christian

NicolasDorier commented 6 years ago

That's quite cool. Please let me know about progress, I might want to use this for BTCPay to support several hardware wallet.

juanfranblanco commented 6 years ago

@MelbourneDeveloper I am working now on the Trezor support integration, and from there moving on the full library.

MelbourneDeveloper commented 6 years ago

@NicolasDorier and @juanfranblanco glad to hear you guys are interested. I just did a big refactor where there is interfaces for each function. Like IAddressDeriver, and ITransactionSigner and so on instead of trying to cram all the functions in to one big interface. Now, I think this library will be quite useful - especially for tasks like getting bulk addresses etc.

All the main code has been consolidated in to one assembly, but there are no dependencies inside that assembly. So, adapters have to be made for each of the libraries. Those adapters are now stored in the unit tests. In time, the IAddressDeriver interface will be moved in to my libraries so that there is no need for adapters on top.

MelbourneDeveloper commented 5 years ago

@NicolasDorier , there has been some progress on this. It's currently mostly for getting addresses. If you'd like to give feedback on what you'd need to be useful for BTCPay, I can make that a higher priority.

NicolasDorier commented 5 years ago

I saw your progress on the Trezor lib especially. I will use it for BTCPay.

I don't think there is any need more than what you already did, this seems to be perfect.

MelbourneDeveloper commented 5 years ago

@NicolasDorier that's great to hear!

Please keep an eye on https://github.com/MelbourneDeveloper/Trezor.Net/issues/4. Satoshi Labs have dumped support for Hid in Trezor Core. That means it will be broken in firmware version 1.7.1 which is in beta currently. I'm not sure why yet. I already fixed Android, and there is a plan for UWP. But, I'm currently looking for a replacement transport for .NET Core.

NicolasDorier commented 5 years ago

@MelbourneDeveloper in my case, I would have a custom transport which root server side created packets to websocket to trezor bridge running on browser extension. So I don't think this will break things for me.

So as long as the bridge keep working, I am fine.

I used a similar hack for Ledger. With ledger on BTCPay, I generate the packets server side => websocket => U2F.