aboutsummaryrefslogtreecommitdiffstats
path: root/internal/ethapi
diff options
context:
space:
mode:
authorNick Johnson <arachnid@notdot.net>2018-01-08 02:38:11 +0800
committerGuillaume Ballet <gballet@gmail.com>2019-04-08 19:19:37 +0800
commitf7027dd68ce115908ed8e359862cb7b21ddac15f (patch)
tree46132f008e2410a4e05804e6a846648b852b6711 /internal/ethapi
parent3996bc1ad91665ad30036713fba11840a36dfff0 (diff)
downloadgo-tangerine-f7027dd68ce115908ed8e359862cb7b21ddac15f.tar
go-tangerine-f7027dd68ce115908ed8e359862cb7b21ddac15f.tar.gz
go-tangerine-f7027dd68ce115908ed8e359862cb7b21ddac15f.tar.bz2
go-tangerine-f7027dd68ce115908ed8e359862cb7b21ddac15f.tar.lz
go-tangerine-f7027dd68ce115908ed8e359862cb7b21ddac15f.tar.xz
go-tangerine-f7027dd68ce115908ed8e359862cb7b21ddac15f.tar.zst
go-tangerine-f7027dd68ce115908ed8e359862cb7b21ddac15f.zip
accounts, core, internal, node: Add support for smartcard wallets
Diffstat (limited to 'internal/ethapi')
-rw-r--r--internal/ethapi/api.go42
1 files changed, 42 insertions, 0 deletions
diff --git a/internal/ethapi/api.go b/internal/ethapi/api.go
index e5a8124b1..7938b264a 100644
--- a/internal/ethapi/api.go
+++ b/internal/ethapi/api.go
@@ -28,6 +28,7 @@ import (
"github.com/davecgh/go-spew/spew"
"github.com/ethereum/go-ethereum/accounts"
"github.com/ethereum/go-ethereum/accounts/keystore"
+ "github.com/ethereum/go-ethereum/accounts/scwallet"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/common/hexutil"
"github.com/ethereum/go-ethereum/common/math"
@@ -44,6 +45,7 @@ import (
"github.com/ethereum/go-ethereum/rlp"
"github.com/ethereum/go-ethereum/rpc"
"github.com/syndtr/goleveldb/leveldb"
+ "github.com/tyler-smith/go-bip39"
)
const (
@@ -471,6 +473,46 @@ func (s *PrivateAccountAPI) SignAndSendTransaction(ctx context.Context, args Sen
return s.SendTransaction(ctx, args, passwd)
}
+func (s *PrivateAccountAPI) InitializeWallet(ctx context.Context, url string) (string, error) {
+ wallet, err := s.am.Wallet(url)
+ if err != nil {
+ return "", err
+ }
+
+ entropy, err := bip39.NewEntropy(256)
+ if err != nil {
+ return "", err
+ }
+
+ mnemonic, err := bip39.NewMnemonic(entropy)
+ if err != nil {
+ return "", err
+ }
+
+ seed := bip39.NewSeed(mnemonic, "")
+
+ switch wallet := wallet.(type) {
+ case *scwallet.Wallet:
+ return mnemonic, wallet.Initialize(seed)
+ default:
+ return "", fmt.Errorf("Specified wallet does not support initialization")
+ }
+}
+
+func (s *PrivateAccountAPI) Unpair(ctx context.Context, url string, pin string) error {
+ wallet, err := s.am.Wallet(url)
+ if err != nil {
+ return err
+ }
+
+ switch wallet := wallet.(type) {
+ case *scwallet.Wallet:
+ return wallet.Unpair([]byte(pin))
+ default:
+ return fmt.Errorf("Specified wallet does not support pairing")
+ }
+}
+
// PublicBlockChainAPI provides an API to access the Ethereum blockchain.
// It offers only methods that operate on public data that is freely available to anyone.
type PublicBlockChainAPI struct {