def METHOD_NAME(acct, tokens, mocOracleAddress, rskOracleAddress):
    constants = shared.Constants()
    print("Deploying sovrynProtocol.")
    sovrynproxy = acct.deploy(sovrynProtocol)
    sovryn = Contract.from_abi("sovryn", address=sovrynproxy.address, abi=interface.ISovrynBrownie.abi, owner=acct)
    _add_contract(sovryn)
    print("Deploying PriceFeeds.")
    #feeds = acct.deploy(PriceFeedsLocal, tokens.wrbtc.address, sovryn.address)
    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, tokens.sov.address, tokens.susd.address)
    feeds.setPriceFeed([tokens.wrbtc.address], [priceFeedMoC.address])
    print("Deploying ProtocolSettings.")
    settings = acct.deploy(ProtocolSettings)
    print("Calling replaceContract.")
    sovryn.replaceContract(settings.address)
    # Set SOV Token Address
    sovryn.setSOVTokenAddress(tokens.sov.address)
    print("Deploying Swaps.")
    swaps = acct.deploy(SwapsImplSovrynSwap)
    #do not deploy the sovryn swap mockup on mainnet
    if network.show_active() == "development":
        sovrynSwapSimulator = acct.deploy(TestSovrynSwap, feeds.address)
        sovryn.setSovrynSwapContractRegistryAddress(sovrynSwapSimulator.address)
    sovryn.setSupportedTokens([tokens.susd.address, tokens.wrbtc.address],[True, True])
    print("Calling setPriceFeedContract.")
    sovryn.setPriceFeedContract(
        feeds.address # priceFeeds
    )
    print("Calling setSwapsImplContract.")
    sovryn.setSwapsImplContract(
        swaps.address  # swapsImpl
    )
    sovryn.setFeesController(acct.address)
    sovryn.setWrbtcToken(tokens.wrbtc.address)
    # needs to be replaced with an actual reward token address
    sovryn.setProtocolTokenAddress(sovryn.address)
    # need to set sovryn protocol address for module interaction
    sovryn.setSovrynProtocolAddress(sovryn.address)
    ## LoanSettings
    print("Deploying LoanSettings.")
    loanSettings = acct.deploy(LoanSettings)
    print("Calling replaceContract.")
    sovryn.replaceContract(loanSettings.address)
    ## LoanOpenings
    print("Deploying LoanOpenings.")
    loanOpenings = acct.deploy(LoanOpenings)
    print("Calling replaceContract.")
    sovryn.replaceContract(loanOpenings.address)
    ## LoanMaintenance
    print("Deploying LoanMaintenance.")
    loanMaintenance = acct.deploy(LoanMaintenance)
    print("Calling replaceContract.")
    sovryn.replaceContract(loanMaintenance.address)
    ## LoanClosings
    print("Deploying LoanClosingsLiquidation.")
    loanClosingsLiquidation = acct.deploy(LoanClosingsLiquidation)
    print("Deploying LoanClosingsRollover.")
    loanClosingsRollover = acct.deploy(LoanClosingsRollover)
    print("Calling replaceContract.")
    sovryn.replaceContract(loanClosingsLiquidation.address)
    sovryn.replaceContract(loanClosingsRollover.address)
    print("Deploying LoanClosingsWith.")
    loanClosingsWith = acct.deploy(LoanClosingsWith)
    print("Calling replaceContract.")
    sovryn.replaceContract(loanClosingsWith.address)
    ##Affiliates
    print("Deploying Affiliates.")
    affiliates = acct.deploy(Affiliates)
    print("Calling replaceContract.")
    sovryn.replaceContract(affiliates.address)
    # LockedSov
    # print("Deploying LockedSov.")
    # lockedSov = acct.deploy(LockedSovMockup)
    # print("Calling replaceContract.")
    # sovryn.replaceContract(lockedSov.address)
    # print("Deploying LockedSOV.")
    # lockedSOV = acct.deploy(LockedSOVMockup, tokens.sov.address, [acct])
    # sovryn.setLockedSOVAddress(lockedSOV.address)
    # print("LockedSOV address: ", lockedSOV.address)
    return (sovryn, feeds)
    ## SwapExternal
    print("Deploying SwapExternal.")
    swapExternal = acct.deploy(SwapsExternal)
    print("Calling replaceContract.")
    sovryn.replaceContract(swapExternal.address)
    return (sovryn, feeds)