// POST /list-unspent-outputs
func (a *API) listUnspentOutputs(ctx context.Context, filter struct {
- ID string `json:"id"`
+ ID string `json:"id"`
+ SmartContract bool `json:"smart_contract"`
}) Response {
- accountUTXOs := a.wallet.GetAccountUTXOs(filter.ID)
+ accountUTXOs := a.wallet.GetAccountUTXOs(filter.ID, filter.SmartContract)
UTXOs := []query.AnnotatedUTXO{}
for _, utxo := range accountUTXOs {
listAddressesCmd.PersistentFlags().StringVar(&accountAlias, "alias", "", "account alias")
listUnspentOutputsCmd.PersistentFlags().StringVar(&outputID, "id", "", "ID of unspent output")
+ listUnspentOutputsCmd.PersistentFlags().BoolVar(&smartContract, "contract", false, "list smart contract unspent outputs")
}
var (
accountQuorum = 1
accountToken = ""
outputID = ""
+ smartContract = false
)
var createAccountCmd = &cobra.Command{
Args: cobra.NoArgs,
Run: func(cmd *cobra.Command, args []string) {
filter := struct {
- ID string `json:"id"`
- }{ID: outputID}
+ ID string `json:"id"`
+ SmartContract bool `json:"smart_contract"`
+ }{ID: outputID, SmartContract: smartContract}
data, exitCode := util.ClientCall("/list-unspent-outputs", &filter)
if exitCode != util.Success {
}
// GetAccountUTXOs return all account unspent outputs
-func (w *Wallet) GetAccountUTXOs(id string) []account.UTXO {
- var accountUTXOs []account.UTXO
+func (w *Wallet) GetAccountUTXOs(id string, isSmartContract bool) []account.UTXO {
+ accountUTXO := account.UTXO{}
+ accountUTXOs := []account.UTXO{}
- accountUTXOIter := w.DB.IteratorPrefix([]byte(account.UTXOPreFix + id))
+ prefix := account.UTXOPreFix
+ if isSmartContract {
+ prefix = account.SUTXOPrefix
+ }
+ accountUTXOIter := w.DB.IteratorPrefix([]byte(prefix + id))
defer accountUTXOIter.Release()
for accountUTXOIter.Next() {
- accountUTXO := account.UTXO{}
if err := json.Unmarshal(accountUTXOIter.Value(), &accountUTXO); err != nil {
- hashKey := accountUTXOIter.Key()[len(account.UTXOPreFix):]
+ hashKey := accountUTXOIter.Key()[len(prefix):]
log.WithField("UTXO hash", string(hashKey)).Warn("get account UTXO")
- } else {
- accountUTXOs = append(accountUTXOs, accountUTXO)
+ continue
}
+
+ accountUTXOs = append(accountUTXOs, accountUTXO)
}
return accountUTXOs
// GetAccountBalances return all account balances
func (w *Wallet) GetAccountBalances(id string) ([]AccountBalance, error) {
- return w.indexBalances(w.GetAccountUTXOs(""))
+ return w.indexBalances(w.GetAccountUTXOs("", false))
}
// AccountBalance account balance
func (w *Wallet) indexBalances(accountUTXOs []account.UTXO) ([]AccountBalance, error) {
accBalance := make(map[string]map[string]uint64)
- balances := make([]AccountBalance, 0)
+ balances := []AccountBalance{}
for _, accountUTXO := range accountUTXOs {
assetID := accountUTXO.AssetID.String()