use of com.hedera.services.store.models.Id in project hedera-services by hashgraph.
the class TypedTokenStoreTest method savesTokenAsExpected.
/* --- Token saving --- */
@Test
void savesTokenAsExpected() {
// setup:
final var mintedSerialNo = 33L;
final var wipedSerialNo = 33L;
final var mintedSerialNo2 = 44;
final var burnedSerialNo = 44;
final var nftMeta = "abcdefgh".getBytes();
final var treasuryId = new EntityId(0, 0, treasuryAccountNum);
final var tokenEntityId = new EntityId(0, 0, tokenNum);
final var creationTime = new RichInstant(1_234_567L, 8);
final var modelTreasuryId = new Id(0, 0, treasuryAccountNum);
final var mintedToken = new UniqueToken(tokenId, mintedSerialNo, creationTime, Id.DEFAULT, nftMeta);
final var wipedToken = new UniqueToken(tokenId, wipedSerialNo, creationTime, modelTreasuryId, nftMeta);
final var mintedToken2 = new UniqueToken(tokenId, mintedSerialNo2, creationTime, Id.DEFAULT, nftMeta);
final var burnedToken = new UniqueToken(tokenId, burnedSerialNo, creationTime, modelTreasuryId, nftMeta);
// and:
final var expectedReplacementToken = new MerkleToken(expiry, tokenSupply * 2, 0, symbol, name, freezeDefault, true, new EntityId(0, 0, autoRenewAccountNum));
expectedReplacementToken.setAutoRenewAccount(treasuryId);
expectedReplacementToken.setSupplyKey(supplyKey);
expectedReplacementToken.setFreezeKey(freezeKey);
expectedReplacementToken.setKycKey(kycKey);
expectedReplacementToken.setPauseKey(pauseKey);
expectedReplacementToken.setAccountsFrozenByDefault(!freezeDefault);
expectedReplacementToken.setMemo(memo);
expectedReplacementToken.setAutoRenewPeriod(autoRenewPeriod);
// and:
final var expectedReplacementToken2 = new MerkleToken(expiry, tokenSupply * 4, 0, symbol, name, freezeDefault, true, new EntityId(0, 0, treasuryAccountNum));
expectedReplacementToken2.setAutoRenewAccount(treasuryId);
expectedReplacementToken2.setSupplyKey(supplyKey);
expectedReplacementToken2.setFreezeKey(freezeKey);
expectedReplacementToken2.setKycKey(kycKey);
expectedReplacementToken2.setPauseKey(pauseKey);
expectedReplacementToken2.setAccountsFrozenByDefault(!freezeDefault);
expectedReplacementToken2.setMemo(memo);
expectedReplacementToken2.setAutoRenewPeriod(autoRenewPeriod);
// and:
final var expectedNewUniqTokenId = NftId.withDefaultShardRealm(tokenEntityId.num(), mintedSerialNo);
final var expectedNewUniqTokenId2 = NftId.withDefaultShardRealm(tokenEntityId.num(), mintedSerialNo2);
final var expectedNewUniqToken = new MerkleUniqueToken(MISSING_ENTITY_ID, nftMeta, creationTime);
final var expectedPastUniqTokenId = NftId.withDefaultShardRealm(tokenEntityId.num(), wipedSerialNo);
final var expectedPastUniqTokenId2 = NftId.withDefaultShardRealm(tokenEntityId.num(), burnedSerialNo);
givenModifiableToken(merkleTokenId, merkleToken);
givenToken(merkleTokenId, merkleToken);
// when:
var modelToken = subject.loadToken(tokenId);
// and:
modelToken.setTotalSupply(tokenSupply * 2);
modelToken.setAutoRenewAccount(treasuryAccount);
modelToken.setTreasury(autoRenewAccount);
modelToken.setFrozenByDefault(!freezeDefault);
modelToken.mintedUniqueTokens().add(mintedToken);
modelToken.setIsDeleted(false);
modelToken.setExpiry(expiry);
modelToken.setAutoRenewPeriod(autoRenewPeriod);
modelToken.removedUniqueTokens().add(wipedToken);
modelToken.setAutoRenewPeriod(autoRenewPeriod);
modelToken.setCustomFees(List.of());
modelToken.setMemo(memo);
// and:
subject.commitToken(modelToken);
// then:
assertEquals(expectedReplacementToken, merkleToken);
// and:
verify(sideEffectsTracker).trackTokenChanges(modelToken);
verify(uniqueTokens).put(expectedNewUniqTokenId, expectedNewUniqToken);
verify(uniqueTokens).put(NftId.withDefaultShardRealm(tokenEntityId.num(), mintedSerialNo), expectedNewUniqToken);
verify(uniqueTokens).remove(expectedPastUniqTokenId);
// when:
modelToken = subject.loadToken(tokenId);
// and:
modelToken.setTotalSupply(tokenSupply * 4);
modelToken.setAutoRenewAccount(treasuryAccount);
modelToken.setTreasury(treasuryAccount);
modelToken.setFrozenByDefault(!freezeDefault);
modelToken.mintedUniqueTokens().add(mintedToken2);
modelToken.setIsDeleted(false);
modelToken.setExpiry(expiry);
modelToken.removedUniqueTokens().add(burnedToken);
modelToken.setCustomFees(List.of());
// and:
subject.commitToken(modelToken);
// then:
assertEquals(expectedReplacementToken2, merkleToken);
// and:
verify(sideEffectsTracker).trackTokenChanges(modelToken);
verify(uniqueTokens).put(expectedNewUniqTokenId2, expectedNewUniqToken);
verify(uniqueTokens).remove(expectedPastUniqTokenId2);
}
use of com.hedera.services.store.models.Id 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.Id in project hedera-services by hashgraph.
the class CallEvmTxProcessorTest method givenValidMock.
private void givenValidMock() {
given(worldState.updater()).willReturn(updater);
given(worldState.updater().updater()).willReturn(updater);
given(globalDynamicProperties.fundingAccount()).willReturn(new Id(0, 0, 1010).asGrpcAccount());
var evmAccount = mock(EvmAccount.class);
given(gasCalculator.transactionIntrinsicGasCost(Bytes.EMPTY, false)).willReturn(Gas.ZERO);
given(updater.getOrCreateSenderAccount(sender.getId().asEvmAddress())).willReturn(evmAccount);
given(worldState.updater()).willReturn(updater);
given(codeCache.getIfPresent(any())).willReturn(new Code());
given(gasCalculator.getSelfDestructRefundAmount()).willReturn(Gas.ZERO);
given(gasCalculator.getMaxRefundQuotient()).willReturn(2L);
var senderMutableAccount = mock(MutableAccount.class);
given(senderMutableAccount.decrementBalance(any())).willReturn(Wei.of(1234L));
given(senderMutableAccount.incrementBalance(any())).willReturn(Wei.of(1500L));
given(evmAccount.getMutable()).willReturn(senderMutableAccount);
given(updater.getSenderAccount(any())).willReturn(evmAccount);
given(updater.getSenderAccount(any()).getMutable()).willReturn(senderMutableAccount);
given(updater.getOrCreate(any())).willReturn(evmAccount);
given(updater.getOrCreate(any()).getMutable()).willReturn(senderMutableAccount);
given(updater.getSbhRefund()).willReturn(Gas.ZERO);
}
use of com.hedera.services.store.models.Id in project hedera-services by hashgraph.
the class CallLocalEvmTxProcessorTest method givenValidMock.
private void givenValidMock() {
given(worldState.updater()).willReturn(updater);
given(worldState.updater().updater()).willReturn(updater);
given(globalDynamicProperties.fundingAccount()).willReturn(new Id(0, 0, 1010).asGrpcAccount());
var evmAccount = mock(EvmAccount.class);
given(gasCalculator.transactionIntrinsicGasCost(Bytes.EMPTY, false)).willReturn(Gas.ZERO);
given(updater.getOrCreateSenderAccount(sender.getId().asEvmAddress())).willReturn(evmAccount);
given(updater.getOrCreateSenderAccount(sender.getId().asEvmAddress()).getMutable()).willReturn(mock(MutableAccount.class));
given(worldState.updater()).willReturn(updater);
given(codeCache.getIfPresent(any())).willReturn(new Code());
var senderMutableAccount = mock(MutableAccount.class);
given(senderMutableAccount.decrementBalance(any())).willReturn(Wei.of(1234L));
given(senderMutableAccount.incrementBalance(any())).willReturn(Wei.of(1500L));
given(gasCalculator.getSelfDestructRefundAmount()).willReturn(Gas.ZERO);
given(gasCalculator.getMaxRefundQuotient()).willReturn(2L);
given(updater.getSenderAccount(any())).willReturn(evmAccount);
given(updater.getSenderAccount(any()).getMutable()).willReturn(senderMutableAccount);
given(updater.getOrCreate(any())).willReturn(evmAccount);
given(updater.getOrCreate(any()).getMutable()).willReturn(senderMutableAccount);
given(updater.getSbhRefund()).willReturn(Gas.ZERO);
}
use of com.hedera.services.store.models.Id in project hedera-services by hashgraph.
the class TransactionProcessingResultTest method assertCorrectDataOnSuccessfulTransaction.
@Test
void assertCorrectDataOnSuccessfulTransaction() {
var firstContract = new Account(new Id(0, 0, 1003));
var secondContract = new Account(new Id(0, 0, 1004));
var listOfCreatedContracts = List.of(firstContract.getId().asGrpcContract(), secondContract.getId().asGrpcContract());
var log = new Log(logger.getId().asEvmAddress(), Bytes.fromHexString("0x0102"), List.of(logTopic, logTopic, logTopic, logTopic));
final var logList = List.of(log);
final var firstContractChanges = new TreeMap<Bytes, Pair<Bytes, Bytes>>(BytesComparator.INSTANCE);
firstContractChanges.put(UInt256.valueOf(1L), new ImmutablePair<>(UInt256.valueOf(1L), null));
final var secondContractChanges = new TreeMap<Bytes, Pair<Bytes, Bytes>>(BytesComparator.INSTANCE);
secondContractChanges.put(UInt256.valueOf(1L), new ImmutablePair<>(UInt256.valueOf(1L), UInt256.valueOf(2L)));
secondContractChanges.put(UInt256.valueOf(2L), new ImmutablePair<>(UInt256.valueOf(55L), UInt256.valueOf(255L)));
final Map<Address, Map<Bytes, Pair<Bytes, Bytes>>> contractStateChanges = new TreeMap<>(BytesComparator.INSTANCE);
contractStateChanges.put(firstContract.getId().asEvmAddress(), firstContractChanges);
contractStateChanges.put(secondContract.getId().asEvmAddress(), secondContractChanges);
final var expect = ContractFunctionResult.newBuilder().setGasUsed(GAS_USAGE).setBloom(ByteString.copyFrom(LogsBloomFilter.builder().insertLogs(logList).build().toArray()));
expect.setContractCallResult(ByteString.copyFrom(Bytes.EMPTY.toArray()));
expect.setContractID(EntityIdUtils.contractIdFromEvmAddress(recipient.getId().asEvmAddress().toArray()));
expect.addAllCreatedContractIDs(listOfCreatedContracts);
final var firstContractChangesRpc = ContractStateChange.newBuilder().setContractID(firstContract.getId().asGrpcContract()).addStorageChanges(StorageChange.newBuilder().setSlot(ByteString.copyFrom(UInt256.valueOf(1L).trimLeadingZeros().toArrayUnsafe())).setValueRead(ByteString.copyFrom(UInt256.valueOf(1L).trimLeadingZeros().toArrayUnsafe())).build()).build();
final var secondContractChangesRpc = ContractStateChange.newBuilder().setContractID(secondContract.getId().asGrpcContract()).addStorageChanges(StorageChange.newBuilder().setSlot(ByteString.copyFrom(UInt256.valueOf(1L).trimLeadingZeros().toArrayUnsafe())).setValueRead(ByteString.copyFrom(UInt256.valueOf(1L).trimLeadingZeros().toArrayUnsafe())).setValueWritten(BytesValue.newBuilder().setValue(ByteString.copyFrom(UInt256.valueOf(2L).trimLeadingZeros().toArrayUnsafe()))).build()).addStorageChanges(StorageChange.newBuilder().setSlot(ByteString.copyFrom(UInt256.valueOf(2L).trimLeadingZeros().toArrayUnsafe())).setValueRead(ByteString.copyFrom(UInt256.valueOf(55L).trimLeadingZeros().toArrayUnsafe())).setValueWritten(BytesValue.newBuilder().setValue(ByteString.copyFrom(UInt256.valueOf(255L).trimLeadingZeros().toArrayUnsafe()))).build()).build();
expect.addAllStateChanges(List.of(firstContractChangesRpc, secondContractChangesRpc));
var result = TransactionProcessingResult.successful(logList, GAS_USAGE, GAS_REFUND, 1234L, Bytes.EMPTY, recipient.getId().asEvmAddress(), contractStateChanges);
result.setCreatedContracts(listOfCreatedContracts);
assertEquals(expect.getGasUsed(), result.getGasUsed());
final var resultAsGrpc = result.toGrpc();
assertEquals(GAS_REFUND, result.getSbhRefund());
assertEquals(Optional.empty(), result.getHaltReason());
assertEquals(expect.getBloom(), resultAsGrpc.getBloom());
assertEquals(expect.getContractID(), resultAsGrpc.getContractID());
assertEquals(ByteString.EMPTY, resultAsGrpc.getContractCallResult());
assertEquals(listOfCreatedContracts, resultAsGrpc.getCreatedContractIDsList());
}
Aggregations