usbwallet

package module
v0.1.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 1, 2025 License: GPL-3.0 Imports: 31 Imported by: 1

README

usbwallet

Fork of go-ethereum's usbwallet package with support for:

  • non-HID devices (recent Trezor firmware)
  • EIP-712 typed-data signatures
  • Personal message signatures

Should be a drop-in replacement.

Usage
package main

import (
	"fmt"

	"github.com/ethereum/go-ethereum/accounts"
	"github.com/ethereum/go-ethereum/signer/core/apitypes"
	"github.com/base/usbwallet"
)

func main() {
	hub, _ := usbwallet.NewTrezorHubWithWebUSB()
	wallet := hub.Wallets()[0]
	_ = wallet.Open("")
	path, _ := accounts.ParseDerivationPath("m/44'/60'/0'/0/0")
	account, _ := wallet.Derive(path, true)
	data := apitypes.TypedData{
		Types: map[string][]apitypes.Type{
			"EIP712Domain": {{Name: "name", Type: "string"}},
			"Mail":         {{Name: "from", Type: "string"}, {Name: "to", Type: "string"}, {Name: "contents", Type: "string"}},
		},
		PrimaryType: "Mail",
		Domain:      apitypes.TypedDataDomain{Name: "example mail"},
		Message:     map[string]interface{}{"from": "from@example.com", "to": "to@example.com", "contents": "hello world"},
	}
	sig, _ := wallet.SignTypedData(account, data)
	fmt.Printf("Sig: 0x%x\n", sig)
}

Documentation

Overview

Package usbwallet implements support for USB hardware wallets.

Index

Constants

View Source
const (
	CustomType dataType = iota
	IntType
	UintType
	AddressType
	BoolType
	StringType
	FixedBytesType
	BytesType
)
View Source
const LedgerScheme = "ledger"

LedgerScheme is the protocol scheme prefixing account and wallet URLs.

View Source
const TrezorScheme = "trezor"

TrezorScheme is the protocol scheme prefixing account and wallet URLs.

Variables

This section is empty.

Functions

This section is empty.

Types

type Hub

type Hub struct {
	// contains filtered or unexported fields
}

Hub is a accounts.Backend that can find and handle generic USB hardware wallets.

func NewLedgerHub

func NewLedgerHub() (*Hub, error)

NewLedgerHub creates a new hardware wallet manager for Ledger devices.

func NewTrezorHubWithHID

func NewTrezorHubWithHID() (*Hub, error)

NewTrezorHubWithHID creates a new hardware wallet manager for Trezor devices.

func NewTrezorHubWithWebUSB

func NewTrezorHubWithWebUSB() (*Hub, error)

NewTrezorHubWithWebUSB creates a new hardware wallet manager for Trezor devices with firmware version > 1.8.0

func (*Hub) Subscribe

func (hub *Hub) Subscribe(sink chan<- accounts.WalletEvent) event.Subscription

Subscribe implements accounts.Backend, creating an async subscription to receive notifications on the addition or removal of USB wallets.

func (*Hub) Wallets

func (hub *Hub) Wallets() []Wallet

Wallets implements accounts.Backend, returning all the currently tracked USB devices that appear to be hardware wallets.

type TrezorFailure added in v0.0.2

type TrezorFailure struct {
	*trezor.Failure
}

func (*TrezorFailure) Error added in v0.0.2

func (f *TrezorFailure) Error() string

Error implements the error interface for the TrezorFailure type, returning a formatted error message containing the failure reason.

type Wallet

type Wallet interface {
	accounts.Wallet

	SignTypedData(account accounts.Account, data apitypes.TypedData) ([]byte, error)
	SignTypedDataWithPassphrase(account accounts.Account, passphrase string, data apitypes.TypedData) ([]byte, error)
}

Directories

Path Synopsis
Package trezor contains the wire protocol.
Package trezor contains the wire protocol.
Package usb provide interfaces for generic USB devices.
Package usb provide interfaces for generic USB devices.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL