use of com.hedera.services.store.models.Token in project hedera-services by hashgraph.
the class TypedTokenStoreTest method loadsUniqueTokens.
@Test
void loadsUniqueTokens() {
final var aToken = new Token(miscId);
final var merkleUniqueToken = mock(MerkleUniqueToken.class);
final var serialNumbers = List.of(1L, 2L);
given(merkleUniqueToken.getOwner()).willReturn(new EntityId(Id.DEFAULT));
given(uniqueTokens.getImmutableRef(any())).willReturn(merkleUniqueToken);
subject.loadUniqueTokens(aToken, serialNumbers);
assertEquals(2, aToken.getLoadedUniqueTokens().size());
given(uniqueTokens.getImmutableRef(any())).willReturn(null);
assertThrows(InvalidTransactionException.class, () -> subject.loadUniqueTokens(aToken, serialNumbers));
}
use of com.hedera.services.store.models.Token in project hedera-services by hashgraph.
the class AccountStoreTest method persistenceUpdatesTokens.
@Test
void persistenceUpdatesTokens() {
setupWithAccount(miscMerkleId, miscMerkleAccount);
setupWithMutableAccount(miscMerkleId, miscMerkleAccount);
// and:
final var aThirdToken = new Token(new Id(0, 0, 888));
// and:
final var expectedReplacement = MerkleAccountFactory.newAccount().balance(balance).assocTokens(firstAssocTokenId, secondAssocTokenId, aThirdToken.getId()).expirationTime(expiry).maxAutomaticAssociations(maxAutoAssociations).alreadyUsedAutomaticAssociations(alreadyUsedAutoAssociations).proxy(proxy.asGrpcAccount()).get();
// given:
final var model = subject.loadAccount(miscId);
// when:
model.associateWith(List.of(aThirdToken), Integer.MAX_VALUE, false);
// and:
subject.commitAccount(model);
// then:
assertEquals(expectedReplacement, miscMerkleAccount);
// verify(accounts, never()).replace(miscMerkleId, expectedReplacement);
// and:
assertNotSame(miscMerkleAccount.tokens().getIds(), model.getAssociatedTokens());
}
use of com.hedera.services.store.models.Token in project hedera-services by hashgraph.
the class SideEffectsTrackerTest method tracksAndResetsNftMintsAsExpected.
@Test
void tracksAndResetsNftMintsAsExpected() {
final var changedToken = new Token(Id.fromGrpcToken(aToken));
changedToken.mintedUniqueTokens().add(new UniqueToken(Id.fromGrpcToken(cSN1.tokenId()), cSN1.serialNo()));
subject.trackTokenChanges(changedToken);
assertTrue(subject.hasTrackedNftMints());
assertEquals(List.of(cSN1.serialNo()), subject.getTrackedNftMints());
subject.reset();
assertFalse(subject.hasTrackedNftMints());
assertTrue(subject.getTrackedNftMints().isEmpty());
}
use of com.hedera.services.store.models.Token in project hedera-services by hashgraph.
the class SideEffectsTrackerTest method canClearJustTokenChanges.
@Test
void canClearJustTokenChanges() {
final var newSupply = 1_234L;
final var changedToken = new Token(Id.fromGrpcToken(aToken));
changedToken.setNew(true);
changedToken.setTotalSupply(newSupply);
changedToken.mintedUniqueTokens().add(new UniqueToken(Id.fromGrpcToken(cSN1.tokenId()), cSN1.serialNo()));
subject.trackHbarChange(aAccount, aFirstBalanceChange);
subject.trackTokenUnitsChange(bToken, cAccount, cOnlyBalanceChange);
subject.trackNftOwnerChange(cSN1, aAccount, bAccount);
subject.trackAutoAssociation(aToken, bAccount);
subject.trackTokenChanges(changedToken);
subject.resetTrackedTokenChanges();
assertFalse(subject.hasTrackedNewTokenId());
assertFalse(subject.hasTrackedTokenSupply());
assertFalse(subject.hasTrackedNftMints());
assertTrue(subject.getTrackedAutoAssociations().isEmpty());
assertSame(Collections.emptyList(), subject.getNetTrackedTokenUnitAndOwnershipChanges());
final var netChanges = subject.getNetTrackedHbarChanges();
assertEquals(1, netChanges.getAccountAmountsCount());
final var aChange = netChanges.getAccountAmounts(0);
assertEquals(aAccount, aChange.getAccountID());
assertEquals(aFirstBalanceChange, aChange.getAmount());
}
use of com.hedera.services.store.models.Token in project hedera-services by hashgraph.
the class SideEffectsTrackerTest method prioritizesExplicitTokenBalanceChanges.
@Test
void prioritizesExplicitTokenBalanceChanges() {
final var aaRelChange = new TokenRelationship(new Token(Id.fromGrpcToken(aToken)), new Account(Id.fromGrpcAccount(aAccount)));
aaRelChange.getToken().setType(FUNGIBLE_COMMON);
aaRelChange.setBalance(aFirstBalanceChange);
final var bbRelChange = new TokenRelationship(new Token(Id.fromGrpcToken(bToken)), new Account(Id.fromGrpcAccount(bAccount)));
bbRelChange.getToken().setType(FUNGIBLE_COMMON);
final var ccRelChange = new TokenRelationship(new Token(Id.fromGrpcToken(cToken)), new Account(Id.fromGrpcAccount(cAccount)));
ccRelChange.setBalance(cOnlyBalanceChange);
ccRelChange.getToken().setType(FUNGIBLE_COMMON);
subject.trackNftOwnerChange(cSN1, aAccount, bAccount);
subject.trackTokenBalanceChanges(List.of(ccRelChange, bbRelChange, aaRelChange));
final var tokenChanges = subject.getNetTrackedTokenUnitAndOwnershipChanges();
assertEquals(2, tokenChanges.size());
final var aChange = tokenChanges.get(0);
assertEquals(aToken, aChange.getToken());
assertEquals(1, aChange.getTransfersCount());
assertEquals(aFirstBalanceChange, aChange.getTransfers(0).getAmount());
final var cChange = tokenChanges.get(1);
assertEquals(cToken, cChange.getToken());
assertEquals(1, cChange.getTransfersCount());
assertEquals(cOnlyBalanceChange, cChange.getTransfers(0).getAmount());
}
Aggregations