Search in sources :

Example 1 with Token

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));
}
Also used : EntityId(com.hedera.services.state.submerkle.EntityId) Token(com.hedera.services.store.models.Token) MerkleToken(com.hedera.services.state.merkle.MerkleToken) UniqueToken(com.hedera.services.store.models.UniqueToken) MerkleUniqueToken(com.hedera.services.state.merkle.MerkleUniqueToken) Test(org.junit.jupiter.api.Test)

Example 2 with Token

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());
}
Also used : Token(com.hedera.services.store.models.Token) Id(com.hedera.services.store.models.Id) Test(org.junit.jupiter.api.Test)

Example 3 with Token

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());
}
Also used : UniqueToken(com.hedera.services.store.models.UniqueToken) Token(com.hedera.services.store.models.Token) UniqueToken(com.hedera.services.store.models.UniqueToken) Test(org.junit.jupiter.api.Test)

Example 4 with Token

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());
}
Also used : UniqueToken(com.hedera.services.store.models.UniqueToken) Token(com.hedera.services.store.models.Token) UniqueToken(com.hedera.services.store.models.UniqueToken) Test(org.junit.jupiter.api.Test)

Example 5 with Token

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());
}
Also used : Account(com.hedera.services.store.models.Account) Token(com.hedera.services.store.models.Token) UniqueToken(com.hedera.services.store.models.UniqueToken) TokenRelationship(com.hedera.services.store.models.TokenRelationship) Test(org.junit.jupiter.api.Test)

Aggregations

Token (com.hedera.services.store.models.Token)6 Test (org.junit.jupiter.api.Test)6 UniqueToken (com.hedera.services.store.models.UniqueToken)4 Account (com.hedera.services.store.models.Account)2 Id (com.hedera.services.store.models.Id)2 TokenRelationship (com.hedera.services.store.models.TokenRelationship)2 MerkleToken (com.hedera.services.state.merkle.MerkleToken)1 MerkleUniqueToken (com.hedera.services.state.merkle.MerkleUniqueToken)1 EntityId (com.hedera.services.state.submerkle.EntityId)1 NftId (com.hedera.services.store.models.NftId)1 EntityNumPair.fromNftId (com.hedera.services.utils.EntityNumPair.fromNftId)1