X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=wallet%2Fannotated.go;h=9ac57c601b7ae3dc87b4fc2038e38bda32ea2e32;hb=d2272c304433aa23624c0d472f3c569090c7e770;hp=571f8524d9057be21d3b592034968a0cc204dad6;hpb=1a1b9bcbd32e5731ef195c0847770b789192eb68;p=bytom%2Fbytom.git diff --git a/wallet/annotated.go b/wallet/annotated.go index 571f8524..9ac57c60 100644 --- a/wallet/annotated.go +++ b/wallet/annotated.go @@ -35,7 +35,7 @@ func annotateTxsAsset(w *Wallet, txs []*query.AnnotatedTx) { } func (w *Wallet) getExternalDefinition(assetID *bc.AssetID) json.RawMessage { - definitionByte := w.DB.Get(asset.CalcExtAssetKey(assetID)) + definitionByte := w.DB.Get(asset.ExtAssetKey(assetID)) if definitionByte == nil { return nil } @@ -45,24 +45,18 @@ func (w *Wallet) getExternalDefinition(assetID *bc.AssetID) json.RawMessage { return nil } - saveAlias := assetID.String() - storeBatch := w.DB.NewBatch() - + alias := assetID.String() externalAsset := &asset.Asset{ AssetID: *assetID, - Alias: &saveAlias, + Alias: &alias, DefinitionMap: definitionMap, RawDefinitionByte: definitionByte, Signer: &signers.Signer{Type: "external"}, } - if rawAsset, err := json.Marshal(externalAsset); err == nil { - log.WithFields(log.Fields{"assetID": assetID.String(), "alias": saveAlias}).Info("index external asset") - storeBatch.Set(asset.Key(assetID), rawAsset) + if err := w.AssetReg.SaveAsset(externalAsset, alias); err != nil { + log.WithFields(log.Fields{"module": logModule, "err": err, "assetID": alias}).Warning("fail on save external asset to internal asset DB") } - storeBatch.Set(asset.AliasKey(saveAlias), []byte(assetID.String())) - storeBatch.Write() - return definitionByte } @@ -98,7 +92,7 @@ func annotateTxsAccount(txs []*query.AnnotatedTx, walletDB db.DB) { if input.SpentOutputID == nil { continue } - localAccount, err := getAccountFromUTXO(*input.SpentOutputID, walletDB) + localAccount, err := getAccountFromACP(input.ControlProgram, walletDB) if localAccount == nil || err != nil { continue } @@ -116,30 +110,6 @@ func annotateTxsAccount(txs []*query.AnnotatedTx, walletDB db.DB) { } } -func getAccountFromUTXO(outputID bc.Hash, walletDB db.DB) (*account.Account, error) { - accountUTXO := account.UTXO{} - localAccount := account.Account{} - - accountUTXOValue := walletDB.Get(account.StandardUTXOKey(outputID)) - if accountUTXOValue == nil { - return nil, fmt.Errorf("failed get account utxo:%x ", outputID) - } - - if err := json.Unmarshal(accountUTXOValue, &accountUTXO); err != nil { - return nil, err - } - - accountValue := walletDB.Get(account.Key(accountUTXO.AccountID)) - if accountValue == nil { - return nil, fmt.Errorf("failed get account:%s ", accountUTXO.AccountID) - } - if err := json.Unmarshal(accountValue, &localAccount); err != nil { - return nil, err - } - - return &localAccount, nil -} - func getAccountFromACP(program []byte, walletDB db.DB) (*account.Account, error) { var hash common.Hash accountCP := account.CtrlProgram{} @@ -147,7 +117,7 @@ func getAccountFromACP(program []byte, walletDB db.DB) (*account.Account, error) sha3pool.Sum256(hash[:], program) - rawProgram := walletDB.Get(account.CPKey(hash)) + rawProgram := walletDB.Get(account.ContractKey(hash)) if rawProgram == nil { return nil, fmt.Errorf("failed get account control program:%x ", hash) } @@ -187,6 +157,7 @@ func (w *Wallet) buildAnnotatedTransaction(orig *types.Tx, b *types.Block, statu Inputs: make([]*query.AnnotatedInput, 0, len(orig.Inputs)), Outputs: make([]*query.AnnotatedOutput, 0, len(orig.Outputs)), StatusFail: statusFail, + Size: orig.SerializedSize, } for i := range orig.Inputs { tx.Inputs = append(tx.Inputs, w.BuildAnnotatedInput(orig, uint32(i))) @@ -209,6 +180,7 @@ func (w *Wallet) BuildAnnotatedInput(tx *types.Tx, i uint32) *query.AnnotatedInp } id := tx.Tx.InputIDs[i] + in.InputID = id e := tx.Entries[id] switch e := e.(type) { case *bc.Spend: @@ -216,9 +188,21 @@ func (w *Wallet) BuildAnnotatedInput(tx *types.Tx, i uint32) *query.AnnotatedInp in.ControlProgram = orig.ControlProgram() in.Address = w.getAddressFromControlProgram(in.ControlProgram) in.SpentOutputID = e.SpentOutputId + arguments := orig.Arguments() + for _, arg := range arguments { + in.WitnessArguments = append(in.WitnessArguments, arg) + } case *bc.Issuance: in.Type = "issue" in.IssuanceProgram = orig.IssuanceProgram() + arguments := orig.Arguments() + for _, arg := range arguments { + in.WitnessArguments = append(in.WitnessArguments, arg) + } + if assetDefinition := orig.AssetDefinition(); isValidJSON(assetDefinition) { + assetDefinition := json.RawMessage(assetDefinition) + in.AssetDefinition = &assetDefinition + } case *bc.Coinbase: in.Type = "coinbase" in.Arbitrary = e.Arbitrary @@ -241,7 +225,7 @@ func (w *Wallet) getAddressFromControlProgram(prog []byte) string { } func buildP2PKHAddress(pubHash []byte) string { - address, err := common.NewAddressWitnessPubKeyHash(pubHash, consensus.ActiveNetParams) + address, err := common.NewAddressWitnessPubKeyHash(pubHash, &consensus.ActiveNetParams) if err != nil { return "" } @@ -250,7 +234,7 @@ func buildP2PKHAddress(pubHash []byte) string { } func buildP2SHAddress(scriptHash []byte) string { - address, err := common.NewAddressWitnessScriptHash(scriptHash, consensus.ActiveNetParams) + address, err := common.NewAddressWitnessScriptHash(scriptHash, &consensus.ActiveNetParams) if err != nil { return "" }