fabric-samples/token-sdk/auditor/service/balance.go
Arne Rutjes 99a1f49da0 add token sdk sample application
Signed-off-by: Arne Rutjes <arne123@gmail.com>
2023-10-10 09:00:23 -04:00

51 lines
1.3 KiB
Go

/*
Copyright IBM Corp. All Rights Reserved.
SPDX-License-Identifier: Apache-2.0
*/
package service
import (
"github.com/hyperledger-labs/fabric-smart-client/pkg/api"
"github.com/hyperledger-labs/fabric-token-sdk/token/services/ttx"
"github.com/pkg/errors"
)
type TokenService struct {
FSC api.ServiceProvider
}
// SERVICE
type ValueByTokenType map[string]int64
// GetBalance returns the balances per token type of a wallet
func (s TokenService) GetBalance(wallet string, tokenType string) (typeVal ValueByTokenType, err error) {
typeVal = make(ValueByTokenType)
// get auditor wallet
w := ttx.MyAuditorWallet(s.FSC)
if w == nil {
err = errors.New("failed getting default auditor wallet")
logger.Error(err.Error())
return
}
auditor := ttx.NewAuditor(s.FSC, w)
aqe := auditor.NewQueryExecutor()
defer aqe.Done()
// TODO: how to get all TokenTypes separately?
filter, err := aqe.NewHoldingsFilter().ByEnrollmentId(wallet).ByType(tokenType).Execute()
if err != nil {
err = errors.Wrapf(err, "failed retrieving holding for [%s][%s]", wallet, tokenType)
logger.Error(err.Error())
return
}
currentHolding := filter.Sum()
typeVal[tokenType] = currentHolding.Int64()
logger.Debugf("Current Holding: [%s][%s][%d]", wallet, tokenType, typeVal[tokenType])
return
}