)
const (
- // UTXOPrefix = "ACU:" //UTXOPrefix is StandardUTXOKey prefix
- // SUTXOPrefix = "SCU:" //SUTXOPrefix is ContractUTXOKey prefix
-
- ContractPrefix = "Contract:"
-
-// ContractIndexPrefix = "ContractIndex:"
-// AccountPrefix = "Account:" // AccountPrefix is account ID prefix
-// AccountAliasPrefix = "AccountAlias:"
-// AccountIndexPrefix = "AccountIndex:"
-// TxPrefix = "TXS:" //TxPrefix is wallet database transactions prefix
-// TxIndexPrefix = "TID:" //TxIndexPrefix is wallet database tx index prefix
-// UnconfirmedTxPrefix = "UTXS:" //UnconfirmedTxPrefix is txpool unconfirmed transactions prefix
-// GlobalTxIndexPrefix = "GTID:" //GlobalTxIndexPrefix is wallet database global tx index prefix
-// WalletKey = "WalletInfo"
-// MiningAddressKey = "MiningAddress"
-// CoinbaseAbKey = "CoinbaseArbitrary"
-)
-
-const (
utxoPrefix byte = iota //UTXOPrefix is StandardUTXOKey prefix
- sUTXOPrefix //SUTXOPrefix is ContractUTXOKey prefix
+ sutxoPrefix //SUTXOPrefix is ContractUTXOKey prefix
contractPrefix
contractIndexPrefix
accountPrefix // AccountPrefix is account ID prefix
// leveldb key prefix
var (
UTXOPrefix = []byte{utxoPrefix, colon}
- SUTXOPrefix = []byte{sUTXOPrefix, colon}
- // ContractPrefix = []byte{contractPrefix, colon}
+ SUTXOPrefix = []byte{sutxoPrefix, colon}
+ // ContractPrefix = []byte{contractPrefix, contractPrefix, colon}
+ ContractPrefix = "Contract:"
ContractIndexPrefix = []byte{contractIndexPrefix, colon}
AccountPrefix = []byte{accountPrefix, colon} // AccountPrefix is account ID prefix
AccountAliasPrefix = []byte{accountAliasPrefix, colon}
// errors
var (
// ErrFindAccount = errors.New("Failed to find account")
- errAccntTxIDNotFound = errors.New("account TXID not found")
- errGetAssetDefinition = errors.New("Failed to find asset definition")
+ errAccntTxIDNotFound = errors.New("account TXID not found")
+ errGetAsset = errors.New("Failed to find asset definition")
)
func accountIndexKey(xpubs []chainkd.XPub) []byte {
// ContractKey account control promgram store prefix
func ContractKey(hash bc.Hash) []byte {
+ // h := hash.String()
+ // return append([]byte(ContractPrefix), []byte(h)...)
return append([]byte(ContractPrefix), hash.Bytes()...)
}
// StandardUTXOKey makes an account unspent outputs key to store
func StandardUTXOKey(id bc.Hash) []byte {
- name := id.String()
- return append(UTXOPrefix, []byte(name)...)
+ // name := id.String()
+ // return append(UTXOPrefix, []byte(name)...)
+ return append(UTXOPrefix, id.Bytes()...)
}
// ContractUTXOKey makes a smart contract unspent outputs key to store
func ContractUTXOKey(id bc.Hash) []byte {
- name := id.String()
- return append(SUTXOPrefix, []byte(name)...)
+ // name := id.String()
+ // return append(SUTXOPrefix, []byte(name)...)
+ return append(SUTXOPrefix, id.Bytes()...)
}
func calcDeleteKey(blockHeight uint64) []byte {
}
}
-// DeleteStardardUTXO delete stardard utxo by outputID
-func (store *WalletStore) DeleteStardardUTXO(outputID bc.Hash) {
- if store.batch == nil {
- store.walletDB.Delete(StandardUTXOKey(outputID))
- } else {
- store.batch.Delete(StandardUTXOKey(outputID))
- }
-}
-
// DeleteTransactions delete transactions when orphan block rollback
func (store *WalletStore) DeleteTransactions(height uint64) {
batch := store.walletDB.NewBatch()
}
}
-// GetAccountByID get account value by account ID
-func (store *WalletStore) GetAccountByID(accountID string) (*acc.Account, error) {
- rawAccount := store.walletDB.Get(AccountIDKey(accountID))
- if rawAccount == nil {
- return nil, fmt.Errorf("failed get account, accountID: %s ", accountID)
- }
- account := new(acc.Account)
- if err := json.Unmarshal(rawAccount, account); err != nil {
- return nil, err
- }
- return account, nil
-}
-
-// GetAssetDefinition get asset definition by assetiD
-func (store *WalletStore) GetAssetDefinition(assetID *bc.AssetID) (*asset.Asset, error) {
+// GetAsset get asset by assetID
+func (store *WalletStore) GetAsset(assetID *bc.AssetID) (*asset.Asset, error) {
definitionByte := store.walletDB.Get(asset.ExtAssetKey(assetID))
if definitionByte == nil {
- return nil, errGetAssetDefinition
+ return nil, errGetAsset
}
definitionMap := make(map[string]interface{})
if err := json.Unmarshal(definitionByte, &definitionMap); err != nil {
func (store *WalletStore) GetControlProgram(hash bc.Hash) (*acc.CtrlProgram, error) {
rawProgram := store.walletDB.Get(ContractKey(hash))
if rawProgram == nil {
- return nil, fmt.Errorf("failed get account control program:%x ", hash)
+ return nil, acc.ErrFindCtrlProgram
}
accountCP := new(acc.CtrlProgram)
if err := json.Unmarshal(rawProgram, &accountCP); err != nil {
// ListAccountUTXOs get all account unspent outputs
func (store *WalletStore) ListAccountUTXOs(key string) ([]*acc.UTXO, error) {
+ fmt.Println("ListAccountUTXOs []byte(key):", []byte(key))
accountUtxoIter := store.walletDB.IteratorPrefix([]byte(key))
defer accountUtxoIter.Release()
return confirmedUTXOs, nil
}
-// ListTransactions get all walletDB transactions
-func (store *WalletStore) ListTransactions() ([]*query.AnnotatedTx, error) {
+func (store *WalletStore) ListTransactions(accountID string, StartTxID string, count uint, unconfirmed bool) ([]*query.AnnotatedTx, error) {
annotatedTxs := []*query.AnnotatedTx{}
+ var startKey []byte
+ preFix := TxPrefix
+
+ if StartTxID != "" {
+ if unconfirmed {
+ startKey = calcUnconfirmedTxKey(StartTxID)
+ } else {
+ formatKey := store.walletDB.Get(calcTxIndexKey(StartTxID))
+ if formatKey == nil {
+ return nil, errAccntTxIDNotFound
+ }
+ startKey = calcAnnotatedKey(string(formatKey))
+ }
+ }
- txIter := store.walletDB.IteratorPrefix([]byte(TxPrefix))
- defer txIter.Release()
- for txIter.Next() {
- annotatedTx := &query.AnnotatedTx{}
- if err := json.Unmarshal(txIter.Value(), &annotatedTx); err != nil {
+ if unconfirmed {
+ preFix = UnconfirmedTxPrefix
+ }
+
+ itr := store.walletDB.IteratorPrefixWithStart([]byte(preFix), startKey, true)
+ defer itr.Release()
+
+ for txNum := count; itr.Next() && txNum > 0; txNum-- {
+ annotatedTx := new(query.AnnotatedTx)
+ if err := json.Unmarshal(itr.Value(), &annotatedTx); err != nil {
return nil, err
}
annotatedTxs = append(annotatedTxs, annotatedTx)
}
}
-// SetStandardUTXO set standard utxo
-func (store *WalletStore) SetStandardUTXO(outputID bc.Hash, utxo *acc.UTXO) error {
- data, err := json.Marshal(utxo)
- if err != nil {
- return err
- }
- if store.batch == nil {
- store.walletDB.Set(StandardUTXOKey(outputID), data)
- } else {
- store.batch.Set(StandardUTXOKey(outputID), data)
- }
- return nil
-}
-
// SetTransaction set raw transaction by block height and tx position
func (store *WalletStore) SetTransaction(height uint64, tx *query.AnnotatedTx) error {
batch := store.walletDB.NewBatch()