Эх сурвалжийг харах

internal/ethapi: support "input" in transaction args (#15640)

The tx data field is called "input" in returned objects and "data" in
argument objects. Make it so "input" can be used, but bail if both
are set.
Felix Lange 8 жил өмнө
parent
commit
8c33ac10bf

+ 16 - 3
internal/ethapi/api.go

@@ -17,6 +17,7 @@
 package ethapi
 package ethapi
 
 
 import (
 import (
+	"bytes"
 	"context"
 	"context"
 	"errors"
 	"errors"
 	"fmt"
 	"fmt"
@@ -1070,8 +1071,11 @@ type SendTxArgs struct {
 	Gas      *hexutil.Big    `json:"gas"`
 	Gas      *hexutil.Big    `json:"gas"`
 	GasPrice *hexutil.Big    `json:"gasPrice"`
 	GasPrice *hexutil.Big    `json:"gasPrice"`
 	Value    *hexutil.Big    `json:"value"`
 	Value    *hexutil.Big    `json:"value"`
-	Data     hexutil.Bytes   `json:"data"`
 	Nonce    *hexutil.Uint64 `json:"nonce"`
 	Nonce    *hexutil.Uint64 `json:"nonce"`
+	// We accept "data" and "input" for backwards-compatibility reasons. "input" is the
+	// newer name and should be preferred by clients.
+	Data  *hexutil.Bytes `json:"data"`
+	Input *hexutil.Bytes `json:"input"`
 }
 }
 
 
 // setDefaults is a helper function that fills in default values for unspecified tx fields.
 // setDefaults is a helper function that fills in default values for unspecified tx fields.
@@ -1096,14 +1100,23 @@ func (args *SendTxArgs) setDefaults(ctx context.Context, b Backend) error {
 		}
 		}
 		args.Nonce = (*hexutil.Uint64)(&nonce)
 		args.Nonce = (*hexutil.Uint64)(&nonce)
 	}
 	}
+	if args.Data != nil && args.Input != nil && !bytes.Equal(*args.Data, *args.Input) {
+		return errors.New(`Both "data" and "input" are set and not equal. Please use "input" to pass transaction call data.`)
+	}
 	return nil
 	return nil
 }
 }
 
 
 func (args *SendTxArgs) toTransaction() *types.Transaction {
 func (args *SendTxArgs) toTransaction() *types.Transaction {
+	var input []byte
+	if args.Data != nil {
+		input = *args.Data
+	} else if args.Input != nil {
+		input = *args.Input
+	}
 	if args.To == nil {
 	if args.To == nil {
-		return types.NewContractCreation(uint64(*args.Nonce), (*big.Int)(args.Value), (*big.Int)(args.Gas), (*big.Int)(args.GasPrice), args.Data)
+		return types.NewContractCreation(uint64(*args.Nonce), (*big.Int)(args.Value), (*big.Int)(args.Gas), (*big.Int)(args.GasPrice), input)
 	}
 	}
-	return types.NewTransaction(uint64(*args.Nonce), *args.To, (*big.Int)(args.Value), (*big.Int)(args.Gas), (*big.Int)(args.GasPrice), args.Data)
+	return types.NewTransaction(uint64(*args.Nonce), *args.To, (*big.Int)(args.Value), (*big.Int)(args.Gas), (*big.Int)(args.GasPrice), input)
 }
 }
 
 
 // submitTransaction is a helper function that submits tx to txPool and logs a message.
 // submitTransaction is a helper function that submits tx to txPool and logs a message.