Skip to content

Commit 35013fa

Browse files
committed
Optimize gas meter for TRON instructions
1 parent a5571fe commit 35013fa

2 files changed

Lines changed: 23 additions & 13 deletions

File tree

libevmasm/GasMeter.cpp

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -169,8 +169,11 @@ GasMeter::GasConsumption GasMeter::estimateMax(AssemblyItem const& _item, bool _
169169
valueSize = 0;
170170
else if (!classes.knownZero(m_state->relativeStackElement(-1 - valueSize)))
171171
gas += GasCosts::callValueTransferGas;
172-
gas += memoryGas(-2 - valueSize, -3 - valueSize);
173-
gas += memoryGas(-4 - valueSize, -5 - valueSize);
172+
int tokenIdSize = 0;
173+
if (_item.instruction() == Instruction::CALLTOKEN)
174+
tokenIdSize += 1;
175+
gas += memoryGas(-2 - valueSize - tokenIdSize, -3 - valueSize - tokenIdSize);
176+
gas += memoryGas(-4 - valueSize - tokenIdSize, -5 - valueSize - tokenIdSize);
174177
}
175178
break;
176179
}
@@ -209,37 +212,38 @@ GasMeter::GasConsumption GasMeter::estimateMax(AssemblyItem const& _item, bool _
209212
gas = GasCosts::balanceGas(m_evmVersion);
210213
break;
211214
case Instruction::NATIVEFREEZE:
212-
gas = runGas(Instruction::NATIVEFREEZE, m_evmVersion);
215+
gas = GasCosts::freezeV1Gas;
216+
gas += GasCosts::callNewAccountGas;
213217
break;
214218
case Instruction::NATIVEUNFREEZE:
215-
gas = runGas(Instruction::NATIVEUNFREEZE, m_evmVersion);
219+
gas = GasCosts::freezeV1Gas;
216220
break;
217221
case Instruction::NATIVEFREEZEEXPIRETIME:
218-
gas = runGas(Instruction::NATIVEFREEZEEXPIRETIME, m_evmVersion);
222+
gas = GasCosts::expireTimeGas;
219223
break;
220224
case Instruction::NATIVEVOTE:
221-
gas = runGas(Instruction::NATIVEVOTE, m_evmVersion);
225+
gas = GasCosts::voteGas;
222226
break;
223227
case Instruction::NATIVEWITHDRAWREWARD:
224-
gas = runGas(Instruction::NATIVEWITHDRAWREWARD, m_evmVersion);
228+
gas = GasCosts::withdrawGas;
225229
break;
226230
case Instruction::NATIVEFREEZEBALANCEV2:
227-
gas = runGas(Instruction::NATIVEFREEZEBALANCEV2, m_evmVersion);
231+
gas = GasCosts::freezeV2Gas;
228232
break;
229233
case Instruction::NATIVEUNFREEZEBALANCEV2:
230-
gas = runGas(Instruction::NATIVEUNFREEZEBALANCEV2, m_evmVersion);
234+
gas = GasCosts::freezeV2Gas;
231235
break;
232236
case Instruction::NATIVECANCELALLUNFREEZEV2:
233-
gas = runGas(Instruction::NATIVECANCELALLUNFREEZEV2, m_evmVersion);
237+
gas = GasCosts::freezeV2Gas;
234238
break;
235239
case Instruction::NATIVEWITHDRAWEXPIREUNFREEZE:
236-
gas = runGas(Instruction::NATIVEWITHDRAWEXPIREUNFREEZE, m_evmVersion);
240+
gas = GasCosts::freezeV2Gas;
237241
break;
238242
case Instruction::NATIVEDELEGATERESOURCE:
239-
gas = runGas(Instruction::NATIVEDELEGATERESOURCE, m_evmVersion);
243+
gas = GasCosts::freezeV2Gas;
240244
break;
241245
case Instruction::NATIVEUNDELEGATERESOURCE:
242-
gas = runGas(Instruction::NATIVEUNDELEGATERESOURCE, m_evmVersion);
246+
gas = GasCosts::freezeV2Gas;
243247
break;
244248
case Instruction::CHAINID:
245249
gas = runGas(Instruction::CHAINID, m_evmVersion);

libevmasm/GasMeter.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,12 @@ namespace GasCosts
177177
return _evmVersion >= langutil::EVMVersion::istanbul() ? 16 : 68;
178178
}
179179
static unsigned const copyGas = 3;
180+
181+
static unsigned const freezeV1Gas = 20000;
182+
static unsigned const expireTimeGas = 50;
183+
static unsigned const freezeV2Gas = 10000;
184+
static unsigned const withdrawGas = 20000;
185+
static unsigned const voteGas = 30000;
180186
}
181187

182188
/**

0 commit comments

Comments
 (0)