From d7b976f48efedf21cd30a2c5d85f4c1962026eba Mon Sep 17 00:00:00 2001 From: halibobo1205 Date: Thu, 25 Dec 2025 17:32:29 +0800 Subject: [PATCH 1/3] feat(*): disable market transaction --- .../org/tron/core/utils/ProposalUtil.java | 3 ++- .../core/actuator/utils/ProposalUtilTest.java | 26 +++++++++++++++++-- 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/actuator/src/main/java/org/tron/core/utils/ProposalUtil.java b/actuator/src/main/java/org/tron/core/utils/ProposalUtil.java index 6df6ba80a80..d7e2f1c0949 100644 --- a/actuator/src/main/java/org/tron/core/utils/ProposalUtil.java +++ b/actuator/src/main/java/org/tron/core/utils/ProposalUtil.java @@ -356,7 +356,8 @@ public static void validator(DynamicPropertiesStore dynamicPropertiesStore, break; } case ALLOW_MARKET_TRANSACTION: { - if (!forkController.pass(ForkBlockVersionEnum.VERSION_4_1)) { + if (!forkController.pass(ForkBlockVersionEnum.VERSION_4_1) + || forkController.pass(ForkBlockVersionEnum.VERSION_4_8_1)) { throw new ContractValidateException( "Bad chain parameter id [ALLOW_MARKET_TRANSACTION]"); } diff --git a/framework/src/test/java/org/tron/core/actuator/utils/ProposalUtilTest.java b/framework/src/test/java/org/tron/core/actuator/utils/ProposalUtilTest.java index d83f7f14e29..e352cd7fba5 100644 --- a/framework/src/test/java/org/tron/core/actuator/utils/ProposalUtilTest.java +++ b/framework/src/test/java/org/tron/core/actuator/utils/ProposalUtilTest.java @@ -1,5 +1,8 @@ package org.tron.core.actuator.utils; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertThrows; + import com.google.protobuf.ByteString; import java.util.ArrayList; import java.util.Arrays; @@ -11,6 +14,7 @@ import org.junit.Assert; import org.junit.BeforeClass; import org.junit.Test; +import org.junit.function.ThrowingRunnable; import org.tron.common.BaseTest; import org.tron.common.utils.ByteArray; import org.tron.common.utils.ForkController; @@ -438,9 +442,28 @@ public void validateCheck() { testAllowTvmCancunProposal(); testAllowTvmBlobProposal(); - + ThrowingRunnable r0 = () -> ProposalUtil.validator(dynamicPropertiesStore, forkUtils, + ProposalType.ALLOW_MARKET_TRANSACTION.getCode(), 0); + ThrowingRunnable r1 = () -> ProposalUtil.validator(dynamicPropertiesStore, forkUtils, + ProposalType.ALLOW_MARKET_TRANSACTION.getCode(), 1); + ContractValidateException thrown = assertThrows(ContractValidateException.class, r1); + assertEquals("Bad chain parameter id [ALLOW_MARKET_TRANSACTION]", thrown.getMessage()); + + forkUtils.getManager().getDynamicPropertiesStore().statsByVersion( + ForkBlockVersionEnum.VERSION_4_1.getValue(), stats); + try { + r1.run(); + } catch (Throwable e) { + Assert.fail(e.getMessage()); + } + thrown = assertThrows(ContractValidateException.class, r0); + assertEquals("This value[ALLOW_MARKET_TRANSACTION] is only allowed to be 1", + thrown.getMessage()); testAllowTvmSelfdestructRestrictionProposal(); + thrown = assertThrows(ContractValidateException.class, r1); + assertEquals("Bad chain parameter id [ALLOW_MARKET_TRANSACTION]", thrown.getMessage()); + forkUtils.getManager().getDynamicPropertiesStore() .statsByVersion(ForkBlockVersionEnum.ENERGY_LIMIT.getValue(), stats); forkUtils.reset(); @@ -710,7 +733,6 @@ private void testAllowTvmSelfdestructRestrictionProposal() { "[ALLOW_TVM_SELFDESTRUCT_RESTRICTION] has been valid, no need to propose again", e.getMessage()); } - } @Test From 6518122436d6cc6593ccbcedb936049cf933d531 Mon Sep 17 00:00:00 2001 From: halibobo1205 Date: Fri, 26 Dec 2025 16:21:25 +0800 Subject: [PATCH 2/3] test(proposal): reactor market proposal test --- .../core/actuator/utils/ProposalUtilTest.java | 54 ++++++++++++------- 1 file changed, 35 insertions(+), 19 deletions(-) diff --git a/framework/src/test/java/org/tron/core/actuator/utils/ProposalUtilTest.java b/framework/src/test/java/org/tron/core/actuator/utils/ProposalUtilTest.java index e352cd7fba5..41e06e43486 100644 --- a/framework/src/test/java/org/tron/core/actuator/utils/ProposalUtilTest.java +++ b/framework/src/test/java/org/tron/core/actuator/utils/ProposalUtilTest.java @@ -442,27 +442,10 @@ public void validateCheck() { testAllowTvmCancunProposal(); testAllowTvmBlobProposal(); - ThrowingRunnable r0 = () -> ProposalUtil.validator(dynamicPropertiesStore, forkUtils, - ProposalType.ALLOW_MARKET_TRANSACTION.getCode(), 0); - ThrowingRunnable r1 = () -> ProposalUtil.validator(dynamicPropertiesStore, forkUtils, - ProposalType.ALLOW_MARKET_TRANSACTION.getCode(), 1); - ContractValidateException thrown = assertThrows(ContractValidateException.class, r1); - assertEquals("Bad chain parameter id [ALLOW_MARKET_TRANSACTION]", thrown.getMessage()); - forkUtils.getManager().getDynamicPropertiesStore().statsByVersion( - ForkBlockVersionEnum.VERSION_4_1.getValue(), stats); - try { - r1.run(); - } catch (Throwable e) { - Assert.fail(e.getMessage()); - } - thrown = assertThrows(ContractValidateException.class, r0); - assertEquals("This value[ALLOW_MARKET_TRANSACTION] is only allowed to be 1", - thrown.getMessage()); - testAllowTvmSelfdestructRestrictionProposal(); + testAllowMarketTransaction(); - thrown = assertThrows(ContractValidateException.class, r1); - assertEquals("Bad chain parameter id [ALLOW_MARKET_TRANSACTION]", thrown.getMessage()); + testAllowTvmSelfdestructRestrictionProposal(); forkUtils.getManager().getDynamicPropertiesStore() .statsByVersion(ForkBlockVersionEnum.ENERGY_LIMIT.getValue(), stats); @@ -735,6 +718,39 @@ private void testAllowTvmSelfdestructRestrictionProposal() { } } + private void testAllowMarketTransaction() { + byte[] stats = new byte[27]; + Arrays.fill(stats, (byte) 1); + + ThrowingRunnable off = () -> ProposalUtil.validator(dynamicPropertiesStore, forkUtils, + ProposalType.ALLOW_MARKET_TRANSACTION.getCode(), 0); + ThrowingRunnable open = () -> ProposalUtil.validator(dynamicPropertiesStore, forkUtils, + ProposalType.ALLOW_MARKET_TRANSACTION.getCode(), 1); + + ContractValidateException thrown = assertThrows(ContractValidateException.class, open); + assertEquals("Bad chain parameter id [ALLOW_MARKET_TRANSACTION]", thrown.getMessage()); + + forkUtils.getManager().getDynamicPropertiesStore() + .statsByVersion(ForkBlockVersionEnum.VERSION_4_1.getValue(), stats); + try { + open.run(); + } catch (Throwable e) { + Assert.fail(e.getMessage()); + } + + thrown = assertThrows(ContractValidateException.class, off); + assertEquals("This value[ALLOW_MARKET_TRANSACTION] is only allowed to be 1", + thrown.getMessage()); + + forkUtils.getManager().getDynamicPropertiesStore() + .statsByVersion(ForkBlockVersionEnum.VERSION_4_8_1.getValue(), stats); + + thrown = assertThrows(ContractValidateException.class, open); + assertEquals("Bad chain parameter id [ALLOW_MARKET_TRANSACTION]", thrown.getMessage()); + thrown = assertThrows(ContractValidateException.class, off); + assertEquals("Bad chain parameter id [ALLOW_MARKET_TRANSACTION]", thrown.getMessage()); + } + @Test public void blockVersionCheck() { for (ForkBlockVersionEnum forkVersion : ForkBlockVersionEnum.values()) { From 9f932ecfc87b059c3c9c0f2912030facb7bcec57 Mon Sep 17 00:00:00 2001 From: halibobo1205 Date: Fri, 26 Dec 2025 17:54:06 +0800 Subject: [PATCH 3/3] test(proposal): reactor activateFork --- .../core/actuator/utils/ProposalUtilTest.java | 32 +++++++++++++------ 1 file changed, 22 insertions(+), 10 deletions(-) diff --git a/framework/src/test/java/org/tron/core/actuator/utils/ProposalUtilTest.java b/framework/src/test/java/org/tron/core/actuator/utils/ProposalUtilTest.java index 41e06e43486..2ca466fb4da 100644 --- a/framework/src/test/java/org/tron/core/actuator/utils/ProposalUtilTest.java +++ b/framework/src/test/java/org/tron/core/actuator/utils/ProposalUtilTest.java @@ -719,19 +719,17 @@ private void testAllowTvmSelfdestructRestrictionProposal() { } private void testAllowMarketTransaction() { - byte[] stats = new byte[27]; - Arrays.fill(stats, (byte) 1); - ThrowingRunnable off = () -> ProposalUtil.validator(dynamicPropertiesStore, forkUtils, ProposalType.ALLOW_MARKET_TRANSACTION.getCode(), 0); ThrowingRunnable open = () -> ProposalUtil.validator(dynamicPropertiesStore, forkUtils, ProposalType.ALLOW_MARKET_TRANSACTION.getCode(), 1); + String err = "Bad chain parameter id [ALLOW_MARKET_TRANSACTION]"; ContractValidateException thrown = assertThrows(ContractValidateException.class, open); - assertEquals("Bad chain parameter id [ALLOW_MARKET_TRANSACTION]", thrown.getMessage()); + assertEquals(err, thrown.getMessage()); + + activateFork(ForkBlockVersionEnum.VERSION_4_1); - forkUtils.getManager().getDynamicPropertiesStore() - .statsByVersion(ForkBlockVersionEnum.VERSION_4_1.getValue(), stats); try { open.run(); } catch (Throwable e) { @@ -742,13 +740,27 @@ private void testAllowMarketTransaction() { assertEquals("This value[ALLOW_MARKET_TRANSACTION] is only allowed to be 1", thrown.getMessage()); - forkUtils.getManager().getDynamicPropertiesStore() - .statsByVersion(ForkBlockVersionEnum.VERSION_4_8_1.getValue(), stats); + activateFork(ForkBlockVersionEnum.VERSION_4_8_1); thrown = assertThrows(ContractValidateException.class, open); - assertEquals("Bad chain parameter id [ALLOW_MARKET_TRANSACTION]", thrown.getMessage()); + assertEquals(err, thrown.getMessage()); + thrown = assertThrows(ContractValidateException.class, off); - assertEquals("Bad chain parameter id [ALLOW_MARKET_TRANSACTION]", thrown.getMessage()); + assertEquals(err, thrown.getMessage()); + } + + private void activateFork(ForkBlockVersionEnum forkVersion) { + byte[] stats = new byte[27]; + Arrays.fill(stats, (byte) 1); + forkUtils.getManager().getDynamicPropertiesStore() + .statsByVersion(forkVersion.getValue(), stats); + + long maintenanceTimeInterval = forkUtils.getManager().getDynamicPropertiesStore() + .getMaintenanceTimeInterval(); + long hardForkTime = ((forkVersion.getHardForkTime() - 1) / maintenanceTimeInterval + 1) + * maintenanceTimeInterval; + forkUtils.getManager().getDynamicPropertiesStore() + .saveLatestBlockHeaderTimestamp(hardForkTime + 1); } @Test