Fix: cover case where criteria doesn't have token IDs
This commit is contained in:
parent
dd03b628af
commit
31277f1e9e
|
@ -88,6 +88,11 @@ func calculatePermissionedBalancesERC20(
|
|||
}
|
||||
|
||||
func isERC721CriteriaSatisfied(tokenBalances []thirdparty.TokenBalance, criteria *protobuf.TokenCriteria) bool {
|
||||
// No token IDs to compare against, so the criteria is satisfied.
|
||||
if len(criteria.TokenIds) == 0 {
|
||||
return true
|
||||
}
|
||||
|
||||
for _, tokenID := range criteria.TokenIds {
|
||||
tokenIDBigInt := new(big.Int).SetUint64(tokenID)
|
||||
for _, asset := range tokenBalances {
|
||||
|
@ -96,10 +101,11 @@ func isERC721CriteriaSatisfied(tokenBalances []thirdparty.TokenBalance, criteria
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
func calculatePermissionedBalancesERC721(
|
||||
func (m *Manager) calculatePermissionedBalancesERC721(
|
||||
accountAddresses []gethcommon.Address,
|
||||
balances CollectiblesByChain,
|
||||
tokenPermissions []*CommunityTokenPermission,
|
||||
|
@ -166,7 +172,7 @@ func calculatePermissionedBalancesERC721(
|
|||
return res
|
||||
}
|
||||
|
||||
func calculatePermissionedBalances(
|
||||
func (m *Manager) calculatePermissionedBalances(
|
||||
chainIDs []uint64,
|
||||
accountAddresses []gethcommon.Address,
|
||||
erc20Balances BalancesByChain,
|
||||
|
@ -175,7 +181,7 @@ func calculatePermissionedBalances(
|
|||
) map[gethcommon.Address][]PermissionedBalance {
|
||||
res := make(map[gethcommon.Address][]PermissionedBalance, 0)
|
||||
|
||||
aggregatedERC721Balances := calculatePermissionedBalancesERC721(accountAddresses, erc721Balances, tokenPermissions)
|
||||
aggregatedERC721Balances := m.calculatePermissionedBalancesERC721(accountAddresses, erc721Balances, tokenPermissions)
|
||||
for accountAddress, tokens := range aggregatedERC721Balances {
|
||||
for _, permissionedToken := range tokens {
|
||||
if permissionedToken.Amount.Sign() > 0 {
|
||||
|
@ -274,5 +280,5 @@ func (m *Manager) GetPermissionedBalances(
|
|||
erc721Balances = balances
|
||||
}
|
||||
|
||||
return calculatePermissionedBalances(allChainIDs, accountAddresses, erc20Balances, erc721Balances, tokenPermissions), nil
|
||||
return m.calculatePermissionedBalances(allChainIDs, accountAddresses, erc20Balances, erc721Balances, tokenPermissions), nil
|
||||
}
|
||||
|
|
|
@ -16,6 +16,8 @@ import (
|
|||
)
|
||||
|
||||
func (s *ManagerSuite) Test_calculatePermissionedBalances() {
|
||||
m, _, _ := s.setupManagerForTokenPermissions()
|
||||
|
||||
var mainnetID uint64 = 1
|
||||
var arbitrumID uint64 = 42161
|
||||
var gnosisID uint64 = 100
|
||||
|
@ -26,6 +28,7 @@ func (s *ManagerSuite) Test_calculatePermissionedBalances() {
|
|||
arbitrumETHContractAddress := gethcommon.HexToAddress("0xB")
|
||||
mainnetTMasterAddress := gethcommon.HexToAddress("0x123")
|
||||
mainnetOwnerAddress := gethcommon.HexToAddress("0x1234")
|
||||
mainnetTMaster_NoTokenIDsAddress := gethcommon.HexToAddress("0x456")
|
||||
|
||||
account1Address := gethcommon.HexToAddress("0x1")
|
||||
account2Address := gethcommon.HexToAddress("0x2")
|
||||
|
@ -50,6 +53,12 @@ func (s *ManagerSuite) Test_calculatePermissionedBalances() {
|
|||
erc20Balances[mainnetID][account2Address] = make(map[gethcommon.Address]*hexutil.Big)
|
||||
erc20Balances[mainnetID][account2Address][mainnetSNTContractAddress] = intToBig(120)
|
||||
erc721Balances[mainnetID][account2Address] = make(thirdparty.TokenBalancesPerContractAddress)
|
||||
erc721Balances[mainnetID][account2Address][mainnetTMaster_NoTokenIDsAddress] = []thirdparty.TokenBalance{
|
||||
thirdparty.TokenBalance{
|
||||
TokenID: uintToDecBig(1500),
|
||||
Balance: uintToDecBig(3),
|
||||
},
|
||||
}
|
||||
erc721Balances[mainnetID][account2Address][mainnetTMasterAddress] = []thirdparty.TokenBalance{
|
||||
thirdparty.TokenBalance{
|
||||
TokenID: uintToDecBig(456),
|
||||
|
@ -85,6 +94,21 @@ func (s *ManagerSuite) Test_calculatePermissionedBalances() {
|
|||
erc20Balances[gnosisID][gethcommon.HexToAddress("0xF")][gethcommon.HexToAddress("0x99")] = intToBig(5)
|
||||
|
||||
tokenPermissions := []*CommunityTokenPermission{
|
||||
&CommunityTokenPermission{
|
||||
CommunityTokenPermission: &protobuf.CommunityTokenPermission{
|
||||
Type: protobuf.CommunityTokenPermission_BECOME_TOKEN_MASTER,
|
||||
// A criteria without token IDs should be considered satisfied.
|
||||
TokenCriteria: []*protobuf.TokenCriteria{
|
||||
&protobuf.TokenCriteria{
|
||||
Type: protobuf.CommunityTokenType_ERC721,
|
||||
Symbol: "TM_NO_TOKEN_IDS",
|
||||
Name: "TMaster-NoTokenIDs",
|
||||
Amount: "1",
|
||||
ContractAddresses: map[uint64]string{mainnetID: mainnetTMaster_NoTokenIDsAddress.Hex()},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
&CommunityTokenPermission{
|
||||
CommunityTokenPermission: &protobuf.CommunityTokenPermission{
|
||||
Type: protobuf.CommunityTokenPermission_BECOME_TOKEN_MASTER,
|
||||
|
@ -176,7 +200,7 @@ func (s *ManagerSuite) Test_calculatePermissionedBalances() {
|
|||
},
|
||||
}
|
||||
|
||||
actual := calculatePermissionedBalances(
|
||||
actual := m.calculatePermissionedBalances(
|
||||
chainIDs,
|
||||
accountAddresses,
|
||||
erc20Balances,
|
||||
|
@ -209,6 +233,12 @@ func (s *ManagerSuite) Test_calculatePermissionedBalances() {
|
|||
Decimals: 16,
|
||||
Amount: &bigint.BigInt{Int: big.NewInt(120)},
|
||||
},
|
||||
PermissionedBalance{
|
||||
Type: protobuf.CommunityTokenType_ERC721,
|
||||
Symbol: "TM_NO_TOKEN_IDS",
|
||||
Name: "TMaster-NoTokenIDs",
|
||||
Amount: &bigint.BigInt{Int: big.NewInt(1)},
|
||||
},
|
||||
PermissionedBalance{
|
||||
Type: protobuf.CommunityTokenType_ERC721,
|
||||
Symbol: "TMTEST",
|
||||
|
|
Loading…
Reference in New Issue