diff --git a/core/types/transaction.go b/core/types/transaction.go index 95c460dc6..acf6a713d 100644 --- a/core/types/transaction.go +++ b/core/types/transaction.go @@ -177,6 +177,8 @@ const ( // it needs a signer that signs SignedMsgConcat SignedMsgSerializationType = "concat" + SignedMsgDirect SignedMsgSerializationType = "direct" + // DefaultSignedMsgSerType is the default serialization type // It's `concat` for now, since it's the only one known works for every signer DefaultSignedMsgSerType = SignedMsgConcat @@ -184,6 +186,16 @@ const ( // CreateTransaction creates a new unsigned transaction. func CreateTransaction(contents Payload, chainID string, nonce uint64) (*Transaction, error) { + return createTransaction(contents, chainID, nonce, DefaultSignedMsgSerType) +} + +// CreateNodeTransaction creates a new unsigned transaction with the "direct" +// serialization type. +func CreateNodeTransaction(contents Payload, chainID string, nonce uint64) (*Transaction, error) { + return createTransaction(contents, chainID, nonce, SignedMsgDirect) +} + +func createTransaction(contents Payload, chainID string, nonce uint64, sert SignedMsgSerializationType) (*Transaction, error) { data, err := contents.MarshalBinary() if err != nil { return nil, err @@ -197,7 +209,7 @@ func CreateTransaction(contents Payload, chainID string, nonce uint64) (*Transac Nonce: nonce, ChainID: chainID, }, - Serialization: DefaultSignedMsgSerType, + Serialization: sert, }, nil } @@ -240,6 +252,13 @@ func (t *TransactionBody) SerializeMsg(mst SignedMsgSerializationType) ([]byte, } switch mst { + case SignedMsgDirect: + msg, err := t.MarshalBinary() + if err != nil { + return nil, fmt.Errorf("failed to serialize transaction body: %v", err) + } + sigHash := crypto.Sha256(msg) // could just be msg + return sigHash[:], nil case SignedMsgConcat: // Make a human-readable message using a template(txMsgToSignTmplV0). // In this message scheme, the displayed "token" is a hash of the diff --git a/node/services/jsonrpc/adminsvc/service.go b/node/services/jsonrpc/adminsvc/service.go index 489de4f20..f94eebb57 100644 --- a/node/services/jsonrpc/adminsvc/service.go +++ b/node/services/jsonrpc/adminsvc/service.go @@ -299,7 +299,7 @@ func (svc *Service) sendTx(ctx context.Context, payload ktypes.Payload) (*userjs return nil, jsonrpc.NewError(jsonrpc.ErrorAccountInternal, "account info error", nil) } - tx, err := ktypes.CreateTransaction(payload, svc.chainID, uint64(nonce+1)) + tx, err := ktypes.CreateNodeTransaction(payload, svc.chainID, uint64(nonce+1)) if err != nil { return nil, jsonrpc.NewError(jsonrpc.ErrorInternal, "unable to create transaction", nil) }