OSDN Git Service

fix AnnotatedOutput#AssetDefinition type (#525)
authorYongfeng LI <wliyongfeng@gmail.com>
Tue, 3 Apr 2018 12:24:17 +0000 (20:24 +0800)
committerPaladz <yzhu101@uottawa.ca>
Tue, 3 Apr 2018 12:24:17 +0000 (20:24 +0800)
blockchain/query/annotated.go
blockchain/txfeed/txfeed.go
wallet/annotated.go

index b3ec8a8..db0f5fa 100755 (executable)
@@ -23,32 +23,32 @@ type AnnotatedTx struct {
 
 //AnnotatedInput means an annotated transaction input.
 type AnnotatedInput struct {
-       Type            string              `json:"type"`
-       AssetID         bc.AssetID          `json:"asset_id"`
-       AssetAlias      string              `json:"asset_alias,omitempty"`
-       AssetDefinition *chainjson.HexBytes `json:"asset_definition"`
-       Amount          uint64              `json:"amount"`
-       IssuanceProgram chainjson.HexBytes  `json:"issuance_program,omitempty"`
-       ControlProgram  chainjson.HexBytes  `json:"-"`
-       SpentOutputID   *bc.Hash            `json:"spent_output_id,omitempty"`
-       AccountID       string              `json:"account_id,omitempty"`
-       AccountAlias    string              `json:"account_alias,omitempty"`
-       Arbitrary       chainjson.HexBytes  `json:"arbitrary,omitempty"`
+       Type            string             `json:"type"`
+       AssetID         bc.AssetID         `json:"asset_id"`
+       AssetAlias      string             `json:"asset_alias,omitempty"`
+       AssetDefinition *json.RawMessage   `json:"asset_definition"`
+       Amount          uint64             `json:"amount"`
+       IssuanceProgram chainjson.HexBytes `json:"issuance_program,omitempty"`
+       ControlProgram  chainjson.HexBytes `json:"-"`
+       SpentOutputID   *bc.Hash           `json:"spent_output_id,omitempty"`
+       AccountID       string             `json:"account_id,omitempty"`
+       AccountAlias    string             `json:"account_alias,omitempty"`
+       Arbitrary       chainjson.HexBytes `json:"arbitrary,omitempty"`
 }
 
 //AnnotatedOutput means an annotated transaction output.
 type AnnotatedOutput struct {
-       Type            string              `json:"type"`
-       OutputID        bc.Hash             `json:"id"`
-       TransactionID   *bc.Hash            `json:"transaction_id,omitempty"`
-       Position        int                 `json:"position"`
-       AssetID         bc.AssetID          `json:"asset_id"`
-       AssetAlias      string              `json:"asset_alias,omitempty"`
-       AssetDefinition *chainjson.HexBytes `json:"asset_definition"`
-       Amount          uint64              `json:"amount"`
-       AccountID       string              `json:"account_id,omitempty"`
-       AccountAlias    string              `json:"account_alias,omitempty"`
-       ControlProgram  chainjson.HexBytes  `json:"control_program"`
+       Type            string             `json:"type"`
+       OutputID        bc.Hash            `json:"id"`
+       TransactionID   *bc.Hash           `json:"transaction_id,omitempty"`
+       Position        int                `json:"position"`
+       AssetID         bc.AssetID         `json:"asset_id"`
+       AssetAlias      string             `json:"asset_alias,omitempty"`
+       AssetDefinition *json.RawMessage   `json:"asset_definition"`
+       Amount          uint64             `json:"amount"`
+       AccountID       string             `json:"account_id,omitempty"`
+       AccountAlias    string             `json:"account_alias,omitempty"`
+       ControlProgram  chainjson.HexBytes `json:"control_program"`
 }
 
 //AnnotatedAccount means an annotated account.
index 04b5566..306b8ff 100755 (executable)
@@ -10,7 +10,6 @@ import (
        dbm "github.com/tendermint/tmlibs/db"
 
        "github.com/bytom/blockchain/query"
-       chainjson "github.com/bytom/encoding/json"
        "github.com/bytom/errors"
        "github.com/bytom/protocol"
        "github.com/bytom/protocol/bc"
@@ -320,7 +319,7 @@ func (t *Tracker) TxFilter(tx *types.Tx) error {
        return nil
 }
 
-var emptyJSONObject = chainjson.HexBytes(`{}`)
+var emptyJSONObject = json.RawMessage(`{}`)
 
 func buildAnnotatedTransaction(orig *types.Tx) *query.AnnotatedTx {
        tx := &query.AnnotatedTx{
index 9936053..0747fb2 100755 (executable)
@@ -14,7 +14,6 @@ import (
        "github.com/bytom/common"
        "github.com/bytom/consensus"
        "github.com/bytom/crypto/sha3pool"
-       chainjson "github.com/bytom/encoding/json"
        "github.com/bytom/protocol/bc"
        "github.com/bytom/protocol/bc/types"
        "github.com/bytom/protocol/vm/vmutil"
@@ -24,18 +23,17 @@ import (
 func annotateTxsAsset(w *Wallet, txs []*query.AnnotatedTx) {
        for i, tx := range txs {
                for j, input := range tx.Inputs {
-                       txs[i].Inputs[j].AssetAlias, txs[i].Inputs[j].AssetDefinition =
-                               w.getAliasDefinition(input.AssetID)
+                       alias, definition := w.getAliasDefinition(input.AssetID)
+                       txs[i].Inputs[j].AssetAlias, txs[i].Inputs[j].AssetDefinition = alias, &definition
                }
                for k, output := range tx.Outputs {
-                       txs[i].Outputs[k].AssetAlias, txs[i].Outputs[k].AssetDefinition =
-                               w.getAliasDefinition(output.AssetID)
+                       alias, definition := w.getAliasDefinition(output.AssetID)
+                       txs[i].Outputs[k].AssetAlias, txs[i].Outputs[k].AssetDefinition = alias, &definition
                }
        }
 }
 
-func (w *Wallet) getExternalDefinition(assetID *bc.AssetID) *chainjson.HexBytes {
-
+func (w *Wallet) getExternalDefinition(assetID *bc.AssetID) json.RawMessage {
        definitionByte := w.DB.Get(asset.CalcExtAssetKey(assetID))
        if definitionByte == nil {
                return nil
@@ -57,16 +55,14 @@ func (w *Wallet) getExternalDefinition(assetID *bc.AssetID) *chainjson.HexBytes
        storeBatch.Set(asset.AliasKey(saveAlias), []byte(assetID.String()))
        storeBatch.Write()
 
-       d := chainjson.HexBytes(definitionByte)
-       return &d
-
+       return definitionByte
 }
 
-func (w *Wallet) getAliasDefinition(assetID bc.AssetID) (string, *chainjson.HexBytes) {
+func (w *Wallet) getAliasDefinition(assetID bc.AssetID) (string, json.RawMessage) {
        //btm
        if assetID.String() == consensus.BTMAssetID.String() {
                alias := consensus.BTMAlias
-               definition := &asset.DefaultNativeAsset.RawDefinitionByte
+               definition := []byte(asset.DefaultNativeAsset.RawDefinitionByte)
 
                return alias, definition
        }
@@ -74,7 +70,7 @@ func (w *Wallet) getAliasDefinition(assetID bc.AssetID) (string, *chainjson.HexB
        //local asset and saved external asset
        if localAsset, err := w.AssetReg.FindByID(nil, &assetID); err == nil {
                alias := *localAsset.Alias
-               definition := &localAsset.RawDefinitionByte
+               definition := []byte(localAsset.RawDefinitionByte)
                return alias, definition
        }
 
@@ -164,7 +160,7 @@ func getAccountFromACP(program []byte, walletDB db.DB) (*account.Account, error)
        return &localAccount, nil
 }
 
-var emptyJSONObject = chainjson.HexBytes(`{}`)
+var emptyJSONObject = json.RawMessage(`{}`)
 
 func isValidJSON(b []byte) bool {
        var v interface{}