@@ -18,24 +18,25 @@ import (
1818 "github.com/0xsequence/ethkit/go-ethereum/crypto"
1919)
2020
21- var DefaultWalletOptions = WalletOptions {
22- DerivationPath : "m/44'/60'/0'/0/0" ,
23- RandomWalletEntropyBitSize : EntropyBitSize12WordMnemonic ,
21+ func DefaultWalletOptions () WalletOptions {
22+ return WalletOptions {
23+ DerivationPath : "m/44'/60'/0'/0/0" ,
24+ RandomWalletEntropyBitSize : EntropyBitSize12WordMnemonic ,
25+ }
2426}
2527
2628type Wallet struct {
27- hdnode * HDNode
28- provider * ethrpc.Provider
29- walletProvider * WalletProvider
29+ hdnode * HDNode
30+ provider * ethrpc.Provider
3031}
3132
3233type WalletOptions struct {
3334 DerivationPath string
3435 RandomWalletEntropyBitSize int
3536}
3637
37- func NewWalletFromPrivateKey (key string ) (* Wallet , error ) {
38- hdnode , err := NewHDNodeFromPrivateKey (key )
38+ func NewWalletFromPrivateKey (hexPrivateKey string ) (* Wallet , error ) {
39+ hdnode , err := NewHDNodeFromPrivateKey (hexPrivateKey )
3940 if err != nil {
4041 return nil , err
4142 }
@@ -58,7 +59,7 @@ func NewWalletFromHDNode(hdnode *HDNode, optPath ...accounts.DerivationPath) (*W
5859}
5960
6061func NewWalletFromRandomEntropy (options ... WalletOptions ) (* Wallet , error ) {
61- opts := DefaultWalletOptions
62+ opts := DefaultWalletOptions ()
6263 if len (options ) > 0 {
6364 opts = options [0 ]
6465 }
@@ -112,6 +113,14 @@ func (w *Wallet) Clone() (*Wallet, error) {
112113 }, nil
113114}
114115
116+ func (w * Wallet ) GetProvider () * ethrpc.Provider {
117+ return w .provider
118+ }
119+
120+ func (w * Wallet ) SetProvider (provider * ethrpc.Provider ) {
121+ w .provider = provider
122+ }
123+
115124func (w * Wallet ) Transactor (ctx context.Context ) (* bind.TransactOpts , error ) {
116125 var chainID * big.Int
117126 if w .provider != nil {
@@ -126,30 +135,13 @@ func (w *Wallet) Transactor(ctx context.Context) (*bind.TransactOpts, error) {
126135
127136func (w * Wallet ) TransactorForChainID (chainID * big.Int ) (* bind.TransactOpts , error ) {
128137 if chainID == nil {
129- // This is deprecated and will log a warning since it uses the original Homestead signer
130- return bind .NewKeyedTransactor (w .hdnode .PrivateKey ()), nil
138+ return nil , fmt .Errorf ("ethwallet: chainID is required" )
131139 } else {
132140 return bind .NewKeyedTransactorWithChainID (w .hdnode .PrivateKey (), chainID )
133141 }
134142}
135143
136- func (w * Wallet ) GetProvider () * ethrpc.Provider {
137- return w .provider
138- }
139-
140- func (w * Wallet ) SetProvider (provider * ethrpc.Provider ) {
141- w .provider = provider
142-
143- if w .walletProvider == nil {
144- w .walletProvider = & WalletProvider {wallet : w }
145- }
146- w .walletProvider .provider = provider
147- }
148-
149- func (w * Wallet ) Provider () * WalletProvider {
150- return w .walletProvider
151- }
152-
144+ // TODOXXX: deprecate?
153145func (w * Wallet ) SelfDerivePath (path accounts.DerivationPath ) (common.Address , error ) {
154146 err := w .hdnode .DerivePath (path )
155147 if err != nil {
@@ -227,16 +219,33 @@ func (w *Wallet) PublicKeyHex() string {
227219 return hexutil .Encode (publicKeyBytes )
228220}
229221
230- func (w * Wallet ) GetBalance (ctx context.Context ) (* big.Int , error ) {
231- return w .GetProvider ().BalanceAt (ctx , w .Address (), nil )
222+ func (w * Wallet ) GetBalance (ctx context.Context , optBlockNum ... * big.Int ) (* big.Int , error ) {
223+ var blockNum * big.Int = nil
224+ if len (optBlockNum ) > 0 {
225+ blockNum = optBlockNum [0 ]
226+ }
227+ return w .GetProvider ().BalanceAt (ctx , w .Address (), blockNum )
232228}
233229
234230func (w * Wallet ) GetNonce (ctx context.Context ) (uint64 , error ) {
235- return w .GetProvider ().NonceAt (ctx , w .Address (), nil )
231+ if w .provider == nil {
232+ return 0 , fmt .Errorf ("ethwallet: provider is not set" )
233+ }
234+ return w .provider .NonceAt (ctx , w .Address (), nil )
236235}
237236
238- // TODO: rename this to SignTransaction, but add SignTx for backwards compatibility and add deprecation warning
239- func (w * Wallet ) SignTx (tx * types.Transaction , chainID * big.Int ) (* types.Transaction , error ) {
237+ func (w * Wallet ) GetTransactionCount (ctx context.Context ) (uint64 , error ) {
238+ if w .provider == nil {
239+ return 0 , fmt .Errorf ("ethwallet: provider is not set" )
240+ }
241+ nonce , err := w .provider .PendingNonceAt (ctx , w .Address ())
242+ if err != nil {
243+ return 0 , err
244+ }
245+ return nonce , nil
246+ }
247+
248+ func (w * Wallet ) SignTransaction (tx * types.Transaction , chainID * big.Int ) (* types.Transaction , error ) {
240249 signer := types .LatestSignerForChainID (chainID )
241250 signedTx , err := types .SignTx (tx , signer , w .hdnode .PrivateKey ())
242251 if err != nil {
@@ -256,6 +265,11 @@ func (w *Wallet) SignTx(tx *types.Transaction, chainID *big.Int) (*types.Transac
256265 return signedTx , nil
257266}
258267
268+ // Deprecated: use SignTransaction instead
269+ func (w * Wallet ) SignTx (tx * types.Transaction , chainID * big.Int ) (* types.Transaction , error ) {
270+ return w .SignTransaction (tx , chainID )
271+ }
272+
259273// SignMessage signs a message with EIP-191 prefix with the wallet's private key.
260274//
261275// This is the same as SignData, but it adds the prefix "Ethereum Signed Message:\n" to
@@ -365,10 +379,10 @@ func (w *Wallet) NewTransaction(ctx context.Context, txnRequest *ethtxn.Transact
365379 return signedTx , nil
366380}
367381
368- func (w * Wallet ) SendTransaction (ctx context.Context , signedTx * types.Transaction ) (* types.Transaction , ethtxn.WaitReceipt , error ) {
382+ func (w * Wallet ) SendTransaction (ctx context.Context , signedTxn * types.Transaction ) (* types.Transaction , ethtxn.WaitReceipt , error ) {
369383 provider := w .GetProvider ()
370384 if provider == nil {
371- return nil , nil , fmt .Errorf ("ethwallet (SendTransaction) : provider is not set" )
385+ return nil , nil , fmt .Errorf ("ethwallet: provider is not set" )
372386 }
373- return ethtxn .SendTransaction (ctx , provider , signedTx )
387+ return ethtxn .SendTransaction (ctx , provider , signedTxn )
374388}
0 commit comments