Skip to content

Commit

Permalink
Merge pull request #97 from DistributedCollective/update-oracles-on-p…
Browse files Browse the repository at this point in the history
…rice-feed

Modify PriceFeedMoC and test script
  • Loading branch information
ororopickpocket committed Jan 6, 2021
2 parents 37d156a + 94263a0 commit 2545d4d
Show file tree
Hide file tree
Showing 5 changed files with 71 additions and 28 deletions.
27 changes: 23 additions & 4 deletions contracts/feeds/testnet/PriceFeedsMoC.sol
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
pragma solidity 0.5.17;

import "../PriceFeeds.sol";
import "../IRSKOracle.sol";
import "../../openzeppelin/Address.sol";

interface Medianizer {
Expand All @@ -10,24 +11,32 @@ interface Medianizer {
contract PriceFeedsMoC is IPriceFeedsExt, Ownable {

address public mocOracleAddress;
address public rskOracleAddress;

event SetMoCOracleAddress(address indexed mocOracleAddress, address changerAddress);
event SetRSKOracleAddress(address indexed rskOracleAddress, address changerAddress);

constructor(
address _mocOracleAddress)
address _mocOracleAddress,
address _rskOracleAddress)
public
{
setMoCOracleAddress(_mocOracleAddress);
setRSKOracleAddress(_rskOracleAddress);
}

function latestAnswer()
external
view
view
returns (uint256)
{
(bytes32 value, bool hasValue) = Medianizer(mocOracleAddress).peek();
require(hasValue, "Doesn't have a value");
return uint256(value);
if (hasValue) {
return uint256(value);
} else {
(uint256 price,) = IRSKOracle(rskOracleAddress).getPricing();
return price;
}
}

function setMoCOracleAddress(
Expand All @@ -39,4 +48,14 @@ contract PriceFeedsMoC is IPriceFeedsExt, Ownable {
mocOracleAddress = _mocOracleAddress;
emit SetMoCOracleAddress(mocOracleAddress, msg.sender);
}

function setRSKOracleAddress(
address _rskOracleAddress)
public
onlyOwner
{
require(Address.isContract(_rskOracleAddress), "_rskOracleAddress not a contract");
rskOracleAddress = _rskOracleAddress;
emit SetRSKOracleAddress(rskOracleAddress, msg.sender);
}
}
2 changes: 2 additions & 0 deletions scripts/addLoanToken/add_loanToken.py
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,8 @@ def addLoanToken(tokenName, tokenSymbol, tokenDecimals, tokenInitialAmount, loan
priceFeed = acct.deploy(PriceFeed)
elif len(oracleAddress) == 1:
priceFeed = acct.deploy(PriceFeed, oracleAddress[0])
elif len(oracleAddress) == 2:
priceFeed = acct.deploy(PriceFeed, oracleAddress[0], oracleAddress[1])

feeds.setPriceFeed([tokens.token.address], [priceFeed.address])

Expand Down
32 changes: 20 additions & 12 deletions scripts/deployment/deploy_everything.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ def main():
configData = {
'WRBTC': '0x69FE5cEC81D5eF92600c1A0dB1F11986AB3758Ab',
'SUSD': '0xCb46C0DdC60d18eFEB0e586c17AF6Ea36452DaE0',
'medianizer': '0x2d39Cc54dc44FF27aD23A91a9B5fd750dae4B218'
'mocOracleAddress': '0x2d39Cc54dc44FF27aD23A91a9B5fd750dae4B218'
}
'''

Expand All @@ -49,37 +49,45 @@ def main():
else:
tokens = deployTokens(acct)

if(not 'medianizer' in configData):
medianizer = deployMoCMockup(acct)
configData['medianizer'] = medianizer.address
if(not 'mocOracleAddress' in configData):
mocOracle = deployMoCMockup(acct)
configData['mocOracleAddress'] = mocOracle.address

if(not 'rskOracleAddress' in configData):
rskOracle = deployRSKMockup(acct)
configData['rskOracleAddress'] = rskOracle.address

if(not 'mocState' in configData):
mocState = deployBProPriceFeedMockup(acct)
configData['mocState'] = mocState.address

(sovryn, feeds) = deployProtocol(acct, tokens, configData['medianizer'])
(sovryn, feeds) = deployProtocol(acct, tokens, configData['mocOracleAddress'], configData['rskOracleAddress'])
(loanTokenSUSD, loanTokenWRBTC, loanTokenSettingsSUSD,
loanTokenSettingsWRBTC) = deployLoanTokens(acct, sovryn, tokens)

#deployMultisig(sovryn, acct, owners, requiredConf)

configData["sovrynProtocol"] = sovryn.address
configData["PriceFeeds"] = feeds.address
configData["WRBTC"] = tokens.wrbtc.address
configData["SUSD"] = tokens.susd.address
configData["loanTokenSettingsSUSD"] = loanTokenSettingsSUSD.address
configData["loanTokenSUSD"] = loanTokenSUSD.address
configData["loanTokenSettingsWRBTC"] = loanTokenSettingsWRBTC.address
configData["loanTokenRBTC"] = loanTokenWRBTC.address

with open('./scripts/swapTest/swap_test.json', 'w') as configFile:
json.dump(configData, configFile)

def deployMoCMockup(acct):
priceFeedMockup = acct.deploy(PriceFeedsMoCMockup)
priceFeedMockup.setHas(True)
priceFeedMockup.setValue(10000e18)
return priceFeedMockup
priceFeedsMoCMockup = acct.deploy(PriceFeedsMoCMockup)
priceFeedsMoCMockup.setHas(True)
priceFeedsMoCMockup.setValue(10000e18)
return priceFeedsMoCMockup

def deployRSKMockup(acct):
priceFeedRSKMockup = acct.deploy(PriceFeedRSKOracleMockup)
priceFeedRSKMockup.setHas(True)
priceFeedRSKMockup.setValue(10000e18)
return priceFeedRSKMockup

def deployBProPriceFeedMockup(acct):
bproPriceFeedMockup = acct.deploy(BProPriceFeedMockup)
Expand Down
4 changes: 2 additions & 2 deletions scripts/deployment/deploy_protocol.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ def main():

deployProtocol(acct)

def deployProtocol(acct, tokens, medianizerAddress):
def deployProtocol(acct, tokens, mocOracleAddress, rskOracleAddress):

constants = shared.Constants()

Expand All @@ -31,7 +31,7 @@ def deployProtocol(acct, tokens, medianizerAddress):

print("Deploying PriceFeeds.")
#feeds = acct.deploy(PriceFeedsLocal, tokens.wrbtc.address, sovryn.address)
priceFeedMoC = acct.deploy(PriceFeedsMoC, medianizerAddress)
priceFeedMoC = acct.deploy(PriceFeedsMoC, mocOracleAddress, rskOracleAddress)
#2nd address should actually be the protocol token address, not the protocol address
feeds = acct.deploy(PriceFeeds, tokens.wrbtc.address, sovryn.address, tokens.susd.address)
feeds.setPriceFeed([tokens.wrbtc.address], [priceFeedMoC.address])
Expand Down
34 changes: 24 additions & 10 deletions tests/test_oracle_integration.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,9 @@


@pytest.fixture()
def set_oracle(PriceFeedsMoC, BZRX, PriceFeeds, WRBTC, accounts, sovryn, swapsImpl, SUSD):
def internal_set_oracle(oracle_address=sovryn.address):
price_feeds_moc = accounts[0].deploy(PriceFeedsMoC, oracle_address)
def set_oracle(PriceFeedsMoC, BZRX, PriceFeeds, WRBTC, accounts, sovryn, swapsImpl, SUSD, pice_feed_rsk_mockup):
def internal_set_oracle(pice_feed_rsk_mockup, oracle_address=sovryn.address):
price_feeds_moc = accounts[0].deploy(PriceFeedsMoC, oracle_address, pice_feed_rsk_mockup)
price_feeds = accounts[0].deploy(PriceFeeds, WRBTC.address, BZRX.address, SUSD.address)

price_feeds.setPriceFeed([BZRX.address, WRBTC.address], [price_feeds_moc.address, price_feeds_moc.address])
Expand All @@ -32,9 +32,16 @@ def pice_feed_moc_mockup(accounts, PriceFeedsMoCMockup):
price_feeds_moc_mockup.setValue(1e22)
return price_feeds_moc_mockup

@pytest.fixture()
def pice_feed_rsk_mockup(accounts, PriceFeedRSKOracleMockup):
pice_feed_rsk_mockup = accounts[0].deploy(PriceFeedRSKOracleMockup)
pice_feed_rsk_mockup.setHas(True)
pice_feed_rsk_mockup.setValue(1e20)
return pice_feed_rsk_mockup


def test_moc_oracle_integration(set_oracle, BZRX, WRBTC, pice_feed_moc_mockup):
price_feeds, price_feeds_moc = set_oracle(pice_feed_moc_mockup.address)
def test_moc_oracle_integration(set_oracle, BZRX, WRBTC, pice_feed_moc_mockup, pice_feed_rsk_mockup):
price_feeds, price_feeds_moc = set_oracle(pice_feed_rsk_mockup.address, pice_feed_moc_mockup.address)

res = price_feeds.queryPrecision(BZRX.address, WRBTC.address)
assert(res == 1e18)
Expand All @@ -43,8 +50,8 @@ def test_moc_oracle_integration(set_oracle, BZRX, WRBTC, pice_feed_moc_mockup):
assert(res == 1e22)


def test_set_moc_oracle_address(set_oracle, accounts, BZRX):
_, price_feeds_moc = set_oracle()
def test_set_moc_oracle_address(set_oracle, accounts, BZRX, pice_feed_rsk_mockup):
_, price_feeds_moc = set_oracle(pice_feed_rsk_mockup)

res = price_feeds_moc.setMoCOracleAddress(BZRX.address)
res.info()
Expand All @@ -55,8 +62,15 @@ def test_set_moc_oracle_address(set_oracle, accounts, BZRX):
assert(price_feeds_moc.mocOracleAddress() == BZRX.address)


def test_set_moc_oracle_address_unauthorized_user_should_fail(set_oracle, accounts, BZRX):
_, price_feeds_moc = set_oracle()
def test_set_moc_oracle_address_unauthorized_user_should_fail(set_oracle, accounts, BZRX, pice_feed_rsk_mockup):
_, price_feeds_moc = set_oracle(pice_feed_rsk_mockup)

with reverts("unauthorized"):
price_feeds_moc.setMoCOracleAddress(BZRX.address, {"from": accounts[1]})
price_feeds_moc.setMoCOracleAddress(BZRX.address, {"from": accounts[1]})

def test_get_price_from_rsk_when_hasValue_false(set_oracle, accounts, BZRX, pice_feed_moc_mockup, pice_feed_rsk_mockup):
pice_feed_moc_mockup.setHas(False)
_, price_feeds_moc = set_oracle(pice_feed_rsk_mockup.address, pice_feed_moc_mockup.address)

res = price_feeds_moc.latestAnswer()
assert(res == 1e20)

0 comments on commit 2545d4d

Please sign in to comment.