|
|
@ -19,12 +19,12 @@ package apitypes |
|
|
|
import ( |
|
|
|
import ( |
|
|
|
"encoding/json" |
|
|
|
"encoding/json" |
|
|
|
"fmt" |
|
|
|
"fmt" |
|
|
|
|
|
|
|
"math/big" |
|
|
|
"strings" |
|
|
|
"strings" |
|
|
|
|
|
|
|
|
|
|
|
"github.com/ethereum/go-ethereum/common" |
|
|
|
"github.com/ethereum/go-ethereum/common" |
|
|
|
"github.com/ethereum/go-ethereum/common/hexutil" |
|
|
|
"github.com/ethereum/go-ethereum/common/hexutil" |
|
|
|
"github.com/ethereum/go-ethereum/core/types" |
|
|
|
"github.com/ethereum/go-ethereum/core/types" |
|
|
|
"github.com/ethereum/go-ethereum/internal/ethapi" |
|
|
|
|
|
|
|
) |
|
|
|
) |
|
|
|
|
|
|
|
|
|
|
|
type ValidationInfo struct { |
|
|
|
type ValidationInfo struct { |
|
|
@ -97,23 +97,60 @@ func (args SendTxArgs) String() string { |
|
|
|
return err.Error() |
|
|
|
return err.Error() |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// ToTransaction converts the arguments to a transaction.
|
|
|
|
func (args *SendTxArgs) ToTransaction() *types.Transaction { |
|
|
|
func (args *SendTxArgs) ToTransaction() *types.Transaction { |
|
|
|
txArgs := ethapi.TransactionArgs{ |
|
|
|
|
|
|
|
Gas: &args.Gas, |
|
|
|
|
|
|
|
GasPrice: args.GasPrice, |
|
|
|
|
|
|
|
MaxFeePerGas: args.MaxFeePerGas, |
|
|
|
|
|
|
|
MaxPriorityFeePerGas: args.MaxPriorityFeePerGas, |
|
|
|
|
|
|
|
Value: &args.Value, |
|
|
|
|
|
|
|
Nonce: &args.Nonce, |
|
|
|
|
|
|
|
Data: args.Data, |
|
|
|
|
|
|
|
Input: args.Input, |
|
|
|
|
|
|
|
AccessList: args.AccessList, |
|
|
|
|
|
|
|
ChainID: args.ChainID, |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
// Add the To-field, if specified
|
|
|
|
// Add the To-field, if specified
|
|
|
|
|
|
|
|
var to *common.Address |
|
|
|
if args.To != nil { |
|
|
|
if args.To != nil { |
|
|
|
to := args.To.Address() |
|
|
|
dstAddr := args.To.Address() |
|
|
|
txArgs.To = &to |
|
|
|
to = &dstAddr |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var input []byte |
|
|
|
|
|
|
|
if args.Input != nil { |
|
|
|
|
|
|
|
input = *args.Input |
|
|
|
|
|
|
|
} else if args.Data != nil { |
|
|
|
|
|
|
|
input = *args.Data |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var data types.TxData |
|
|
|
|
|
|
|
switch { |
|
|
|
|
|
|
|
case args.MaxFeePerGas != nil: |
|
|
|
|
|
|
|
al := types.AccessList{} |
|
|
|
|
|
|
|
if args.AccessList != nil { |
|
|
|
|
|
|
|
al = *args.AccessList |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
data = &types.DynamicFeeTx{ |
|
|
|
|
|
|
|
To: to, |
|
|
|
|
|
|
|
ChainID: (*big.Int)(args.ChainID), |
|
|
|
|
|
|
|
Nonce: uint64(args.Nonce), |
|
|
|
|
|
|
|
Gas: uint64(args.Gas), |
|
|
|
|
|
|
|
GasFeeCap: (*big.Int)(args.MaxFeePerGas), |
|
|
|
|
|
|
|
GasTipCap: (*big.Int)(args.MaxPriorityFeePerGas), |
|
|
|
|
|
|
|
Value: (*big.Int)(&args.Value), |
|
|
|
|
|
|
|
Data: input, |
|
|
|
|
|
|
|
AccessList: al, |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
case args.AccessList != nil: |
|
|
|
|
|
|
|
data = &types.AccessListTx{ |
|
|
|
|
|
|
|
To: to, |
|
|
|
|
|
|
|
ChainID: (*big.Int)(args.ChainID), |
|
|
|
|
|
|
|
Nonce: uint64(args.Nonce), |
|
|
|
|
|
|
|
Gas: uint64(args.Gas), |
|
|
|
|
|
|
|
GasPrice: (*big.Int)(args.GasPrice), |
|
|
|
|
|
|
|
Value: (*big.Int)(&args.Value), |
|
|
|
|
|
|
|
Data: input, |
|
|
|
|
|
|
|
AccessList: *args.AccessList, |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
default: |
|
|
|
|
|
|
|
data = &types.LegacyTx{ |
|
|
|
|
|
|
|
To: to, |
|
|
|
|
|
|
|
Nonce: uint64(args.Nonce), |
|
|
|
|
|
|
|
Gas: uint64(args.Gas), |
|
|
|
|
|
|
|
GasPrice: (*big.Int)(args.GasPrice), |
|
|
|
|
|
|
|
Value: (*big.Int)(&args.Value), |
|
|
|
|
|
|
|
Data: input, |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
return txArgs.ToTransaction() |
|
|
|
return types.NewTx(data) |
|
|
|
} |
|
|
|
} |
|
|
|