|
@@ -19,7 +19,6 @@
|
|
|
package geth
|
|
package geth
|
|
|
|
|
|
|
|
import (
|
|
import (
|
|
|
- "errors"
|
|
|
|
|
"math/big"
|
|
"math/big"
|
|
|
"strings"
|
|
"strings"
|
|
|
|
|
|
|
@@ -28,7 +27,6 @@ import (
|
|
|
"github.com/ethereum/go-ethereum/accounts/keystore"
|
|
"github.com/ethereum/go-ethereum/accounts/keystore"
|
|
|
"github.com/ethereum/go-ethereum/common"
|
|
"github.com/ethereum/go-ethereum/common"
|
|
|
"github.com/ethereum/go-ethereum/core/types"
|
|
"github.com/ethereum/go-ethereum/core/types"
|
|
|
- "github.com/ethereum/go-ethereum/crypto"
|
|
|
|
|
)
|
|
)
|
|
|
|
|
|
|
|
// Signer is an interface defining the callback when a contract requires a
|
|
// Signer is an interface defining the callback when a contract requires a
|
|
@@ -82,28 +80,14 @@ func NewTransactOpts() *TransactOpts {
|
|
|
return new(TransactOpts)
|
|
return new(TransactOpts)
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-// NewKeyedTransactor is a utility method to easily create a transaction signer
|
|
|
|
|
|
|
+// NewKeyedTransactOpts is a utility method to easily create a transaction signer
|
|
|
// from a single private key.
|
|
// from a single private key.
|
|
|
func NewKeyedTransactOpts(keyJson []byte, passphrase string) (*TransactOpts, error) {
|
|
func NewKeyedTransactOpts(keyJson []byte, passphrase string) (*TransactOpts, error) {
|
|
|
key, err := keystore.DecryptKey(keyJson, passphrase)
|
|
key, err := keystore.DecryptKey(keyJson, passphrase)
|
|
|
if err != nil {
|
|
if err != nil {
|
|
|
return nil, err
|
|
return nil, err
|
|
|
}
|
|
}
|
|
|
- keyAddr := crypto.PubkeyToAddress(key.PrivateKey.PublicKey)
|
|
|
|
|
- opts := bind.TransactOpts{
|
|
|
|
|
- From: keyAddr,
|
|
|
|
|
- Signer: func(signer types.Signer, address common.Address, tx *types.Transaction) (*types.Transaction, error) {
|
|
|
|
|
- if address != keyAddr {
|
|
|
|
|
- return nil, errors.New("not authorized to sign this account")
|
|
|
|
|
- }
|
|
|
|
|
- signature, err := crypto.Sign(signer.Hash(tx).Bytes(), key.PrivateKey)
|
|
|
|
|
- if err != nil {
|
|
|
|
|
- return nil, err
|
|
|
|
|
- }
|
|
|
|
|
- return tx.WithSignature(signer, signature)
|
|
|
|
|
- },
|
|
|
|
|
- }
|
|
|
|
|
- return &TransactOpts{opts}, nil
|
|
|
|
|
|
|
+ return &TransactOpts{*bind.NewKeyedTransactor(key.PrivateKey)}, nil
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
func (opts *TransactOpts) GetFrom() *Address { return &Address{opts.opts.From} }
|
|
func (opts *TransactOpts) GetFrom() *Address { return &Address{opts.opts.From} }
|