AccountID string
Address string
keyIndex uint64
+ change bool
}
const (
if ii, ok := orig.TypedInput.(*types.IssuanceInput); ok {
if isValidJSON(ii.AssetDefinition) {
assetID := ii.AssetID()
- if assetExist := walletDB.Get(asset.CalcExtAssetKey(&assetID)); assetExist == nil {
- storeBatch.Set(asset.CalcExtAssetKey(&assetID), ii.AssetDefinition)
+ if assetExist := walletDB.Get(asset.ExtAssetKey(&assetID)); assetExist == nil {
+ storeBatch.Set(asset.ExtAssetKey(&assetID), ii.AssetDefinition)
}
}
}
func (w *Wallet) indexTransactions(batch db.Batch, b *types.Block, txStatus *bc.TransactionStatus) error {
annotatedTxs := w.filterAccountTxs(b, txStatus)
saveExternalAssetDefinition(b, w.DB)
- annotateTxsAsset(w, annotatedTxs)
annotateTxsAccount(annotatedTxs, w.DB)
for _, tx := range annotatedTxs {
for _, out := range outsByScript[s] {
newOut := &accountOutput{
rawOutput: *out,
+ change: false,
}
result = append(result, newOut)
}
}
sha3pool.Sum256(hash[:], []byte(s))
- bytes := w.DB.Get(account.CPKey(hash))
+ bytes := w.DB.Get(account.ContractKey(hash))
if bytes == nil {
continue
}
AccountID: cp.AccountID,
Address: cp.Address,
keyIndex: cp.KeyIndex,
+ change: cp.Change,
}
result = append(result, newOut)
}
AccountID: out.AccountID,
Address: out.Address,
ValidHeight: out.ValidHeight,
+ Change: out.change,
}
data, err := json.Marshal(u)
for _, v := range tx.Outputs {
var hash [32]byte
sha3pool.Sum256(hash[:], v.ControlProgram)
- if bytes := w.DB.Get(account.CPKey(hash)); bytes != nil {
+ if bytes := w.DB.Get(account.ContractKey(hash)); bytes != nil {
annotatedTxs = append(annotatedTxs, w.buildAnnotatedTransaction(tx, b, statusFail, pos))
continue transactionLoop
}
// GetTransactionsByTxID get account txs by account tx ID
func (w *Wallet) GetTransactionsByTxID(txID string) ([]*query.AnnotatedTx, error) {
- var annotatedTxs []*query.AnnotatedTx
+ annotatedTxs := []*query.AnnotatedTx{}
formatKey := ""
if txID != "" {
if err := json.Unmarshal(txIter.Value(), annotatedTx); err != nil {
return nil, err
}
+ annotateTxsAsset(w, []*query.AnnotatedTx{annotatedTx})
annotatedTxs = append([]*query.AnnotatedTx{annotatedTx}, annotatedTxs...)
}
// GetTransactionsByAccountID get account txs by account ID
func (w *Wallet) GetTransactionsByAccountID(accountID string) ([]*query.AnnotatedTx, error) {
- var annotatedTxs []*query.AnnotatedTx
+ annotatedTxs := []*query.AnnotatedTx{}
txIter := w.DB.IteratorPrefix([]byte(TxPrefix))
defer txIter.Release()
}
if findTransactionsByAccount(annotatedTx, accountID) {
+ annotateTxsAsset(w, []*query.AnnotatedTx{annotatedTx})
annotatedTxs = append(annotatedTxs, annotatedTx)
}
}
}
// GetAccountBalances return all account balances
-func (w *Wallet) GetAccountBalances(id string) []AccountBalance {
+func (w *Wallet) GetAccountBalances(id string) ([]AccountBalance, error) {
return w.indexBalances(w.GetAccountUTXOs(""))
}
// AccountBalance account balance
type AccountBalance struct {
- AccountID string `json:"account_id"`
- Alias string `json:"account_alias"`
- AssetAlias string `json:"asset_alias"`
- AssetID string `json:"asset_id"`
- Amount uint64 `json:"amount"`
+ AccountID string `json:"account_id"`
+ Alias string `json:"account_alias"`
+ AssetAlias string `json:"asset_alias"`
+ AssetID string `json:"asset_id"`
+ Amount uint64 `json:"amount"`
+ AssetDefinition map[string]interface{} `json:"asset_definition"`
}
-func (w *Wallet) indexBalances(accountUTXOs []account.UTXO) []AccountBalance {
+func (w *Wallet) indexBalances(accountUTXOs []account.UTXO) ([]AccountBalance, error) {
accBalance := make(map[string]map[string]uint64)
balances := make([]AccountBalance, 0)
- tmpBalance := AccountBalance{}
for _, accountUTXO := range accountUTXOs {
assetID := accountUTXO.AssetID.String()
for _, assetID := range sortedAsset {
alias := w.AccountMgr.GetAliasByID(id)
- assetAlias := w.AssetReg.GetAliasByID(assetID)
- tmpBalance.Alias = alias
- tmpBalance.AccountID = id
- tmpBalance.AssetID = assetID
- tmpBalance.AssetAlias = assetAlias
- tmpBalance.Amount = accBalance[id][assetID]
- balances = append(balances, tmpBalance)
+ targetAsset, err := w.AssetReg.GetAsset(assetID)
+ if err != nil {
+ return nil, err
+ }
+
+ assetAlias := *targetAsset.Alias
+ balances = append(balances, AccountBalance{
+ Alias: alias,
+ AccountID: id,
+ AssetID: assetID,
+ AssetAlias: assetAlias,
+ Amount: accBalance[id][assetID],
+ AssetDefinition: targetAsset.DefinitionMap,
+ })
}
}
- return balances
+ return balances, nil
}