Skip to content

Commit 3099659

Browse files
author
Sunny Jiao
committed
Merge branch 'release_v4.8.1' into release_v4.8.1_witness_vote_now
2 parents 2bad6bd + 1e35f79 commit 3099659

File tree

122 files changed

+3401
-365
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

122 files changed

+3401
-365
lines changed

actuator/src/main/java/org/tron/core/actuator/AbstractActuator.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,7 @@ public void adjustBalance(AccountStore accountStore, AccountCapsule account, lon
122122
Commons.adjustBalance(accountStore, account, amount, this.disableJavaLangMath());
123123
}
124124

125-
private boolean disableJavaLangMath() {
125+
boolean disableJavaLangMath() {
126126
return chainBaseManager.getDynamicPropertiesStore().disableJavaLangMath();
127127
}
128128
}

actuator/src/main/java/org/tron/core/actuator/DelegateResourceActuator.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,7 @@ public boolean validate() throws ContractValidateException {
162162
long netUsage = (long) (accountNetUsage * TRX_PRECISION * ((double)
163163
(dynamicStore.getTotalNetWeight()) / dynamicStore.getTotalNetLimit()));
164164
long v2NetUsage = getV2NetUsage(ownerCapsule, netUsage,
165-
dynamicStore.disableJavaLangMath());
165+
this.disableJavaLangMath());
166166
if (ownerCapsule.getFrozenV2BalanceForBandwidth() - v2NetUsage < delegateBalance) {
167167
throw new ContractValidateException(
168168
"delegateBalance must be less than or equal to available FreezeBandwidthV2 balance");
@@ -176,7 +176,7 @@ public boolean validate() throws ContractValidateException {
176176
long energyUsage = (long) (ownerCapsule.getEnergyUsage() * TRX_PRECISION * ((double)
177177
(dynamicStore.getTotalEnergyWeight()) / dynamicStore.getTotalEnergyCurrentLimit()));
178178
long v2EnergyUsage = getV2EnergyUsage(ownerCapsule, energyUsage,
179-
dynamicStore.disableJavaLangMath());
179+
this.disableJavaLangMath());
180180
if (ownerCapsule.getFrozenV2BalanceForEnergy() - v2EnergyUsage < delegateBalance) {
181181
throw new ContractValidateException(
182182
"delegateBalance must be less than or equal to available FreezeEnergyV2 balance");

actuator/src/main/java/org/tron/core/actuator/MarketSellAssetActuator.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -400,10 +400,9 @@ private void matchSingleOrder(MarketOrderCapsule takerOrderCapsule,
400400
// => takerBuyTokenQuantityCurrent_A = takerSellTokenQuantityRemain_TRX *
401401
// makerSellTokenQuantity_A/makerBuyTokenQuantity_TRX
402402

403-
boolean disableMath = dynamicStore.disableJavaLangMath();
404403
long takerBuyTokenQuantityRemain = MarketUtils
405404
.multiplyAndDivide(takerSellRemainQuantity, makerSellQuantity, makerBuyQuantity,
406-
disableMath);
405+
this.disableJavaLangMath());
407406

408407
if (takerBuyTokenQuantityRemain == 0) {
409408
// quantity too small, return sellToken to user
@@ -427,7 +426,7 @@ private void matchSingleOrder(MarketOrderCapsule takerOrderCapsule,
427426

428427
makerBuyTokenQuantityReceive = MarketUtils
429428
.multiplyAndDivide(makerSellRemainQuantity, makerBuyQuantity, makerSellQuantity,
430-
chainBaseManager.getDynamicPropertiesStore().disableJavaLangMath());
429+
this.disableJavaLangMath());
431430
takerBuyTokenQuantityReceive = makerOrderCapsule.getSellTokenQuantityRemain();
432431

433432
long takerSellTokenLeft =
@@ -462,7 +461,7 @@ private void matchSingleOrder(MarketOrderCapsule takerOrderCapsule,
462461
// makerSellTokenQuantity_A/makerBuyTokenQuantity_TRX
463462
makerBuyTokenQuantityReceive = MarketUtils
464463
.multiplyAndDivide(makerSellRemainQuantity, makerBuyQuantity, makerSellQuantity,
465-
chainBaseManager.getDynamicPropertiesStore().disableJavaLangMath());
464+
this.disableJavaLangMath());
466465

467466
MarketUtils.updateOrderState(makerOrderCapsule, State.INACTIVE, marketAccountStore);
468467
if (makerBuyTokenQuantityReceive == 0) {

actuator/src/main/java/org/tron/core/actuator/VMActuator.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -603,10 +603,10 @@ private long getAccountEnergyLimitWithFloatRatio(AccountCapsule account, long fe
603603
}
604604
// can change the calc way
605605
long leftEnergyFromFreeze = rootRepository.getAccountLeftEnergyFromFreeze(account);
606-
boolean isStrict2 = VMConfig.disableJavaLangMath();
607-
callValue = max(callValue, 0, isStrict2);
606+
callValue = max(callValue, 0, VMConfig.disableJavaLangMath());
608607
long energyFromBalance = floorDiv(max(
609-
account.getBalance() - callValue, 0, isStrict2), sunPerEnergy, isStrict2);
608+
account.getBalance() - callValue, 0, VMConfig.disableJavaLangMath()), sunPerEnergy,
609+
VMConfig.disableJavaLangMath());
610610

611611
long energyFromFeeLimit;
612612
long totalBalanceForEnergyFreeze = account.getAllFrozenBalanceForEnergy();

actuator/src/main/java/org/tron/core/utils/ProposalUtil.java

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -824,6 +824,21 @@ public static void validator(DynamicPropertiesStore dynamicPropertiesStore,
824824
}
825825
break;
826826
}
827+
case ALLOW_TVM_BLOB: {
828+
if (!forkController.pass(ForkBlockVersionEnum.VERSION_4_8_0)) {
829+
throw new ContractValidateException(
830+
"Bad chain parameter id [ALLOW_TVM_BLOB]");
831+
}
832+
if (dynamicPropertiesStore.getAllowTvmBlob() == 1) {
833+
throw new ContractValidateException(
834+
"[ALLOW_TVM_BLOB] has been valid, no need to propose again");
835+
}
836+
if (value != 1) {
837+
throw new ContractValidateException(
838+
"This value[ALLOW_TVM_BLOB] is only allowed to be 1");
839+
}
840+
break;
841+
}
827842
default:
828843
break;
829844
}
@@ -905,7 +920,8 @@ public enum ProposalType { // current value, value range
905920
MAX_CREATE_ACCOUNT_TX_SIZE(82), // [500, 10000]
906921
ALLOW_TVM_CANCUN(83), // 0, 1
907922
ALLOW_STRICT_MATH(87), // 0, 1
908-
CONSENSUS_LOGIC_OPTIMIZATION(88); // 0, 1
923+
CONSENSUS_LOGIC_OPTIMIZATION(88), // 0, 1
924+
ALLOW_TVM_BLOB(89); // 0, 1
909925

910926
private long code;
911927

actuator/src/main/java/org/tron/core/vm/Op.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,10 @@ public class Op {
120120
public static final int SELFBALANCE = 0x47;
121121
// (0x48) Get block's basefee
122122
public static final int BASEFEE = 0x48;
123+
// (0x49) Get blob hash
124+
public static final int BLOBHASH = 0x49;
125+
// (0x4a) Get block's blob basefee
126+
public static final int BLOBBASEFEE = 0x4a;
123127

124128
/* Memory, Storage and Flow Operations */
125129
// (0x50) Remove item from stack

actuator/src/main/java/org/tron/core/vm/OperationActions.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -656,6 +656,9 @@ public static void tLoadAction(Program program) {
656656
}
657657

658658
public static void tStoreAction(Program program) {
659+
if (program.isStaticCall()) {
660+
throw new Program.StaticCallModificationException();
661+
}
659662
DataWord key = program.stackPop();
660663
DataWord value = program.stackPop();
661664
DataWord address = program.getContractAddress();
@@ -674,6 +677,17 @@ public static void mCopyAction(Program program) {
674677
program.step();
675678
}
676679

680+
public static void blobHashAction(Program program) {
681+
program.stackPop();
682+
program.stackPush(DataWord.ZERO());
683+
program.step();
684+
}
685+
686+
public static void blobBaseFeeAction(Program program) {
687+
program.stackPush(DataWord.ZERO());
688+
program.step();
689+
}
690+
677691
public static void push0Action(Program program) {
678692
program.stackPush(DataWord.ZERO());
679693
program.step();

actuator/src/main/java/org/tron/core/vm/OperationRegistry.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -663,6 +663,7 @@ public static void adjustForFairEnergy(JumpTable table) {
663663

664664
public static void appendCancunOperations(JumpTable table) {
665665
BooleanSupplier proposal = VMConfig::allowTvmCancun;
666+
BooleanSupplier tvmBlobProposal = VMConfig::allowTvmBlob;
666667

667668
table.set(new Operation(
668669
Op.TLOAD, 1, 1,
@@ -681,5 +682,17 @@ public static void appendCancunOperations(JumpTable table) {
681682
EnergyCost::getMCopyCost,
682683
OperationActions::mCopyAction,
683684
proposal));
685+
686+
table.set(new Operation(
687+
Op.BLOBHASH, 1, 1,
688+
EnergyCost::getVeryLowTierCost,
689+
OperationActions::blobHashAction,
690+
tvmBlobProposal));
691+
692+
table.set(new Operation(
693+
Op.BLOBBASEFEE, 0, 1,
694+
EnergyCost::getBaseTierCost,
695+
OperationActions::blobBaseFeeAction,
696+
tvmBlobProposal));
684697
}
685698
}

actuator/src/main/java/org/tron/core/vm/PrecompiledContracts.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -626,17 +626,16 @@ public long getEnergyForData(byte[] data) {
626626
int expLen = parseLen(data, 1);
627627
int modLen = parseLen(data, 2);
628628

629-
boolean allowStrictMath2 = VMConfig.disableJavaLangMath();
630629

631630
byte[] expHighBytes = parseBytes(data, addSafely(ARGS_OFFSET, baseLen), min(expLen, 32,
632-
allowStrictMath2));
631+
VMConfig.disableJavaLangMath()));
633632

634-
long multComplexity = getMultComplexity(max(baseLen, modLen, allowStrictMath2));
633+
long multComplexity = getMultComplexity(max(baseLen, modLen, VMConfig.disableJavaLangMath()));
635634
long adjExpLen = getAdjustedExponentLength(expHighBytes, expLen);
636635

637636
// use big numbers to stay safe in case of overflow
638637
BigInteger energy = BigInteger.valueOf(multComplexity)
639-
.multiply(BigInteger.valueOf(max(adjExpLen, 1, allowStrictMath2)))
638+
.multiply(BigInteger.valueOf(max(adjExpLen, 1, VMConfig.disableJavaLangMath())))
640639
.divide(GQUAD_DIVISOR);
641640

642641
return isLessThan(energy, BigInteger.valueOf(Long.MAX_VALUE)) ? energy.longValueExact()

actuator/src/main/java/org/tron/core/vm/config/ConfigLoader.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ public static void load(StoreFactory storeFactory) {
4343
VMConfig.initAllowStrictMath(ds.getAllowStrictMath());
4444
VMConfig.initAllowTvmCancun(ds.getAllowTvmCancun());
4545
VMConfig.initDisableJavaLangMath(ds.getConsensusLogicOptimization());
46+
VMConfig.initAllowTvmBlob(ds.getAllowTvmBlob());
4647
}
4748
}
4849
}

0 commit comments

Comments
 (0)