OSDN Git Service

Add vote output (#1879)
authorPoseidon <shenao.78@163.com>
Tue, 13 Apr 2021 03:18:30 +0000 (11:18 +0800)
committerGitHub <noreply@github.com>
Tue, 13 Apr 2021 03:18:30 +0000 (11:18 +0800)
* add vote output

* move func to test file

* fix test

* refactor

* rename to original tx output

* fix test

* modify makefile for ci

* recover makefile

32 files changed:
account/builder.go
blockchain/txbuilder/actions.go
blockchain/txbuilder/txbuilder_test.go
config/genesis.go
netsync/chainmgr/tool_test.go
netsync/chainmgr/tx_keeper_test.go
netsync/messages/chain_msg_test.go
netsync/peers/peer_test.go
protocol/bc/types/block_test.go
protocol/bc/types/map_test.go
protocol/bc/types/merkle_test.go
protocol/bc/types/original_output.go [new file with mode: 0644]
protocol/bc/types/output_commitment.go
protocol/bc/types/output_commitment_test.go
protocol/bc/types/transaction_test.go
protocol/bc/types/txoutput.go
protocol/bc/types/txoutput_test.go
protocol/bc/types/vote_output.go [new file with mode: 0644]
protocol/txpool_test.go
protocol/validation/block_test.go
protocol/validation/test/tx_ugly_test.go
protocol/validation/tx_scene_test.go
protocol/validation/tx_test.go
protocol/validation/vmcontext_test.go
test/chain_test_util.go
test/integration/block_integration_test.go
test/tx_test_util.go
test/util.go
test/utxo_view/utxo_view_test_util.go
wallet/recovery_test.go
wallet/utxo_test.go
wallet/wallet_test.go

index f4d4040..228f428 100644 (file)
@@ -115,7 +115,7 @@ func (m *Manager) buildBtmTxChain(utxos []*UTXO, signer *signers.Signer) ([]*txb
                }
 
                outAmount := buildAmount - txbuilder.ChainTxMergeGas
-               output := types.NewTxOutput(*consensus.BTMAssetID, outAmount, acp.ControlProgram)
+               output := types.NewOriginalTxOutput(*consensus.BTMAssetID, outAmount, acp.ControlProgram)
                if err := builder.AddOutput(output); err != nil {
                        return nil, nil, err
                }
@@ -187,7 +187,7 @@ func SpendAccountChain(ctx context.Context, builder *txbuilder.TemplateBuilder,
        }
 
        if utxo.Amount > act.Amount {
-               if err = builder.AddOutput(types.NewTxOutput(*consensus.BTMAssetID, utxo.Amount-act.Amount, utxo.ControlProgram)); err != nil {
+               if err = builder.AddOutput(types.NewOriginalTxOutput(*consensus.BTMAssetID, utxo.Amount-act.Amount, utxo.ControlProgram)); err != nil {
                        return nil, errors.Wrap(err, "adding change output")
                }
        }
@@ -240,7 +240,7 @@ func (a *spendAction) Build(ctx context.Context, b *txbuilder.TemplateBuilder) e
 
                // Don't insert the control program until callbacks are executed.
                a.accounts.insertControlProgramDelayed(b, acp)
-               if err = b.AddOutput(types.NewTxOutput(*a.AssetId, res.change, acp.ControlProgram)); err != nil {
+               if err = b.AddOutput(types.NewOriginalTxOutput(*a.AssetId, res.change, acp.ControlProgram)); err != nil {
                        return errors.Wrap(err, "adding change output")
                }
        }
index ecb24f7..8be37f9 100644 (file)
@@ -59,7 +59,7 @@ func (a *controlAddressAction) Build(ctx context.Context, b *TemplateBuilder) er
                return err
        }
 
-       out := types.NewTxOutput(*a.AssetId, a.Amount, program)
+       out := types.NewOriginalTxOutput(*a.AssetId, a.Amount, program)
        return b.AddOutput(out)
 }
 
@@ -94,7 +94,7 @@ func (a *controlProgramAction) Build(ctx context.Context, b *TemplateBuilder) er
                return MissingFieldsError(missing...)
        }
 
-       out := types.NewTxOutput(*a.AssetId, a.Amount, a.Program)
+       out := types.NewOriginalTxOutput(*a.AssetId, a.Amount, a.Program)
        return b.AddOutput(out)
 }
 
@@ -130,7 +130,7 @@ func (a *retireAction) Build(ctx context.Context, b *TemplateBuilder) error {
        if err != nil {
                return err
        }
-       out := types.NewTxOutput(*a.AssetId, a.Amount, program)
+       out := types.NewOriginalTxOutput(*a.AssetId, a.Amount, program)
        return b.AddOutput(out)
 }
 
index f52c062..f3a709d 100644 (file)
@@ -35,7 +35,7 @@ func (t testAction) Build(ctx context.Context, b *TemplateBuilder) error {
        if err != nil {
                return err
        }
-       return b.AddOutput(types.NewTxOutput(*t.AssetId, t.Amount, []byte("change")))
+       return b.AddOutput(types.NewOriginalTxOutput(*t.AssetId, t.Amount, []byte("change")))
 }
 
 func (t testAction) ActionType() string {
@@ -72,8 +72,8 @@ func TestBuild(t *testing.T) {
                                types.NewSpendInput(nil, bc.NewHash([32]byte{0xff}), assetID1, 5, 0, nil),
                        },
                        Outputs: []*types.TxOutput{
-                               types.NewTxOutput(assetID2, 6, []byte("dest")),
-                               types.NewTxOutput(assetID1, 5, []byte("change")),
+                               types.NewOriginalTxOutput(assetID2, 6, []byte("dest")),
+                               types.NewOriginalTxOutput(assetID1, 5, []byte("change")),
                        },
                }),
                SigningInstructions: []*SigningInstruction{{
@@ -112,7 +112,7 @@ func TestSignatureWitnessMaterialize(t *testing.T) {
                        types.NewIssuanceInput([]byte{1}, 100, issuanceProg, nil, nil),
                },
                Outputs: []*types.TxOutput{
-                       types.NewTxOutput(assetID, 100, outscript),
+                       types.NewOriginalTxOutput(assetID, 100, outscript),
                },
        })
 
@@ -201,7 +201,7 @@ func TestCheckBlankCheck(t *testing.T) {
        }, {
                tx: &types.TxData{
                        Inputs:  []*types.TxInput{types.NewSpendInput(nil, bc.NewHash([32]byte{0xff}), bc.AssetID{}, 5, 0, nil)},
-                       Outputs: []*types.TxOutput{types.NewTxOutput(bc.AssetID{}, 3, nil)},
+                       Outputs: []*types.TxOutput{types.NewOriginalTxOutput(bc.AssetID{}, 3, nil)},
                },
                want: ErrBlankCheck,
        }, {
@@ -210,15 +210,15 @@ func TestCheckBlankCheck(t *testing.T) {
                                types.NewSpendInput(nil, bc.NewHash([32]byte{0xff}), bc.AssetID{}, 5, 0, nil),
                                types.NewSpendInput(nil, bc.NewHash([32]byte{0xff}), bc.NewAssetID([32]byte{1}), 5, 0, nil),
                        },
-                       Outputs: []*types.TxOutput{types.NewTxOutput(bc.AssetID{}, 5, nil)},
+                       Outputs: []*types.TxOutput{types.NewOriginalTxOutput(bc.AssetID{}, 5, nil)},
                },
                want: ErrBlankCheck,
        }, {
                tx: &types.TxData{
                        Inputs: []*types.TxInput{types.NewSpendInput(nil, bc.NewHash([32]byte{0xff}), bc.AssetID{}, 5, 0, nil)},
                        Outputs: []*types.TxOutput{
-                               types.NewTxOutput(bc.AssetID{}, math.MaxInt64, nil),
-                               types.NewTxOutput(bc.AssetID{}, 7, nil),
+                               types.NewOriginalTxOutput(bc.AssetID{}, math.MaxInt64, nil),
+                               types.NewOriginalTxOutput(bc.AssetID{}, 7, nil),
                        },
                },
                want: ErrBadAmount,
@@ -233,18 +233,18 @@ func TestCheckBlankCheck(t *testing.T) {
        }, {
                tx: &types.TxData{
                        Inputs:  []*types.TxInput{types.NewSpendInput(nil, bc.NewHash([32]byte{0xff}), bc.AssetID{}, 5, 0, nil)},
-                       Outputs: []*types.TxOutput{types.NewTxOutput(bc.AssetID{}, 5, nil)},
+                       Outputs: []*types.TxOutput{types.NewOriginalTxOutput(bc.AssetID{}, 5, nil)},
                },
                want: nil,
        }, {
                tx: &types.TxData{
-                       Outputs: []*types.TxOutput{types.NewTxOutput(bc.AssetID{}, 5, nil)},
+                       Outputs: []*types.TxOutput{types.NewOriginalTxOutput(bc.AssetID{}, 5, nil)},
                },
                want: nil,
        }, {
                tx: &types.TxData{
                        Inputs:  []*types.TxInput{types.NewSpendInput(nil, bc.NewHash([32]byte{0xff}), bc.AssetID{}, 5, 0, nil)},
-                       Outputs: []*types.TxOutput{types.NewTxOutput(bc.NewAssetID([32]byte{1}), 5, nil)},
+                       Outputs: []*types.TxOutput{types.NewOriginalTxOutput(bc.NewAssetID([32]byte{1}), 5, nil)},
                },
                want: nil,
        }}
@@ -299,7 +299,7 @@ func TestCreateTxByUtxo(t *testing.T) {
                        types.NewSpendInput(nil, utxo.SourceID, utxo.AssetID, utxo.Amount, utxo.SourcePos, utxo.ControlProgram),
                },
                Outputs: []*types.TxOutput{
-                       types.NewTxOutput(*consensus.BTMAssetID, 10000000000, recvProg),
+                       types.NewOriginalTxOutput(*consensus.BTMAssetID, 10000000000, recvProg),
                },
        })
 
index 30a2c9a..370fbf6 100644 (file)
@@ -22,7 +22,7 @@ func GenesisTx() *types.Tx {
                        types.NewCoinbaseInput([]byte("Information is power. -- Jan/11/2013. Computing is power. -- Apr/24/2018.")),
                },
                Outputs: []*types.TxOutput{
-                       types.NewTxOutput(*consensus.BTMAssetID, consensus.InitialBlockSubsidy, contract),
+                       types.NewOriginalTxOutput(*consensus.BTMAssetID, consensus.InitialBlockSubsidy, contract),
                },
        }
        return types.NewTx(txData)
index 0cda456..264827d 100644 (file)
@@ -220,7 +220,7 @@ func mockTxs(txCount int) ([]*types.Tx, []*bc.Tx) {
                tx := types.NewTx(types.TxData{
                        Version: 1,
                        Inputs:  []*types.TxInput{types.NewSpendInput(nil, bc.Hash{V0: i + 1}, assetID, i, i, trueProg)},
-                       Outputs: []*types.TxOutput{types.NewTxOutput(assetID, 1, trueProg)},
+                       Outputs: []*types.TxOutput{types.NewOriginalTxOutput(assetID, 1, trueProg)},
                })
                txs = append(txs, tx)
                bcTxs = append(bcTxs, tx.Tx)
index 9f0586b..47b1703 100644 (file)
@@ -38,7 +38,7 @@ func (m *mempool) GetTransactions() []*core.TxDesc {
                                        txInput,
                                },
                                Outputs: []*types.TxOutput{
-                                       types.NewTxOutput(*consensus.BTMAssetID, uint64(i), []byte{0x6a}),
+                                       types.NewOriginalTxOutput(*consensus.BTMAssetID, uint64(i), []byte{0x6a}),
                                },
                                SerializedSize: 1000,
                        },
index e4788d1..323592a 100644 (file)
@@ -15,27 +15,27 @@ var txs = []*types.Tx{
        types.NewTx(types.TxData{
                SerializedSize: uint64(52),
                Inputs:         []*types.TxInput{types.NewCoinbaseInput([]byte{0x01})},
-               Outputs:        []*types.TxOutput{types.NewTxOutput(*consensus.BTMAssetID, 5000, nil)},
+               Outputs:        []*types.TxOutput{types.NewOriginalTxOutput(*consensus.BTMAssetID, 5000, nil)},
        }),
        types.NewTx(types.TxData{
                SerializedSize: uint64(53),
                Inputs:         []*types.TxInput{types.NewCoinbaseInput([]byte{0x01, 0x02})},
-               Outputs:        []*types.TxOutput{types.NewTxOutput(*consensus.BTMAssetID, 5000, nil)},
+               Outputs:        []*types.TxOutput{types.NewOriginalTxOutput(*consensus.BTMAssetID, 5000, nil)},
        }),
        types.NewTx(types.TxData{
                SerializedSize: uint64(54),
                Inputs:         []*types.TxInput{types.NewCoinbaseInput([]byte{0x01, 0x02, 0x03})},
-               Outputs:        []*types.TxOutput{types.NewTxOutput(*consensus.BTMAssetID, 5000, nil)},
+               Outputs:        []*types.TxOutput{types.NewOriginalTxOutput(*consensus.BTMAssetID, 5000, nil)},
        }),
        types.NewTx(types.TxData{
                SerializedSize: uint64(54),
                Inputs:         []*types.TxInput{types.NewCoinbaseInput([]byte{0x01, 0x02, 0x03})},
-               Outputs:        []*types.TxOutput{types.NewTxOutput(*consensus.BTMAssetID, 2000, nil)},
+               Outputs:        []*types.TxOutput{types.NewOriginalTxOutput(*consensus.BTMAssetID, 2000, nil)},
        }),
        types.NewTx(types.TxData{
                SerializedSize: uint64(54),
                Inputs:         []*types.TxInput{types.NewCoinbaseInput([]byte{0x01, 0x02, 0x03})},
-               Outputs:        []*types.TxOutput{types.NewTxOutput(*consensus.BTMAssetID, 10000, nil)},
+               Outputs:        []*types.TxOutput{types.NewOriginalTxOutput(*consensus.BTMAssetID, 10000, nil)},
        }),
 }
 
index 6305aec..32b8666 100644 (file)
@@ -99,7 +99,7 @@ func TestAddFilterAddresses(t *testing.T) {
                        types.NewSpendInput(nil, bc.Hash{}, bc.NewAssetID([32]byte{1}), 5, 1, []byte("spendProgram")),
                },
                Outputs: []*types.TxOutput{
-                       types.NewTxOutput(bc.NewAssetID([32]byte{3}), 8, []byte("outProgram")),
+                       types.NewOriginalTxOutput(bc.NewAssetID([32]byte{3}), 8, []byte("outProgram")),
                },
        })
 
@@ -121,7 +121,7 @@ func TestFilterClear(t *testing.T) {
                        types.NewSpendInput(nil, bc.Hash{}, bc.NewAssetID([32]byte{1}), 5, 1, []byte("spendProgram")),
                },
                Outputs: []*types.TxOutput{
-                       types.NewTxOutput(bc.NewAssetID([32]byte{3}), 8, []byte("outProgram")),
+                       types.NewOriginalTxOutput(bc.NewAssetID([32]byte{3}), 8, []byte("outProgram")),
                },
        })
 
@@ -144,7 +144,7 @@ func TestGetRelatedTxAndStatus(t *testing.T) {
                                types.NewSpendInput(nil, bc.Hash{}, bc.NewAssetID([32]byte{1}), 5, 1, []byte("spendProgram1")),
                        },
                        Outputs: []*types.TxOutput{
-                               types.NewTxOutput(bc.NewAssetID([32]byte{3}), 8, []byte("outProgram1")),
+                               types.NewOriginalTxOutput(bc.NewAssetID([32]byte{3}), 8, []byte("outProgram1")),
                        },
                }),
                types.NewTx(types.TxData{
@@ -152,7 +152,7 @@ func TestGetRelatedTxAndStatus(t *testing.T) {
                                types.NewSpendInput(nil, bc.Hash{}, bc.NewAssetID([32]byte{1}), 5, 1, []byte("spendProgram2")),
                        },
                        Outputs: []*types.TxOutput{
-                               types.NewTxOutput(bc.NewAssetID([32]byte{3}), 8, []byte("outProgram2")),
+                               types.NewOriginalTxOutput(bc.NewAssetID([32]byte{3}), 8, []byte("outProgram2")),
                        },
                }),
                types.NewTx(types.TxData{
@@ -160,7 +160,7 @@ func TestGetRelatedTxAndStatus(t *testing.T) {
                                types.NewSpendInput(nil, bc.Hash{}, bc.NewAssetID([32]byte{1}), 5, 1, []byte("spendProgram3")),
                        },
                        Outputs: []*types.TxOutput{
-                               types.NewTxOutput(bc.NewAssetID([32]byte{3}), 8, []byte("outProgram3")),
+                               types.NewOriginalTxOutput(bc.NewAssetID([32]byte{3}), 8, []byte("outProgram3")),
                        },
                }),
        }
index e83810d..4912012 100644 (file)
@@ -56,25 +56,25 @@ func TestBlock(t *testing.T) {
                                Transactions: []*Tx{
                                        NewTx(TxData{
                                                Version:        1,
-                                               SerializedSize: uint64(261),
+                                               SerializedSize: uint64(262),
                                                TimeRange:      654,
                                                Inputs: []*TxInput{
                                                        NewIssuanceInput([]byte("nonce"), 254354, []byte("issuanceProgram"), [][]byte{[]byte("arguments1"), []byte("arguments2")}, []byte("assetDefinition")),
                                                        NewSpendInput([][]byte{[]byte("arguments3"), []byte("arguments4")}, testutil.MustDecodeHash("fad5195a0c8e3b590b86a3c0a95e7529565888508aecca96e9aeda633002f409"), *consensus.BTMAssetID, 254354, 3, []byte("spendProgram")),
                                                },
                                                Outputs: []*TxOutput{
-                                                       NewTxOutput(testutil.MustDecodeAsset("a69849e11add96ac7053aad22ba2349a4abf5feb0475a0afcadff4e128be76cf"), 254354, []byte("true")),
+                                                       NewOriginalTxOutput(testutil.MustDecodeAsset("a69849e11add96ac7053aad22ba2349a4abf5feb0475a0afcadff4e128be76cf"), 254354, []byte("true")),
                                                },
                                        }),
                                        NewTx(TxData{
                                                Version:        1,
-                                               SerializedSize: uint64(108),
+                                               SerializedSize: uint64(110),
                                                Inputs: []*TxInput{
                                                        NewCoinbaseInput([]byte("arbitrary")),
                                                },
                                                Outputs: []*TxOutput{
-                                                       NewTxOutput(*consensus.BTMAssetID, 254354, []byte("true")),
-                                                       NewTxOutput(*consensus.BTMAssetID, 254354, []byte("false")),
+                                                       NewOriginalTxOutput(*consensus.BTMAssetID, 254354, []byte("true")),
+                                                       NewOriginalTxOutput(*consensus.BTMAssetID, 254354, []byte("false")),
                                                },
                                        }),
                                },
@@ -89,8 +89,8 @@ func TestBlock(t *testing.T) {
                                "ad9ac003d08ff305181a345d64fe0b02311cc1a6ec04ab73f3318d90139bfe03", // transactions merkle root
                                "b94301ea4e316bee00109f68d25beaca90aeff08e9bf439a37d91d7a3b5a1470", // tx status hash
                                "02", // num transactions
-                               "07018e0502012a00056e6f6e6365a69849e11add96ac7053aad22ba2349a4abf5feb0475a0afcadff4e128be76cf92c30f380f6173736574446566696e6974696f6e010f69737375616e636550726f6772616d020a617267756d656e7473310a617267756d656e74733201540152fad5195a0c8e3b590b86a3c0a95e7529565888508aecca96e9aeda633002f409ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff92c30f03010c7370656e6450726f6772616d17020a617267756d656e7473330a617267756d656e747334010129a69849e11add96ac7053aad22ba2349a4abf5feb0475a0afcadff4e128be76cf92c30f01047472756500",
-                               "07010001010b020961726269747261727900020129ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff92c30f01047472756500012affffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff92c30f010566616c736500",
+                               "07018e0502012a00056e6f6e6365a69849e11add96ac7053aad22ba2349a4abf5feb0475a0afcadff4e128be76cf92c30f380f6173736574446566696e6974696f6e010f69737375616e636550726f6772616d020a617267756d656e7473310a617267756d656e74733201540152fad5195a0c8e3b590b86a3c0a95e7529565888508aecca96e9aeda633002f409ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff92c30f03010c7370656e6450726f6772616d17020a617267756d656e7473330a617267756d656e74733401010029a69849e11add96ac7053aad22ba2349a4abf5feb0475a0afcadff4e128be76cf92c30f01047472756500",
+                               "07010001010b02096172626974726172790002010029ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff92c30f0104747275650001002affffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff92c30f010566616c736500",
                        }, ""),
                        hash: testutil.MustDecodeHash("fca0cfd96604b0b28e4a16286974db155d0bbd42dd729d2e2ba058d09a963016"),
                },
@@ -135,7 +135,7 @@ func TestReadFrom(t *testing.T) {
                wantBlock Block
        }{
                {
-                       rawBlock: "03018b5f3077f24528e94ecfc4491bb2e9ed6264a632a9a4b86b00c88093ca545d14a137d4f5e1e4054035a2d11158f47a5c5267630b2b6cf9e9a5f79a598085a2572a68defeb8013ad26978a65b4ee5b6f4914fe5c05000459a803ecf59132604e5d334d64249c5e50a0207010001010802060031323137310001013effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff809df3b49a010116001437e1aec83a4e6587ca9609e4e5aa728db700744900070100020160015e4b5cb973f5bef4eadde4c89b92ee73312b940e84164da0594149554cc8a2adeaffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80c480c1240201160014cb9f2391bafe2bc1159b2c4c8a0f17ba1b4dd94e6302405760b15cc09e543437c4e3aad05bf073e82ebdb214beccb5f4473653dfc0a9d5ae59fb149de19eb71c1c1399594757aeea4dd6327ca2790ef919bd20caa86104201381d35e235813ad1e62f9a602c82abee90565639cc4573568206b55bcd2aed90130000840142084606f20ca7b38dc897329a288ea31031724f5c55bcafec80468a546955023380af2faad1480d0dbc3f402b001467b0a202022646563696d616c73223a20382c0a2020226465736372697074696f6e223a207b7d2c0a2020226e616d65223a2022222c0a20202273796d626f6c223a2022220a7d0125ae2054a71277cc162eb3eb21b5bd9fe54402829a53b294deaed91692a2cd8a081f9c5151ad0140621c2c3554da50d2a492d9d78be7c6159359d8f5f0b93a054ce0133617a61d85c532aff449b97a3ec2804ca5fe12b4d54aa6e8c3215c33d04abee9c9abdfdb0302013dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80c0d1e123011600144b61da45324299e40dacc255e2ea07dfce3a56d200013e7b38dc897329a288ea31031724f5c55bcafec80468a546955023380af2faad1480d0dbc3f4020116001437e1aec83a4e6587ca9609e4e5aa728db700744900",
+                       rawBlock: "03018b5f3077f24528e94ecfc4491bb2e9ed6264a632a9a4b86b00c88093ca545d14a137d4f5e1e4054035a2d11158f47a5c5267630b2b6cf9e9a5f79a598085a2572a68defeb8013ad26978a65b4ee5b6f4914fe5c05000459a803ecf59132604e5d334d64249c5e50a020701000101080206003132313731000101003effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff809df3b49a010116001437e1aec83a4e6587ca9609e4e5aa728db700744900070100020160015e4b5cb973f5bef4eadde4c89b92ee73312b940e84164da0594149554cc8a2adeaffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80c480c1240201160014cb9f2391bafe2bc1159b2c4c8a0f17ba1b4dd94e6302405760b15cc09e543437c4e3aad05bf073e82ebdb214beccb5f4473653dfc0a9d5ae59fb149de19eb71c1c1399594757aeea4dd6327ca2790ef919bd20caa86104201381d35e235813ad1e62f9a602c82abee90565639cc4573568206b55bcd2aed90130000840142084606f20ca7b38dc897329a288ea31031724f5c55bcafec80468a546955023380af2faad1480d0dbc3f402b001467b0a202022646563696d616c73223a20382c0a2020226465736372697074696f6e223a207b7d2c0a2020226e616d65223a2022222c0a20202273796d626f6c223a2022220a7d0125ae2054a71277cc162eb3eb21b5bd9fe54402829a53b294deaed91692a2cd8a081f9c5151ad0140621c2c3554da50d2a492d9d78be7c6159359d8f5f0b93a054ce0133617a61d85c532aff449b97a3ec2804ca5fe12b4d54aa6e8c3215c33d04abee9c9abdfdb030201003dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80c0d1e123011600144b61da45324299e40dacc255e2ea07dfce3a56d20001003e7b38dc897329a288ea31031724f5c55bcafec80468a546955023380af2faad1480d0dbc3f4020116001437e1aec83a4e6587ca9609e4e5aa728db700744900",
                        wantBlock: Block{
                                BlockHeader: BlockHeader{
                                        Version:           1,
@@ -151,20 +151,20 @@ func TestReadFrom(t *testing.T) {
                                        {
                                                TxData: TxData{
                                                        Version:        1,
-                                                       SerializedSize: 81,
+                                                       SerializedSize: 82,
                                                        TimeRange:      0,
                                                        Inputs: []*TxInput{
                                                                NewCoinbaseInput(testutil.MustDecodeHexString("003132313731")),
                                                        },
                                                        Outputs: []*TxOutput{
-                                                               NewTxOutput(btmAssetID, 41450000000, testutil.MustDecodeHexString("001437e1aec83a4e6587ca9609e4e5aa728db7007449")),
+                                                               NewOriginalTxOutput(btmAssetID, 41450000000, testutil.MustDecodeHexString("001437e1aec83a4e6587ca9609e4e5aa728db7007449")),
                                                        },
                                                },
                                        },
                                        {
                                                TxData: TxData{
                                                        Version:        1,
-                                                       SerializedSize: 560,
+                                                       SerializedSize: 562,
                                                        TimeRange:      0,
                                                        Inputs: []*TxInput{
                                                                NewSpendInput(
@@ -187,8 +187,8 @@ func TestReadFrom(t *testing.T) {
                                                                ),
                                                        },
                                                        Outputs: []*TxOutput{
-                                                               NewTxOutput(btmAssetID, 9600000000, testutil.MustDecodeHexString("00144b61da45324299e40dacc255e2ea07dfce3a56d2")),
-                                                               NewTxOutput(testutil.MustDecodeAsset("7b38dc897329a288ea31031724f5c55bcafec80468a546955023380af2faad14"), 100000000000, testutil.MustDecodeHexString("001437e1aec83a4e6587ca9609e4e5aa728db7007449")),
+                                                               NewOriginalTxOutput(btmAssetID, 9600000000, testutil.MustDecodeHexString("00144b61da45324299e40dacc255e2ea07dfce3a56d2")),
+                                                               NewOriginalTxOutput(testutil.MustDecodeAsset("7b38dc897329a288ea31031724f5c55bcafec80468a546955023380af2faad14"), 100000000000, testutil.MustDecodeHexString("001437e1aec83a4e6587ca9609e4e5aa728db7007449")),
                                                        },
                                                },
                                        },
index 02b369c..52b4288 100644 (file)
@@ -18,7 +18,7 @@ func TestMapSpendTx(t *testing.T) {
                                NewSpendInput(nil, testutil.MustDecodeHash("fad5195a0c8e3b590b86a3c0a95e7529565888508aecca96e9aeda633002f409"), *consensus.BTMAssetID, 88, 3, []byte{1}),
                        },
                        Outputs: []*TxOutput{
-                               NewTxOutput(*consensus.BTMAssetID, 80, []byte{1}),
+                               NewOriginalTxOutput(*consensus.BTMAssetID, 80, []byte{1}),
                        },
                },
                &TxData{
@@ -26,7 +26,7 @@ func TestMapSpendTx(t *testing.T) {
                                NewIssuanceInput([]byte("nonce"), 254354, []byte("issuanceProgram"), [][]byte{[]byte("arguments1"), []byte("arguments2")}, []byte("assetDefinition")),
                        },
                        Outputs: []*TxOutput{
-                               NewTxOutput(*consensus.BTMAssetID, 80, []byte{1}),
+                               NewOriginalTxOutput(*consensus.BTMAssetID, 80, []byte{1}),
                        },
                },
                &TxData{
@@ -35,8 +35,8 @@ func TestMapSpendTx(t *testing.T) {
                                NewSpendInput(nil, testutil.MustDecodeHash("db7b16ac737440d6e38559996ddabb207d7ce84fbd6f3bfd2525d234761dc863"), *consensus.BTMAssetID, 88, 3, []byte{1}),
                        },
                        Outputs: []*TxOutput{
-                               NewTxOutput(*consensus.BTMAssetID, 80, []byte{1}),
-                               NewTxOutput(*consensus.BTMAssetID, 80, []byte{1}),
+                               NewOriginalTxOutput(*consensus.BTMAssetID, 80, []byte{1}),
+                               NewOriginalTxOutput(*consensus.BTMAssetID, 80, []byte{1}),
                        },
                },
        }
@@ -100,7 +100,7 @@ func TestMapCoinbaseTx(t *testing.T) {
                        NewCoinbaseInput([]byte("TestMapCoinbaseTx")),
                },
                Outputs: []*TxOutput{
-                       NewTxOutput(*consensus.BTMAssetID, 800000000000, []byte{1}),
+                       NewOriginalTxOutput(*consensus.BTMAssetID, 800000000000, []byte{1}),
                },
        }
        oldOut := txData.Outputs[0]
index 30e97f9..0b70511 100644 (file)
@@ -83,11 +83,11 @@ func TestMerkleRoot(t *testing.T) {
 
 func TestMerkleRootRealTx(t *testing.T) {
        rawTxs := []string{
-               "070100010160015e5ac79a73db78e5c9215b37cb752f0147d1157c542bb4884908ceb97abc33fe0affffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa0f280d42b0001160014085a02ecdf934a56343aa59a3dec9d9feb86ee43630240035e1ef422b4901997ad3c20c50d82e726d03cb6e8ccb5dddc20e0c09e0a6f2e0055331e2b54d9ec52cffb1c47d8fdf2f8887d55c336753637cbf8f832c7af0b20a29601468f08c57ca9c383d28736a9d5c7737cd483126d8db3d85490fe497b3502013dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa0aad1b30601160014991b78d1bf731390e2dd838c05ff37ec5146886b00013dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8086d8f024011600145ade29df622cc68d0473aa1a20fb89690451c66e00",
-               "070100020160015e4b5cb973f5bef4eadde4c89b92ee73312b940e84164da0594149554cc8a2adeaffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80c480c1240201160014cb9f2391bafe2bc1159b2c4c8a0f17ba1b4dd94e630240d96b8f31519c5e34ef983bb7dfb92e807df7fc1ae5a4c08846d00d4f84ebd2f8634b9e0b0374eb2508d0f989520f622aef051862c26daba0e466944e3d55d00b201381d35e235813ad1e62f9a602c82abee90565639cc4573568206b55bcd2aed901300008ede605460cacbf107b38dc897329a288ea31031724f5c55bcafec80468a546955023380af2faad1480d0dbc3f402b001467b0a202022646563696d616c73223a20382c0a2020226465736372697074696f6e223a207b7d2c0a2020226e616d65223a2022222c0a20202273796d626f6c223a2022220a7d0125ae2054a71277cc162eb3eb21b5bd9fe54402829a53b294deaed91692a2cd8a081f9c5151ad01403a54a3ca0210d005cc9bce490478b518c405ba72e0bc1d134b739f29a73e008345229f0e061c420aa3c56a48bc1c9bf592914252ab9100e69252deeac532430f03013dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80e0e8f011011600144ab5249140ca4630729030941f59f75e507bd4d500013e7b38dc897329a288ea31031724f5c55bcafec80468a546955023380af2faad1480d0dbc3f402011600145ade29df622cc68d0473aa1a20fb89690451c66e00013dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80a2c0a012011600145ade29df622cc68d0473aa1a20fb89690451c66e00",
-               "07010001016c016acf24f1471d67c25a01ac84482ecdd8550229180171cae22321f87fe43d4f6a13ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80b4c4c32101012200200824e931fb806bd77fdcd291aad3bd0a4493443a4120062bd659e64a3e0bac66ef02044059c7a12d006fd34bf8b9b2cb2f99756e5c3c3fdca4c928b830c014819e933b01c92a99bfeb6add73a5087870a3de3465cfed2c99f736b5f77d5fbdc69d91ff0040b95d110d118b873a8232104a6613f0e8c6a791efa3a695c02108cebd5239c8a8471551a48f18ab8ea05d10900b485af5e95b74cd3c01044c1742e71854099c0b40a1b63dae273e3b5b757b7c61286088a934e7282e837d08d62e60d7f75eb739529cd8c6cfef2254d47a546bf8b789657ce0944fec2f7e130c8498e28cae2a9108a901ae20d441b6f375659325a04eede4fc3b74579bb08ccd05b41b99776501e22d6dca7320af6d98ca2c3cd10bf0affbfa6e86609b750523cfadb662ec963c164f05798a49209820b9f1553b03aaebe7e3f9e9222ed7db73b5079b18564042fd3b2cef74156a20271b52de5f554aa4a6f1358f1c2193617bfb3fed4546d13c4af773096a429f9420eeb4a78d8b5cb8283c221ca2d3fd96b8946b3cddee02b7ceffb8f605932588595355ad020149ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80a0d9e61d012200206e8060ef3daca62841802dd9660b24b7dca81c1662b2d68ba8884ecbcd3e1e2200013dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80d293ad0301160014ed7d3c466dbc6cc1f3a9af21267ac162f11b30a200",
-               "070100020161015f4b5cb973f5bef4eadde4c89b92ee73312b940e84164da0594149554cc8a2adea0dafd0f0e42f06f3bf9a8cf5787519d3860650f27a2b3393d34e1fe06e89b469ddc3f8c2f40200011600141da7f908979e521bf2ba12d280b2c84fc1d024416302409524d0d817176eeb718ce45671d95831cdb138d27289aa8a920104e38a8cab8a7dc8cc3fb60d65aa337b719aed0f696fb12610bfe68add89169a47ac1241e0002033444e1b57524161af3899e50fdfe270a90a1ea97fe38e86019a1e252667fb2d0161015fed3181c99ca80db720231aee6948e1183bfe29c64208c1769afa7f938d3b2cf0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff809cd2b0f4020101160014cfbccfac5018ad4b4bfbcb1fab834e3c8503746063024065beb1da2f0840188af0e3c0127b158f7a2a36f1612499694a731df1e3a9d1abe6694c42986b8700aa9856f59cb3692ee88d68b20d1278f05592fb253c58bd0520e5966eee4092eeefdd805b06f2ad368bb9392edec20998993ebe2a929052c1ce03013e0dafd0f0e42f06f3bf9a8cf5787519d3860650f27a2b3393d34e1fe06e89b469ddfbc8a2cf0201160014583c0323603dd397ba5414255adc80b076cf232b00013d0dafd0f0e42f06f3bf9a8cf5787519d3860650f27a2b3393d34e1fe06e89b46980c8afa02501160014fdb3e6abf7f430fdabb53484ca2469103b2af1b500013effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80dafa80f4020116001408e75789f47d2a39622e5a940fa918260bf44c5400",
-               "07010001016d016b1f134a47da4f6df00822935e02a07514718ea99ce5ac4e07bd6c204e098eb525ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808a858fa70200012200206205ec178dc1ac6ea05ea01bb0fcda6aa978173026fa75204a101bdad7bd6b4889010240d8d5bbf4969fba52df8fba06f75c5de0f51b2bd5f902bf234591f90e78bae20bfb5b7904cb83a1d6577c431f644d37722b432df9d64718b8300e3ab74a871a0046ae2068003e53d467b6d81beaf1e7bd9b60a5ffedc79b36ce14ecd1f30a2dcbcd0551200449030407a3a1fa0731f7f784a72c325b5ce4d534fc3cf8fb7140536ba928605152ad02014affffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80f699b2a302012200209a0b4b27fde7d29d3b465d20eb2e19f4bda3a873d19d11f4cba53958bde92ed000013dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80b3ffc40301160014ed7d3c466dbc6cc1f3a9af21267ac162f11b30a200",
+               "070100010160015e5ac79a73db78e5c9215b37cb752f0147d1157c542bb4884908ceb97abc33fe0affffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa0f280d42b0001160014085a02ecdf934a56343aa59a3dec9d9feb86ee43630240035e1ef422b4901997ad3c20c50d82e726d03cb6e8ccb5dddc20e0c09e0a6f2e0055331e2b54d9ec52cffb1c47d8fdf2f8887d55c336753637cbf8f832c7af0b20a29601468f08c57ca9c383d28736a9d5c7737cd483126d8db3d85490fe497b350201003dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa0aad1b30601160014991b78d1bf731390e2dd838c05ff37ec5146886b0001003dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8086d8f024011600145ade29df622cc68d0473aa1a20fb89690451c66e00",
+               "070100020160015e4b5cb973f5bef4eadde4c89b92ee73312b940e84164da0594149554cc8a2adeaffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80c480c1240201160014cb9f2391bafe2bc1159b2c4c8a0f17ba1b4dd94e630240d96b8f31519c5e34ef983bb7dfb92e807df7fc1ae5a4c08846d00d4f84ebd2f8634b9e0b0374eb2508d0f989520f622aef051862c26daba0e466944e3d55d00b201381d35e235813ad1e62f9a602c82abee90565639cc4573568206b55bcd2aed901300008ede605460cacbf107b38dc897329a288ea31031724f5c55bcafec80468a546955023380af2faad1480d0dbc3f402b001467b0a202022646563696d616c73223a20382c0a2020226465736372697074696f6e223a207b7d2c0a2020226e616d65223a2022222c0a20202273796d626f6c223a2022220a7d0125ae2054a71277cc162eb3eb21b5bd9fe54402829a53b294deaed91692a2cd8a081f9c5151ad01403a54a3ca0210d005cc9bce490478b518c405ba72e0bc1d134b739f29a73e008345229f0e061c420aa3c56a48bc1c9bf592914252ab9100e69252deeac532430f0301003dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80e0e8f011011600144ab5249140ca4630729030941f59f75e507bd4d50001003e7b38dc897329a288ea31031724f5c55bcafec80468a546955023380af2faad1480d0dbc3f402011600145ade29df622cc68d0473aa1a20fb89690451c66e0001003dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80a2c0a012011600145ade29df622cc68d0473aa1a20fb89690451c66e00",
+               "07010001016c016acf24f1471d67c25a01ac84482ecdd8550229180171cae22321f87fe43d4f6a13ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80b4c4c32101012200200824e931fb806bd77fdcd291aad3bd0a4493443a4120062bd659e64a3e0bac66ef02044059c7a12d006fd34bf8b9b2cb2f99756e5c3c3fdca4c928b830c014819e933b01c92a99bfeb6add73a5087870a3de3465cfed2c99f736b5f77d5fbdc69d91ff0040b95d110d118b873a8232104a6613f0e8c6a791efa3a695c02108cebd5239c8a8471551a48f18ab8ea05d10900b485af5e95b74cd3c01044c1742e71854099c0b40a1b63dae273e3b5b757b7c61286088a934e7282e837d08d62e60d7f75eb739529cd8c6cfef2254d47a546bf8b789657ce0944fec2f7e130c8498e28cae2a9108a901ae20d441b6f375659325a04eede4fc3b74579bb08ccd05b41b99776501e22d6dca7320af6d98ca2c3cd10bf0affbfa6e86609b750523cfadb662ec963c164f05798a49209820b9f1553b03aaebe7e3f9e9222ed7db73b5079b18564042fd3b2cef74156a20271b52de5f554aa4a6f1358f1c2193617bfb3fed4546d13c4af773096a429f9420eeb4a78d8b5cb8283c221ca2d3fd96b8946b3cddee02b7ceffb8f605932588595355ad02010049ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80a0d9e61d012200206e8060ef3daca62841802dd9660b24b7dca81c1662b2d68ba8884ecbcd3e1e220001003dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80d293ad0301160014ed7d3c466dbc6cc1f3a9af21267ac162f11b30a200",
+               "070100020161015f4b5cb973f5bef4eadde4c89b92ee73312b940e84164da0594149554cc8a2adea0dafd0f0e42f06f3bf9a8cf5787519d3860650f27a2b3393d34e1fe06e89b469ddc3f8c2f40200011600141da7f908979e521bf2ba12d280b2c84fc1d024416302409524d0d817176eeb718ce45671d95831cdb138d27289aa8a920104e38a8cab8a7dc8cc3fb60d65aa337b719aed0f696fb12610bfe68add89169a47ac1241e0002033444e1b57524161af3899e50fdfe270a90a1ea97fe38e86019a1e252667fb2d0161015fed3181c99ca80db720231aee6948e1183bfe29c64208c1769afa7f938d3b2cf0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff809cd2b0f4020101160014cfbccfac5018ad4b4bfbcb1fab834e3c8503746063024065beb1da2f0840188af0e3c0127b158f7a2a36f1612499694a731df1e3a9d1abe6694c42986b8700aa9856f59cb3692ee88d68b20d1278f05592fb253c58bd0520e5966eee4092eeefdd805b06f2ad368bb9392edec20998993ebe2a929052c1ce0301003e0dafd0f0e42f06f3bf9a8cf5787519d3860650f27a2b3393d34e1fe06e89b469ddfbc8a2cf0201160014583c0323603dd397ba5414255adc80b076cf232b0001003d0dafd0f0e42f06f3bf9a8cf5787519d3860650f27a2b3393d34e1fe06e89b46980c8afa02501160014fdb3e6abf7f430fdabb53484ca2469103b2af1b50001003effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80dafa80f4020116001408e75789f47d2a39622e5a940fa918260bf44c5400",
+               "07010001016d016b1f134a47da4f6df00822935e02a07514718ea99ce5ac4e07bd6c204e098eb525ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808a858fa70200012200206205ec178dc1ac6ea05ea01bb0fcda6aa978173026fa75204a101bdad7bd6b4889010240d8d5bbf4969fba52df8fba06f75c5de0f51b2bd5f902bf234591f90e78bae20bfb5b7904cb83a1d6577c431f644d37722b432df9d64718b8300e3ab74a871a0046ae2068003e53d467b6d81beaf1e7bd9b60a5ffedc79b36ce14ecd1f30a2dcbcd0551200449030407a3a1fa0731f7f784a72c325b5ce4d534fc3cf8fb7140536ba928605152ad0201004affffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80f699b2a302012200209a0b4b27fde7d29d3b465d20eb2e19f4bda3a873d19d11f4cba53958bde92ed00001003dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80b3ffc40301160014ed7d3c466dbc6cc1f3a9af21267ac162f11b30a200",
        }
        wantMerkleRoot := "0f07b8a453771c2dc628f3895ebb33fea82a8de42e11aa588bec26419af22065"
 
@@ -120,7 +120,7 @@ func TestDuplicateLeaves(t *testing.T) {
                txs[i] = NewTx(TxData{
                        Version: 1,
                        Inputs:  []*TxInput{NewIssuanceInput(now, i, trueProg, nil, nil)},
-                       Outputs: []*TxOutput{NewTxOutput(assetID, i, trueProg)},
+                       Outputs: []*TxOutput{NewOriginalTxOutput(assetID, i, trueProg)},
                }).Tx
        }
 
@@ -152,7 +152,7 @@ func TestAllDuplicateLeaves(t *testing.T) {
        tx := NewTx(TxData{
                Version: 1,
                Inputs:  []*TxInput{issuanceInp},
-               Outputs: []*TxOutput{NewTxOutput(assetID, 1, trueProg)},
+               Outputs: []*TxOutput{NewOriginalTxOutput(assetID, 1, trueProg)},
        }).Tx
        tx1, tx2, tx3, tx4, tx5, tx6 := tx, tx, tx, tx, tx, tx
 
@@ -465,7 +465,7 @@ func mockTransactions(txCount int) ([]*Tx, []*bc.Tx) {
                tx := NewTx(TxData{
                        Version: 1,
                        Inputs:  []*TxInput{issuanceInp},
-                       Outputs: []*TxOutput{NewTxOutput(assetID, 1, trueProg)},
+                       Outputs: []*TxOutput{NewOriginalTxOutput(assetID, 1, trueProg)},
                })
                txs = append(txs, tx)
                bcTxs = append(bcTxs, tx.Tx)
diff --git a/protocol/bc/types/original_output.go b/protocol/bc/types/original_output.go
new file mode 100644 (file)
index 0000000..52d6cee
--- /dev/null
@@ -0,0 +1,30 @@
+package types
+
+import (
+       "io"
+
+       "github.com/bytom/bytom/encoding/blockchain"
+       "github.com/bytom/bytom/protocol/bc"
+)
+
+type originalTxOutput struct{}
+
+func (o *originalTxOutput) OutputType() uint8                 { return OriginalOutputType }
+func (o *originalTxOutput) readFrom(*blockchain.Reader) error { return nil }
+func (o *originalTxOutput) writeTo(io.Writer) error           { return nil }
+
+// NewOriginalTxOutput create a new original output struct
+func NewOriginalTxOutput(assetID bc.AssetID, amount uint64, controlProgram []byte) *TxOutput {
+       return &TxOutput{
+               AssetVersion: 1,
+               OutputCommitment: OutputCommitment{
+                       AssetAmount: bc.AssetAmount{
+                               AssetId: &assetID,
+                               Amount:  amount,
+                       },
+                       VMVersion:      1,
+                       ControlProgram: controlProgram,
+               },
+               TypedOutput: &originalTxOutput{},
+       }
+}
index e949b15..cb0e6d5 100644 (file)
@@ -4,7 +4,6 @@ import (
        "fmt"
        "io"
 
-       "github.com/bytom/bytom/crypto/sha3pool"
        "github.com/bytom/bytom/encoding/blockchain"
        "github.com/bytom/bytom/errors"
        "github.com/bytom/bytom/protocol/bc"
@@ -17,14 +16,7 @@ type OutputCommitment struct {
        ControlProgram []byte
 }
 
-func (oc *OutputCommitment) writeExtensibleString(w io.Writer, suffix []byte, assetVersion uint64) error {
-       _, err := blockchain.WriteExtensibleString(w, suffix, func(w io.Writer) error {
-               return oc.writeContents(w, suffix, assetVersion)
-       })
-       return err
-}
-
-func (oc *OutputCommitment) writeContents(w io.Writer, suffix []byte, assetVersion uint64) (err error) {
+func (oc *OutputCommitment) writeTo(w io.Writer, assetVersion uint64) (err error) {
        if assetVersion == 1 {
                if _, err = oc.AssetAmount.WriteTo(w); err != nil {
                        return errors.Wrap(err, "writing asset amount")
@@ -36,37 +28,23 @@ func (oc *OutputCommitment) writeContents(w io.Writer, suffix []byte, assetVersi
                        return errors.Wrap(err, "writing control program")
                }
        }
-       if len(suffix) > 0 {
-               _, err = w.Write(suffix)
-       }
        return errors.Wrap(err, "writing suffix")
 }
 
-func (oc *OutputCommitment) readFrom(r *blockchain.Reader, assetVersion uint64) (suffix []byte, err error) {
-       return blockchain.ReadExtensibleString(r, func(r *blockchain.Reader) error {
-               if assetVersion == 1 {
-                       if err := oc.AssetAmount.ReadFrom(r); err != nil {
-                               return errors.Wrap(err, "reading asset+amount")
-                       }
-                       oc.VMVersion, err = blockchain.ReadVarint63(r)
-                       if err != nil {
-                               return errors.Wrap(err, "reading VM version")
-                       }
-                       if oc.VMVersion != 1 {
-                               return fmt.Errorf("unrecognized VM version %d for asset version 1", oc.VMVersion)
-                       }
-                       oc.ControlProgram, err = blockchain.ReadVarstr31(r)
-                       return errors.Wrap(err, "reading control program")
+func (oc *OutputCommitment) readFrom(r *blockchain.Reader, assetVersion uint64) (err error) {
+       if assetVersion == 1 {
+               if err := oc.AssetAmount.ReadFrom(r); err != nil {
+                       return errors.Wrap(err, "reading asset+amount")
                }
-               return nil
-       })
-}
-
-// Hash convert suffix && assetVersion to bc.Hash
-func (oc *OutputCommitment) Hash(suffix []byte, assetVersion uint64) (outputhash bc.Hash) {
-       h := sha3pool.Get256()
-       defer sha3pool.Put256(h)
-       oc.writeExtensibleString(h, suffix, assetVersion)
-       outputhash.ReadFrom(h)
-       return outputhash
+               oc.VMVersion, err = blockchain.ReadVarint63(r)
+               if err != nil {
+                       return errors.Wrap(err, "reading VM version")
+               }
+               if oc.VMVersion != 1 {
+                       return fmt.Errorf("unrecognized VM version %d for asset version 1", oc.VMVersion)
+               }
+               oc.ControlProgram, err = blockchain.ReadVarstr31(r)
+               return errors.Wrap(err, "reading control program")
+       }
+       return nil
 }
index f9655e5..b9fb490 100644 (file)
@@ -22,7 +22,7 @@ func TestReadWriteOutputCommitment(t *testing.T) {
                                VMVersion:      1,
                                ControlProgram: testutil.MustDecodeHexString("00140876db6ca8f4542a836f0edd42b87d095d081182"),
                        },
-                       encodeString: "39ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff64011600140876db6ca8f4542a836f0edd42b87d095d081182",
+                       encodeString: "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff64011600140876db6ca8f4542a836f0edd42b87d095d081182",
                },
                {
                        oc: &OutputCommitment{
@@ -30,14 +30,14 @@ func TestReadWriteOutputCommitment(t *testing.T) {
                                VMVersion:      1,
                                ControlProgram: testutil.MustDecodeHexString("00148bf7800b2333afd8414d6e903d58c4908b9bbcc7"),
                        },
-                       encodeString: "39ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff32011600148bf7800b2333afd8414d6e903d58c4908b9bbcc7",
+                       encodeString: "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff32011600148bf7800b2333afd8414d6e903d58c4908b9bbcc7",
                },
        }
 
        for _, c := range cases {
                buff := []byte{}
                buffer := bytes.NewBuffer(buff)
-               if err := c.oc.writeExtensibleString(buffer, nil, 1); err != nil {
+               if err := c.oc.writeTo(buffer, 1); err != nil {
                        t.Fatal(err)
                }
 
@@ -47,8 +47,7 @@ func TestReadWriteOutputCommitment(t *testing.T) {
                }
 
                oc := &OutputCommitment{}
-               _, err := oc.readFrom(blockchain.NewReader(buffer.Bytes()), 1)
-               if err != nil {
+               if err := oc.readFrom(blockchain.NewReader(buffer.Bytes()), 1); err != nil {
                        t.Fatal(err)
                }
 
index b73d449..f11c554 100644 (file)
@@ -41,14 +41,14 @@ func TestTransaction(t *testing.T) {
                {
                        tx: NewTx(TxData{
                                Version:        1,
-                               SerializedSize: uint64(261),
+                               SerializedSize: uint64(262),
                                TimeRange:      654,
                                Inputs: []*TxInput{
                                        NewIssuanceInput([]byte("nonce"), 254354, []byte("issuanceProgram"), [][]byte{[]byte("arguments1"), []byte("arguments2")}, []byte("assetDefinition")),
                                        NewSpendInput([][]byte{[]byte("arguments3"), []byte("arguments4")}, testutil.MustDecodeHash("fad5195a0c8e3b590b86a3c0a95e7529565888508aecca96e9aeda633002f409"), *consensus.BTMAssetID, 254354, 3, []byte("spendProgram")),
                                },
                                Outputs: []*TxOutput{
-                                       NewTxOutput(testutil.MustDecodeAsset("a69849e11add96ac7053aad22ba2349a4abf5feb0475a0afcadff4e128be76cf"), 254354, []byte("true")),
+                                       NewOriginalTxOutput(testutil.MustDecodeAsset("a69849e11add96ac7053aad22ba2349a4abf5feb0475a0afcadff4e128be76cf"), 254354, []byte("true")),
                                },
                        }),
                        hex: strings.Join([]string{
@@ -93,6 +93,7 @@ func TestTransaction(t *testing.T) {
                                "617267756d656e747334", // input 1: second argument data
                                "01", // outputs count
                                "01", // output 0: asset version
+                               "00",         // output type
                                "29", // output 0: serialization length
                                "a69849e11add96ac7053aad22ba2349a4abf5feb0475a0afcadff4e128be76cf", // output 0: assetID
                                "92c30f",   // output 0: amount
@@ -106,13 +107,13 @@ func TestTransaction(t *testing.T) {
                {
                        tx: NewTx(TxData{
                                Version:        1,
-                               SerializedSize: uint64(108),
+                               SerializedSize: uint64(110),
                                Inputs: []*TxInput{
                                        NewCoinbaseInput([]byte("arbitrary")),
                                },
                                Outputs: []*TxOutput{
-                                       NewTxOutput(*consensus.BTMAssetID, 254354, []byte("true")),
-                                       NewTxOutput(*consensus.BTMAssetID, 254354, []byte("false")),
+                                       NewOriginalTxOutput(*consensus.BTMAssetID, 254354, []byte("true")),
+                                       NewOriginalTxOutput(*consensus.BTMAssetID, 254354, []byte("false")),
                                },
                        }),
                        hex: strings.Join([]string{
@@ -128,6 +129,7 @@ func TestTransaction(t *testing.T) {
                                "00",                 // input 0: witness length
                                "02",                 // outputs count
                                "01",                 // output 0: asset version
+                               "00",                 // output type
                                "29",                 // output 0: serialization length
                                "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", // output 0: assetID
                                "92c30f",   // output 0: amount
@@ -136,6 +138,7 @@ func TestTransaction(t *testing.T) {
                                "74727565", // output 0: control program
                                "00",       // output 0: witness length
                                "01",       // output 1: asset version
+                               "00",         // output type
                                "2a",       // output 1: serialization length
                                "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", // output 1: assetID
                                "92c30f",     // output 1: amount
@@ -185,7 +188,7 @@ func TestTransaction(t *testing.T) {
 
 func TestTransactionTrailingGarbage(t *testing.T) {
        // validTxHex is a valid tx, we don't care what's inside as long as it's valid
-       validTxHex := `07010001012b00030a0908916133a0d64d1d973b631e226ef95338ad4a536b95635f32f0d04708a6f2a26380a094a58d1d09000101010103010203010129000000000000000000000000000000000000000000000000000000000000000080a094a58d1d01010100`
+       validTxHex := `07010001012b00030a0908916133a0d64d1d973b631e226ef95338ad4a536b95635f32f0d04708a6f2a26380a094a58d1d0900010101010301020301010029000000000000000000000000000000000000000000000000000000000000000080a094a58d1d01010100`
        validTx := Tx{}
        if err := validTx.UnmarshalText([]byte(validTxHex)); err != nil {
                t.Fatal(err)
@@ -239,7 +242,7 @@ func TestInvalidIssuance(t *testing.T) {
 }
 
 func TestFuzzUnknownAssetVersion(t *testing.T) {
-       rawTx := `07010001012b00030a0908916133a0d64d1d973b631e226ef95338ad4a536b95635f32f0d04708a6f2a26380a094a58d1d09000101010103010203010129000000000000000000000000000000000000000000000000000000000000000080a094a58d1d01010100`
+       rawTx := `07010001012b00030a0908916133a0d64d1d973b631e226ef95338ad4a536b95635f32f0d04708a6f2a26380a094a58d1d0900010101010301020301010029000000000000000000000000000000000000000000000000000000000000000080a094a58d1d01010100`
        want := Tx{}
        if err := want.UnmarshalText([]byte(rawTx)); err != nil {
                t.Fatal(err)
@@ -277,7 +280,7 @@ func BenchmarkTxWriteToTrue200(b *testing.B) {
        tx := &Tx{}
        for i := 0; i < 200; i++ {
                tx.Inputs = append(tx.Inputs, NewSpendInput(nil, bc.Hash{}, bc.AssetID{}, 0, 0, nil))
-               tx.Outputs = append(tx.Outputs, NewTxOutput(bc.AssetID{}, 0, nil))
+               tx.Outputs = append(tx.Outputs, NewOriginalTxOutput(bc.AssetID{}, 0, nil))
        }
        for i := 0; i < b.N; i++ {
                tx.writeTo(ioutil.Discard, 0)
@@ -288,7 +291,7 @@ func BenchmarkTxWriteToFalse200(b *testing.B) {
        tx := &Tx{}
        for i := 0; i < 200; i++ {
                tx.Inputs = append(tx.Inputs, NewSpendInput(nil, bc.Hash{}, bc.AssetID{}, 0, 0, nil))
-               tx.Outputs = append(tx.Outputs, NewTxOutput(bc.AssetID{}, 0, nil))
+               tx.Outputs = append(tx.Outputs, NewOriginalTxOutput(bc.AssetID{}, 0, nil))
        }
        for i := 0; i < b.N; i++ {
                tx.writeTo(ioutil.Discard, serRequired)
@@ -312,7 +315,7 @@ func BenchmarkTxInputWriteToFalse(b *testing.B) {
 }
 
 func BenchmarkTxOutputWriteToTrue(b *testing.B) {
-       output := NewTxOutput(bc.AssetID{}, 0, nil)
+       output := NewOriginalTxOutput(bc.AssetID{}, 0, nil)
        ew := errors.NewWriter(ioutil.Discard)
        for i := 0; i < b.N; i++ {
                output.writeTo(ew)
@@ -320,7 +323,7 @@ func BenchmarkTxOutputWriteToTrue(b *testing.B) {
 }
 
 func BenchmarkTxOutputWriteToFalse(b *testing.B) {
-       output := NewTxOutput(bc.AssetID{}, 0, nil)
+       output := NewOriginalTxOutput(bc.AssetID{}, 0, nil)
        ew := errors.NewWriter(ioutil.Discard)
        for i := 0; i < b.N; i++ {
                output.writeTo(ew)
index d76ca6b..d5702e6 100644 (file)
@@ -1,6 +1,7 @@
 package types
 
 import (
+       "fmt"
        "io"
 
        "github.com/bytom/bytom/encoding/blockchain"
@@ -8,27 +9,28 @@ import (
        "github.com/bytom/bytom/protocol/bc"
 )
 
+const (
+       // OriginalOutputType represent the type of original output
+       OriginalOutputType uint8 = iota
+
+       // VoteOutputType represent the type of vote output
+       VoteOutputType
+)
+
 // TxOutput is the top level struct of tx output.
 type TxOutput struct {
        AssetVersion uint64
        OutputCommitment
        // Unconsumed suffixes of the commitment and witness extensible strings.
        CommitmentSuffix []byte
+       TypedOutput
 }
 
-// NewTxOutput create a new output struct
-func NewTxOutput(assetID bc.AssetID, amount uint64, controlProgram []byte) *TxOutput {
-       return &TxOutput{
-               AssetVersion: 1,
-               OutputCommitment: OutputCommitment{
-                       AssetAmount: bc.AssetAmount{
-                               AssetId: &assetID,
-                               Amount:  amount,
-                       },
-                       VMVersion:      1,
-                       ControlProgram: controlProgram,
-               },
-       }
+// TypedOutput return the txoutput type.
+type TypedOutput interface {
+       OutputType() uint8
+       readFrom(*blockchain.Reader) error
+       writeTo(io.Writer) error
 }
 
 func (to *TxOutput) readFrom(r *blockchain.Reader) (err error) {
@@ -36,7 +38,21 @@ func (to *TxOutput) readFrom(r *blockchain.Reader) (err error) {
                return errors.Wrap(err, "reading asset version")
        }
 
-       if to.CommitmentSuffix, err = to.OutputCommitment.readFrom(r, to.AssetVersion); err != nil {
+
+       typedOutput, err := parseTypedOutput(r)
+       if err != nil {
+               return errors.Wrap(err, "parse typedOutput")
+       }
+
+       to.TypedOutput = typedOutput
+
+       if to.CommitmentSuffix, err = blockchain.ReadExtensibleString(r, func(reader *blockchain.Reader) error {
+               if err := to.TypedOutput.readFrom(reader); err != nil {
+                       return err
+               }
+
+               return to.OutputCommitment.readFrom(reader, to.AssetVersion)
+       }); err != nil {
                return errors.Wrap(err, "reading output commitment")
        }
 
@@ -45,12 +61,41 @@ func (to *TxOutput) readFrom(r *blockchain.Reader) (err error) {
        return errors.Wrap(err, "reading output witness")
 }
 
+var outputTypeMap = map[uint8]func() TypedOutput{
+       OriginalOutputType: func() TypedOutput { return &originalTxOutput{} },
+       VoteOutputType:     func() TypedOutput { return &VoteOutput{} },
+}
+
+func parseTypedOutput(r *blockchain.Reader) (TypedOutput, error) {
+       var outType [1]byte
+       if _, err := io.ReadFull(r, outType[:]); err != nil {
+               return nil, errors.Wrap(err, "reading output type")
+       }
+
+       newOutFun, ok := outputTypeMap[outType[0]]
+       if !ok {
+               return nil, fmt.Errorf("unsupported output type %d", outType[0])
+       }
+
+       return newOutFun(), nil
+}
+
 func (to *TxOutput) writeTo(w io.Writer) error {
        if _, err := blockchain.WriteVarint63(w, to.AssetVersion); err != nil {
                return errors.Wrap(err, "writing asset version")
        }
 
-       if err := to.writeCommitment(w); err != nil {
+       if _, err := w.Write([]byte{to.OutputType()}); err != nil {
+               return err
+       }
+
+       if _, err := blockchain.WriteExtensibleString(w, to.CommitmentSuffix, func(writer io.Writer) error {
+               if err := to.TypedOutput.writeTo(writer); err != nil {
+                       return err
+               }
+
+               return to.OutputCommitment.writeTo(writer, to.AssetVersion)
+       }); err != nil {
                return errors.Wrap(err, "writing output commitment")
        }
 
@@ -60,10 +105,6 @@ func (to *TxOutput) writeTo(w io.Writer) error {
        return nil
 }
 
-func (to *TxOutput) writeCommitment(w io.Writer) error {
-       return to.OutputCommitment.writeExtensibleString(w, to.CommitmentSuffix, to.AssetVersion)
-}
-
 // ComputeOutputID assembles an output entry given a spend commitment and
 // computes and returns its corresponding entry ID.
 func ComputeOutputID(sc *SpendCommitment) (h bc.Hash, err error) {
index 23ac4b4..3105bb0 100644 (file)
@@ -13,12 +13,13 @@ import (
        "github.com/bytom/bytom/testutil"
 )
 
-func TestSerializationTxOutput(t *testing.T) {
+func TestSerializationOriginalTxOutput(t *testing.T) {
        assetID := testutil.MustDecodeAsset("81756fdab39a17163b0ce582ee4ee256fb4d1e156c692b997d608a42ecb38d47")
-       txOutput := NewTxOutput(assetID, 254354, []byte("TestSerializationTxOutput"))
+       txOutput := NewOriginalTxOutput(assetID, 254354, []byte("TestSerializationTxOutput"))
 
        wantHex := strings.Join([]string{
                "01", // asset version
+               "00", // output type
                "3e", // serialization length
                "81756fdab39a17163b0ce582ee4ee256fb4d1e156c692b997d608a42ecb38d47", // assetID
                "92c30f", // amount
@@ -55,6 +56,51 @@ func TestSerializationTxOutput(t *testing.T) {
        }
 }
 
+func TestSerializationVoteOutput(t *testing.T) {
+       assetID := testutil.MustDecodeAsset("81756fdab39a17163b0ce582ee4ee256fb4d1e156c692b997d608a42ecb38d47")
+       voteTxOutput := NewVoteOutput(assetID, 1000, []byte("TestSerializationTxOutput"), []byte("af594006a40837d9f028daabb6d589df0b9138daefad5683e5233c2646279217294a8d532e60863bcf196625a35fb8ceeffa3c09610eb92dcfb655a947f13269"))
+
+       wantHex := strings.Join([]string{
+               "01",   // asset version
+               "01",   // outType
+               "bf01", // serialization length
+               "8001", // output xpub length
+               "6166353934303036613430383337643966303238646161626236643538396466306239313338646165666164353638336535323333633236343632373932313732393461386435333265363038363362636631393636323561333566623863656566666133633039363130656239326463666236353561393437663133323639", // xpub
+               "81756fdab39a17163b0ce582ee4ee256fb4d1e156c692b997d608a42ecb38d47", // assetID
+               "e807", // amount
+               "01",   // version
+               "19",   // control program length
+               "5465737453657269616c697a6174696f6e54784f7574707574", // control program
+               "00", // witness length
+       }, "")
+
+       // Test convert struct to hex
+       var buffer bytes.Buffer
+       if err := voteTxOutput.writeTo(&buffer); err != nil {
+               t.Fatal(err)
+       }
+
+       gotHex := hex.EncodeToString(buffer.Bytes())
+       if gotHex != wantHex {
+               t.Errorf("serialization bytes = %s want %s", gotHex, wantHex)
+       }
+
+       // Test convert hex to struct
+       var gotTxOutput TxOutput
+       decodeHex, err := hex.DecodeString(wantHex)
+       if err != nil {
+               t.Fatal(err)
+       }
+
+       if err := gotTxOutput.readFrom(blockchain.NewReader(decodeHex)); err != nil {
+               t.Fatal(err)
+       }
+
+       if !testutil.DeepEqual(*voteTxOutput, gotTxOutput) {
+               t.Errorf("expected marshaled/unmarshaled txoutput to be:\n%sgot:\n%s", spew.Sdump(*voteTxOutput), spew.Sdump(gotTxOutput))
+       }
+}
+
 func TestComputeOutputID(t *testing.T) {
        btmAssetID := testutil.MustDecodeAsset("ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff")
        cases := []struct {
diff --git a/protocol/bc/types/vote_output.go b/protocol/bc/types/vote_output.go
new file mode 100644 (file)
index 0000000..0fe87eb
--- /dev/null
@@ -0,0 +1,46 @@
+package types
+
+import (
+       "io"
+
+       "github.com/bytom/bytom/encoding/blockchain"
+       "github.com/bytom/bytom/errors"
+       "github.com/bytom/bytom/protocol/bc"
+)
+
+// VoteOutput satisfies the TypedOutput interface and represents a vote transaction.
+type VoteOutput struct {
+       Vote []byte
+}
+
+// NewVoteOutput create a new output struct
+func NewVoteOutput(assetID bc.AssetID, amount uint64, controlProgram []byte, vote []byte) *TxOutput {
+       return &TxOutput{
+               AssetVersion: 1,
+               OutputCommitment: OutputCommitment{
+                       AssetAmount: bc.AssetAmount{
+                               AssetId: &assetID,
+                               Amount:  amount,
+                       },
+                       VMVersion:      1,
+                       ControlProgram: controlProgram,
+               },
+               TypedOutput: &VoteOutput{Vote: vote},
+       }
+}
+
+func (v *VoteOutput) readFrom(r *blockchain.Reader) error {
+       var err error
+       if v.Vote, err = blockchain.ReadVarstr31(r); err != nil {
+               return errors.Wrap(err, "reading vote output vote")
+       }
+       return nil
+}
+
+func (v *VoteOutput) writeTo(w io.Writer) error {
+       _, err := blockchain.WriteVarstr31(w, v.Vote)
+       return err
+}
+
+// OutputType implement the txout interface
+func (v *VoteOutput) OutputType() uint8 { return VoteOutputType }
index c71bd2e..149a148 100644 (file)
@@ -23,7 +23,7 @@ var testTxs = []*types.Tx{
                        types.NewSpendInput(nil, bc.NewHash([32]byte{0x01}), *consensus.BTMAssetID, 1, 1, []byte{0x51}),
                },
                Outputs: []*types.TxOutput{
-                       types.NewTxOutput(*consensus.BTMAssetID, 1, []byte{0x6a}),
+                       types.NewOriginalTxOutput(*consensus.BTMAssetID, 1, []byte{0x6a}),
                },
        }),
        //tx1
@@ -33,7 +33,7 @@ var testTxs = []*types.Tx{
                        types.NewSpendInput(nil, bc.NewHash([32]byte{0x01}), *consensus.BTMAssetID, 1, 1, []byte{0x51}),
                },
                Outputs: []*types.TxOutput{
-                       types.NewTxOutput(*consensus.BTMAssetID, 1, []byte{0x6b}),
+                       types.NewOriginalTxOutput(*consensus.BTMAssetID, 1, []byte{0x6b}),
                },
        }),
        //tx2
@@ -45,8 +45,8 @@ var testTxs = []*types.Tx{
                        types.NewSpendInput(nil, bc.NewHash([32]byte{0x02}), bc.NewAssetID([32]byte{0xa1}), 4, 1, []byte{0x51}),
                },
                Outputs: []*types.TxOutput{
-                       types.NewTxOutput(*consensus.BTMAssetID, 1, []byte{0x6b}),
-                       types.NewTxOutput(bc.NewAssetID([32]byte{0xa1}), 4, []byte{0x61}),
+                       types.NewOriginalTxOutput(*consensus.BTMAssetID, 1, []byte{0x6b}),
+                       types.NewOriginalTxOutput(bc.NewAssetID([32]byte{0xa1}), 4, []byte{0x61}),
                },
        }),
        //tx3
@@ -56,8 +56,8 @@ var testTxs = []*types.Tx{
                        types.NewSpendInput(nil, testutil.MustDecodeHash("dbea684b5c5153ed7729669a53d6c59574f26015a3e1eb2a0e8a1c645425a764"), bc.NewAssetID([32]byte{0xa1}), 4, 1, []byte{0x61}),
                },
                Outputs: []*types.TxOutput{
-                       types.NewTxOutput(bc.NewAssetID([32]byte{0xa1}), 3, []byte{0x62}),
-                       types.NewTxOutput(bc.NewAssetID([32]byte{0xa1}), 1, []byte{0x63}),
+                       types.NewOriginalTxOutput(bc.NewAssetID([32]byte{0xa1}), 3, []byte{0x62}),
+                       types.NewOriginalTxOutput(bc.NewAssetID([32]byte{0xa1}), 1, []byte{0x63}),
                },
        }),
        //tx4
@@ -67,8 +67,8 @@ var testTxs = []*types.Tx{
                        types.NewSpendInput(nil, testutil.MustDecodeHash("d84d0be0fd08e7341f2d127749bb0d0844d4560f53bd54861cee9981fd922cad"), bc.NewAssetID([32]byte{0xa1}), 3, 0, []byte{0x62}),
                },
                Outputs: []*types.TxOutput{
-                       types.NewTxOutput(bc.NewAssetID([32]byte{0xa1}), 2, []byte{0x64}),
-                       types.NewTxOutput(bc.NewAssetID([32]byte{0xa1}), 1, []byte{0x65}),
+                       types.NewOriginalTxOutput(bc.NewAssetID([32]byte{0xa1}), 2, []byte{0x64}),
+                       types.NewOriginalTxOutput(bc.NewAssetID([32]byte{0xa1}), 1, []byte{0x65}),
                },
        }),
        //tx5
@@ -78,7 +78,7 @@ var testTxs = []*types.Tx{
                        types.NewSpendInput(nil, bc.NewHash([32]byte{0x01}), *consensus.BTMAssetID, 1, 1, []byte{0x51}),
                },
                Outputs: []*types.TxOutput{
-                       types.NewTxOutput(*consensus.BTMAssetID, 0, []byte{0x51}),
+                       types.NewOriginalTxOutput(*consensus.BTMAssetID, 0, []byte{0x51}),
                },
        }),
        //tx6
@@ -89,8 +89,8 @@ var testTxs = []*types.Tx{
                        types.NewSpendInput(nil, testutil.MustDecodeHash("d84d0be0fd08e7341f2d127749bb0d0844d4560f53bd54861cee9981fd922cad"), bc.NewAssetID([32]byte{0xa1}), 3, 0, []byte{0x62}),
                },
                Outputs: []*types.TxOutput{
-                       types.NewTxOutput(*consensus.BTMAssetID, 2, []byte{0x51}),
-                       types.NewTxOutput(bc.NewAssetID([32]byte{0xa1}), 0, []byte{0x65}),
+                       types.NewOriginalTxOutput(*consensus.BTMAssetID, 2, []byte{0x51}),
+                       types.NewOriginalTxOutput(bc.NewAssetID([32]byte{0xa1}), 0, []byte{0x65}),
                },
        }),
 }
@@ -103,6 +103,7 @@ func (s *mockStore) SaveChainStatus(*state.BlockNode, *state.UtxoViewpoint, *sta
 func (s *mockStore) GetBlockHeader(hash *bc.Hash) (*types.BlockHeader, error)     { return nil, nil }
 func (s *mockStore) GetCheckpoint(hash *bc.Hash) (*state.Checkpoint, error)       { return nil, nil }
 func (s *mockStore) GetCheckpointsByHeight(u uint64) ([]*state.Checkpoint, error) { return nil, nil }
+func (s *mockStore) SaveCheckpoints(...*state.Checkpoint) error                   { return nil }
 func (s *mockStore) BlockExist(hash *bc.Hash) bool                                { return false }
 func (s *mockStore) GetBlock(*bc.Hash) (*types.Block, error)                      { return nil, nil }
 func (s *mockStore) GetStoreStatus() *BlockStoreState                             { return nil }
@@ -602,6 +603,7 @@ func (s *mockStore1) SaveChainStatus(*state.BlockNode, *state.UtxoViewpoint, *st
 func (s *mockStore1) GetBlockHeader(hash *bc.Hash) (*types.BlockHeader, error)     { return nil, nil }
 func (s *mockStore1) GetCheckpoint(hash *bc.Hash) (*state.Checkpoint, error)       { return nil, nil }
 func (s *mockStore1) GetCheckpointsByHeight(u uint64) ([]*state.Checkpoint, error) { return nil, nil }
+func (s *mockStore1) SaveCheckpoints(...*state.Checkpoint) error                   { return nil }
 func (s *mockStore1) BlockExist(hash *bc.Hash) bool                                { return false }
 func (s *mockStore1) GetBlock(*bc.Hash) (*types.Block, error)                      { return nil, nil }
 func (s *mockStore1) GetStoreStatus() *BlockStoreState                             { return nil }
index 7b9d616..12009f9 100644 (file)
@@ -75,7 +75,7 @@ func TestCheckCoinbaseAmount(t *testing.T) {
                        txs: []*types.Tx{
                                types.NewTx(types.TxData{
                                        Inputs:  []*types.TxInput{types.NewCoinbaseInput(nil)},
-                                       Outputs: []*types.TxOutput{types.NewTxOutput(*consensus.BTMAssetID, 5000, nil)},
+                                       Outputs: []*types.TxOutput{types.NewOriginalTxOutput(*consensus.BTMAssetID, 5000, nil)},
                                }),
                        },
                        amount: 5000,
@@ -85,7 +85,7 @@ func TestCheckCoinbaseAmount(t *testing.T) {
                        txs: []*types.Tx{
                                types.NewTx(types.TxData{
                                        Inputs:  []*types.TxInput{types.NewCoinbaseInput(nil)},
-                                       Outputs: []*types.TxOutput{types.NewTxOutput(*consensus.BTMAssetID, 5000, nil)},
+                                       Outputs: []*types.TxOutput{types.NewOriginalTxOutput(*consensus.BTMAssetID, 5000, nil)},
                                }),
                        },
                        amount: 6000,
@@ -239,7 +239,7 @@ func TestValidateBlock(t *testing.T) {
                                                Version:        1,
                                                SerializedSize: 1,
                                                Inputs:         []*types.TxInput{types.NewCoinbaseInput(nil)},
-                                               Outputs:        []*types.TxOutput{types.NewTxOutput(*consensus.BTMAssetID, 41250000000, cp)},
+                                               Outputs:        []*types.TxOutput{types.NewOriginalTxOutput(*consensus.BTMAssetID, 41250000000, cp)},
                                        }),
                                },
                        },
@@ -268,7 +268,7 @@ func TestValidateBlock(t *testing.T) {
                                                Version:        1,
                                                SerializedSize: 1,
                                                Inputs:         []*types.TxInput{types.NewCoinbaseInput(nil)},
-                                               Outputs:        []*types.TxOutput{types.NewTxOutput(*consensus.BTMAssetID, 41250000000, cp)},
+                                               Outputs:        []*types.TxOutput{types.NewOriginalTxOutput(*consensus.BTMAssetID, 41250000000, cp)},
                                        }),
                                },
                        },
@@ -295,13 +295,13 @@ func TestValidateBlock(t *testing.T) {
                                                Version:        1,
                                                SerializedSize: 1,
                                                Inputs:         []*types.TxInput{types.NewCoinbaseInput(nil)},
-                                               Outputs:        []*types.TxOutput{types.NewTxOutput(*consensus.BTMAssetID, 41250000000, cp)},
+                                               Outputs:        []*types.TxOutput{types.NewOriginalTxOutput(*consensus.BTMAssetID, 41250000000, cp)},
                                        }),
                                        types.MapTx(&types.TxData{
                                                Version:        1,
                                                SerializedSize: 1,
                                                Inputs:         []*types.TxInput{types.NewSpendInput([][]byte{}, *newHash(8), *consensus.BTMAssetID, 100000000, 0, cp)},
-                                               Outputs:        []*types.TxOutput{types.NewTxOutput(*consensus.BTMAssetID, 90000000, cp)},
+                                               Outputs:        []*types.TxOutput{types.NewOriginalTxOutput(*consensus.BTMAssetID, 90000000, cp)},
                                        }),
                                },
                        },
@@ -347,7 +347,7 @@ func TestGasOverBlockLimit(t *testing.T) {
                                Version:        1,
                                SerializedSize: 1,
                                Inputs:         []*types.TxInput{types.NewCoinbaseInput(nil)},
-                               Outputs:        []*types.TxOutput{types.NewTxOutput(*consensus.BTMAssetID, 41250000000, cp)},
+                               Outputs:        []*types.TxOutput{types.NewOriginalTxOutput(*consensus.BTMAssetID, 41250000000, cp)},
                        }),
                },
        }
@@ -360,7 +360,7 @@ func TestGasOverBlockLimit(t *testing.T) {
                                types.NewSpendInput([][]byte{}, *newHash(8), *consensus.BTMAssetID, 10000000000, 0, cp),
                        },
                        Outputs: []*types.TxOutput{
-                               types.NewTxOutput(*consensus.BTMAssetID, 9000000000, cp),
+                               types.NewOriginalTxOutput(*consensus.BTMAssetID, 9000000000, cp),
                        },
                }))
        }
@@ -395,7 +395,7 @@ func TestSetTransactionStatus(t *testing.T) {
                                Version:        1,
                                SerializedSize: 1,
                                Inputs:         []*types.TxInput{types.NewCoinbaseInput(nil)},
-                               Outputs:        []*types.TxOutput{types.NewTxOutput(*consensus.BTMAssetID, 41449998224, cp)},
+                               Outputs:        []*types.TxOutput{types.NewOriginalTxOutput(*consensus.BTMAssetID, 41449998224, cp)},
                        }),
                        types.MapTx(&types.TxData{
                                Version:        1,
@@ -405,8 +405,8 @@ func TestSetTransactionStatus(t *testing.T) {
                                        types.NewSpendInput([][]byte{}, *newHash(8), bc.AssetID{V0: 1}, 1000, 0, []byte{byte(vm.OP_FALSE)}),
                                },
                                Outputs: []*types.TxOutput{
-                                       types.NewTxOutput(*consensus.BTMAssetID, 888, cp),
-                                       types.NewTxOutput(bc.AssetID{V0: 1}, 1000, cp),
+                                       types.NewOriginalTxOutput(*consensus.BTMAssetID, 888, cp),
+                                       types.NewOriginalTxOutput(bc.AssetID{V0: 1}, 1000, cp),
                                },
                        }),
                        types.MapTx(&types.TxData{
@@ -416,7 +416,7 @@ func TestSetTransactionStatus(t *testing.T) {
                                        types.NewSpendInput([][]byte{}, *newHash(8), *consensus.BTMAssetID, 100000000, 0, cp),
                                },
                                Outputs: []*types.TxOutput{
-                                       types.NewTxOutput(*consensus.BTMAssetID, 888, cp),
+                                       types.NewOriginalTxOutput(*consensus.BTMAssetID, 888, cp),
                                },
                        }),
                },
index d6b60a3..a0a1f9e 100644 (file)
@@ -59,7 +59,7 @@ func TestValidateUglyTx(t *testing.T) {
                                                *consensus.BTMAssetID, 10000000000, 0, nil),
                                },
                                Outputs: []*types.TxOutput{
-                                       types.NewTxOutput(*consensus.BTMAssetID, 10000000001, testutil.MustDecodeHexString("00145931e1b7b65897f47845ac08fc136e0c0a4ff166")),
+                                       types.NewOriginalTxOutput(*consensus.BTMAssetID, 10000000001, testutil.MustDecodeHexString("00145931e1b7b65897f47845ac08fc136e0c0a4ff166")),
                                },
                        },
                        err:      true,
@@ -77,7 +77,7 @@ func TestValidateUglyTx(t *testing.T) {
                                                *consensus.BTMAssetID, 10000000000, 0, nil),
                                },
                                Outputs: []*types.TxOutput{
-                                       types.NewTxOutput(*consensus.BTMAssetID, 10000000000, testutil.MustDecodeHexString("00145931e1b7b65897f47845ac08fc136e0c0a4ff166")),
+                                       types.NewOriginalTxOutput(*consensus.BTMAssetID, 10000000000, testutil.MustDecodeHexString("00145931e1b7b65897f47845ac08fc136e0c0a4ff166")),
                                },
                        },
                        err:      true,
@@ -95,7 +95,7 @@ func TestValidateUglyTx(t *testing.T) {
                                                *consensus.BTMAssetID, 10000000001, 0, nil),
                                },
                                Outputs: []*types.TxOutput{
-                                       types.NewTxOutput(*consensus.BTMAssetID, 10000000000, testutil.MustDecodeHexString("00145931e1b7b65897f47845ac08fc136e0c0a4ff166")),
+                                       types.NewOriginalTxOutput(*consensus.BTMAssetID, 10000000000, testutil.MustDecodeHexString("00145931e1b7b65897f47845ac08fc136e0c0a4ff166")),
                                },
                        },
                        err:      true,
@@ -113,7 +113,7 @@ func TestValidateUglyTx(t *testing.T) {
                                                testutil.MustDecodeAsset("97575084e5161406a0977da729fbf51ad230e0ff0aec607a97e4336611c8707f"), 10000000000, 0, nil),
                                },
                                Outputs: []*types.TxOutput{
-                                       types.NewTxOutput(testutil.MustDecodeAsset("97575084e5161406a0977da729fbf51ad230e0ff0aec607a97e4336611c8707f"), 10000000000, testutil.MustDecodeHexString("00145931e1b7b65897f47845ac08fc136e0c0a4ff166")),
+                                       types.NewOriginalTxOutput(testutil.MustDecodeAsset("97575084e5161406a0977da729fbf51ad230e0ff0aec607a97e4336611c8707f"), 10000000000, testutil.MustDecodeHexString("00145931e1b7b65897f47845ac08fc136e0c0a4ff166")),
                                },
                        },
                        err:      true,
@@ -154,7 +154,7 @@ func TestValidateUglyTx(t *testing.T) {
                                        ),
                                },
                                Outputs: []*types.TxOutput{
-                                       types.NewTxOutput(*consensus.BTMAssetID, 9000000000, testutil.MustDecodeHexString("00145931e1b7b65897f47845ac08fc136e0c0a4ff166")),
+                                       types.NewOriginalTxOutput(*consensus.BTMAssetID, 9000000000, testutil.MustDecodeHexString("00145931e1b7b65897f47845ac08fc136e0c0a4ff166")),
                                },
                        },
                        err:      true,
@@ -179,8 +179,8 @@ func TestValidateUglyTx(t *testing.T) {
                                        ),
                                },
                                Outputs: []*types.TxOutput{
-                                       types.NewTxOutput(*consensus.BTMAssetID, 9000000000, testutil.MustDecodeHexString("00145931e1b7b65897f47845ac08fc136e0c0a4ff166")),
-                                       types.NewTxOutput(testutil.MustDecodeAsset("97575084e5161406a0977da729fbf51ad230e0ff0aec607a97e4336611c8707e"), 10000000000, testutil.MustDecodeHexString("00145931e1b7b65897f47845ac08fc136e0c0a4ff166")),
+                                       types.NewOriginalTxOutput(*consensus.BTMAssetID, 9000000000, testutil.MustDecodeHexString("00145931e1b7b65897f47845ac08fc136e0c0a4ff166")),
+                                       types.NewOriginalTxOutput(testutil.MustDecodeAsset("97575084e5161406a0977da729fbf51ad230e0ff0aec607a97e4336611c8707e"), 10000000000, testutil.MustDecodeHexString("00145931e1b7b65897f47845ac08fc136e0c0a4ff166")),
                                },
                        },
                        err:      true,
@@ -205,8 +205,8 @@ func TestValidateUglyTx(t *testing.T) {
                                        ),
                                },
                                Outputs: []*types.TxOutput{
-                                       types.NewTxOutput(*consensus.BTMAssetID, 9000000000, testutil.MustDecodeHexString("00145931e1b7b65897f47845ac08fc136e0c0a4ff166")),
-                                       types.NewTxOutput(testutil.MustDecodeAsset("97575084e5161406a0977da729fbf51ad230e0ff0aec607a97e4336611c8707f"), 20000000000, testutil.MustDecodeHexString("00145931e1b7b65897f47845ac08fc136e0c0a4ff166")),
+                                       types.NewOriginalTxOutput(*consensus.BTMAssetID, 9000000000, testutil.MustDecodeHexString("00145931e1b7b65897f47845ac08fc136e0c0a4ff166")),
+                                       types.NewOriginalTxOutput(testutil.MustDecodeAsset("97575084e5161406a0977da729fbf51ad230e0ff0aec607a97e4336611c8707f"), 20000000000, testutil.MustDecodeHexString("00145931e1b7b65897f47845ac08fc136e0c0a4ff166")),
                                },
                        },
                        err:      true,
@@ -231,8 +231,8 @@ func TestValidateUglyTx(t *testing.T) {
                                        ),
                                },
                                Outputs: []*types.TxOutput{
-                                       types.NewTxOutput(*consensus.BTMAssetID, 9000000000, testutil.MustDecodeHexString("00145931e1b7b65897f47845ac08fc136e0c0a4ff166")),
-                                       types.NewTxOutput(testutil.MustDecodeAsset("97575084e5161406a0977da729fbf51ad230e0ff0aec607a97e4336611c8707f"), 5000000000, testutil.MustDecodeHexString("00145931e1b7b65897f47845ac08fc136e0c0a4ff166")),
+                                       types.NewOriginalTxOutput(*consensus.BTMAssetID, 9000000000, testutil.MustDecodeHexString("00145931e1b7b65897f47845ac08fc136e0c0a4ff166")),
+                                       types.NewOriginalTxOutput(testutil.MustDecodeAsset("97575084e5161406a0977da729fbf51ad230e0ff0aec607a97e4336611c8707f"), 5000000000, testutil.MustDecodeHexString("00145931e1b7b65897f47845ac08fc136e0c0a4ff166")),
                                },
                        },
                        err:      true,
@@ -257,8 +257,8 @@ func TestValidateUglyTx(t *testing.T) {
                                        ),
                                },
                                Outputs: []*types.TxOutput{
-                                       types.NewTxOutput(*consensus.BTMAssetID, 9000000000, testutil.MustDecodeHexString("00145931e1b7b65897f47845ac08fc136e0c0a4ff166")),
-                                       types.NewTxOutput(testutil.MustDecodeAsset("97575084e5161406a0977da729fbf51ad230e0ff0aec607a97e4336611c8707f"), 20000000000, testutil.MustDecodeHexString("6a")),
+                                       types.NewOriginalTxOutput(*consensus.BTMAssetID, 9000000000, testutil.MustDecodeHexString("00145931e1b7b65897f47845ac08fc136e0c0a4ff166")),
+                                       types.NewOriginalTxOutput(testutil.MustDecodeAsset("97575084e5161406a0977da729fbf51ad230e0ff0aec607a97e4336611c8707f"), 20000000000, testutil.MustDecodeHexString("6a")),
                                },
                        },
                        err:      true,
@@ -283,8 +283,8 @@ func TestValidateUglyTx(t *testing.T) {
                                        ),
                                },
                                Outputs: []*types.TxOutput{
-                                       types.NewTxOutput(*consensus.BTMAssetID, 9000000000, testutil.MustDecodeHexString("00145931e1b7b65897f47845ac08fc136e0c0a4ff166")),
-                                       types.NewTxOutput(testutil.MustDecodeAsset("97575084e5161406a0977da729fbf51ad230e0ff0aec607a97e4336611c8707f"), 5000000000, testutil.MustDecodeHexString("6a")),
+                                       types.NewOriginalTxOutput(*consensus.BTMAssetID, 9000000000, testutil.MustDecodeHexString("00145931e1b7b65897f47845ac08fc136e0c0a4ff166")),
+                                       types.NewOriginalTxOutput(testutil.MustDecodeAsset("97575084e5161406a0977da729fbf51ad230e0ff0aec607a97e4336611c8707f"), 5000000000, testutil.MustDecodeHexString("6a")),
                                },
                        },
                        err:      true,
@@ -305,7 +305,7 @@ func TestValidateUglyTx(t *testing.T) {
                                                testutil.MustDecodeAsset("97575084e5161406a0977da729fbf51ad230e0ff0aec607a97e4336611c8707f"), 10000000000, 1, nil),
                                },
                                Outputs: []*types.TxOutput{
-                                       types.NewTxOutput(*consensus.BTMAssetID, 9000000000, testutil.MustDecodeHexString("00145931e1b7b65897f47845ac08fc136e0c0a4ff166")),
+                                       types.NewOriginalTxOutput(*consensus.BTMAssetID, 9000000000, testutil.MustDecodeHexString("00145931e1b7b65897f47845ac08fc136e0c0a4ff166")),
                                },
                        },
                        err:      true,
@@ -326,8 +326,8 @@ func TestValidateUglyTx(t *testing.T) {
                                                testutil.MustDecodeAsset("97575084e5161406a0977da729fbf51ad230e0ff0aec607a97e4336611c8707f"), 10000000000, 1, nil),
                                },
                                Outputs: []*types.TxOutput{
-                                       types.NewTxOutput(*consensus.BTMAssetID, 9000000000, testutil.MustDecodeHexString("00145931e1b7b65897f47845ac08fc136e0c0a4ff166")),
-                                       types.NewTxOutput(testutil.MustDecodeAsset("97575084e5161406a0977da729fbf51ad230e0ff0aec607a97e4336611c8707e"), 10000000000, testutil.MustDecodeHexString("00145931e1b7b65897f47845ac08fc136e0c0a4ff166")),
+                                       types.NewOriginalTxOutput(*consensus.BTMAssetID, 9000000000, testutil.MustDecodeHexString("00145931e1b7b65897f47845ac08fc136e0c0a4ff166")),
+                                       types.NewOriginalTxOutput(testutil.MustDecodeAsset("97575084e5161406a0977da729fbf51ad230e0ff0aec607a97e4336611c8707e"), 10000000000, testutil.MustDecodeHexString("00145931e1b7b65897f47845ac08fc136e0c0a4ff166")),
                                },
                        },
                        err:      true,
@@ -348,8 +348,8 @@ func TestValidateUglyTx(t *testing.T) {
                                                testutil.MustDecodeAsset("97575084e5161406a0977da729fbf51ad230e0ff0aec607a97e4336611c8707f"), 10000000000, 1, nil),
                                },
                                Outputs: []*types.TxOutput{
-                                       types.NewTxOutput(*consensus.BTMAssetID, 9000000000, testutil.MustDecodeHexString("00145931e1b7b65897f47845ac08fc136e0c0a4ff166")),
-                                       types.NewTxOutput(testutil.MustDecodeAsset("97575084e5161406a0977da729fbf51ad230e0ff0aec607a97e4336611c8707f"), 20000000000, testutil.MustDecodeHexString("00145931e1b7b65897f47845ac08fc136e0c0a4ff166")),
+                                       types.NewOriginalTxOutput(*consensus.BTMAssetID, 9000000000, testutil.MustDecodeHexString("00145931e1b7b65897f47845ac08fc136e0c0a4ff166")),
+                                       types.NewOriginalTxOutput(testutil.MustDecodeAsset("97575084e5161406a0977da729fbf51ad230e0ff0aec607a97e4336611c8707f"), 20000000000, testutil.MustDecodeHexString("00145931e1b7b65897f47845ac08fc136e0c0a4ff166")),
                                },
                        },
                        err:      true,
@@ -370,8 +370,8 @@ func TestValidateUglyTx(t *testing.T) {
                                                testutil.MustDecodeAsset("97575084e5161406a0977da729fbf51ad230e0ff0aec607a97e4336611c8707f"), 10000000000, 1, nil),
                                },
                                Outputs: []*types.TxOutput{
-                                       types.NewTxOutput(*consensus.BTMAssetID, 9000000000, testutil.MustDecodeHexString("00145931e1b7b65897f47845ac08fc136e0c0a4ff166")),
-                                       types.NewTxOutput(testutil.MustDecodeAsset("97575084e5161406a0977da729fbf51ad230e0ff0aec607a97e4336611c8707f"), 5000000000, testutil.MustDecodeHexString("00145931e1b7b65897f47845ac08fc136e0c0a4ff166")),
+                                       types.NewOriginalTxOutput(*consensus.BTMAssetID, 9000000000, testutil.MustDecodeHexString("00145931e1b7b65897f47845ac08fc136e0c0a4ff166")),
+                                       types.NewOriginalTxOutput(testutil.MustDecodeAsset("97575084e5161406a0977da729fbf51ad230e0ff0aec607a97e4336611c8707f"), 5000000000, testutil.MustDecodeHexString("00145931e1b7b65897f47845ac08fc136e0c0a4ff166")),
                                },
                        },
                        err:      true,
@@ -392,8 +392,8 @@ func TestValidateUglyTx(t *testing.T) {
                                                testutil.MustDecodeAsset("97575084e5161406a0977da729fbf51ad230e0ff0aec607a97e4336611c8707f"), 10000000000, 1, nil),
                                },
                                Outputs: []*types.TxOutput{
-                                       types.NewTxOutput(*consensus.BTMAssetID, 9000000000, testutil.MustDecodeHexString("00145931e1b7b65897f47845ac08fc136e0c0a4ff166")),
-                                       types.NewTxOutput(testutil.MustDecodeAsset("97575084e5161406a0977da729fbf51ad230e0ff0aec607a97e4336611c8707f"), 20000000000, testutil.MustDecodeHexString("6a")),
+                                       types.NewOriginalTxOutput(*consensus.BTMAssetID, 9000000000, testutil.MustDecodeHexString("00145931e1b7b65897f47845ac08fc136e0c0a4ff166")),
+                                       types.NewOriginalTxOutput(testutil.MustDecodeAsset("97575084e5161406a0977da729fbf51ad230e0ff0aec607a97e4336611c8707f"), 20000000000, testutil.MustDecodeHexString("6a")),
                                },
                        },
                        err:      true,
@@ -414,8 +414,8 @@ func TestValidateUglyTx(t *testing.T) {
                                                testutil.MustDecodeAsset("97575084e5161406a0977da729fbf51ad230e0ff0aec607a97e4336611c8707f"), 10000000000, 1, nil),
                                },
                                Outputs: []*types.TxOutput{
-                                       types.NewTxOutput(*consensus.BTMAssetID, 9000000000, testutil.MustDecodeHexString("00145931e1b7b65897f47845ac08fc136e0c0a4ff166")),
-                                       types.NewTxOutput(testutil.MustDecodeAsset("97575084e5161406a0977da729fbf51ad230e0ff0aec607a97e4336611c8707f"), 5000000000, testutil.MustDecodeHexString("6a")),
+                                       types.NewOriginalTxOutput(*consensus.BTMAssetID, 9000000000, testutil.MustDecodeHexString("00145931e1b7b65897f47845ac08fc136e0c0a4ff166")),
+                                       types.NewOriginalTxOutput(testutil.MustDecodeAsset("97575084e5161406a0977da729fbf51ad230e0ff0aec607a97e4336611c8707f"), 5000000000, testutil.MustDecodeHexString("6a")),
                                },
                        },
                        err:      true,
@@ -433,7 +433,7 @@ func TestValidateUglyTx(t *testing.T) {
                                                *consensus.BTMAssetID, 10000000000, 0, testutil.MustDecodeHexString("6a")),
                                },
                                Outputs: []*types.TxOutput{
-                                       types.NewTxOutput(*consensus.BTMAssetID, 9000000000, testutil.MustDecodeHexString("00145931e1b7b65897f47845ac08fc136e0c0a4ff166")),
+                                       types.NewOriginalTxOutput(*consensus.BTMAssetID, 9000000000, testutil.MustDecodeHexString("00145931e1b7b65897f47845ac08fc136e0c0a4ff166")),
                                },
                        },
                        err:      true,
@@ -451,7 +451,7 @@ func TestValidateUglyTx(t *testing.T) {
                                                *consensus.BTMAssetID, 0, 0, nil),
                                },
                                Outputs: []*types.TxOutput{
-                                       types.NewTxOutput(*consensus.BTMAssetID, 0, testutil.MustDecodeHexString("00145931e1b7b65897f47845ac08fc136e0c0a4ff166")),
+                                       types.NewOriginalTxOutput(*consensus.BTMAssetID, 0, testutil.MustDecodeHexString("00145931e1b7b65897f47845ac08fc136e0c0a4ff166")),
                                },
                        },
                        err:      true,
@@ -464,7 +464,7 @@ func TestValidateUglyTx(t *testing.T) {
                                Version: 1,
                                Inputs:  []*types.TxInput{},
                                Outputs: []*types.TxOutput{
-                                       types.NewTxOutput(*consensus.BTMAssetID, 10, testutil.MustDecodeHexString("00145931e1b7b65897f47845ac08fc136e0c0a4ff166")),
+                                       types.NewOriginalTxOutput(*consensus.BTMAssetID, 10, testutil.MustDecodeHexString("00145931e1b7b65897f47845ac08fc136e0c0a4ff166")),
                                },
                        },
                        err:      true,
@@ -485,7 +485,7 @@ func TestValidateUglyTx(t *testing.T) {
                                                *consensus.BTMAssetID, 10000000000, 1, nil),
                                },
                                Outputs: []*types.TxOutput{
-                                       types.NewTxOutput(*consensus.BTMAssetID, 10000000000, testutil.MustDecodeHexString("00145931e1b7b65897f47845ac08fc136e0c0a4ff166")),
+                                       types.NewOriginalTxOutput(*consensus.BTMAssetID, 10000000000, testutil.MustDecodeHexString("00145931e1b7b65897f47845ac08fc136e0c0a4ff166")),
                                },
                        },
                        err:      true,
@@ -509,8 +509,8 @@ func TestValidateUglyTx(t *testing.T) {
                                                *consensus.BTMAssetID, 10000000000, 1, nil),
                                },
                                Outputs: []*types.TxOutput{
-                                       types.NewTxOutput(*consensus.BTMAssetID, 10000000000, testutil.MustDecodeHexString("00145931e1b7b65897f47845ac08fc136e0c0a4ff166")),
-                                       types.NewTxOutput(testutil.MustDecodeAsset("97575084e5161406a0977da729fbf51ad230e0ff0aec607a97e4336611c8707f"), 100, testutil.MustDecodeHexString("00145931e1b7b65897f47845ac08fc136e0c0a4ff166")),
+                                       types.NewOriginalTxOutput(*consensus.BTMAssetID, 10000000000, testutil.MustDecodeHexString("00145931e1b7b65897f47845ac08fc136e0c0a4ff166")),
+                                       types.NewOriginalTxOutput(testutil.MustDecodeAsset("97575084e5161406a0977da729fbf51ad230e0ff0aec607a97e4336611c8707f"), 100, testutil.MustDecodeHexString("00145931e1b7b65897f47845ac08fc136e0c0a4ff166")),
                                },
                        },
                        err:      true,
@@ -544,8 +544,8 @@ func TestValidateUglyTx(t *testing.T) {
                                        ),
                                },
                                Outputs: []*types.TxOutput{
-                                       types.NewTxOutput(*consensus.BTMAssetID, 9000000000, testutil.MustDecodeHexString("00145931e1b7b65897f47845ac08fc136e0c0a4ff166")),
-                                       types.NewTxOutput(testutil.MustDecodeAsset("97575084e5161406a0977da729fbf51ad230e0ff0aec607a97e4336611c8707f"), 10000000000, testutil.MustDecodeHexString("00145931e1b7b65897f47845ac08fc136e0c0a4ff166")),
+                                       types.NewOriginalTxOutput(*consensus.BTMAssetID, 9000000000, testutil.MustDecodeHexString("00145931e1b7b65897f47845ac08fc136e0c0a4ff166")),
+                                       types.NewOriginalTxOutput(testutil.MustDecodeAsset("97575084e5161406a0977da729fbf51ad230e0ff0aec607a97e4336611c8707f"), 10000000000, testutil.MustDecodeHexString("00145931e1b7b65897f47845ac08fc136e0c0a4ff166")),
                                },
                        },
                        err:      true,
@@ -573,8 +573,8 @@ func TestValidateUglyTx(t *testing.T) {
                                                testutil.MustDecodeAsset("97575084e5161406a0977da729fbf51ad230e0ff0aec607a97e4336611c8707f"), 100, 0, nil),
                                },
                                Outputs: []*types.TxOutput{
-                                       types.NewTxOutput(*consensus.BTMAssetID, 9000000000, testutil.MustDecodeHexString("00145931e1b7b65897f47845ac08fc136e0c0a4ff166")),
-                                       types.NewTxOutput(testutil.MustDecodeAsset("97575084e5161406a0977da729fbf51ad230e0ff0aec607a97e4336611c8707f"), 100, testutil.MustDecodeHexString("00145931e1b7b65897f47845ac08fc136e0c0a4ff166")),
+                                       types.NewOriginalTxOutput(*consensus.BTMAssetID, 9000000000, testutil.MustDecodeHexString("00145931e1b7b65897f47845ac08fc136e0c0a4ff166")),
+                                       types.NewOriginalTxOutput(testutil.MustDecodeAsset("97575084e5161406a0977da729fbf51ad230e0ff0aec607a97e4336611c8707f"), 100, testutil.MustDecodeHexString("00145931e1b7b65897f47845ac08fc136e0c0a4ff166")),
                                },
                        },
                        err:      true,
@@ -592,7 +592,7 @@ func TestValidateUglyTx(t *testing.T) {
                                                *consensus.BTMAssetID, 10000000000, 0, nil),
                                },
                                Outputs: []*types.TxOutput{
-                                       types.NewTxOutput(*consensus.BTMAssetID, math.MaxUint64, testutil.MustDecodeHexString("00145931e1b7b65897f47845ac08fc136e0c0a4ff166")),
+                                       types.NewOriginalTxOutput(*consensus.BTMAssetID, math.MaxUint64, testutil.MustDecodeHexString("00145931e1b7b65897f47845ac08fc136e0c0a4ff166")),
                                },
                        },
                        err:      true,
@@ -610,7 +610,7 @@ func TestValidateUglyTx(t *testing.T) {
                                                *consensus.BTMAssetID, 10000000000, 0, nil),
                                },
                                Outputs: []*types.TxOutput{
-                                       types.NewTxOutput(*consensus.BTMAssetID, math.MaxUint64, testutil.MustDecodeHexString("6a")),
+                                       types.NewOriginalTxOutput(*consensus.BTMAssetID, math.MaxUint64, testutil.MustDecodeHexString("6a")),
                                },
                        },
                        err:      true,
@@ -631,8 +631,8 @@ func TestValidateUglyTx(t *testing.T) {
                                                testutil.MustDecodeAsset("97575084e5161406a0977da729fbf51ad230e0ff0aec607a97e4336611c8707f"), 10000000000, 1, nil),
                                },
                                Outputs: []*types.TxOutput{
-                                       types.NewTxOutput(*consensus.BTMAssetID, 9000000000, testutil.MustDecodeHexString("00145931e1b7b65897f47845ac08fc136e0c0a4ff166")),
-                                       types.NewTxOutput(*consensus.BTMAssetID, math.MaxUint64, testutil.MustDecodeHexString("00145931e1b7b65897f47845ac08fc136e0c0a4ff166")),
+                                       types.NewOriginalTxOutput(*consensus.BTMAssetID, 9000000000, testutil.MustDecodeHexString("00145931e1b7b65897f47845ac08fc136e0c0a4ff166")),
+                                       types.NewOriginalTxOutput(*consensus.BTMAssetID, math.MaxUint64, testutil.MustDecodeHexString("00145931e1b7b65897f47845ac08fc136e0c0a4ff166")),
                                },
                        },
                        err:      true,
@@ -653,8 +653,8 @@ func TestValidateUglyTx(t *testing.T) {
                                                testutil.MustDecodeAsset("97575084e5161406a0977da729fbf51ad230e0ff0aec607a97e4336611c8707f"), 10000000000, 1, nil),
                                },
                                Outputs: []*types.TxOutput{
-                                       types.NewTxOutput(*consensus.BTMAssetID, 9000000000, testutil.MustDecodeHexString("00145931e1b7b65897f47845ac08fc136e0c0a4ff166")),
-                                       types.NewTxOutput(*consensus.BTMAssetID, math.MaxUint64, testutil.MustDecodeHexString("6a")),
+                                       types.NewOriginalTxOutput(*consensus.BTMAssetID, 9000000000, testutil.MustDecodeHexString("00145931e1b7b65897f47845ac08fc136e0c0a4ff166")),
+                                       types.NewOriginalTxOutput(*consensus.BTMAssetID, math.MaxUint64, testutil.MustDecodeHexString("6a")),
                                },
                        },
                        err:      true,
@@ -672,9 +672,9 @@ func TestValidateUglyTx(t *testing.T) {
                                                *consensus.BTMAssetID, 100000000, 0, nil),
                                },
                                Outputs: []*types.TxOutput{
-                                       types.NewTxOutput(*consensus.BTMAssetID, 18446744073609551616, testutil.MustDecodeHexString("00145931e1b7b65897f47845ac08fc136e0c0a4ff166")),
-                                       types.NewTxOutput(*consensus.BTMAssetID, 18446744073609551616, testutil.MustDecodeHexString("00145931e1b7b65897f47845ac08fc136e0c0a4ff166")),
-                                       types.NewTxOutput(*consensus.BTMAssetID, 290000000, testutil.MustDecodeHexString("00145931e1b7b65897f47845ac08fc136e0c0a4ff166")),
+                                       types.NewOriginalTxOutput(*consensus.BTMAssetID, 18446744073609551616, testutil.MustDecodeHexString("00145931e1b7b65897f47845ac08fc136e0c0a4ff166")),
+                                       types.NewOriginalTxOutput(*consensus.BTMAssetID, 18446744073609551616, testutil.MustDecodeHexString("00145931e1b7b65897f47845ac08fc136e0c0a4ff166")),
+                                       types.NewOriginalTxOutput(*consensus.BTMAssetID, 290000000, testutil.MustDecodeHexString("00145931e1b7b65897f47845ac08fc136e0c0a4ff166")),
                                },
                        },
                        err:      true,
@@ -692,7 +692,7 @@ func TestValidateUglyTx(t *testing.T) {
                                                *consensus.BTMAssetID, 10000000000, 0, testutil.MustDecodeHexString("00140876db6ca8f4542a836f0edd42b87d095d081182")), // wrong control program
                                },
                                Outputs: []*types.TxOutput{
-                                       types.NewTxOutput(*consensus.BTMAssetID, 9000000000, testutil.MustDecodeHexString("00145931e1b7b65897f47845ac08fc136e0c0a4ff166")),
+                                       types.NewOriginalTxOutput(*consensus.BTMAssetID, 9000000000, testutil.MustDecodeHexString("00145931e1b7b65897f47845ac08fc136e0c0a4ff166")),
                                },
                        },
                        err:      true,
@@ -710,7 +710,7 @@ func TestValidateUglyTx(t *testing.T) {
                                                *consensus.BTMAssetID, 10000000000, 0, testutil.MustDecodeHexString("00200824e931fb806bd77fdcd291aad3bd0a4493443a4120062bd659e64a3e0bac66")), // wrong control program
                                },
                                Outputs: []*types.TxOutput{
-                                       types.NewTxOutput(*consensus.BTMAssetID, 9000000000, testutil.MustDecodeHexString("00145931e1b7b65897f47845ac08fc136e0c0a4ff166")),
+                                       types.NewOriginalTxOutput(*consensus.BTMAssetID, 9000000000, testutil.MustDecodeHexString("00145931e1b7b65897f47845ac08fc136e0c0a4ff166")),
                                },
                        },
                        err:      true,
@@ -731,8 +731,8 @@ func TestValidateUglyTx(t *testing.T) {
                                                testutil.MustDecodeAsset("97575084e5161406a0977da729fbf51ad230e0ff0aec607a97e4336611c8707f"), 10000000000, 1, testutil.MustDecodeHexString("00140876db6ca8f4542a836f0edd42b87d095d081182")), // wrong control program
                                },
                                Outputs: []*types.TxOutput{
-                                       types.NewTxOutput(*consensus.BTMAssetID, 9000000000, testutil.MustDecodeHexString("00145931e1b7b65897f47845ac08fc136e0c0a4ff166")),
-                                       types.NewTxOutput(testutil.MustDecodeAsset("97575084e5161406a0977da729fbf51ad230e0ff0aec607a97e4336611c8707f"), 10000000000, testutil.MustDecodeHexString("00145931e1b7b65897f47845ac08fc136e0c0a4ff166")),
+                                       types.NewOriginalTxOutput(*consensus.BTMAssetID, 9000000000, testutil.MustDecodeHexString("00145931e1b7b65897f47845ac08fc136e0c0a4ff166")),
+                                       types.NewOriginalTxOutput(testutil.MustDecodeAsset("97575084e5161406a0977da729fbf51ad230e0ff0aec607a97e4336611c8707f"), 10000000000, testutil.MustDecodeHexString("00145931e1b7b65897f47845ac08fc136e0c0a4ff166")),
                                },
                        },
                        err:      true,
@@ -753,8 +753,8 @@ func TestValidateUglyTx(t *testing.T) {
                                                testutil.MustDecodeAsset("97575084e5161406a0977da729fbf51ad230e0ff0aec607a97e4336611c8707f"), 10000000000, 1, testutil.MustDecodeHexString("00140876db6ca8f4542a836f0edd42b87d095d081182")), // wrong control program
                                },
                                Outputs: []*types.TxOutput{
-                                       types.NewTxOutput(*consensus.BTMAssetID, 9000000000, testutil.MustDecodeHexString("00145931e1b7b65897f47845ac08fc136e0c0a4ff166")),
-                                       types.NewTxOutput(testutil.MustDecodeAsset("97575084e5161406a0977da729fbf51ad230e0ff0aec607a97e4336611c8707f"), 10000000000, testutil.MustDecodeHexString("00145931e1b7b65897f47845ac08fc136e0c0a4ff166")),
+                                       types.NewOriginalTxOutput(*consensus.BTMAssetID, 9000000000, testutil.MustDecodeHexString("00145931e1b7b65897f47845ac08fc136e0c0a4ff166")),
+                                       types.NewOriginalTxOutput(testutil.MustDecodeAsset("97575084e5161406a0977da729fbf51ad230e0ff0aec607a97e4336611c8707f"), 10000000000, testutil.MustDecodeHexString("00145931e1b7b65897f47845ac08fc136e0c0a4ff166")),
                                },
                        },
                        err:      true,
@@ -780,8 +780,8 @@ func TestValidateUglyTx(t *testing.T) {
                                        ),
                                },
                                Outputs: []*types.TxOutput{
-                                       types.NewTxOutput(*consensus.BTMAssetID, 9000000000, testutil.MustDecodeHexString("00145931e1b7b65897f47845ac08fc136e0c0a4ff166")),
-                                       types.NewTxOutput(testutil.MustDecodeAsset("bf5f8da2334590ee095148ccdcf4d806b26a47a6d9e9e857ef6c2de79aee4f14"), 10000000000, testutil.MustDecodeHexString("00145931e1b7b65897f47845ac08fc136e0c0a4ff166")),
+                                       types.NewOriginalTxOutput(*consensus.BTMAssetID, 9000000000, testutil.MustDecodeHexString("00145931e1b7b65897f47845ac08fc136e0c0a4ff166")),
+                                       types.NewOriginalTxOutput(testutil.MustDecodeAsset("bf5f8da2334590ee095148ccdcf4d806b26a47a6d9e9e857ef6c2de79aee4f14"), 10000000000, testutil.MustDecodeHexString("00145931e1b7b65897f47845ac08fc136e0c0a4ff166")),
                                },
                        },
                        err:      true,
@@ -807,8 +807,8 @@ func TestValidateUglyTx(t *testing.T) {
                                        ),
                                },
                                Outputs: []*types.TxOutput{
-                                       types.NewTxOutput(*consensus.BTMAssetID, 9000000000, testutil.MustDecodeHexString("00145931e1b7b65897f47845ac08fc136e0c0a4ff166")),
-                                       types.NewTxOutput(testutil.MustDecodeAsset("776f0a421e9176a03061d388aff4ab3b1bcd32e53a090d593a466706c69e3d3f"), 10000000000, testutil.MustDecodeHexString("00145931e1b7b65897f47845ac08fc136e0c0a4ff166")),
+                                       types.NewOriginalTxOutput(*consensus.BTMAssetID, 9000000000, testutil.MustDecodeHexString("00145931e1b7b65897f47845ac08fc136e0c0a4ff166")),
+                                       types.NewOriginalTxOutput(testutil.MustDecodeAsset("776f0a421e9176a03061d388aff4ab3b1bcd32e53a090d593a466706c69e3d3f"), 10000000000, testutil.MustDecodeHexString("00145931e1b7b65897f47845ac08fc136e0c0a4ff166")),
                                },
                        },
                        err:      true,
@@ -829,7 +829,7 @@ func TestValidateUglyTx(t *testing.T) {
                                                *consensus.BTMAssetID, 10000000000, 0, testutil.MustDecodeHexString("001420a1af4fc11399e6cd7253abf1bbd4d0af17daad")),
                                },
                                Outputs: []*types.TxOutput{
-                                       types.NewTxOutput(*consensus.BTMAssetID, 19000000000, testutil.MustDecodeHexString("00145931e1b7b65897f47845ac08fc136e0c0a4ff166")),
+                                       types.NewOriginalTxOutput(*consensus.BTMAssetID, 19000000000, testutil.MustDecodeHexString("00145931e1b7b65897f47845ac08fc136e0c0a4ff166")),
                                },
                        },
                        err:      true,
@@ -855,8 +855,8 @@ func TestValidateUglyTx(t *testing.T) {
                                                testutil.MustDecodeAsset("97575084e5161406a0977da729fbf51ad230e0ff0aec607a97e4336611c8707f"), 10000000000, 0, testutil.MustDecodeHexString("001420a1af4fc11399e6cd7253abf1bbd4d0af17daad")),
                                },
                                Outputs: []*types.TxOutput{
-                                       types.NewTxOutput(*consensus.BTMAssetID, 9000000000, testutil.MustDecodeHexString("00145931e1b7b65897f47845ac08fc136e0c0a4ff166")),
-                                       types.NewTxOutput(testutil.MustDecodeAsset("97575084e5161406a0977da729fbf51ad230e0ff0aec607a97e4336611c8707f"), 20000000000, testutil.MustDecodeHexString("00145931e1b7b65897f47845ac08fc136e0c0a4ff166")),
+                                       types.NewOriginalTxOutput(*consensus.BTMAssetID, 9000000000, testutil.MustDecodeHexString("00145931e1b7b65897f47845ac08fc136e0c0a4ff166")),
+                                       types.NewOriginalTxOutput(testutil.MustDecodeAsset("97575084e5161406a0977da729fbf51ad230e0ff0aec607a97e4336611c8707f"), 20000000000, testutil.MustDecodeHexString("00145931e1b7b65897f47845ac08fc136e0c0a4ff166")),
                                },
                        },
                        err:      true,
index 3c9b77f..78530cc 100644 (file)
@@ -32,8 +32,8 @@ func TestValidateTx(t *testing.T) {
                                                *consensus.BTMAssetID, 21819700000, 0, mustDecodeString("001411ef7695d46e1f9288d996c3daa6ff4d956ac355")),
                                },
                                Outputs: []*types.TxOutput{
-                                       types.NewTxOutput(*consensus.BTMAssetID, 11818900000, mustDecodeString("001415c956112c2b46354690e36051803cc9d5a8f26b")),
-                                       types.NewTxOutput(*consensus.BTMAssetID, 10000000000, mustDecodeString("00149c9dd93184cc34ac5d47c145c5af3df852235aad")),
+                                       types.NewOriginalTxOutput(*consensus.BTMAssetID, 11818900000, mustDecodeString("001415c956112c2b46354690e36051803cc9d5a8f26b")),
+                                       types.NewOriginalTxOutput(*consensus.BTMAssetID, 10000000000, mustDecodeString("00149c9dd93184cc34ac5d47c145c5af3df852235aad")),
                                },
                        },
                        gasValid: true,
@@ -61,9 +61,9 @@ func TestValidateTx(t *testing.T) {
                                                *consensus.BTMAssetID, 99439999900, 2, mustDecodeString("001419f79910f29df2ef80ec10d24c78e2009ed19302")),
                                },
                                Outputs: []*types.TxOutput{
-                                       types.NewTxOutput(*consensus.BTMAssetID, 1818900000, mustDecodeString("00145931e1b7b65897f47845ac08fc136e0c0a4ff166")),
-                                       types.NewTxOutput(*consensus.BTMAssetID, 89439999900, mustDecodeString("0014ca1f877c2787f746a4473adac932171dd18d55d7")),
-                                       types.NewTxOutput(*consensus.BTMAssetID, 19900000000, mustDecodeString("00145ade29df622cc68d0473aa1a20fb89690451c66e")),
+                                       types.NewOriginalTxOutput(*consensus.BTMAssetID, 1818900000, mustDecodeString("00145931e1b7b65897f47845ac08fc136e0c0a4ff166")),
+                                       types.NewOriginalTxOutput(*consensus.BTMAssetID, 89439999900, mustDecodeString("0014ca1f877c2787f746a4473adac932171dd18d55d7")),
+                                       types.NewOriginalTxOutput(*consensus.BTMAssetID, 19900000000, mustDecodeString("00145ade29df622cc68d0473aa1a20fb89690451c66e")),
                                },
                        },
                        gasValid: true,
@@ -91,9 +91,9 @@ func TestValidateTx(t *testing.T) {
                                                *consensus.BTMAssetID, 99960000000, 1, mustDecodeString("0014cfbccfac5018ad4b4bfbcb1fab834e3c85037460")),
                                },
                                Outputs: []*types.TxOutput{
-                                       types.NewTxOutput(*consensus.BTMAssetID, 1818900000, mustDecodeString("00144b5637cc25b188136f440484f210541fa2a7ce64")),
-                                       types.NewTxOutput(*consensus.BTMAssetID, 89960000000, mustDecodeString("0014c7271a69dba57331b36221118dfeb1b1793933df")),
-                                       types.NewTxOutput(*consensus.BTMAssetID, 20000000000, mustDecodeString("0014447e597c1c326ad1a639f8023d3f87ae22a4e049")),
+                                       types.NewOriginalTxOutput(*consensus.BTMAssetID, 1818900000, mustDecodeString("00144b5637cc25b188136f440484f210541fa2a7ce64")),
+                                       types.NewOriginalTxOutput(*consensus.BTMAssetID, 89960000000, mustDecodeString("0014c7271a69dba57331b36221118dfeb1b1793933df")),
+                                       types.NewOriginalTxOutput(*consensus.BTMAssetID, 20000000000, mustDecodeString("0014447e597c1c326ad1a639f8023d3f87ae22a4e049")),
                                },
                        },
                        gasValid: false,
@@ -114,8 +114,8 @@ func TestValidateTx(t *testing.T) {
                                                *consensus.BTMAssetID, 89220000000, 1, mustDecodeString("0020ff726649e34c921ff61a97090fc62054f339597acfc710197bb0133e18a19c5c")),
                                },
                                Outputs: []*types.TxOutput{
-                                       types.NewTxOutput(*consensus.BTMAssetID, 79220000000, mustDecodeString("00206205ec178dc1ac6ea05ea01bb0fcda6aa978173026fa75204a101bdad7bd6b48")),
-                                       types.NewTxOutput(*consensus.BTMAssetID, 9900000000, mustDecodeString("0014414eb62abda9a9191f9cba5d7e38d92f3e91e268")),
+                                       types.NewOriginalTxOutput(*consensus.BTMAssetID, 79220000000, mustDecodeString("00206205ec178dc1ac6ea05ea01bb0fcda6aa978173026fa75204a101bdad7bd6b48")),
+                                       types.NewOriginalTxOutput(*consensus.BTMAssetID, 9900000000, mustDecodeString("0014414eb62abda9a9191f9cba5d7e38d92f3e91e268")),
                                },
                        },
                        gasValid: true,
@@ -136,8 +136,8 @@ func TestValidateTx(t *testing.T) {
                                                *consensus.BTMAssetID, 11818900000, 0, mustDecodeString("0014e6e1f8b11f1cfb7609037003b90f64837afd272c")),
                                },
                                Outputs: []*types.TxOutput{
-                                       types.NewTxOutput(*consensus.BTMAssetID, 11718900000, mustDecodeString("0014085a02ecdf934a56343aa59a3dec9d9feb86ee43")),
-                                       types.NewTxOutput(*consensus.BTMAssetID, 90000000, []byte{byte(vm.OP_FAIL)}),
+                                       types.NewOriginalTxOutput(*consensus.BTMAssetID, 11718900000, mustDecodeString("0014085a02ecdf934a56343aa59a3dec9d9feb86ee43")),
+                                       types.NewOriginalTxOutput(*consensus.BTMAssetID, 90000000, []byte{byte(vm.OP_FAIL)}),
                                },
                        },
                        gasValid: true,
@@ -167,9 +167,9 @@ func TestValidateTx(t *testing.T) {
                                        ),
                                },
                                Outputs: []*types.TxOutput{
-                                       types.NewTxOutput(*consensus.BTMAssetID, 1818900000, mustDecodeString("00147d6b00edfbbc758a5da6130a5fa1a4cfec8422c3")),
-                                       types.NewTxOutput(*consensus.BTMAssetID, 9900000000, []byte{byte(vm.OP_FAIL)}),
-                                       types.NewTxOutput(bc.AssetID{V0: 8879089148261671560, V1: 16875272676673176923, V2: 14627348561007036053, V3: 5774520766896450836}, 10000000000, mustDecodeString("0014447e597c1c326ad1a639f8023d3f87ae22a4e049")),
+                                       types.NewOriginalTxOutput(*consensus.BTMAssetID, 1818900000, mustDecodeString("00147d6b00edfbbc758a5da6130a5fa1a4cfec8422c3")),
+                                       types.NewOriginalTxOutput(*consensus.BTMAssetID, 9900000000, []byte{byte(vm.OP_FAIL)}),
+                                       types.NewOriginalTxOutput(bc.AssetID{V0: 8879089148261671560, V1: 16875272676673176923, V2: 14627348561007036053, V3: 5774520766896450836}, 10000000000, mustDecodeString("0014447e597c1c326ad1a639f8023d3f87ae22a4e049")),
                                },
                        },
                        gasValid: true,
@@ -199,9 +199,9 @@ func TestValidateTx(t *testing.T) {
                                        ),
                                },
                                Outputs: []*types.TxOutput{
-                                       types.NewTxOutput(*consensus.BTMAssetID, 1818900000, mustDecodeString("001482b7991d64d001009b673ffe3ca2b35eab14f142")),
-                                       types.NewTxOutput(*consensus.BTMAssetID, 10000000000, []byte{byte(vm.OP_FAIL)}),
-                                       types.NewTxOutput(bc.AssetID{V0: 8879089148261671560, V1: 16875272676673176923, V2: 14627348561007036053, V3: 5774520766896450836}, 10000000000, mustDecodeString("0014447e597c1c326ad1a639f8023d3f87ae22a4e049")),
+                                       types.NewOriginalTxOutput(*consensus.BTMAssetID, 1818900000, mustDecodeString("001482b7991d64d001009b673ffe3ca2b35eab14f142")),
+                                       types.NewOriginalTxOutput(*consensus.BTMAssetID, 10000000000, []byte{byte(vm.OP_FAIL)}),
+                                       types.NewOriginalTxOutput(bc.AssetID{V0: 8879089148261671560, V1: 16875272676673176923, V2: 14627348561007036053, V3: 5774520766896450836}, 10000000000, mustDecodeString("0014447e597c1c326ad1a639f8023d3f87ae22a4e049")),
                                },
                        },
                        gasValid: false,
@@ -222,8 +222,8 @@ func TestValidateTx(t *testing.T) {
                                                *consensus.BTMAssetID, 21819700000, 0, mustDecodeString("001411ef7695d46e1f9288d996c3daa6ff4d956ac355")),
                                },
                                Outputs: []*types.TxOutput{
-                                       types.NewTxOutput(*consensus.BTMAssetID, 11818900000, mustDecodeString("001415c956112c2b46354690e36051803cc9d5a8f26b")),
-                                       types.NewTxOutput(*consensus.BTMAssetID, 10000000000, mustDecodeString("00149c9dd93184cc34ac5d47c145c5af3df852235aad")),
+                                       types.NewOriginalTxOutput(*consensus.BTMAssetID, 11818900000, mustDecodeString("001415c956112c2b46354690e36051803cc9d5a8f26b")),
+                                       types.NewOriginalTxOutput(*consensus.BTMAssetID, 10000000000, mustDecodeString("00149c9dd93184cc34ac5d47c145c5af3df852235aad")),
                                },
                        },
                        gasValid: false,
@@ -251,11 +251,11 @@ func TestValidateTx(t *testing.T) {
                                                *consensus.BTMAssetID, 9800000000, 2, mustDecodeString("0014cb9f2391bafe2bc1159b2c4c8a0f17ba1b4dd94e")),
                                },
                                Outputs: []*types.TxOutput{
-                                       types.NewTxOutput(
+                                       types.NewOriginalTxOutput(
                                                bc.AssetID{V0: 986236576456443635, V1: 13806502593573493203, V2: 9657495453304566675, V3: 15226142438973879401},
                                                1000,
                                                mustDecodeString("001437e1aec83a4e6587ca9609e4e5aa728db7007449")),
-                                       types.NewTxOutput(*consensus.BTMAssetID, 9750000000, mustDecodeString("0014ec75fda5c727cb0d41137ab62afbf9070a405744")),
+                                       types.NewOriginalTxOutput(*consensus.BTMAssetID, 9750000000, mustDecodeString("0014ec75fda5c727cb0d41137ab62afbf9070a405744")),
                                },
                        },
                        gasValid: true,
index d143da7..e8f3c91 100644 (file)
@@ -237,7 +237,7 @@ func TestOverflow(t *testing.T) {
                }
 
                for _, amount := range outputs {
-                       txOutput := types.NewTxOutput(*consensus.BTMAssetID, amount, ctrlProgram)
+                       txOutput := types.NewOriginalTxOutput(*consensus.BTMAssetID, amount, ctrlProgram)
                        txOutputs = append(txOutputs, txOutput)
                }
 
@@ -323,7 +323,7 @@ func TestTxValidation(t *testing.T) {
 
        addCoinbase := func(assetID *bc.AssetID, amount uint64, arbitrary []byte) {
                coinbase := bc.NewCoinbase(arbitrary)
-               txOutput := types.NewTxOutput(*assetID, amount, []byte{byte(vm.OP_TRUE)})
+               txOutput := types.NewOriginalTxOutput(*assetID, amount, []byte{byte(vm.OP_TRUE)})
                muxID := getMuxID(tx)
                coinbase.SetDestination(muxID, &txOutput.AssetAmount, uint64(len(mux.Sources)))
                coinbaseID := bc.EntryID(coinbase)
@@ -701,7 +701,7 @@ func TestCoinbase(t *testing.T) {
                        types.NewCoinbaseInput(nil),
                },
                Outputs: []*types.TxOutput{
-                       types.NewTxOutput(*consensus.BTMAssetID, 888, cp),
+                       types.NewOriginalTxOutput(*consensus.BTMAssetID, 888, cp),
                },
        })
 
@@ -731,7 +731,7 @@ func TestCoinbase(t *testing.T) {
                                                        types.NewCoinbaseInput(nil),
                                                },
                                                Outputs: []*types.TxOutput{
-                                                       types.NewTxOutput(*consensus.BTMAssetID, 888, cp),
+                                                       types.NewOriginalTxOutput(*consensus.BTMAssetID, 888, cp),
                                                },
                                        }),
                                },
@@ -752,8 +752,8 @@ func TestCoinbase(t *testing.T) {
                                                        types.NewSpendInput([][]byte{}, *newHash(8), *consensus.BTMAssetID, 100000000, 0, cp),
                                                },
                                                Outputs: []*types.TxOutput{
-                                                       types.NewTxOutput(*consensus.BTMAssetID, 888, cp),
-                                                       types.NewTxOutput(*consensus.BTMAssetID, 90000000, cp),
+                                                       types.NewOriginalTxOutput(*consensus.BTMAssetID, 888, cp),
+                                                       types.NewOriginalTxOutput(*consensus.BTMAssetID, 90000000, cp),
                                                },
                                        }),
                                },
@@ -774,8 +774,8 @@ func TestCoinbase(t *testing.T) {
                                                        types.NewCoinbaseInput(nil),
                                                },
                                                Outputs: []*types.TxOutput{
-                                                       types.NewTxOutput(*consensus.BTMAssetID, 888, cp),
-                                                       types.NewTxOutput(*consensus.BTMAssetID, 90000000, cp),
+                                                       types.NewOriginalTxOutput(*consensus.BTMAssetID, 888, cp),
+                                                       types.NewOriginalTxOutput(*consensus.BTMAssetID, 90000000, cp),
                                                },
                                        }),
                                },
@@ -795,8 +795,8 @@ func TestCoinbase(t *testing.T) {
                                                        types.NewSpendInput([][]byte{}, *newHash(8), *consensus.BTMAssetID, 100000000, 0, cp),
                                                },
                                                Outputs: []*types.TxOutput{
-                                                       types.NewTxOutput(*consensus.BTMAssetID, 888, cp),
-                                                       types.NewTxOutput(*consensus.BTMAssetID, 90000000, cp),
+                                                       types.NewOriginalTxOutput(*consensus.BTMAssetID, 888, cp),
+                                                       types.NewOriginalTxOutput(*consensus.BTMAssetID, 90000000, cp),
                                                },
                                        }),
                                },
@@ -816,8 +816,8 @@ func TestCoinbase(t *testing.T) {
                                                        types.NewSpendInput([][]byte{}, *newHash(8), *consensus.BTMAssetID, 100000000, 0, retire),
                                                },
                                                Outputs: []*types.TxOutput{
-                                                       types.NewTxOutput(*consensus.BTMAssetID, 888, cp),
-                                                       types.NewTxOutput(*consensus.BTMAssetID, 90000000, cp),
+                                                       types.NewOriginalTxOutput(*consensus.BTMAssetID, 888, cp),
+                                                       types.NewOriginalTxOutput(*consensus.BTMAssetID, 90000000, cp),
                                                },
                                        }),
                                },
@@ -841,7 +841,7 @@ func TestCoinbase(t *testing.T) {
 }
 
 func TestRuleAA(t *testing.T) {
-       testData := "070100040161015f9bc47dda88eee18c7433340c16e054cabee4318a8d638e873be19e979df81dc7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0e3f9f5c80e01011600147c7662d92bd5e77454736f94731c60a6e9cbc69f6302404a17a5995b8163ee448719b462a5694b22a35522dd9883333fd462cc3d0aabf049445c5cbb911a40e1906a5bea99b23b1a79e215eeb1a818d8b1dd27e06f3004200530c4bc9dd3cbf679fec6d824ce5c37b0c8dab88b67bcae3b000924b7dce9940160015ee334d4fe18398f0232d2aca7050388ce4ee5ae82c8148d7f0cea748438b65135ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80ace6842001011600147c7662d92bd5e77454736f94731c60a6e9cbc69f6302404a17a5995b8163ee448719b462a5694b22a35522dd9883333fd462cc3d0aabf049445c5cbb911a40e1906a5bea99b23b1a79e215eeb1a818d8b1dd27e06f3004200530c4bc9dd3cbf679fec6d824ce5c37b0c8dab88b67bcae3b000924b7dce9940161015f9bc47dda88eee18c7433340c16e054cabee4318a8d638e873be19e979df81dc7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0e3f9f5c80e01011600147c7662d92bd5e77454736f94731c60a6e9cbc69f63024062c29b20941e7f762c3afae232f61d8dac1c544825931e391408c6715c408ef69f494a1b3b61ce380ddee0c8b18ecac2b46ef96a62eebb6ec40f9f545410870a200530c4bc9dd3cbf679fec6d824ce5c37b0c8dab88b67bcae3b000924b7dce9940160015ee334d4fe18398f0232d2aca7050388ce4ee5ae82c8148d7f0cea748438b65135ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80ace6842001011600147c7662d92bd5e77454736f94731c60a6e9cbc69f630240e443d66c75b4d5fa71676d60b0b067e6941f06349f31e5f73a7d51a73f5797632b2e01e8584cd1c8730dc16df075866b0c796bd7870182e2da4b37188208fe02200530c4bc9dd3cbf679fec6d824ce5c37b0c8dab88b67bcae3b000924b7dce99402013effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08ba3fae80e01160014aac0345165045e612b3d7363f39a372bead80ce700013effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08fe0fae80e01160014aac0345165045e612b3d7363f39a372bead80ce700"
+       testData := "070100040161015f9bc47dda88eee18c7433340c16e054cabee4318a8d638e873be19e979df81dc7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0e3f9f5c80e01011600147c7662d92bd5e77454736f94731c60a6e9cbc69f6302404a17a5995b8163ee448719b462a5694b22a35522dd9883333fd462cc3d0aabf049445c5cbb911a40e1906a5bea99b23b1a79e215eeb1a818d8b1dd27e06f3004200530c4bc9dd3cbf679fec6d824ce5c37b0c8dab88b67bcae3b000924b7dce9940160015ee334d4fe18398f0232d2aca7050388ce4ee5ae82c8148d7f0cea748438b65135ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80ace6842001011600147c7662d92bd5e77454736f94731c60a6e9cbc69f6302404a17a5995b8163ee448719b462a5694b22a35522dd9883333fd462cc3d0aabf049445c5cbb911a40e1906a5bea99b23b1a79e215eeb1a818d8b1dd27e06f3004200530c4bc9dd3cbf679fec6d824ce5c37b0c8dab88b67bcae3b000924b7dce9940161015f9bc47dda88eee18c7433340c16e054cabee4318a8d638e873be19e979df81dc7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0e3f9f5c80e01011600147c7662d92bd5e77454736f94731c60a6e9cbc69f63024062c29b20941e7f762c3afae232f61d8dac1c544825931e391408c6715c408ef69f494a1b3b61ce380ddee0c8b18ecac2b46ef96a62eebb6ec40f9f545410870a200530c4bc9dd3cbf679fec6d824ce5c37b0c8dab88b67bcae3b000924b7dce9940160015ee334d4fe18398f0232d2aca7050388ce4ee5ae82c8148d7f0cea748438b65135ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80ace6842001011600147c7662d92bd5e77454736f94731c60a6e9cbc69f630240e443d66c75b4d5fa71676d60b0b067e6941f06349f31e5f73a7d51a73f5797632b2e01e8584cd1c8730dc16df075866b0c796bd7870182e2da4b37188208fe02200530c4bc9dd3cbf679fec6d824ce5c37b0c8dab88b67bcae3b000924b7dce9940201003effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08ba3fae80e01160014aac0345165045e612b3d7363f39a372bead80ce70001003effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08fe0fae80e01160014aac0345165045e612b3d7363f39a372bead80ce700"
        tx := types.Tx{}
        if err := tx.UnmarshalText([]byte(testData)); err != nil {
                t.Errorf("fail on unmarshal txData: %s", err)
@@ -922,7 +922,7 @@ func TestTimeRange(t *testing.T) {
                        mockGasTxInput(),
                },
                Outputs: []*types.TxOutput{
-                       types.NewTxOutput(*consensus.BTMAssetID, 1, []byte{0x6a}),
+                       types.NewOriginalTxOutput(*consensus.BTMAssetID, 1, []byte{0x6a}),
                },
        })
 
@@ -1124,8 +1124,8 @@ func sample(tb testing.TB, in *txFixture) *txFixture {
                }
 
                result.txOutputs = []*types.TxOutput{
-                       types.NewTxOutput(result.assetID, 25, cp1),
-                       types.NewTxOutput(result.assetID, 45, cp2),
+                       types.NewOriginalTxOutput(result.assetID, 25, cp1),
+                       types.NewOriginalTxOutput(result.assetID, 45, cp2),
                }
        }
 
index 19014b9..a7afc86 100644 (file)
@@ -17,11 +17,11 @@ func TestCheckOutput(t *testing.T) {
                        types.NewIssuanceInput(nil, 6, []byte("issueprog"), nil, nil),
                },
                Outputs: []*types.TxOutput{
-                       types.NewTxOutput(bc.NewAssetID([32]byte{3}), 8, []byte("wrongprog")),
-                       types.NewTxOutput(bc.NewAssetID([32]byte{3}), 8, []byte("controlprog")),
-                       types.NewTxOutput(bc.NewAssetID([32]byte{2}), 8, []byte("controlprog")),
-                       types.NewTxOutput(bc.NewAssetID([32]byte{2}), 7, []byte("controlprog")),
-                       types.NewTxOutput(bc.NewAssetID([32]byte{2}), 7, []byte("controlprog")),
+                       types.NewOriginalTxOutput(bc.NewAssetID([32]byte{3}), 8, []byte("wrongprog")),
+                       types.NewOriginalTxOutput(bc.NewAssetID([32]byte{3}), 8, []byte("controlprog")),
+                       types.NewOriginalTxOutput(bc.NewAssetID([32]byte{2}), 8, []byte("controlprog")),
+                       types.NewOriginalTxOutput(bc.NewAssetID([32]byte{2}), 7, []byte("controlprog")),
+                       types.NewOriginalTxOutput(bc.NewAssetID([32]byte{2}), 7, []byte("controlprog")),
                },
        })
 
index 0b47dfb..d05fbfe 100644 (file)
@@ -208,7 +208,7 @@ func (t *ctTransaction) createTransaction(ctx *chainTestContext, txs []*types.Tx
        }
 
        for _, amount := range t.Outputs {
-               output := types.NewTxOutput(*consensus.BTMAssetID, amount, []byte{byte(vm.OP_TRUE)})
+               output := types.NewOriginalTxOutput(*consensus.BTMAssetID, amount, []byte{byte(vm.OP_TRUE)})
                if err := builder.AddOutput(output); err != nil {
                        return nil, err
                }
index b4a5344..36d23c6 100644 (file)
@@ -51,7 +51,7 @@ func init() {
                                                                types.NewCoinbaseInput(testutil.MustDecodeHexString("0031")),
                                                        },
                                                        Outputs: []*types.TxOutput{
-                                                               types.NewTxOutput(*consensus.BTMAssetID, 41250000000, testutil.MustDecodeHexString("0014024bb9bfc639bdac292ff9ceb41b5c6f5a970eab")),
+                                                               types.NewOriginalTxOutput(*consensus.BTMAssetID, 41250000000, testutil.MustDecodeHexString("0014024bb9bfc639bdac292ff9ceb41b5c6f5a970eab")),
                                                        },
                                                }),
                                        },
@@ -75,7 +75,7 @@ func init() {
                                                                types.NewCoinbaseInput(testutil.MustDecodeHexString("0031")),
                                                        },
                                                        Outputs: []*types.TxOutput{
-                                                               types.NewTxOutput(*consensus.BTMAssetID, 41250000000, testutil.MustDecodeHexString("00143d05e891b165b165afefa2e861e83a9745f80d8c")),
+                                                               types.NewOriginalTxOutput(*consensus.BTMAssetID, 41250000000, testutil.MustDecodeHexString("00143d05e891b165b165afefa2e861e83a9745f80d8c")),
                                                        },
                                                }),
                                        },
@@ -103,7 +103,7 @@ func init() {
                                                                types.NewCoinbaseInput(testutil.MustDecodeHexString("0032")),
                                                        },
                                                        Outputs: []*types.TxOutput{
-                                                               types.NewTxOutput(*consensus.BTMAssetID, 41250000000, testutil.MustDecodeHexString("0014024bb9bfc639bdac292ff9ceb41b5c6f5a970eab")),
+                                                               types.NewOriginalTxOutput(*consensus.BTMAssetID, 41250000000, testutil.MustDecodeHexString("0014024bb9bfc639bdac292ff9ceb41b5c6f5a970eab")),
                                                        },
                                                }),
                                        },
@@ -129,7 +129,7 @@ func init() {
                                                                types.NewCoinbaseInput(testutil.MustDecodeHexString("0032")),
                                                        },
                                                        Outputs: []*types.TxOutput{
-                                                               types.NewTxOutput(*consensus.BTMAssetID, 41350000000, testutil.MustDecodeHexString("0014024bb9bfc639bdac292ff9ceb41b5c6f5a970eab")),
+                                                               types.NewOriginalTxOutput(*consensus.BTMAssetID, 41350000000, testutil.MustDecodeHexString("0014024bb9bfc639bdac292ff9ceb41b5c6f5a970eab")),
                                                        },
                                                }),
                                                types.NewTx(types.TxData{
@@ -147,7 +147,7 @@ func init() {
                                                                ),
                                                        },
                                                        Outputs: []*types.TxOutput{
-                                                               types.NewTxOutput(*consensus.BTMAssetID, 9900000000, testutil.MustDecodeHexString("00143d05e891b165b165afefa2e861e83a9745f80d8c")),
+                                                               types.NewOriginalTxOutput(*consensus.BTMAssetID, 9900000000, testutil.MustDecodeHexString("00143d05e891b165b165afefa2e861e83a9745f80d8c")),
                                                        },
                                                }),
                                        },
@@ -173,7 +173,7 @@ func init() {
                                                                types.NewCoinbaseInput(testutil.MustDecodeHexString("0032")),
                                                        },
                                                        Outputs: []*types.TxOutput{
-                                                               types.NewTxOutput(*consensus.BTMAssetID, 41350000000, testutil.MustDecodeHexString("0014024bb9bfc639bdac292ff9ceb41b5c6f5a970eab")),
+                                                               types.NewOriginalTxOutput(*consensus.BTMAssetID, 41350000000, testutil.MustDecodeHexString("0014024bb9bfc639bdac292ff9ceb41b5c6f5a970eab")),
                                                        },
                                                }),
                                                types.NewTx(types.TxData{
@@ -191,7 +191,7 @@ func init() {
                                                                ),
                                                        },
                                                        Outputs: []*types.TxOutput{
-                                                               types.NewTxOutput(*consensus.BTMAssetID, 9900000000, testutil.MustDecodeHexString("6a")), // retire
+                                                               types.NewOriginalTxOutput(*consensus.BTMAssetID, 9900000000, testutil.MustDecodeHexString("6a")), // retire
                                                        },
                                                }),
                                        },
@@ -217,7 +217,7 @@ func init() {
                                                                types.NewCoinbaseInput(testutil.MustDecodeHexString("0032")),
                                                        },
                                                        Outputs: []*types.TxOutput{
-                                                               types.NewTxOutput(*consensus.BTMAssetID, 41350000000, testutil.MustDecodeHexString("0014024bb9bfc639bdac292ff9ceb41b5c6f5a970eab")),
+                                                               types.NewOriginalTxOutput(*consensus.BTMAssetID, 41350000000, testutil.MustDecodeHexString("0014024bb9bfc639bdac292ff9ceb41b5c6f5a970eab")),
                                                        },
                                                }),
                                                types.NewTx(types.TxData{
@@ -242,8 +242,8 @@ func init() {
                                                                ),
                                                        },
                                                        Outputs: []*types.TxOutput{
-                                                               types.NewTxOutput(*consensus.BTMAssetID, 9900000000, testutil.MustDecodeHexString("0014024bb9bfc639bdac292ff9ceb41b5c6f5a970eab")),
-                                                               types.NewTxOutput(testutil.MustDecodeAsset("641ccb49dd38df9921a55e020d40a2323589c36ab5557f8a249ee01cc09d1836"), 10000000000, testutil.MustDecodeHexString("0014024bb9bfc639bdac292ff9ceb41b5c6f5a970eab")),
+                                                               types.NewOriginalTxOutput(*consensus.BTMAssetID, 9900000000, testutil.MustDecodeHexString("0014024bb9bfc639bdac292ff9ceb41b5c6f5a970eab")),
+                                                               types.NewOriginalTxOutput(testutil.MustDecodeAsset("641ccb49dd38df9921a55e020d40a2323589c36ab5557f8a249ee01cc09d1836"), 10000000000, testutil.MustDecodeHexString("0014024bb9bfc639bdac292ff9ceb41b5c6f5a970eab")),
                                                        },
                                                }),
                                        },
@@ -269,7 +269,7 @@ func init() {
                                                                types.NewCoinbaseInput(testutil.MustDecodeHexString("0032")),
                                                        },
                                                        Outputs: []*types.TxOutput{
-                                                               types.NewTxOutput(*consensus.BTMAssetID, 41350000000, testutil.MustDecodeHexString("0014024bb9bfc639bdac292ff9ceb41b5c6f5a970eab")),
+                                                               types.NewOriginalTxOutput(*consensus.BTMAssetID, 41350000000, testutil.MustDecodeHexString("0014024bb9bfc639bdac292ff9ceb41b5c6f5a970eab")),
                                                        },
                                                }),
                                                types.NewTx(types.TxData{
@@ -295,8 +295,8 @@ func init() {
                                                                ),
                                                        },
                                                        Outputs: []*types.TxOutput{
-                                                               types.NewTxOutput(*consensus.BTMAssetID, 9900000000, testutil.MustDecodeHexString("0014024bb9bfc639bdac292ff9ceb41b5c6f5a970eab")),
-                                                               types.NewTxOutput(testutil.MustDecodeAsset("641ccb49dd38df9921a55e020d40a2323589c36ab5557f8a249ee01cc09d1836"), 10000000000, testutil.MustDecodeHexString("0014024bb9bfc639bdac292ff9ceb41b5c6f5a970eab")),
+                                                               types.NewOriginalTxOutput(*consensus.BTMAssetID, 9900000000, testutil.MustDecodeHexString("0014024bb9bfc639bdac292ff9ceb41b5c6f5a970eab")),
+                                                               types.NewOriginalTxOutput(testutil.MustDecodeAsset("641ccb49dd38df9921a55e020d40a2323589c36ab5557f8a249ee01cc09d1836"), 10000000000, testutil.MustDecodeHexString("0014024bb9bfc639bdac292ff9ceb41b5c6f5a970eab")),
                                                        },
                                                }),
                                        },
@@ -322,7 +322,7 @@ func init() {
                                                                types.NewCoinbaseInput(testutil.MustDecodeHexString("0032")),
                                                        },
                                                        Outputs: []*types.TxOutput{
-                                                               types.NewTxOutput(*consensus.BTMAssetID, 41350000000, testutil.MustDecodeHexString("0014024bb9bfc639bdac292ff9ceb41b5c6f5a970eab")),
+                                                               types.NewOriginalTxOutput(*consensus.BTMAssetID, 41350000000, testutil.MustDecodeHexString("0014024bb9bfc639bdac292ff9ceb41b5c6f5a970eab")),
                                                        },
                                                }),
                                                types.NewTx(types.TxData{
@@ -349,8 +349,8 @@ func init() {
                                                                ),
                                                        },
                                                        Outputs: []*types.TxOutput{
-                                                               types.NewTxOutput(*consensus.BTMAssetID, 9900000000, testutil.MustDecodeHexString("0014024bb9bfc639bdac292ff9ceb41b5c6f5a970eab")),
-                                                               types.NewTxOutput(testutil.MustDecodeAsset("641ccb49dd38df9921a55e020d40a2323589c36ab5557f8a249ee01cc09d1836"), 10000000000, testutil.MustDecodeHexString("0014024bb9bfc639bdac292ff9ceb41b5c6f5a970eab")),
+                                                               types.NewOriginalTxOutput(*consensus.BTMAssetID, 9900000000, testutil.MustDecodeHexString("0014024bb9bfc639bdac292ff9ceb41b5c6f5a970eab")),
+                                                               types.NewOriginalTxOutput(testutil.MustDecodeAsset("641ccb49dd38df9921a55e020d40a2323589c36ab5557f8a249ee01cc09d1836"), 10000000000, testutil.MustDecodeHexString("0014024bb9bfc639bdac292ff9ceb41b5c6f5a970eab")),
                                                        },
                                                }),
                                        },
@@ -376,7 +376,7 @@ func init() {
                                                                types.NewCoinbaseInput(testutil.MustDecodeHexString("0032")),
                                                        },
                                                        Outputs: []*types.TxOutput{
-                                                               types.NewTxOutput(*consensus.BTMAssetID, 41350000000, testutil.MustDecodeHexString("0014024bb9bfc639bdac292ff9ceb41b5c6f5a970eab")),
+                                                               types.NewOriginalTxOutput(*consensus.BTMAssetID, 41350000000, testutil.MustDecodeHexString("0014024bb9bfc639bdac292ff9ceb41b5c6f5a970eab")),
                                                        },
                                                }),
                                                types.NewTx(types.TxData{
@@ -404,8 +404,8 @@ func init() {
                                                                ),
                                                        },
                                                        Outputs: []*types.TxOutput{
-                                                               types.NewTxOutput(*consensus.BTMAssetID, 9900000000, testutil.MustDecodeHexString("0014024bb9bfc639bdac292ff9ceb41b5c6f5a970eab")),
-                                                               types.NewTxOutput(testutil.MustDecodeAsset("641ccb49dd38df9921a55e020d40a2323589c36ab5557f8a249ee01cc09d1836"), 10000000000, testutil.MustDecodeHexString("0014024bb9bfc639bdac292ff9ceb41b5c6f5a970eab")),
+                                                               types.NewOriginalTxOutput(*consensus.BTMAssetID, 9900000000, testutil.MustDecodeHexString("0014024bb9bfc639bdac292ff9ceb41b5c6f5a970eab")),
+                                                               types.NewOriginalTxOutput(testutil.MustDecodeAsset("641ccb49dd38df9921a55e020d40a2323589c36ab5557f8a249ee01cc09d1836"), 10000000000, testutil.MustDecodeHexString("0014024bb9bfc639bdac292ff9ceb41b5c6f5a970eab")),
                                                        },
                                                }),
                                        },
@@ -432,7 +432,7 @@ func init() {
                                                                types.NewCoinbaseInput(testutil.MustDecodeHexString("0033")),
                                                        },
                                                        Outputs: []*types.TxOutput{
-                                                               types.NewTxOutput(*consensus.BTMAssetID, 41250000000, testutil.MustDecodeHexString("0014024bb9bfc639bdac292ff9ceb41b5c6f5a970eab")),
+                                                               types.NewOriginalTxOutput(*consensus.BTMAssetID, 41250000000, testutil.MustDecodeHexString("0014024bb9bfc639bdac292ff9ceb41b5c6f5a970eab")),
                                                        },
                                                }),
                                        },
@@ -457,7 +457,7 @@ func init() {
                                                                types.NewCoinbaseInput(testutil.MustDecodeHexString("0033")),
                                                        },
                                                        Outputs: []*types.TxOutput{
-                                                               types.NewTxOutput(*consensus.BTMAssetID, 41250000000, testutil.MustDecodeHexString("0014024bb9bfc639bdac292ff9ceb41b5c6f5a970eab")),
+                                                               types.NewOriginalTxOutput(*consensus.BTMAssetID, 41250000000, testutil.MustDecodeHexString("0014024bb9bfc639bdac292ff9ceb41b5c6f5a970eab")),
                                                        },
                                                }),
                                        },
index adc93e4..92e6db3 100644 (file)
@@ -212,7 +212,7 @@ func (g *TxGenerator) AddTxOutput(accountAlias, assetAlias string, amount uint64
        if err != nil {
                return err
        }
-       out := types.NewTxOutput(*assetAmount.AssetId, assetAmount.Amount, controlProgram.ControlProgram)
+       out := types.NewOriginalTxOutput(*assetAmount.AssetId, assetAmount.Amount, controlProgram.ControlProgram)
        return g.Builder.AddOutput(out)
 }
 
@@ -223,7 +223,7 @@ func (g *TxGenerator) AddRetirement(assetAlias string, amount uint64) error {
                return err
        }
        retirementProgram := []byte{byte(vm.OP_FAIL)}
-       out := types.NewTxOutput(*assetAmount.AssetId, assetAmount.Amount, retirementProgram)
+       out := types.NewOriginalTxOutput(*assetAmount.AssetId, assetAmount.Amount, retirementProgram)
        return g.Builder.AddOutput(out)
 }
 
@@ -362,7 +362,7 @@ func CreateCoinbaseTx(controlProgram []byte, height, txsFee uint64) (*types.Tx,
        if err := builder.AddInput(types.NewCoinbaseInput([]byte(fmt.Sprint(height))), &txbuilder.SigningInstruction{}); err != nil {
                return nil, err
        }
-       if err := builder.AddOutput(types.NewTxOutput(*consensus.BTMAssetID, coinbaseValue, controlProgram)); err != nil {
+       if err := builder.AddOutput(types.NewOriginalTxOutput(*consensus.BTMAssetID, coinbaseValue, controlProgram)); err != nil {
                return nil, err
        }
 
@@ -392,7 +392,7 @@ func CreateTxFromTx(baseTx *types.Tx, outputIndex uint64, outputAmount uint64, c
                AssetVersion: assetVersion,
                TypedInput:   spendInput,
        }
-       output := types.NewTxOutput(*consensus.BTMAssetID, outputAmount, ctrlProgram)
+       output := types.NewOriginalTxOutput(*consensus.BTMAssetID, outputAmount, ctrlProgram)
        builder := txbuilder.NewBuilder(time.Now())
        if err := builder.AddInput(txInput, &txbuilder.SigningInstruction{}); err != nil {
                return nil, err
index 7d2b0db..d4ee248 100644 (file)
@@ -59,7 +59,7 @@ func MockTx(utxo *account.UTXO, testAccount *account.Account) (*txbuilder.Templa
        if err := b.AddInput(txInput, sigInst); err != nil {
                return nil, nil, err
        }
-       out := types.NewTxOutput(*consensus.BTMAssetID, 100, []byte{byte(vm.OP_FAIL)})
+       out := types.NewOriginalTxOutput(*consensus.BTMAssetID, 100, []byte{byte(vm.OP_FAIL)})
        if err := b.AddOutput(out); err != nil {
                return nil, nil, err
        }
index c21367a..1113a63 100644 (file)
@@ -79,7 +79,7 @@ func coinBaseTx(amount uint64, arbitrary string) *types.Tx {
                        types.NewCoinbaseInput([]byte(arbitrary)),
                },
                Outputs: []*types.TxOutput{
-                       types.NewTxOutput(*consensus.BTMAssetID, amount, mustDecodeHex("00144431c4278632c6e35dd2870faa1a4b8e0a275cbc")),
+                       types.NewOriginalTxOutput(*consensus.BTMAssetID, amount, mustDecodeHex("00144431c4278632c6e35dd2870faa1a4b8e0a275cbc")),
                },
        })
 }
@@ -114,8 +114,8 @@ func init() {
                                types.NewSpendInput(nil, toHash("ca9b179e549406aa583869e124e39817414d4500a8ce5476e95b6018d182b966"), *consensus.BTMAssetID, 41250000000, 0, []byte("00144431c4278632c6e35dd2870faa1a4b8e0a275cbc")),
                        },
                        Outputs: []*types.TxOutput{
-                               types.NewTxOutput(*consensus.BTMAssetID, 100000000, []byte("00148c704747e94387fa0b8712b053ed2132d84820ac")),
-                               types.NewTxOutput(*consensus.BTMAssetID, 41150000000, []byte("00144431c4278632c6e35dd2870faa1a4b8e0a275cbc")),
+                               types.NewOriginalTxOutput(*consensus.BTMAssetID, 100000000, []byte("00148c704747e94387fa0b8712b053ed2132d84820ac")),
+                               types.NewOriginalTxOutput(*consensus.BTMAssetID, 41150000000, []byte("00144431c4278632c6e35dd2870faa1a4b8e0a275cbc")),
                        },
                }),
        }
@@ -128,8 +128,8 @@ func init() {
                                types.NewSpendInput(nil, *mockTransaction[0].getSourceID(1), *consensus.BTMAssetID, 41150000000, 1, []byte("00144431c4278632c6e35dd2870faa1a4b8e0a275cbc")),
                        },
                        Outputs: []*types.TxOutput{
-                               types.NewTxOutput(*consensus.BTMAssetID, 100000000, []byte("00148c704747e94387fa0b8712b053ed2132d84820ac")),
-                               types.NewTxOutput(*consensus.BTMAssetID, 41050000000, []byte("00144431c4278632c6e35dd2870faa1a4b8e0a275cbc")),
+                               types.NewOriginalTxOutput(*consensus.BTMAssetID, 100000000, []byte("00148c704747e94387fa0b8712b053ed2132d84820ac")),
+                               types.NewOriginalTxOutput(*consensus.BTMAssetID, 41050000000, []byte("00144431c4278632c6e35dd2870faa1a4b8e0a275cbc")),
                        },
                }),
        }
@@ -142,8 +142,8 @@ func init() {
                                types.NewSpendInput(nil, *mockTransaction[1].getSourceID(1), *consensus.BTMAssetID, 41050000000, 1, []byte("00144431c4278632c6e35dd2870faa1a4b8e0a275cbc")),
                        },
                        Outputs: []*types.TxOutput{
-                               types.NewTxOutput(*consensus.BTMAssetID, 100000000, []byte("00148c704747e94387fa0b8712b053ed2132d84820ac")),
-                               types.NewTxOutput(*consensus.BTMAssetID, 40950000000, []byte("00144431c4278632c6e35dd2870faa1a4b8e0a275cbc")),
+                               types.NewOriginalTxOutput(*consensus.BTMAssetID, 100000000, []byte("00148c704747e94387fa0b8712b053ed2132d84820ac")),
+                               types.NewOriginalTxOutput(*consensus.BTMAssetID, 40950000000, []byte("00144431c4278632c6e35dd2870faa1a4b8e0a275cbc")),
                        },
                }),
        }
@@ -158,10 +158,10 @@ func init() {
                                types.NewSpendInput(nil, toHash("50d1c966b3a58f9092a696136a75ceb801ea7da2470784d80ebf3f17a76b8a98"), assetID, 800000000000, 0, []byte("00140b0c5059514c751a80c4e1c94f8ecfe16d80671b")),
                        },
                        Outputs: []*types.TxOutput{
-                               types.NewTxOutput(*consensus.BTMAssetID, 41150000000, []byte("0014b103d8f2dc10e7bbbe2557ff8b9876524dec0a7e")),
-                               types.NewTxOutput(*consensus.BTMAssetID, 100000000, []byte("00140b0c5059514c751a80c4e1c94f8ecfe16d80671b")),
-                               types.NewTxOutput(assetID, 700000000000, []byte("0014b103d8f2dc10e7bbbe2557ff8b9876524dec0a7e")),
-                               types.NewTxOutput(assetID, 100000000000, []byte("00140b0c5059514c751a80c4e1c94f8ecfe16d80671b")),
+                               types.NewOriginalTxOutput(*consensus.BTMAssetID, 41150000000, []byte("0014b103d8f2dc10e7bbbe2557ff8b9876524dec0a7e")),
+                               types.NewOriginalTxOutput(*consensus.BTMAssetID, 100000000, []byte("00140b0c5059514c751a80c4e1c94f8ecfe16d80671b")),
+                               types.NewOriginalTxOutput(assetID, 700000000000, []byte("0014b103d8f2dc10e7bbbe2557ff8b9876524dec0a7e")),
+                               types.NewOriginalTxOutput(assetID, 100000000000, []byte("00140b0c5059514c751a80c4e1c94f8ecfe16d80671b")),
                        },
                }),
        }
@@ -175,10 +175,10 @@ func init() {
                                types.NewSpendInput(nil, toHash("d9a9b64e4f842060a40b15325d9aae61987776f7748e7e6a2887a474e84294ef"), assetID, 600000000000, 0, []byte("00142b248deeffe82f9cd94fab43849468e0dfe97806")),
                        },
                        Outputs: []*types.TxOutput{
-                               types.NewTxOutput(*consensus.BTMAssetID, 100000000, []byte("0014492d5b0f09f83bd9bff6a44514dcc9b11c091dce")),
-                               types.NewTxOutput(*consensus.BTMAssetID, 41150000000, []byte("00142b248deeffe82f9cd94fab43849468e0dfe97806")),
-                               types.NewTxOutput(assetID, 600000000000, []byte("0014492d5b0f09f83bd9bff6a44514dcc9b11c091dce")),
-                               types.NewTxOutput(assetID, 400000000000, []byte("00142b248deeffe82f9cd94fab43849468e0dfe97806")),
+                               types.NewOriginalTxOutput(*consensus.BTMAssetID, 100000000, []byte("0014492d5b0f09f83bd9bff6a44514dcc9b11c091dce")),
+                               types.NewOriginalTxOutput(*consensus.BTMAssetID, 41150000000, []byte("00142b248deeffe82f9cd94fab43849468e0dfe97806")),
+                               types.NewOriginalTxOutput(assetID, 600000000000, []byte("0014492d5b0f09f83bd9bff6a44514dcc9b11c091dce")),
+                               types.NewOriginalTxOutput(assetID, 400000000000, []byte("00142b248deeffe82f9cd94fab43849468e0dfe97806")),
                        },
                }),
        }
@@ -192,10 +192,10 @@ func init() {
                                types.NewSpendInput(nil, toHash("466e6a9261d7b51f227d6c05b7cd3cc36487cc6f0cfb79c58794021e68d4c877"), assetID, 300000000000, 0, []byte("0014b103d8f2dc10e7bbbe2557ff8b9876524dec0a7e")),
                        },
                        Outputs: []*types.TxOutput{
-                               types.NewTxOutput(*consensus.BTMAssetID, 41050000000, []byte("00142b248deeffe82f9cd94fab43849468e0dfe97806")),
-                               types.NewTxOutput(*consensus.BTMAssetID, 100000000, []byte("0014b103d8f2dc10e7bbbe2557ff8b9876524dec0a7e")),
-                               types.NewTxOutput(assetID, 200000000000, []byte("00142b248deeffe82f9cd94fab43849468e0dfe97806")),
-                               types.NewTxOutput(assetID, 100000000000, []byte("0014b103d8f2dc10e7bbbe2557ff8b9876524dec0a7e")),
+                               types.NewOriginalTxOutput(*consensus.BTMAssetID, 41050000000, []byte("00142b248deeffe82f9cd94fab43849468e0dfe97806")),
+                               types.NewOriginalTxOutput(*consensus.BTMAssetID, 100000000, []byte("0014b103d8f2dc10e7bbbe2557ff8b9876524dec0a7e")),
+                               types.NewOriginalTxOutput(assetID, 200000000000, []byte("00142b248deeffe82f9cd94fab43849468e0dfe97806")),
+                               types.NewOriginalTxOutput(assetID, 100000000000, []byte("0014b103d8f2dc10e7bbbe2557ff8b9876524dec0a7e")),
                        },
                }),
        }
@@ -209,10 +209,10 @@ func init() {
                                types.NewSpendInput(nil, toHash("e5757774fb46287ebda3479e19c8643d2fcdb5de3b1ac84d4020c1971bb3f531"), assetID, 100000000000, 0, []byte("00142b248deeffe82f9cd94fab43849468e0dfe97806")),
                        },
                        Outputs: []*types.TxOutput{
-                               types.NewTxOutput(*consensus.BTMAssetID, 40950000000, []byte("0014492d5b0f09f83bd9bff6a44514dcc9b11c091dce")),
-                               types.NewTxOutput(*consensus.BTMAssetID, 100000000, []byte("00142b248deeffe82f9cd94fab43849468e0dfe97806")),
-                               types.NewTxOutput(assetID, 50000000000, []byte("0014492d5b0f09f83bd9bff6a44514dcc9b11c091dce")),
-                               types.NewTxOutput(assetID, 50000000000, []byte("00142b248deeffe82f9cd94fab43849468e0dfe97806")),
+                               types.NewOriginalTxOutput(*consensus.BTMAssetID, 40950000000, []byte("0014492d5b0f09f83bd9bff6a44514dcc9b11c091dce")),
+                               types.NewOriginalTxOutput(*consensus.BTMAssetID, 100000000, []byte("00142b248deeffe82f9cd94fab43849468e0dfe97806")),
+                               types.NewOriginalTxOutput(assetID, 50000000000, []byte("0014492d5b0f09f83bd9bff6a44514dcc9b11c091dce")),
+                               types.NewOriginalTxOutput(assetID, 50000000000, []byte("00142b248deeffe82f9cd94fab43849468e0dfe97806")),
                        },
                }),
        }
@@ -225,8 +225,8 @@ func init() {
                                types.NewSpendInput(nil, toHash("ca9b179e549406aa583869e124e39817514d4500a8ce5476e95b6018d182b966"), *consensus.BTMAssetID, 40950000000, 3, []byte("0014492d5b0f09f83bd9bff6a44514dcc9b11c091dce")),
                        },
                        Outputs: []*types.TxOutput{
-                               types.NewTxOutput(*consensus.BTMAssetID, 40850000000, []byte("0014e3bb841fb722d1840a959d86e12a174c54a3a6e8")),
-                               types.NewTxOutput(*consensus.BTMAssetID, 100000000, []byte("0014492d5b0f09f83bd9bff6a44514dcc9b11c091dce")),
+                               types.NewOriginalTxOutput(*consensus.BTMAssetID, 40850000000, []byte("0014e3bb841fb722d1840a959d86e12a174c54a3a6e8")),
+                               types.NewOriginalTxOutput(*consensus.BTMAssetID, 100000000, []byte("0014492d5b0f09f83bd9bff6a44514dcc9b11c091dce")),
                        },
                }),
        }
@@ -239,8 +239,8 @@ func init() {
                                types.NewSpendInput(nil, toHash("ca9b179e549406aa583869e124e39817514d4500a8ce5476e95b6018d182b966"), *consensus.BTMAssetID, 40850000000, 4, []byte("0014e3bb841fb722d1840a959d86e12a174c54a3a6e8")),
                        },
                        Outputs: []*types.TxOutput{
-                               types.NewTxOutput(*consensus.BTMAssetID, 40750000000, []byte("001449601d4cfb6e7a1b990778497b3c364f66bc17d2")),
-                               types.NewTxOutput(*consensus.BTMAssetID, 100000000, []byte("0014e3bb841fb722d1840a959d86e12a174c54a3a6e8")),
+                               types.NewOriginalTxOutput(*consensus.BTMAssetID, 40750000000, []byte("001449601d4cfb6e7a1b990778497b3c364f66bc17d2")),
+                               types.NewOriginalTxOutput(*consensus.BTMAssetID, 100000000, []byte("0014e3bb841fb722d1840a959d86e12a174c54a3a6e8")),
                        },
                }),
        }
@@ -253,8 +253,8 @@ func init() {
                                types.NewSpendInput(nil, toHash("ca9b179e549406aa583869e124e39817514d4500a8ce5476e95b6018d182b966"), *consensus.BTMAssetID, 40750000000, 5, []byte("001449601d4cfb6e7a1b990778497b3c364f66bc17d2")),
                        },
                        Outputs: []*types.TxOutput{
-                               types.NewTxOutput(*consensus.BTMAssetID, 40650000000, []byte("0014bd3d70b1bcd62ece61c06a2fe097a4732e5f006b")),
-                               types.NewTxOutput(*consensus.BTMAssetID, 100000000, []byte("001449601d4cfb6e7a1b990778497b3c364f66bc17d2")),
+                               types.NewOriginalTxOutput(*consensus.BTMAssetID, 40650000000, []byte("0014bd3d70b1bcd62ece61c06a2fe097a4732e5f006b")),
+                               types.NewOriginalTxOutput(*consensus.BTMAssetID, 100000000, []byte("001449601d4cfb6e7a1b990778497b3c364f66bc17d2")),
                        },
                }),
        }
@@ -267,8 +267,8 @@ func init() {
                                types.NewSpendInput(nil, toHash("ca9b179e549406aa583869e124e39817514d4500a8ce5476e95b6018d182b966"), *consensus.BTMAssetID, 40650000000, 6, []byte("0014bd3d70b1bcd62ece61c06a2fe097a4732e5f006b")),
                        },
                        Outputs: []*types.TxOutput{
-                               types.NewTxOutput(*consensus.BTMAssetID, 40550000000, []byte("0014e809cb6f328db1e624821dec508cbe08fe1ed08d")),
-                               types.NewTxOutput(*consensus.BTMAssetID, 100000000, []byte("0014bd3d70b1bcd62ece61c06a2fe097a4732e5f006b")),
+                               types.NewOriginalTxOutput(*consensus.BTMAssetID, 40550000000, []byte("0014e809cb6f328db1e624821dec508cbe08fe1ed08d")),
+                               types.NewOriginalTxOutput(*consensus.BTMAssetID, 100000000, []byte("0014bd3d70b1bcd62ece61c06a2fe097a4732e5f006b")),
                        },
                }),
        }
@@ -282,8 +282,8 @@ func init() {
                                types.NewSpendInput(nil, *mockTransaction[3].getSourceID(0), *consensus.BTMAssetID, 41150000000, 0, []byte("0014b103d8f2dc10e7bbbe2557ff8b9876524dec0a7e")),
                        },
                        Outputs: []*types.TxOutput{
-                               types.NewTxOutput(*consensus.BTMAssetID, 41050000000, []byte("00142b248deeffe82f9cd94fab43849468e0dfe97806")),
-                               types.NewTxOutput(*consensus.BTMAssetID, 100000000, []byte("0014b103d8f2dc10e7bbbe2557ff8b9876524dec0a7e")),
+                               types.NewOriginalTxOutput(*consensus.BTMAssetID, 41050000000, []byte("00142b248deeffe82f9cd94fab43849468e0dfe97806")),
+                               types.NewOriginalTxOutput(*consensus.BTMAssetID, 100000000, []byte("0014b103d8f2dc10e7bbbe2557ff8b9876524dec0a7e")),
                        },
                }),
        }
@@ -296,8 +296,8 @@ func init() {
                                types.NewSpendInput(nil, *mockTransaction[11].getSourceID(0), *consensus.BTMAssetID, 41050000000, 0, []byte("00142b248deeffe82f9cd94fab43849468e0dfe97806")),
                        },
                        Outputs: []*types.TxOutput{
-                               types.NewTxOutput(*consensus.BTMAssetID, 40950000000, []byte("0014492d5b0f09f83bd9bff6a44514dcc9b11c091dce")),
-                               types.NewTxOutput(*consensus.BTMAssetID, 100000000, []byte("00142b248deeffe82f9cd94fab43849468e0dfe97806")),
+                               types.NewOriginalTxOutput(*consensus.BTMAssetID, 40950000000, []byte("0014492d5b0f09f83bd9bff6a44514dcc9b11c091dce")),
+                               types.NewOriginalTxOutput(*consensus.BTMAssetID, 100000000, []byte("00142b248deeffe82f9cd94fab43849468e0dfe97806")),
                        },
                }),
        }
@@ -310,8 +310,8 @@ func init() {
                                types.NewSpendInput(nil, *mockTransaction[12].getSourceID(0), *consensus.BTMAssetID, 40950000000, 0, []byte("0014492d5b0f09f83bd9bff6a44514dcc9b11c091dce")),
                        },
                        Outputs: []*types.TxOutput{
-                               types.NewTxOutput(*consensus.BTMAssetID, 40850000000, []byte("0014e3bb841fb722d1840a959d86e12a174c54a3a6e8")),
-                               types.NewTxOutput(*consensus.BTMAssetID, 100000000, []byte("0014492d5b0f09f83bd9bff6a44514dcc9b11c091dce")),
+                               types.NewOriginalTxOutput(*consensus.BTMAssetID, 40850000000, []byte("0014e3bb841fb722d1840a959d86e12a174c54a3a6e8")),
+                               types.NewOriginalTxOutput(*consensus.BTMAssetID, 100000000, []byte("0014492d5b0f09f83bd9bff6a44514dcc9b11c091dce")),
                        },
                }),
        }
@@ -324,8 +324,8 @@ func init() {
                                types.NewSpendInput(nil, *mockTransaction[13].getSourceID(0), *consensus.BTMAssetID, 40850000000, 0, []byte("0014e3bb841fb722d1840a959d86e12a174c54a3a6e8")),
                        },
                        Outputs: []*types.TxOutput{
-                               types.NewTxOutput(*consensus.BTMAssetID, 40750000000, []byte("001449601d4cfb6e7a1b990778497b3c364f66bc17d2")),
-                               types.NewTxOutput(*consensus.BTMAssetID, 100000000, []byte("0014e3bb841fb722d1840a959d86e12a174c54a3a6e8")),
+                               types.NewOriginalTxOutput(*consensus.BTMAssetID, 40750000000, []byte("001449601d4cfb6e7a1b990778497b3c364f66bc17d2")),
+                               types.NewOriginalTxOutput(*consensus.BTMAssetID, 100000000, []byte("0014e3bb841fb722d1840a959d86e12a174c54a3a6e8")),
                        },
                }),
        }
@@ -338,8 +338,8 @@ func init() {
                                types.NewSpendInput(nil, *mockTransaction[14].getSourceID(0), *consensus.BTMAssetID, 40750000000, 0, []byte("001449601d4cfb6e7a1b990778497b3c364f66bc17d2")),
                        },
                        Outputs: []*types.TxOutput{
-                               types.NewTxOutput(*consensus.BTMAssetID, 40650000000, []byte("0014bd3d70b1bcd62ece61c06a2fe097a4732e5f006b")),
-                               types.NewTxOutput(*consensus.BTMAssetID, 100000000, []byte("001449601d4cfb6e7a1b990778497b3c364f66bc17d2")),
+                               types.NewOriginalTxOutput(*consensus.BTMAssetID, 40650000000, []byte("0014bd3d70b1bcd62ece61c06a2fe097a4732e5f006b")),
+                               types.NewOriginalTxOutput(*consensus.BTMAssetID, 100000000, []byte("001449601d4cfb6e7a1b990778497b3c364f66bc17d2")),
                        },
                }),
        }
@@ -352,8 +352,8 @@ func init() {
                                types.NewSpendInput(nil, *mockTransaction[15].getSourceID(0), *consensus.BTMAssetID, 40650000000, 0, []byte("0014bd3d70b1bcd62ece61c06a2fe097a4732e5f006b")),
                        },
                        Outputs: []*types.TxOutput{
-                               types.NewTxOutput(*consensus.BTMAssetID, 40550000000, []byte("0014e809cb6f328db1e624821dec508cbe08fe1ed08d")),
-                               types.NewTxOutput(*consensus.BTMAssetID, 100000000, []byte("0014bd3d70b1bcd62ece61c06a2fe097a4732e5f006b")),
+                               types.NewOriginalTxOutput(*consensus.BTMAssetID, 40550000000, []byte("0014e809cb6f328db1e624821dec508cbe08fe1ed08d")),
+                               types.NewOriginalTxOutput(*consensus.BTMAssetID, 100000000, []byte("0014bd3d70b1bcd62ece61c06a2fe097a4732e5f006b")),
                        },
                }),
        }
index 48be9c4..ebd813d 100644 (file)
@@ -58,7 +58,7 @@ func MockSimpleUtxo(index uint64, assetID *bc.AssetID, amount uint64, ctrlProg *
 }
 
 func AddTxOutput(assetID bc.AssetID, amount uint64, controlProgram []byte) *types.TxOutput {
-       out := types.NewTxOutput(assetID, amount, controlProgram)
+       out := types.NewOriginalTxOutput(assetID, amount, controlProgram)
        return out
 }
 
index 27400ac..8fc96aa 100644 (file)
@@ -376,7 +376,7 @@ func TestTxInToUtxos(t *testing.T) {
                                        types.NewCoinbaseInput([]byte{0x51}),
                                },
                                Outputs: []*types.TxOutput{
-                                       types.NewTxOutput(*consensus.BTMAssetID, 41250000000, []byte{0x51}),
+                                       types.NewOriginalTxOutput(*consensus.BTMAssetID, 41250000000, []byte{0x51}),
                                },
                        }),
                        statusFail: false,
@@ -388,7 +388,7 @@ func TestTxInToUtxos(t *testing.T) {
                                        types.NewIssuanceInput([]byte{}, 4125, []byte{0x51}, [][]byte{}, []byte{}),
                                },
                                Outputs: []*types.TxOutput{
-                                       types.NewTxOutput(*consensus.BTMAssetID, 4125, []byte{0x51}),
+                                       types.NewOriginalTxOutput(*consensus.BTMAssetID, 4125, []byte{0x51}),
                                },
                        }),
                        statusFail: false,
@@ -403,8 +403,8 @@ func TestTxInToUtxos(t *testing.T) {
                                        types.NewSpendInput([][]byte{}, bc.Hash{V0: 4}, *consensus.BTMAssetID, 7, 4, []byte{0x54}),
                                },
                                Outputs: []*types.TxOutput{
-                                       types.NewTxOutput(bc.AssetID{V0: 1}, 4, []byte{0x51}),
-                                       types.NewTxOutput(*consensus.BTMAssetID, 12, []byte{0x53}),
+                                       types.NewOriginalTxOutput(bc.AssetID{V0: 1}, 4, []byte{0x51}),
+                                       types.NewOriginalTxOutput(*consensus.BTMAssetID, 12, []byte{0x53}),
                                },
                        }),
                        statusFail: false,
@@ -452,8 +452,8 @@ func TestTxInToUtxos(t *testing.T) {
                                        types.NewSpendInput([][]byte{}, bc.Hash{V0: 4}, *consensus.BTMAssetID, 7, 4, []byte{0x54}),
                                },
                                Outputs: []*types.TxOutput{
-                                       types.NewTxOutput(bc.AssetID{V0: 1}, 4, []byte{0x51}),
-                                       types.NewTxOutput(*consensus.BTMAssetID, 12, []byte{0x53}),
+                                       types.NewOriginalTxOutput(bc.AssetID{V0: 1}, 4, []byte{0x51}),
+                                       types.NewOriginalTxOutput(*consensus.BTMAssetID, 12, []byte{0x53}),
                                },
                        }),
                        statusFail: true,
@@ -506,7 +506,7 @@ func TestTxOutToUtxos(t *testing.T) {
                                        types.NewCoinbaseInput([]byte{0x51}),
                                },
                                Outputs: []*types.TxOutput{
-                                       types.NewTxOutput(*consensus.BTMAssetID, 41250000000, []byte{0x51}),
+                                       types.NewOriginalTxOutput(*consensus.BTMAssetID, 41250000000, []byte{0x51}),
                                },
                        }),
                        statusFail:  false,
@@ -530,10 +530,10 @@ func TestTxOutToUtxos(t *testing.T) {
                                        types.NewSpendInput([][]byte{}, bc.Hash{V0: 2}, *consensus.BTMAssetID, 7, 1, []byte{0x51}),
                                },
                                Outputs: []*types.TxOutput{
-                                       types.NewTxOutput(bc.AssetID{V0: 1}, 2, []byte{0x51}),
-                                       types.NewTxOutput(bc.AssetID{V0: 1}, 3, []byte{0x52}),
-                                       types.NewTxOutput(*consensus.BTMAssetID, 2, []byte{0x53}),
-                                       types.NewTxOutput(*consensus.BTMAssetID, 5, []byte{0x54}),
+                                       types.NewOriginalTxOutput(bc.AssetID{V0: 1}, 2, []byte{0x51}),
+                                       types.NewOriginalTxOutput(bc.AssetID{V0: 1}, 3, []byte{0x52}),
+                                       types.NewOriginalTxOutput(*consensus.BTMAssetID, 2, []byte{0x53}),
+                                       types.NewOriginalTxOutput(*consensus.BTMAssetID, 5, []byte{0x54}),
                                },
                        }),
                        statusFail:  false,
@@ -580,10 +580,10 @@ func TestTxOutToUtxos(t *testing.T) {
                                        types.NewSpendInput([][]byte{}, bc.Hash{V0: 2}, *consensus.BTMAssetID, 7, 1, []byte{0x51}),
                                },
                                Outputs: []*types.TxOutput{
-                                       types.NewTxOutput(bc.AssetID{V0: 1}, 2, []byte{0x51}),
-                                       types.NewTxOutput(bc.AssetID{V0: 1}, 3, []byte{0x52}),
-                                       types.NewTxOutput(*consensus.BTMAssetID, 2, []byte{0x53}),
-                                       types.NewTxOutput(*consensus.BTMAssetID, 5, []byte{0x54}),
+                                       types.NewOriginalTxOutput(bc.AssetID{V0: 1}, 2, []byte{0x51}),
+                                       types.NewOriginalTxOutput(bc.AssetID{V0: 1}, 3, []byte{0x52}),
+                                       types.NewOriginalTxOutput(*consensus.BTMAssetID, 2, []byte{0x53}),
+                                       types.NewOriginalTxOutput(*consensus.BTMAssetID, 5, []byte{0x54}),
                                },
                        }),
                        statusFail:  true,
index 40b97e5..f6b71ef 100644 (file)
@@ -360,9 +360,9 @@ func mockTxData(utxos []*account.UTXO, testAccount *account.Account) (*txbuilder
 
                out := &types.TxOutput{}
                if utxo.AssetID == *consensus.BTMAssetID {
-                       out = types.NewTxOutput(utxo.AssetID, 100, utxo.ControlProgram)
+                       out = types.NewOriginalTxOutput(utxo.AssetID, 100, utxo.ControlProgram)
                } else {
-                       out = types.NewTxOutput(utxo.AssetID, utxo.Amount, utxo.ControlProgram)
+                       out = types.NewOriginalTxOutput(utxo.AssetID, utxo.Amount, utxo.ControlProgram)
                }
                tplBuilder.AddOutput(out)
        }