From 225904b0104d3d0b4188675a1daa3030721165dc Mon Sep 17 00:00:00 2001 From: Ethan Frey Date: Mon, 3 Jul 2017 15:01:28 +0200 Subject: [PATCH] NewXYZTx returns Tx already wrapped, except for sigs --- modules/coin/tx.go | 6 ++- modules/coin/tx_test.go | 104 ++++++++++++++++++++------------------- modules/fee/tx.go | 4 +- stack/chain_test.go | 6 +-- stack/middleware_test.go | 2 +- stack/signature_test.go | 2 +- txs/base.go | 12 ++--- txs/base_test.go | 8 +-- 8 files changed, 75 insertions(+), 69 deletions(-) diff --git a/modules/coin/tx.go b/modules/coin/tx.go index e40967e48e..4087d7c945 100644 --- a/modules/coin/tx.go +++ b/modules/coin/tx.go @@ -102,7 +102,11 @@ type SendTx struct { Outputs []TxOutput `json:"outputs"` } -var _ basecoin.Tx = SendTx{}.Wrap() +var _ basecoin.Tx = NewSendTx(nil, nil) + +func NewSendTx(in []TxInput, out []TxOutput) basecoin.Tx { + return SendTx{Inputs: in, Outputs: out}.Wrap() +} func (tx SendTx) ValidateBasic() error { // this just makes sure all the inputs and outputs are properly formatted, diff --git a/modules/coin/tx_test.go b/modules/coin/tx_test.go index df43f4bc7d..1fb9bf0b4b 100644 --- a/modules/coin/tx_test.go +++ b/modules/coin/tx_test.go @@ -106,61 +106,63 @@ func TestTxValidateTx(t *testing.T) { // totals don't match cases := []struct { valid bool - tx SendTx + tx basecoin.Tx }{ // 0-2. valid cases - {true, SendTx{ - Inputs: []TxInput{NewTxInput(addr1, someCoins, 2)}, - Outputs: []TxOutput{NewTxOutput(addr2, someCoins)}, - }}, - {true, SendTx{ - Inputs: []TxInput{NewTxInput(addr1, someCoins, 2), NewTxInput(addr2, otherCoins, 5)}, - Outputs: []TxOutput{NewTxOutput(addr3, bothCoins)}, - }}, - {true, SendTx{ - Inputs: []TxInput{NewTxInput(addr1, bothCoins, 42)}, - Outputs: []TxOutput{NewTxOutput(addr2, someCoins), NewTxOutput(addr3, otherCoins)}, - }}, + {true, NewSendTx( + []TxInput{NewTxInput(addr1, someCoins, 2)}, + []TxOutput{NewTxOutput(addr2, someCoins)}, + )}, + {true, NewSendTx( + []TxInput{NewTxInput(addr1, someCoins, 2), NewTxInput(addr2, otherCoins, 5)}, + []TxOutput{NewTxOutput(addr3, bothCoins)}, + )}, + {true, NewSendTx( + []TxInput{NewTxInput(addr1, bothCoins, 42)}, + []TxOutput{NewTxOutput(addr2, someCoins), NewTxOutput(addr3, otherCoins)}, + )}, // 3-4. missing cases - {false, SendTx{ - Outputs: []TxOutput{NewTxOutput(addr2, someCoins)}, - }}, - {false, SendTx{ - Inputs: []TxInput{NewTxInput(addr1, someCoins, 2)}, - }}, + {false, NewSendTx( + nil, + []TxOutput{NewTxOutput(addr2, someCoins)}, + )}, + {false, NewSendTx( + []TxInput{NewTxInput(addr1, someCoins, 2)}, + nil, + )}, // 5-8. invalid inputs - {false, SendTx{ - Inputs: []TxInput{NewTxInput(noAddr, someCoins, 2)}, - Outputs: []TxOutput{NewTxOutput(addr2, someCoins)}, - }}, - {false, SendTx{ - Inputs: []TxInput{NewTxInput(addr1, someCoins, -1)}, - Outputs: []TxOutput{NewTxOutput(addr2, someCoins)}, - }}, - {false, SendTx{ - Inputs: []TxInput{NewTxInput(addr1, noCoins, 2)}, - Outputs: []TxOutput{NewTxOutput(addr2, noCoins)}, - }}, - {false, SendTx{ - Inputs: []TxInput{NewTxInput(addr1, minusCoins, 2)}, - Outputs: []TxOutput{NewTxOutput(addr2, minusCoins)}, - }}, + {false, NewSendTx( + []TxInput{NewTxInput(noAddr, someCoins, 2)}, + []TxOutput{NewTxOutput(addr2, someCoins)}, + )}, + {false, NewSendTx( + []TxInput{NewTxInput(addr1, someCoins, -1)}, + []TxOutput{NewTxOutput(addr2, someCoins)}, + )}, + {false, NewSendTx( + []TxInput{NewTxInput(addr1, noCoins, 2)}, + []TxOutput{NewTxOutput(addr2, noCoins)}, + )}, + {false, NewSendTx( + []TxInput{NewTxInput(addr1, minusCoins, 2)}, + []TxOutput{NewTxOutput(addr2, minusCoins)}, + )}, // 9-11. totals don't match - {false, SendTx{ - Inputs: []TxInput{NewTxInput(addr1, someCoins, 7)}, - Outputs: []TxOutput{NewTxOutput(addr2, moreCoins)}, - }}, - {false, SendTx{ - Inputs: []TxInput{NewTxInput(addr1, someCoins, 2), NewTxInput(addr2, minusCoins, 5)}, - Outputs: []TxOutput{NewTxOutput(addr3, someCoins)}, - }}, - {false, SendTx{ - Inputs: []TxInput{NewTxInput(addr1, someCoins, 2), NewTxInput(addr2, moreCoins, 5)}, - Outputs: []TxOutput{NewTxOutput(addr3, bothCoins)}, - }}, + {false, NewSendTx( + []TxInput{NewTxInput(addr1, someCoins, 7)}, + []TxOutput{NewTxOutput(addr2, moreCoins)}, + )}, + {false, NewSendTx( + []TxInput{NewTxInput(addr1, someCoins, 2), NewTxInput(addr2, minusCoins, 5)}, + []TxOutput{NewTxOutput(addr3, someCoins)}, + )}, + {false, NewSendTx( + []TxInput{NewTxInput(addr1, someCoins, 2), NewTxInput(addr2, moreCoins, 5)}, + []TxOutput{NewTxOutput(addr3, bothCoins)}, + )}, } for i, tc := range cases { @@ -181,10 +183,10 @@ func TestTxSerializeTx(t *testing.T) { addr2 := basecoin.Actor{App: "coin", Address: []byte{3, 4}} someCoins := types.Coins{{"atom", 123}} - send := SendTx{ - Inputs: []TxInput{NewTxInput(addr1, someCoins, 2)}, - Outputs: []TxOutput{NewTxOutput(addr2, someCoins)}, - }.Wrap() + send := NewSendTx( + []TxInput{NewTxInput(addr1, someCoins, 2)}, + []TxOutput{NewTxOutput(addr2, someCoins)}, + ) js, err := data.ToJSON(send) require.Nil(err) diff --git a/modules/fee/tx.go b/modules/fee/tx.go index 10f5d7cfd7..8f51c48e7a 100644 --- a/modules/fee/tx.go +++ b/modules/fee/tx.go @@ -25,8 +25,8 @@ type Fee struct { // Gas types.Coin `json:"gas"` // ????? } -func NewFee(tx basecoin.Tx, fee types.Coin, payer basecoin.Actor) *Fee { - return &Fee{Tx: tx, Fee: fee, Payer: payer} +func NewFee(tx basecoin.Tx, fee types.Coin, payer basecoin.Actor) basecoin.Tx { + return (&Fee{Tx: tx, Fee: fee, Payer: payer}).Wrap() } func (f *Fee) ValidateBasic() error { diff --git a/stack/chain_test.go b/stack/chain_test.go index a17b6bd481..8d7833ae87 100644 --- a/stack/chain_test.go +++ b/stack/chain_test.go @@ -18,14 +18,14 @@ func TestChain(t *testing.T) { msg := "got it" chainID := "my-chain" - raw := txs.NewRaw([]byte{1, 2, 3, 4}).Wrap() + raw := txs.NewRaw([]byte{1, 2, 3, 4}) cases := []struct { tx basecoin.Tx valid bool errorMsg string }{ - {txs.NewChain(chainID, raw).Wrap(), true, ""}, - {txs.NewChain("someone-else", raw).Wrap(), false, "someone-else"}, + {txs.NewChain(chainID, raw), true, ""}, + {txs.NewChain("someone-else", raw), false, "someone-else"}, {raw, false, "No chain id provided"}, } diff --git a/stack/middleware_test.go b/stack/middleware_test.go index eed6a183e5..74fa431c8d 100644 --- a/stack/middleware_test.go +++ b/stack/middleware_test.go @@ -19,7 +19,7 @@ func TestPermissionSandbox(t *testing.T) { // generic args ctx := NewContext(log.NewNopLogger()) store := types.NewMemKVStore() - raw := txs.NewRaw([]byte{1, 2, 3, 4}).Wrap() + raw := txs.NewRaw([]byte{1, 2, 3, 4}) rawBytes, err := data.ToWire(raw) require.Nil(err) diff --git a/stack/signature_test.go b/stack/signature_test.go index e0d90cba2d..1ca618c4cc 100644 --- a/stack/signature_test.go +++ b/stack/signature_test.go @@ -19,7 +19,7 @@ func TestSignatureChecks(t *testing.T) { // generic args ctx := NewContext(log.NewNopLogger()) store := types.NewMemKVStore() - raw := txs.NewRaw([]byte{1, 2, 3, 4}).Wrap() + raw := txs.NewRaw([]byte{1, 2, 3, 4}) // let's make some keys.... priv1 := crypto.GenPrivKeyEd25519().Wrap() diff --git a/txs/base.go b/txs/base.go index fcbb17899a..01cae5a270 100644 --- a/txs/base.go +++ b/txs/base.go @@ -55,8 +55,8 @@ func (r Raw) ValidateBasic() error { return nil } -func NewRaw(d []byte) Raw { - return Raw{data.Bytes(d)} +func NewRaw(d []byte) basecoin.Tx { + return Raw{data.Bytes(d)}.Wrap() } /**** MultiTx ******/ @@ -64,8 +64,8 @@ type MultiTx struct { Txs []basecoin.Tx `json:"txs"` } -func NewMultiTx(txs ...basecoin.Tx) *MultiTx { - return &MultiTx{Txs: txs} +func NewMultiTx(txs ...basecoin.Tx) basecoin.Tx { + return (&MultiTx{Txs: txs}).Wrap() } func (mt *MultiTx) Wrap() basecoin.Tx { @@ -90,8 +90,8 @@ type Chain struct { ChainID string `json:"chain_id"` } -func NewChain(chainID string, tx basecoin.Tx) *Chain { - return &Chain{Tx: tx, ChainID: chainID} +func NewChain(chainID string, tx basecoin.Tx) basecoin.Tx { + return (&Chain{Tx: tx, ChainID: chainID}).Wrap() } func (c *Chain) Wrap() basecoin.Tx { diff --git a/txs/base_test.go b/txs/base_test.go index 3969406e2b..1bbceb8230 100644 --- a/txs/base_test.go +++ b/txs/base_test.go @@ -16,15 +16,15 @@ func TestEncoding(t *testing.T) { assert := assert.New(t) require := require.New(t) - raw := NewRaw([]byte{0x34, 0xa7}).Wrap() - raw2 := NewRaw([]byte{0x73, 0x86, 0x22}).Wrap() + raw := NewRaw([]byte{0x34, 0xa7}) + raw2 := NewRaw([]byte{0x73, 0x86, 0x22}) cases := []struct { Tx basecoin.Tx }{ {raw}, - {NewMultiTx(raw, raw2).Wrap()}, - {NewChain("foobar", raw).Wrap()}, + {NewMultiTx(raw, raw2)}, + {NewChain("foobar", raw)}, } for idx, tc := range cases {