Skip to content

Commit 342b71d

Browse files
authored
Merge pull request #1403 from tronprotocol/use_3m_check_mem_in_anyplace
Use 3m check mem in anyplace
2 parents 3bf1186 + 4cc104b commit 342b71d

File tree

6 files changed

+22
-23
lines changed

6 files changed

+22
-23
lines changed

src/main/java/org/tron/common/runtime/vm/VM.java

Lines changed: 13 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -63,18 +63,12 @@ private void checkMemorySize(OpCode op, BigInteger newMemSize) {
6363

6464

6565
private long calcMemEnergy(EnergyCost energyCosts, long oldMemSize, BigInteger newMemSize,
66-
long copySize) {
66+
long copySize, OpCode op) {
6767
//todo: simpfy this calc, just use energy relative to energy time
6868

6969
long energyCost = 0;
7070

71-
// Avoid overflows
72-
if (newMemSize.compareTo(MAX_MEM_SIZE) > 0) {
73-
// throw VMMemoryOverflowException();
74-
throw Program.Exception.energyOverflow(newMemSize, MAX_MEM_SIZE);
75-
// todo: add memory overflow
76-
// throw Program.Exception.memoryOverflow();
77-
}
71+
checkMemorySize(op, newMemSize);
7872

7973
// memory drop consume calc
8074
long memoryUsage = (newMemSize.longValue() + 31) / 32 * 32;
@@ -160,26 +154,26 @@ public void step(Program program) {
160154
case MSTORE:
161155
energyCost = calcMemEnergy(energyCosts, oldMemSize,
162156
memNeeded(stack.peek(), new DataWord(32)),
163-
0);
157+
0, op);
164158
break;
165159
case MSTORE8:
166160
energyCost = calcMemEnergy(energyCosts, oldMemSize,
167161
memNeeded(stack.peek(), new DataWord(1)),
168-
0);
162+
0, op);
169163
break;
170164
case MLOAD:
171165
energyCost = calcMemEnergy(energyCosts, oldMemSize,
172166
memNeeded(stack.peek(), new DataWord(32)),
173-
0);
167+
0, op);
174168
break;
175169
case RETURN:
176170
case REVERT:
177171
energyCost = energyCosts.getSTOP() + calcMemEnergy(energyCosts, oldMemSize,
178-
memNeeded(stack.peek(), stack.get(stack.size() - 2)), 0);
172+
memNeeded(stack.peek(), stack.get(stack.size() - 2)), 0, op);
179173
break;
180174
case SHA3:
181175
energyCost = energyCosts.getSHA3() + calcMemEnergy(energyCosts, oldMemSize,
182-
memNeeded(stack.peek(), stack.get(stack.size() - 2)), 0);
176+
memNeeded(stack.peek(), stack.get(stack.size() - 2)), 0, op);
183177
DataWord size = stack.get(stack.size() - 2);
184178
long chunkUsed = (size.longValueSafe() + 31) / 32;
185179
energyCost += chunkUsed * energyCosts.getSHA3_WORD();
@@ -188,20 +182,20 @@ public void step(Program program) {
188182
case RETURNDATACOPY:
189183
energyCost = calcMemEnergy(energyCosts, oldMemSize,
190184
memNeeded(stack.peek(), stack.get(stack.size() - 3)),
191-
stack.get(stack.size() - 3).longValueSafe());
185+
stack.get(stack.size() - 3).longValueSafe(), op);
192186
break;
193187
case CODECOPY:
194188
energyCost = calcMemEnergy(energyCosts, oldMemSize,
195189
memNeeded(stack.peek(), stack.get(stack.size() - 3)),
196-
stack.get(stack.size() - 3).longValueSafe());
190+
stack.get(stack.size() - 3).longValueSafe(), op);
197191
break;
198192
case EXTCODESIZE:
199193
energyCost = energyCosts.getEXT_CODE_SIZE();
200194
break;
201195
case EXTCODECOPY:
202196
energyCost = energyCosts.getEXT_CODE_COPY() + calcMemEnergy(energyCosts, oldMemSize,
203197
memNeeded(stack.get(stack.size() - 2), stack.get(stack.size() - 4)),
204-
stack.get(stack.size() - 4).longValueSafe());
198+
stack.get(stack.size() - 4).longValueSafe(), op);
205199
break;
206200
case CALL:
207201
case CALLCODE:
@@ -232,7 +226,7 @@ public void step(Program program) {
232226
stack.get(stack.size() - opOff - 1)); // in offset+size
233227
BigInteger out = memNeeded(stack.get(stack.size() - opOff - 2),
234228
stack.get(stack.size() - opOff - 3)); // out offset+size
235-
energyCost += calcMemEnergy(energyCosts, oldMemSize, in.max(out), 0);
229+
energyCost += calcMemEnergy(energyCosts, oldMemSize, in.max(out), 0, op);
236230
checkMemorySize(op, in.max(out));
237231

238232
if (energyCost > program.getEnergyLimitLeft().longValueSafe()) {
@@ -249,7 +243,7 @@ public void step(Program program) {
249243
break;
250244
case CREATE:
251245
energyCost = energyCosts.getCREATE() + calcMemEnergy(energyCosts, oldMemSize,
252-
memNeeded(stack.get(stack.size() - 2), stack.get(stack.size() - 3)), 0);
246+
memNeeded(stack.get(stack.size() - 2), stack.get(stack.size() - 3)), 0, op);
253247
break;
254248
case LOG0:
255249
case LOG1:
@@ -271,7 +265,7 @@ public void step(Program program) {
271265
energyCosts.getLOG_DATA_ENERGY() * stack.get(stack.size() - 2).longValue() +
272266
calcMemEnergy(energyCosts, oldMemSize,
273267
memNeeded(stack.peek(), stack.get(stack.size() - 2)),
274-
0);
268+
0, op);
275269

276270
checkMemorySize(op, memNeeded(stack.peek(), stack.get(stack.size() - 2)));
277271
break;

src/main/java/org/tron/common/runtime/vm/program/Program.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1472,7 +1472,7 @@ public static OutOfResourceException notEnoughTime(String op) {
14721472

14731473

14741474
public static OutOfMemoryException memoryOverflow(OpCode op) {
1475-
return new OutOfMemoryException("Out of Memory when '%s' operation executing", op);
1475+
return new OutOfMemoryException("Out of Memory when '%s' operation executing", op.name());
14761476
}
14771477

14781478
public static OutOfStorageException notEnoughStorage() {

src/main/java/org/tron/core/Wallet.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -886,6 +886,8 @@ public Transaction triggerContract(TriggerSmartContract triggerSmartContract,
886886
trxCap.setResult(ret);
887887
return trxCap.getInstance();
888888
}
889+
} catch (ContractValidateException e) {
890+
throw e;
889891
} catch (Exception e) {
890892
logger.error(e.getMessage());
891893
return null;

src/main/java/org/tron/core/config/args/Args.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ public class Args {
8181
@Getter
8282
@Setter
8383
@Parameter(names = {"--min-time-ratio"})
84-
private double minTimeRatio = 1.0; // 50ms * 1.0 = 50ms = 50000us
84+
private double minTimeRatio = 0.6;
8585

8686
@Getter
8787
@Setter
@@ -372,6 +372,9 @@ public static void clearParam() {
372372
INSTANCE.receiveTcpMinDataLength = 2048;
373373
INSTANCE.isOpenFullTcpDisconnect = false;
374374
INSTANCE.supportConstant = false;
375+
INSTANCE.debug = false;
376+
INSTANCE.minTimeRatio = 0.6;
377+
INSTANCE.maxTimeRatio = 5.0;
375378
}
376379

377380
/**

src/main/java/org/tron/core/db/Manager.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1053,7 +1053,7 @@ public boolean processTransaction(final TransactionCapsule trxCap, BlockCapsule
10531053
// if (blockCap != null && blockCap.generatedByMyself &&
10541054
// !blockCap.getInstance().getBlockHeader().getWitnessSignature().isEmpty() &&
10551055
// trxCap.getInstance().getRet(0).getContractRet() != contractResult.SUCCESS) {
1056-
//
1056+
// setBill(energyUsage);
10571057
// } else {
10581058
// }
10591059

src/main/resources/config.conf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -371,7 +371,7 @@ block = {
371371

372372
vm = {
373373
supportConstant = false
374-
minTimeRatio = 1.0
374+
minTimeRatio = 0.6
375375
maxTimeRatio = 5.0
376376
}
377377

0 commit comments

Comments
 (0)