Skip to content

Commit 8f744f2

Browse files
committed
Optimize gas meter for TRON instructions
1 parent bebb4e9 commit 8f744f2

2 files changed

Lines changed: 25 additions & 25 deletions

File tree

libevmasm/GasMeter.cpp

Lines changed: 19 additions & 25 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
}
@@ -208,38 +211,29 @@ GasMeter::GasConsumption GasMeter::estimateMax(AssemblyItem const& _item, bool _
208211
case Instruction::ISCONTRACT:
209212
gas = GasCosts::balanceGas(m_evmVersion);
210213
break;
211-
case Instruction::NATIVEFREEZE:
212-
gas = runGas(Instruction::NATIVEFREEZE, m_evmVersion);
213-
break;
214-
case Instruction::NATIVEUNFREEZE:
215-
gas = runGas(Instruction::NATIVEUNFREEZE, m_evmVersion);
216-
break;
217-
case Instruction::NATIVEFREEZEEXPIRETIME:
218-
gas = runGas(Instruction::NATIVEFREEZEEXPIRETIME, m_evmVersion);
219-
break;
214+
case Instruction::NATIVEFREEZE:
215+
gas = GasCosts::freezeV1Gas;
216+
gas += GasCosts::callNewAccountGas;
217+
break;
218+
case Instruction::NATIVEUNFREEZE:
219+
gas = GasCosts::freezeV1Gas;
220+
break;
221+
case Instruction::NATIVEFREEZEEXPIRETIME:
222+
gas = GasCosts::expireTimeGas;
223+
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);
228-
break;
229231
case Instruction::NATIVEUNFREEZEBALANCEV2:
230-
gas = runGas(Instruction::NATIVEUNFREEZEBALANCEV2, m_evmVersion);
231-
break;
232-
case Instruction::NATIVECANCELALLUNFREEZEV2:
233-
gas = runGas(Instruction::NATIVECANCELALLUNFREEZEV2, m_evmVersion);
234-
break;
232+
case Instruction::NATIVECANCELALLUNFREEZEV2:
235233
case Instruction::NATIVEWITHDRAWEXPIREUNFREEZE:
236-
gas = runGas(Instruction::NATIVEWITHDRAWEXPIREUNFREEZE, m_evmVersion);
237-
break;
238234
case Instruction::NATIVEDELEGATERESOURCE:
239-
gas = runGas(Instruction::NATIVEDELEGATERESOURCE, m_evmVersion);
240-
break;
241235
case Instruction::NATIVEUNDELEGATERESOURCE:
242-
gas = runGas(Instruction::NATIVEUNDELEGATERESOURCE, m_evmVersion);
236+
gas = GasCosts::freezeV2Gas;
243237
break;
244238
case Instruction::CHAINID:
245239
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)