|
3 | 3 | import com.google.protobuf.ByteString; |
4 | 4 | import java.util.ArrayList; |
5 | 5 | import java.util.Arrays; |
| 6 | +import java.util.HashMap; |
6 | 7 | import java.util.List; |
7 | 8 | import javax.annotation.Resource; |
8 | 9 | import lombok.extern.slf4j.Slf4j; |
|
12 | 13 | import org.tron.common.BaseTest; |
13 | 14 | import org.tron.common.utils.ByteArray; |
14 | 15 | import org.tron.common.utils.ForkController; |
| 16 | +import org.tron.core.ChainBaseManager; |
15 | 17 | import org.tron.core.Constant; |
16 | 18 | import org.tron.core.capsule.BytesCapsule; |
| 19 | +import org.tron.core.capsule.ProposalCapsule; |
17 | 20 | import org.tron.core.config.Parameter; |
18 | 21 | import org.tron.core.config.Parameter.ForkBlockVersionEnum; |
19 | 22 | import org.tron.core.config.args.Args; |
| 23 | +import org.tron.core.consensus.ProposalService; |
| 24 | +import org.tron.core.db.Manager; |
20 | 25 | import org.tron.core.exception.ContractValidateException; |
21 | 26 | import org.tron.core.store.DynamicPropertiesStore; |
| 27 | +import org.tron.core.store.StoreFactory; |
22 | 28 | import org.tron.core.utils.ProposalUtil; |
23 | 29 | import org.tron.core.utils.ProposalUtil.ProposalType; |
24 | 30 |
|
@@ -381,11 +387,76 @@ public void validateCheck() { |
381 | 387 | e.getMessage()); |
382 | 388 | } |
383 | 389 |
|
| 390 | + testEnergyAdjustmentProposal(); |
| 391 | + |
384 | 392 | forkUtils.getManager().getDynamicPropertiesStore() |
385 | 393 | .statsByVersion(ForkBlockVersionEnum.ENERGY_LIMIT.getValue(), stats); |
386 | 394 | forkUtils.reset(); |
387 | 395 | } |
388 | 396 |
|
| 397 | + private void testEnergyAdjustmentProposal() { |
| 398 | + // Should fail because cannot pass the fork controller check |
| 399 | + try { |
| 400 | + ProposalUtil.validator(dynamicPropertiesStore, forkUtils, |
| 401 | + ProposalType.ALLOW_ENERGY_ADJUSTMENT.getCode(), 1); |
| 402 | + Assert.fail(); |
| 403 | + } catch (ContractValidateException e) { |
| 404 | + Assert.assertEquals( |
| 405 | + "Bad chain parameter id [ALLOW_ENERGY_ADJUSTMENT]", |
| 406 | + e.getMessage()); |
| 407 | + } |
| 408 | + |
| 409 | + long maintenanceTimeInterval = forkUtils.getManager().getDynamicPropertiesStore() |
| 410 | + .getMaintenanceTimeInterval(); |
| 411 | + |
| 412 | + long hardForkTime = |
| 413 | + ((ForkBlockVersionEnum.VERSION_4_7_5.getHardForkTime() - 1) / maintenanceTimeInterval + 1) |
| 414 | + * maintenanceTimeInterval; |
| 415 | + forkUtils.getManager().getDynamicPropertiesStore() |
| 416 | + .saveLatestBlockHeaderTimestamp(hardForkTime + 1); |
| 417 | + |
| 418 | + byte[] stats = new byte[27]; |
| 419 | + Arrays.fill(stats, (byte) 1); |
| 420 | + forkUtils.getManager().getDynamicPropertiesStore() |
| 421 | + .statsByVersion(ForkBlockVersionEnum.VERSION_4_7_5.getValue(), stats); |
| 422 | + |
| 423 | + // Should fail because the proposal value is invalid |
| 424 | + try { |
| 425 | + ProposalUtil.validator(dynamicPropertiesStore, forkUtils, |
| 426 | + ProposalType.ALLOW_ENERGY_ADJUSTMENT.getCode(), 2); |
| 427 | + Assert.fail(); |
| 428 | + } catch (ContractValidateException e) { |
| 429 | + Assert.assertEquals( |
| 430 | + "This value[ALLOW_ENERGY_ADJUSTMENT] is only allowed to be 1", |
| 431 | + e.getMessage()); |
| 432 | + } |
| 433 | + |
| 434 | + // Should succeed |
| 435 | + try { |
| 436 | + ProposalUtil.validator(dynamicPropertiesStore, forkUtils, |
| 437 | + ProposalType.ALLOW_ENERGY_ADJUSTMENT.getCode(), 1); |
| 438 | + } catch (Throwable t) { |
| 439 | + Assert.fail(); |
| 440 | + } |
| 441 | + |
| 442 | + ProposalCapsule proposalCapsule = new ProposalCapsule(ByteString.empty(), 0); |
| 443 | + proposalCapsule.setParameters(new HashMap<Long, Long>(){{ |
| 444 | + put(81L, 1L); |
| 445 | + }}); |
| 446 | + |
| 447 | + ProposalService.process(dbManager, proposalCapsule); |
| 448 | + |
| 449 | + try { |
| 450 | + ProposalUtil.validator(dynamicPropertiesStore, forkUtils, |
| 451 | + ProposalType.ALLOW_ENERGY_ADJUSTMENT.getCode(), 1); |
| 452 | + Assert.fail(); |
| 453 | + } catch (ContractValidateException e) { |
| 454 | + Assert.assertEquals( |
| 455 | + "[ALLOW_ENERGY_ADJUSTMENT] has been valid, no need to propose again", |
| 456 | + e.getMessage()); |
| 457 | + } |
| 458 | + } |
| 459 | + |
389 | 460 | @Test |
390 | 461 | public void blockVersionCheck() { |
391 | 462 | for (ForkBlockVersionEnum forkVersion : ForkBlockVersionEnum.values()) { |
|
0 commit comments