diff --git a/contracts/FuturesMarketData.sol b/contracts/FuturesMarketData.sol index 5a48ecaeec..d1df842484 100644 --- a/contracts/FuturesMarketData.sol +++ b/contracts/FuturesMarketData.sol @@ -10,6 +10,11 @@ import "./interfaces/IAddressResolver.sol"; contract FuturesMarketData { /* ========== TYPES ========== */ + struct FuturesGlobals { + uint minInitialMargin; + uint liquidationFee; + } + struct MarketSummary { address market; bytes32 asset; @@ -111,6 +116,11 @@ contract FuturesMarketData { ); } + function globals() external view returns (FuturesGlobals memory) { + IFuturesMarketSettings settings = _futuresMarketSettings(); + return FuturesGlobals(settings.minInitialMargin(), settings.liquidationFee()); + } + function parameters(bytes32 baseAsset) external view returns (IFuturesMarketSettings.Parameters memory) { return _parameters(baseAsset); } diff --git a/test/contracts/FuturesMarketData.js b/test/contracts/FuturesMarketData.js index 7f08e325f3..4d20fa90b4 100644 --- a/test/contracts/FuturesMarketData.js +++ b/test/contracts/FuturesMarketData.js @@ -141,6 +141,17 @@ contract('FuturesMarketData', accounts => { assert.equal(await futuresMarketData.resolverProxy(), addressResolver.address); }); + describe('Globals', () => { + it('Global futures settings are properly fetched', async () => { + const globals = await futuresMarketData.globals(); + + assert.bnEqual(await futuresMarketSettings.minInitialMargin(), globals.minInitialMargin); + assert.bnEqual(globals.minInitialMargin, toUnit('100')); + assert.bnEqual(await futuresMarketSettings.liquidationFee(), globals.liquidationFee); + assert.bnEqual(globals.liquidationFee, toUnit('20')); + }); + }); + describe('Market details', () => { it('By address', async () => { const details = await futuresMarketData.marketDetails(futuresMarket.address);