//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.
"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"
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
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
}
//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
}
return &localAccount, nil
}
-var emptyJSONObject = chainjson.HexBytes(`{}`)
+var emptyJSONObject = json.RawMessage(`{}`)
func isValidJSON(b []byte) bool {
var v interface{}