mirror of
https://github.com/hyperledger/fabric-samples.git
synced 2026-06-17 07:25:10 +00:00
51 lines
1.3 KiB
Go
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
|
|
}
|