Skip to content

Commit

Permalink
update from develop
Browse files Browse the repository at this point in the history
Signed-off-by: Ivan Ivanov <ivanivanov.ii726@gmail.com>
  • Loading branch information
0xivanov committed Feb 2, 2024
2 parents 90cd8a7 + 3aa52f2 commit 9647d1c
Show file tree
Hide file tree
Showing 462 changed files with 7,537 additions and 1,860 deletions.
3 changes: 1 addition & 2 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -1002,8 +1002,7 @@ Sessionx.vim

# Temporary
.netrwhist
# Auto-generated tag files
tags

# Persistent undo
[._]*.un~

Expand Down
4 changes: 2 additions & 2 deletions hedera-node/hedera-app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ testModuleInfo {
requires("com.hedera.node.app.spi.test.fixtures")
requires("com.hedera.node.config.test.fixtures")
requires("com.google.jimfs")
requires("com.swirlds.test.framework")
requires("com.swirlds.config.extensions.test.fixtures")
requires("io.github.classgraph")
requires("org.assertj.core")
requires("org.hamcrest")
Expand Down Expand Up @@ -98,8 +98,8 @@ xtestModuleInfo {
requires("com.hedera.pbj.runtime")
requires("com.swirlds.common")
requires("com.swirlds.config.api")
requires("com.swirlds.config.extensions.test.fixtures")
requires("com.swirlds.metrics.api")
requires("com.swirlds.test.framework")
requires("dagger")
requires("headlong")
requires("javax.inject")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,8 +30,7 @@
import java.util.Iterator;
import java.util.NoSuchElementException;
import java.util.Objects;
import java.util.concurrent.Executor;
import java.util.concurrent.Executors;
import java.util.function.Consumer;

/**
* An implementation of {@link ReadableKVState} backed by a {@link VirtualMap}, resulting in a state
Expand All @@ -41,12 +40,15 @@
* @param <V> The type of value for the state
*/
public final class OnDiskReadableKVState<K, V> extends ReadableKVStateBase<K, V> {

private static final Consumer<Runnable> DEFAULT_RUNNER = Thread::startVirtualThread;

/** The backing merkle data structure to use */
private final VirtualMap<OnDiskKey<K>, OnDiskValue<V>> virtualMap;

private final StateMetadata<K, V> md;

private final Executor executor;
private final Consumer<Runnable> runner;

/**
* Create a new instance
Expand All @@ -56,21 +58,18 @@ public final class OnDiskReadableKVState<K, V> extends ReadableKVStateBase<K, V>
*/
public OnDiskReadableKVState(
@NonNull final StateMetadata<K, V> md, @NonNull final VirtualMap<OnDiskKey<K>, OnDiskValue<V>> virtualMap) {
super(md.stateDefinition().stateKey());
this.md = md;
this.virtualMap = Objects.requireNonNull(virtualMap);
this.executor = Executors.newVirtualThreadPerTaskExecutor();
this(md, virtualMap, DEFAULT_RUNNER);
}

@VisibleForTesting
OnDiskReadableKVState(
@NonNull final StateMetadata<K, V> md,
@NonNull final VirtualMap<OnDiskKey<K>, OnDiskValue<V>> virtualMap,
@NonNull final Executor executor) {
@NonNull final Consumer<Runnable> runner) {
super(md.stateDefinition().stateKey());
this.md = md;
this.virtualMap = Objects.requireNonNull(virtualMap);
this.executor = executor;
this.runner = runner;
}

/** {@inheritDoc} */
Expand Down Expand Up @@ -136,6 +135,6 @@ public long size() {
@Override
public void warm(@NonNull final K key) {
final var k = new OnDiskKey<>(md, key);
executor.execute(() -> virtualMap.warm(k));
runner.accept(() -> virtualMap.warm(k));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
import com.swirlds.common.crypto.config.CryptoConfig;

public class CryptoConfigUtils {
public static CryptoConfig MINIMAL_CRYPTO_CONFIG = new CryptoConfig(1, 1, 5, 5, "keystorePass", false);
public static CryptoConfig MINIMAL_CRYPTO_CONFIG = new CryptoConfig(1, 1, "keystorePass", false);

private CryptoConfigUtils() {}
}
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@
import com.hedera.node.config.ConfigProvider;
import com.hedera.node.config.VersionedConfigImpl;
import com.hedera.node.config.data.AutoRenewConfig;
import com.swirlds.test.framework.config.TestConfigBuilder;
import com.swirlds.config.extensions.test.fixtures.TestConfigBuilder;
import org.junit.jupiter.api.Test;

class ExpiryValidationTest extends AppTestBase {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@
import com.hedera.node.config.data.LedgerConfig;
import com.hedera.node.config.types.LongPair;
import com.hedera.pbj.runtime.io.buffer.Bytes;
import com.swirlds.test.framework.config.TestConfigBuilder;
import com.swirlds.config.extensions.test.fixtures.TestConfigBuilder;
import java.time.Instant;
import java.util.HashMap;
import java.util.Map;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,13 +57,13 @@
import com.swirlds.common.utility.AutoCloseableWrapper;
import com.swirlds.config.api.Configuration;
import com.swirlds.config.api.source.ConfigSource;
import com.swirlds.config.extensions.test.fixtures.TestConfigBuilder;
import com.swirlds.metrics.api.Counter;
import com.swirlds.metrics.api.Metrics;
import com.swirlds.platform.system.Platform;
import com.swirlds.platform.system.SwirldState;
import com.swirlds.platform.system.address.Address;
import com.swirlds.platform.system.address.AddressBook;
import com.swirlds.test.framework.config.TestConfigBuilder;
import edu.umd.cs.findbugs.annotations.NonNull;
import edu.umd.cs.findbugs.annotations.Nullable;
import java.util.LinkedHashSet;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,9 @@
requires com.hedera.pbj.runtime;
requires com.swirlds.common;
requires com.swirlds.config.api;
requires com.swirlds.config.extensions.test.fixtures;
requires com.swirlds.metrics.api;
requires com.swirlds.platform.core;
requires com.swirlds.test.framework;
requires org.assertj.core;
requires static com.github.spotbugs.annotations;
}
2 changes: 1 addition & 1 deletion hedera-node/hedera-config/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ description = "Hedera Configuration"

testModuleInfo {
requires("com.hedera.node.config")
requires("com.swirlds.test.framework")
requires("com.swirlds.config.extensions.test.fixtures")
requires("org.assertj.core")
requires("org.hyperledger.besu.datatypes")
requires("org.junit.jupiter.api")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,8 @@ public record ContractsConfig(
boolean evmVersionDynamic,
@ConfigProperty(value = "evm.allowCallsToNonContractAccounts", defaultValue = "true") @NetworkProperty
boolean evmAllowCallsToNonContractAccounts,
@ConfigProperty(value = "evm.chargeGasOnPreEvmException", defaultValue = "true") @NetworkProperty
boolean chargeGasOnPreEvmException,
@ConfigProperty(value = "evm.nonExtantContractsFail", defaultValue = "0") @NetworkProperty
Set<Long> evmNonExtantContractsFail,
@ConfigProperty(value = "evm.version", defaultValue = "v0.46") @NetworkProperty String evmVersion) {}
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@

import static org.assertj.core.api.Assertions.assertThat;

import com.swirlds.test.framework.config.TestConfigBuilder;
import com.swirlds.config.extensions.test.fixtures.TestConfigBuilder;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,7 @@
import com.swirlds.common.metrics.config.MetricsConfig;
import com.swirlds.common.metrics.platform.prometheus.PrometheusConfig;
import com.swirlds.config.api.Configuration;
import com.swirlds.config.extensions.test.fixtures.TestConfigBuilder;
import com.swirlds.merkledb.config.MerkleDbConfig;
import com.swirlds.platform.components.appcomm.WiringConfig;
import com.swirlds.platform.config.BasicConfig;
Expand All @@ -100,7 +101,6 @@
import com.swirlds.platform.health.OSHealthCheckConfig;
import com.swirlds.platform.network.SocketConfig;
import com.swirlds.platform.system.status.PlatformStatusConfig;
import com.swirlds.test.framework.config.TestConfigBuilder;
import com.swirlds.virtualmap.config.VirtualMapConfig;
import edu.umd.cs.findbugs.annotations.NonNull;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
exports com.hedera.node.config.testfixtures;

requires transitive com.swirlds.config.api;
requires transitive com.swirlds.test.framework;
requires transitive com.swirlds.config.extensions.test.fixtures;
requires com.hedera.node.app.hapi.utils;
requires com.hedera.node.app.service.mono;
requires com.hedera.node.config;
Expand Down
2 changes: 1 addition & 1 deletion hedera-node/hedera-consensus-service-impl/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ testModuleInfo {
requires("com.hedera.node.config.test.fixtures")
requires("com.google.protobuf")
requires("com.swirlds.common")
requires("com.swirlds.test.framework")
requires("com.swirlds.config.extensions.test.fixtures")
requires("org.assertj.core")
requires("org.junit.jupiter.api")
requires("org.mockito")
Expand Down
2 changes: 1 addition & 1 deletion hedera-node/hedera-file-service-impl/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ testModuleInfo {
requires("com.hedera.node.app.spi.test.fixtures")
requires("com.hedera.node.config.test.fixtures")
requires("com.google.protobuf")
requires("com.swirlds.test.framework")
requires("com.swirlds.config.extensions.test.fixtures")
requires("org.assertj.core")
requires("org.junit.jupiter.api")
requires("org.mockito")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@
import com.hederahashgraph.api.proto.java.ContractCreateTransactionBody;
import edu.umd.cs.findbugs.annotations.Nullable;
import java.time.Instant;
import org.hyperledger.besu.datatypes.Address;

/**
* Encapsulates a set of customizations to a smart contract. Primarily delegates to an {@link
Expand All @@ -45,14 +46,19 @@ public class ContractCustomizer {
// Null if the contract is immutable; then its key derives from its entity id
private final JKey cryptoAdminKey;
private final HederaAccountCustomizer accountCustomizer;
private final Address customizerAppliesToAddress;

public ContractCustomizer(final HederaAccountCustomizer accountCustomizer) {
this(null, accountCustomizer);
this(null, accountCustomizer, null);
}

public ContractCustomizer(final @Nullable JKey cryptoAdminKey, final HederaAccountCustomizer accountCustomizer) {
public ContractCustomizer(
final @Nullable JKey cryptoAdminKey,
final HederaAccountCustomizer accountCustomizer,
final @Nullable Address customizerAppliesToAddress) {
this.cryptoAdminKey = cryptoAdminKey;
this.accountCustomizer = accountCustomizer;
this.customizerAppliesToAddress = customizerAppliesToAddress;
}

/**
Expand All @@ -62,10 +68,14 @@ public ContractCustomizer(final @Nullable JKey cryptoAdminKey, final HederaAccou
* @param decodedKey the key implied by the HAPI operation
* @param consensusTime the consensus time of the ContractCreate
* @param op the details of the HAPI operation
* @param customizerAppliesToAddress the address of the contract being created, or null if not applicable
* @return an appropriate top-level customizer
*/
public static ContractCustomizer fromHapiCreation(
final JKey decodedKey, final Instant consensusTime, final ContractCreateTransactionBody op) {
final JKey decodedKey,
final Instant consensusTime,
final ContractCreateTransactionBody op,
final Address customizerAppliesToAddress) {
final var autoRenewPeriod = op.getAutoRenewPeriod().getSeconds();
final var expiry = consensusTime.getEpochSecond() + autoRenewPeriod;

Expand All @@ -86,7 +96,7 @@ public static ContractCustomizer fromHapiCreation(
customizer.customizeStakedId(op.getStakedIdCase().name(), op.getStakedAccountId(), op.getStakedNodeId());
}

return new ContractCustomizer(key, customizer);
return new ContractCustomizer(key, customizer, customizerAppliesToAddress);
}

/**
Expand All @@ -96,16 +106,19 @@ public static ContractCustomizer fromHapiCreation(
*
* @param sponsor the sending contract
* @param ledger the containing ledger
* @param customizerAppliesToAddress the address of the contract being created, or null if not applicable
* @return an appropriate child customizer
*/
public static ContractCustomizer fromSponsorContract(
final AccountID sponsor, final TransactionalLedger<AccountID, AccountProperty, HederaAccount> ledger) {
final AccountID sponsor,
final TransactionalLedger<AccountID, AccountProperty, HederaAccount> ledger,
final Address customizerAppliesToAddress) {
var key = (JKey) ledger.get(sponsor, KEY);
if (key instanceof JContractIDKey) {
key = null;
}
final var customizer = getAccountCustomizer(sponsor, ledger);
return new ContractCustomizer(key, customizer);
return new ContractCustomizer(key, customizer, customizerAppliesToAddress);
}

public static ContractCustomizer fromSponsorContractWithoutKey(
Expand Down Expand Up @@ -162,4 +175,11 @@ public void customizeSynthetic(final ContractCreateTransactionBody.Builder op) {
public HederaAccountCustomizer accountCustomizer() {
return accountCustomizer;
}

public boolean appliesTo(final Address address) {
if (customizerAppliesToAddress == null) {
throw new IllegalStateException("CustomizerAppliesToAddress is null");
}
return customizerAppliesToAddress.equals(address);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ public TransactionBody customize(
final TransactionBody synthCreate, final AccountID callerId, final boolean inheritKey) {
ContractCustomizer customizer;
if (inheritKey) {
customizer = ContractCustomizer.fromSponsorContract(callerId, accountsLedger);
customizer = ContractCustomizer.fromSponsorContract(callerId, accountsLedger, null);
} else {
customizer = ContractCustomizer.fromSponsorContractWithoutKey(callerId, accountsLedger);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -121,7 +121,8 @@ public MutableAccount getOrCreate(final Address address) {
return account;
}
// if the customizer is set, that means we're creating a contract
if (hasPendingCreationCustomizer()) {
if (hasPendingCreationCustomizer()
&& customizerForPendingCreation().appliesTo(aliases().resolveForEvm(address))) {
return createAccount(address);
}
// if the customizer is not set, that means we're creating a ghost account that will not be persisted
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -185,7 +185,7 @@ public Address newContractAddress(final Address sponsorAddressOrAlias) {
final var newAddress = worldState.newContractAddress(sponsor);
numAllocatedIds++;
final var sponsorId = accountIdFromEvmAddress(sponsor);
pendingCreationCustomizer = customizerFactory.apply(sponsorId, trackingAccounts());
pendingCreationCustomizer = customizerFactory.apply(sponsorId, trackingAccounts(), newAddress);
if (!dynamicProperties.areContractAutoAssociationsEnabled()) {
pendingCreationCustomizer.accountCustomizer().maxAutomaticAssociations(0);
}
Expand Down Expand Up @@ -284,7 +284,8 @@ private boolean isMissingTarget(final Address alias) {

@FunctionalInterface
interface CustomizerFactory {
ContractCustomizer apply(AccountID id, TransactionalLedger<AccountID, AccountProperty, HederaAccount> ledger);
ContractCustomizer apply(
AccountID id, TransactionalLedger<AccountID, AccountProperty, HederaAccount> ledger, Address address);
}

// --- Only used by unit tests
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -197,7 +197,8 @@ public void doStateTransitionOperation(
}

// --- Do the business logic ---
final ContractCustomizer hapiSenderCustomizer = fromHapiCreation(key, consensusTime, op);
final ContractCustomizer hapiSenderCustomizer =
fromHapiCreation(key, consensusTime, op, newContractMirrorAddress);
worldState.setHapiSenderCustomizer(hapiSenderCustomizer);
TransactionProcessingResult result;
try {
Expand Down

0 comments on commit 9647d1c

Please sign in to comment.