Skip to content

Commit

Permalink
feat: add enableDAB flag to enable and disable DAB features (#15232)
Browse files Browse the repository at this point in the history
Signed-off-by: Iris Simon <[email protected]>
  • Loading branch information
iwsimon authored Aug 29, 2024
1 parent a70ca00 commit 1397e8a
Show file tree
Hide file tree
Showing 21 changed files with 131 additions and 32 deletions.
1 change: 1 addition & 0 deletions hedera-node/configuration/dev/application.properties
Original file line number Diff line number Diff line change
Expand Up @@ -10,3 +10,4 @@ staking.fees.stakingRewardPercentage=10
# Needed for Restart and Reconnect HapiTests that run many transactions of each type
bootstrap.throttleDefsJson.resource=genesis/throttles-dev.json
ledger.id=0x03
nodes.enableDAB=true
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
import static com.hedera.hapi.node.base.ResponseCodeEnum.INVALID_NODE_ACCOUNT_ID;
import static com.hedera.hapi.node.base.ResponseCodeEnum.INVALID_SERVICE_ENDPOINT;
import static com.hedera.hapi.node.base.ResponseCodeEnum.MAX_NODES_CREATED;
import static com.hedera.node.app.service.addressbook.AddressBookHelper.checkDABEnabled;
import static com.hedera.node.app.service.addressbook.AddressBookHelper.getNextNodeID;
import static com.hedera.node.app.service.addressbook.impl.validators.AddressBookValidator.validateX509Certificate;
import static com.hedera.node.app.spi.workflows.HandleException.validateFalse;
Expand Down Expand Up @@ -95,9 +96,7 @@ public void preHandle(@NonNull final PreHandleContext context) throws PreCheckEx
public void handle(@NonNull final HandleContext handleContext) {
requireNonNull(handleContext);
final var op = handleContext.body().nodeCreate();

final var configuration = handleContext.configuration();
final var nodeConfig = configuration.getConfigData(NodesConfig.class);
final var nodeConfig = handleContext.configuration().getConfigData(NodesConfig.class);
final var storeFactory = handleContext.storeFactory();
final var nodeStore = storeFactory.writableStore(WritableNodeStore.class);
final var accountStore = storeFactory.readableStore(ReadableAccountStore.class);
Expand Down Expand Up @@ -130,6 +129,7 @@ public void handle(@NonNull final HandleContext handleContext) {
@NonNull
@Override
public Fees calculateFees(@NonNull final FeeContext feeContext) {
checkDABEnabled(feeContext);
final var calculator = feeContext.feeCalculatorFactory().feeCalculator(SubType.DEFAULT);
calculator.resetUsage();
// The price of node create should be increased based on number of signatures.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@

import static com.hedera.hapi.node.base.ResponseCodeEnum.INVALID_NODE_ID;
import static com.hedera.hapi.node.base.ResponseCodeEnum.NODE_DELETED;
import static com.hedera.node.app.service.addressbook.AddressBookHelper.checkDABEnabled;
import static com.hedera.node.app.spi.workflows.HandleException.validateFalse;
import static com.hedera.node.app.spi.workflows.PreCheckException.validateFalsePreCheck;
import static java.util.Objects.requireNonNull;
Expand Down Expand Up @@ -93,6 +94,7 @@ public void handle(@NonNull final HandleContext context) {
@NonNull
@Override
public Fees calculateFees(@NonNull final FeeContext feeContext) {
checkDABEnabled(feeContext);
final var calculator = feeContext.feeCalculatorFactory().feeCalculator(SubType.DEFAULT);
calculator.resetUsage();
// The price of node delete should be increased based on number of signatures.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
import static com.hedera.hapi.node.base.ResponseCodeEnum.INVALID_NODE_ACCOUNT_ID;
import static com.hedera.hapi.node.base.ResponseCodeEnum.INVALID_NODE_ID;
import static com.hedera.hapi.node.base.ResponseCodeEnum.UPDATE_NODE_ACCOUNT_NOT_ALLOWED;
import static com.hedera.node.app.service.addressbook.AddressBookHelper.checkDABEnabled;
import static com.hedera.node.app.service.addressbook.impl.validators.AddressBookValidator.validateX509Certificate;
import static com.hedera.node.app.spi.workflows.HandleException.validateFalse;
import static com.hedera.node.app.spi.workflows.HandleException.validateTrue;
Expand Down Expand Up @@ -130,6 +131,7 @@ public void handle(@NonNull final HandleContext handleContext) {
@NonNull
@Override
public Fees calculateFees(@NonNull final FeeContext feeContext) {
checkDABEnabled(feeContext);
final var calculator = feeContext.feeCalculatorFactory().feeCalculator(SubType.DEFAULT);
calculator.resetUsage();
// The price of node update should be increased based on number of signatures.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -601,6 +601,11 @@ void testCalculateFeesInvocations() {
given(feeCtx.feeCalculatorFactory()).willReturn(feeCalcFact);
given(feeCalcFact.feeCalculator(any())).willReturn(feeCalc);

final var config = HederaTestConfigBuilder.create()
.withValue("nodes.enableDAB", true)
.getOrCreateConfig();
given(feeCtx.configuration()).willReturn(config);

given(feeCalc.addVerificationsPerTransaction(anyLong())).willReturn(feeCalc);
given(feeCalc.calculate()).willReturn(new Fees(1, 0, 0));

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -126,6 +126,10 @@ void testCalculateFeesInvocations() throws IOException {
final var feeCalc = mock(FeeCalculator.class);
given(feeCtx.feeCalculatorFactory()).willReturn(feeCalcFact);
given(feeCalcFact.feeCalculator(any())).willReturn(feeCalc);
final var config = HederaTestConfigBuilder.create()
.withValue("nodes.enableDAB", true)
.getOrCreateConfig();
given(feeCtx.configuration()).willReturn(config);

given(feeCalc.addVerificationsPerTransaction(anyLong())).willReturn(feeCalc);
given(feeCalc.calculate()).willReturn(new Fees(1, 0, 0));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -488,6 +488,10 @@ void testCalculateFeesInvocations() {
final var feeCalc = mock(FeeCalculator.class);
given(feeCtx.feeCalculatorFactory()).willReturn(feeCalcFact);
given(feeCalcFact.feeCalculator(any())).willReturn(feeCalc);
final var config = HederaTestConfigBuilder.create()
.withValue("nodes.enableDAB", true)
.getOrCreateConfig();
given(feeCtx.configuration()).willReturn(config);

given(feeCalc.addVerificationsPerTransaction(anyLong())).willReturn(feeCalc);
given(feeCalc.calculate()).willReturn(new Fees(1, 0, 0));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,14 @@

package com.hedera.node.app.service.addressbook;

import static com.hedera.hapi.node.base.ResponseCodeEnum.NOT_SUPPORTED;
import static com.hedera.node.app.spi.workflows.HandleException.validateTrue;
import static java.util.Objects.requireNonNull;
import static java.util.Spliterator.DISTINCT;

import com.hedera.hapi.node.state.common.EntityNumber;
import com.hedera.node.app.spi.fees.FeeContext;
import com.hedera.node.config.data.NodesConfig;
import edu.umd.cs.findbugs.annotations.NonNull;
import java.io.FileOutputStream;
import java.io.IOException;
Expand Down Expand Up @@ -116,4 +120,13 @@ public static Path loadResourceFile(String resourceFileName) {
Objects.requireNonNull(AddressBookHelper.class.getClassLoader().getResource(resourceFileName))
.getPath());
}

/**
* check DAB enable flag
* @param feeContext, the Fee context
*/
public static void checkDABEnabled(@NonNull final FeeContext feeContext) {
final var nodeConfig = requireNonNull(feeContext.configuration()).getConfigData(NodesConfig.class);
validateTrue(nodeConfig.enableDAB(), NOT_SUPPORTED);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@
requires transitive com.hedera.node.app.spi;
requires transitive com.hedera.node.hapi;
requires transitive com.hedera.pbj.runtime;
requires com.hedera.node.config;
requires com.swirlds.config.api;
requires org.testcontainers;
requires static com.github.spotbugs.annotations;
}
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,6 @@
import com.hedera.node.app.state.PlatformStateAccessor;
import com.hedera.node.app.store.ReadableStoreFactory;
import com.hedera.node.config.ConfigProvider;
import com.hedera.node.config.data.NetworkAdminConfig;
import com.swirlds.platform.listeners.ReconnectCompleteListener;
import com.swirlds.platform.listeners.ReconnectCompleteNotification;
import com.swirlds.state.State;
Expand Down Expand Up @@ -70,13 +69,17 @@ public void notify(@NonNull final ReconnectCompleteNotification notification) {
notification.getSequence());
final State state = notification.getState().cast();
final var readableStoreFactory = new ReadableStoreFactory(state);
final var networkAdminConfig = configProvider.getConfiguration().getConfigData(NetworkAdminConfig.class);
final var freezeStore = readableStoreFactory.getStore(ReadableFreezeStore.class);
final var upgradeFileStore = readableStoreFactory.getStore(ReadableUpgradeFileStore.class);
final var upgradeNodeStore = readableStoreFactory.getStore(ReadableNodeStore.class);
final var upgradeStakingInfoStore = readableStoreFactory.getStore(ReadableStakingInfoStore.class);
final var upgradeActions = new ReadableFreezeUpgradeActions(
networkAdminConfig, freezeStore, executor, upgradeFileStore, upgradeNodeStore, upgradeStakingInfoStore);
configProvider.getConfiguration(),
freezeStore,
executor,
upgradeFileStore,
upgradeNodeStore,
upgradeStakingInfoStore);
try {
// Because we only leave the latest Dagger infrastructure registered with the platform
// notification system when the reconnect state is initialized, this platform state
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,6 @@
import com.hedera.node.app.service.token.ReadableStakingInfoStore;
import com.hedera.node.app.store.ReadableStoreFactory;
import com.hedera.node.config.ConfigProvider;
import com.hedera.node.config.data.NetworkAdminConfig;
import com.swirlds.common.utility.AutoCloseableWrapper;
import com.swirlds.platform.listeners.StateWriteToDiskCompleteListener;
import com.swirlds.platform.listeners.StateWriteToDiskCompleteNotification;
Expand Down Expand Up @@ -80,11 +79,9 @@ public void notify(final StateWriteToDiskCompleteNotification notification) {
final var readableUpgradeFileStore = readableStoreFactory.getStore(ReadableUpgradeFileStore.class);
final var readableNodeStore = readableStoreFactory.getStore(ReadableNodeStore.class);
final var readableStakingInfoStore = readableStoreFactory.getStore(ReadableStakingInfoStore.class);
final var networkAdminConfig =
configProvider.getConfiguration().getConfigData(NetworkAdminConfig.class);

final var upgradeActions = new ReadableFreezeUpgradeActions(
networkAdminConfig,
configProvider.getConfiguration(),
readableFreezeStore,
executor,
readableUpgradeFileStore,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,5 +27,6 @@ public record NodesConfig(
@ConfigProperty(defaultValue = "10") @NetworkProperty int maxGossipEndpoint,
@ConfigProperty(defaultValue = "8") @NetworkProperty int maxServiceEndpoint,
@ConfigProperty(defaultValue = "true") @NetworkProperty boolean gossipFqdnRestricted,
@ConfigProperty(defaultValue = "false") @NetworkProperty boolean enableDAB,
@ConfigProperty(defaultValue = "253") @NetworkProperty int maxFqdnSize,
@ConfigProperty(defaultValue = "false") @NetworkProperty boolean updateAccountIdAllowed) {}
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,6 @@
import com.hedera.node.app.spi.workflows.PreHandleContext;
import com.hedera.node.app.spi.workflows.TransactionHandler;
import com.hedera.node.config.data.FilesConfig;
import com.hedera.node.config.data.NetworkAdminConfig;
import com.hedera.node.config.types.LongPair;
import com.hedera.pbj.runtime.io.buffer.Bytes;
import edu.umd.cs.findbugs.annotations.NonNull;
Expand Down Expand Up @@ -152,7 +151,6 @@ public void pureChecks(@NonNull final TransactionBody txn) throws PreCheckExcept
public void handle(@NonNull final HandleContext context) throws HandleException {
requireNonNull(context);
final var txn = context.body();
final NetworkAdminConfig adminServiceConfig = context.configuration().getConfigData(NetworkAdminConfig.class);
final StoreFactory storeFactory = context.storeFactory();
final ReadableUpgradeFileStore upgradeFileStore = storeFactory.readableStore(ReadableUpgradeFileStore.class);
final ReadableNodeStore nodeStore = storeFactory.readableStore(ReadableNodeStore.class);
Expand All @@ -167,7 +165,7 @@ public void handle(@NonNull final HandleContext context) throws HandleException
final var filesConfig = context.configuration().getConfigData(FilesConfig.class);

final FreezeUpgradeActions upgradeActions = new FreezeUpgradeActions(
adminServiceConfig, freezeStore, freezeExecutor, upgradeFileStore, nodeStore, stakingInfoStore);
context.configuration(), freezeStore, freezeExecutor, upgradeFileStore, nodeStore, stakingInfoStore);
final Timestamp freezeStartTime = freezeTxn.startTime(); // may be null for some freeze types

switch (freezeTxn.freezeType()) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
import com.hedera.node.app.service.file.ReadableUpgradeFileStore;
import com.hedera.node.app.service.networkadmin.impl.WritableFreezeStore;
import com.hedera.node.app.service.token.ReadableStakingInfoStore;
import com.hedera.node.config.data.NetworkAdminConfig;
import com.swirlds.config.api.Configuration;
import edu.umd.cs.findbugs.annotations.NonNull;
import java.util.concurrent.Executor;
import org.apache.logging.log4j.LogManager;
Expand All @@ -39,21 +39,21 @@ public class FreezeUpgradeActions extends ReadableFreezeUpgradeActions {
/**
* Constructs a {@link FreezeUpgradeActions} instance
*
* @param adminServiceConfig the network admin service configuration
* @param configuration the configuration
* @param freezeStore the freeze store
* @param executor the executor
* @param upgradeFileStore the upgrade file store
* @param nodeStore the node store
* @param stakingInfoStore the staking info store
*/
public FreezeUpgradeActions(
@NonNull final NetworkAdminConfig adminServiceConfig,
@NonNull final Configuration configuration,
@NonNull final WritableFreezeStore freezeStore,
@NonNull final Executor executor,
@NonNull final ReadableUpgradeFileStore upgradeFileStore,
@NonNull final ReadableNodeStore nodeStore,
@NonNull final ReadableStakingInfoStore stakingInfoStore) {
super(adminServiceConfig, freezeStore, executor, upgradeFileStore, nodeStore, stakingInfoStore);
super(configuration, freezeStore, executor, upgradeFileStore, nodeStore, stakingInfoStore);
this.freezeStore = freezeStore;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,9 @@
import com.hedera.node.app.service.networkadmin.ReadableFreezeStore;
import com.hedera.node.app.service.token.ReadableStakingInfoStore;
import com.hedera.node.config.data.NetworkAdminConfig;
import com.hedera.node.config.data.NodesConfig;
import com.hedera.pbj.runtime.io.buffer.Bytes;
import com.swirlds.config.api.Configuration;
import com.swirlds.platform.state.PlatformState;
import edu.umd.cs.findbugs.annotations.NonNull;
import edu.umd.cs.findbugs.annotations.Nullable;
Expand Down Expand Up @@ -63,6 +65,7 @@ public class ReadableFreezeUpgradeActions {
com.hedera.hapi.node.base.FileID.newBuilder().fileNum(150L).build();

private final NetworkAdminConfig adminServiceConfig;
private final NodesConfig nodesConfig;
private final ReadableFreezeStore freezeStore;
private final ReadableUpgradeFileStore upgradeFileStore;

Expand All @@ -85,20 +88,21 @@ public class ReadableFreezeUpgradeActions {
public static final String MARK = "✓";

public ReadableFreezeUpgradeActions(
@NonNull final NetworkAdminConfig adminServiceConfig,
@NonNull final Configuration configuration,
@NonNull final ReadableFreezeStore freezeStore,
@NonNull final Executor executor,
@NonNull final ReadableUpgradeFileStore upgradeFileStore,
@NonNull final ReadableNodeStore nodeStore,
@NonNull final ReadableStakingInfoStore stakingInfoStore) {
requireNonNull(adminServiceConfig, "Admin service config is required for freeze upgrade actions");
requireNonNull(configuration, "configuration is required for freeze upgrade actions");
requireNonNull(freezeStore, "Freeze store is required for freeze upgrade actions");
requireNonNull(executor, "Executor is required for freeze upgrade actions");
requireNonNull(upgradeFileStore, "Upgrade file store is required for freeze upgrade actions");
requireNonNull(nodeStore, "Node store is required for freeze upgrade actions");
requireNonNull(stakingInfoStore, "Staking info store is required for freeze upgrade actions");

this.adminServiceConfig = adminServiceConfig;
this.adminServiceConfig = configuration.getConfigData(NetworkAdminConfig.class);
this.nodesConfig = configuration.getConfigData(NodesConfig.class);
this.freezeStore = freezeStore;
this.executor = executor;
this.upgradeFileStore = upgradeFileStore;
Expand Down Expand Up @@ -261,7 +265,7 @@ private void extractAndReplaceArtifacts(
FileUtils.cleanDirectory(artifactsDir);
UnzipUtility.unzip(archiveData.toByteArray(), artifactsLoc);
log.info("Finished unzipping {} bytes for {} update into {}", size, desc, artifactsLoc);
if (nodes != null) {
if (nodes != null && nodesConfig.enableDAB()) {
generateConfigPem(artifactsLoc, nodes);
log.info("Finished generating config.txt and pem files into {}", artifactsLoc);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,16 +8,16 @@
requires transitive com.hedera.node.app.service.network.admin;
requires transitive com.hedera.node.app.service.token;
requires transitive com.hedera.node.app.spi;
requires transitive com.hedera.node.config;
requires transitive com.hedera.node.hapi;
requires transitive com.swirlds.config.api;
requires transitive com.swirlds.platform.core;
requires transitive com.swirlds.state.api;
requires transitive com.hedera.pbj.runtime;
requires transitive dagger;
requires transitive javax.inject;
requires com.hedera.node.app.hapi.utils;
requires com.hedera.node.config;
requires com.swirlds.common;
requires com.swirlds.config.api;
requires com.google.common;
requires org.apache.commons.io;
requires org.apache.logging.log4j;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@
import com.hedera.node.app.spi.fixtures.util.LoggingSubject;
import com.hedera.node.app.spi.fixtures.util.LoggingTarget;
import com.hedera.node.config.data.NetworkAdminConfig;
import com.swirlds.config.api.Configuration;
import edu.umd.cs.findbugs.annotations.Nullable;
import java.io.File;
import java.io.FileOutputStream;
Expand Down Expand Up @@ -69,9 +70,6 @@ class FreezeUpgradeActionsTest {
@Mock
private WritableFreezeStore freezeStore;

@Mock
private NetworkAdminConfig adminServiceConfig;

@LoggingTarget
private LogCaptor logCaptor;

Expand All @@ -90,14 +88,22 @@ class FreezeUpgradeActionsTest {
@Mock
private ReadableStakingInfoStore stakingInfoStore;

@Mock
private Configuration configuration;

@Mock
private NetworkAdminConfig adminServiceConfig;

@BeforeEach
void setUp() throws IOException {
given(configuration.getConfigData(NetworkAdminConfig.class)).willReturn(adminServiceConfig);

noiseSubFileLoc = zipOutputDir.toPath().resolve("edargpu");

final Executor freezeExectuor = new ForkJoinPool(
1, ForkJoinPool.defaultForkJoinWorkerThreadFactory, Thread.getDefaultUncaughtExceptionHandler(), true);
subject = new FreezeUpgradeActions(
adminServiceConfig, freezeStore, freezeExectuor, upgradeFileStore, nodeStore, stakingInfoStore);
configuration, freezeStore, freezeExectuor, upgradeFileStore, nodeStore, stakingInfoStore);

// set up test zip
zipSourceDir = Files.createTempDirectory("zipSourceDir");
Expand Down
Loading

0 comments on commit 1397e8a

Please sign in to comment.