SIP-25: Decouple Gas Limiter from Oracle
| Author | |
|---|---|
| Status | Implemented |
| Type | Governance |
| Network | Ethereum |
| Implementor | TBD |
| Release | TBD |
| Created | 2019-10-29 |
Simple Summary
Allow the control of setting the gasPriceLimit to be detached from the centralized SNX oracle.
Abstract
The current gasPriceLimit in Synthetix can only be changed by the central SNX Oracle. This proposal is to change this access to a separate address, controlled by a setter only callable by the owner.
Motivation
Due to the way Ethereum handles nonces, all transactions from a single account have to be mined in (nonce-based) order, one at a time. Thus any invocation of the setGasPriceLimit() function has to be mined before a price update can be mined on-chain. This creates an unnecessary delay in serving timely oracle updates.
Specification
In Synthetix.sol:
- Add a new public
addressproperty onSynthetixcalledgasLimitOracle - Add a new
onlyOwnersetter function to mutate thesetGasLimitOraclecalledsetGasLimitOracle - Modify
setGasPriceLimit(), removing theonlyOraclemodifier and adding arequire(msg.sender == gasLimitOracle)
Rationale
I propose modifying Synthetix.sol rather than moving the limiter into ExchangeRates and thus requiring a change of that contract as well. Further, I propose using a require rather than a modifier for the setGasPriceLimit function, to reduce gas usage on the already very large Synthetix contract.
Test Cases
https://github.com/Synthetixio/synthetix/blob/v2.12.2/test/Synthetix.js#L2611
Implementation
https://github.com/Synthetixio/synthetix/blob/v2.12.2/contracts/Synthetix.sol#L158
The implementations must be completed before any SIP is given status "Implemented", but it need not be completed before the SIP is "Approved". While there is merit to the approach of reaching consensus on the specification and rationale before writing code, the principle of "rough consensus and running code" is still useful when it comes to resolving many discussions of API details.
Copyright
Copyright and related rights waived via CC0.