Commit 8e116f2a authored by ben-chain's avatar ben-chain Committed by GitHub

static refund size for CALL/CREATE

parent a3bb363d
...@@ -78,9 +78,9 @@ contract OVM_ExecutionManager is iOVM_ExecutionManager, Lib_AddressResolver { ...@@ -78,9 +78,9 @@ contract OVM_ExecutionManager is iOVM_ExecutionManager, Lib_AddressResolver {
**********************/ **********************/
/** /**
* Applies a net gas cost refund to a transaction to account for the difference in execution * Applies dynamically-sized refund to a transaction to account for the difference in execution
* between L1 and L2. * between L1 and L2, so that the overall cost of the ovmOPCODE is fixed.
* @param _cost Gas cost for the function after the refund. * @param _cost Desired gas cost for the function after the refund.
*/ */
modifier netGasCost( modifier netGasCost(
uint256 _cost uint256 _cost
...@@ -95,6 +95,27 @@ contract OVM_ExecutionManager is iOVM_ExecutionManager, Lib_AddressResolver { ...@@ -95,6 +95,27 @@ contract OVM_ExecutionManager is iOVM_ExecutionManager, Lib_AddressResolver {
} }
} }
/**
* Applies a fixed-size gas refund to a transaction to account for the difference in execution
* between L1 and L2, so that the overall cost of an ovmOPCODE can be lowered.
* @param _discount Amount of gas cost to refund for the ovmOPCODE.
*/
modifier fixedGasDiscount(
uint256 _discount
) {
uint256 gasProvided = gasleft();
_;
uint256 gasUsed = gasProvided - gasleft();
// We want to refund the specified _discount, unless this risks underflow.
if (_discount < gasUsed) {
transactionRecord.ovmGasRefund += _discount;
} else {
// refund all we can without risking underflow.
transactionRecord.ovmGasRefund += gasUsed;
}
}
/** /**
* Makes sure we're not inside a static context. * Makes sure we're not inside a static context.
*/ */
...@@ -327,7 +348,7 @@ contract OVM_ExecutionManager is iOVM_ExecutionManager, Lib_AddressResolver { ...@@ -327,7 +348,7 @@ contract OVM_ExecutionManager is iOVM_ExecutionManager, Lib_AddressResolver {
override override
public public
notStatic notStatic
netGasCost(40000 + _bytecode.length * 100) fixedGasDiscount(40000)
returns ( returns (
address _contract address _contract
) )
...@@ -360,7 +381,7 @@ contract OVM_ExecutionManager is iOVM_ExecutionManager, Lib_AddressResolver { ...@@ -360,7 +381,7 @@ contract OVM_ExecutionManager is iOVM_ExecutionManager, Lib_AddressResolver {
override override
public public
notStatic notStatic
netGasCost(40000 + _bytecode.length * 100) fixedGasDiscount(40000)
returns ( returns (
address _contract address _contract
) )
...@@ -499,7 +520,7 @@ contract OVM_ExecutionManager is iOVM_ExecutionManager, Lib_AddressResolver { ...@@ -499,7 +520,7 @@ contract OVM_ExecutionManager is iOVM_ExecutionManager, Lib_AddressResolver {
) )
override override
public public
netGasCost(100000) fixedGasDiscount(100000)
returns ( returns (
bool _success, bool _success,
bytes memory _returndata bytes memory _returndata
...@@ -535,7 +556,7 @@ contract OVM_ExecutionManager is iOVM_ExecutionManager, Lib_AddressResolver { ...@@ -535,7 +556,7 @@ contract OVM_ExecutionManager is iOVM_ExecutionManager, Lib_AddressResolver {
) )
override override
public public
netGasCost(80000) fixedGasDiscount(80000)
returns ( returns (
bool _success, bool _success,
bytes memory _returndata bytes memory _returndata
...@@ -572,7 +593,7 @@ contract OVM_ExecutionManager is iOVM_ExecutionManager, Lib_AddressResolver { ...@@ -572,7 +593,7 @@ contract OVM_ExecutionManager is iOVM_ExecutionManager, Lib_AddressResolver {
) )
override override
public public
netGasCost(40000) fixedGasDiscount(40000)
returns ( returns (
bool _success, bool _success,
bytes memory _returndata bytes memory _returndata
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment