Skip to content

Commit

Permalink
Merge pull request #31 from Synthetixio/add-btc-perps-market
Browse files Browse the repository at this point in the history
Add BTC Perps Market
  • Loading branch information
sunnyvempati authored Aug 4, 2023
2 parents f8b3032 + cc5f2af commit c05ed8f
Show file tree
Hide file tree
Showing 9 changed files with 248 additions and 8 deletions.
71 changes: 67 additions & 4 deletions omnibus-optimism-goerli.toml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
name = "synthetix-omnibus"
version = "3.2.1-dev.b257e30b"
version = "3.2.1-dev.3c89ca90"
description = "Includes the full synthetix system with configurations applied"
include = [
"tomls/settings-testnet.toml",
Expand All @@ -13,6 +13,7 @@ include = [
"tomls/markets/spot/btc.toml",
"tomls/markets/spot/link.toml",
"tomls/markets/perps/eth.toml",
"tomls/markets/perps/btc.toml",
"tomls/permit-all-createPool.toml",
"tomls/permit-all-registerMarket.toml",
"tomls/permit-all-perps-createAccount.toml",
Expand Down Expand Up @@ -131,8 +132,11 @@ defaultValue = "10000"
[setting.perpsEthInitialMarginRatio]
defaultValue = "2"

[setting.perpsEthMaintenanceMarginFraction]
defaultValue = "1"
[setting.perpsEthMinimumInitialMarginRatio]
defaultValue = "0.01"

[setting.perpsEthMaintenanceMarginScalar]
defaultValue = "0.5"

[setting.perpsEthLiquidationRewardRatioD18]
defaultValue = "0.01"
Expand All @@ -149,6 +153,50 @@ defaultValue = "1"
[setting.perpsEthLockedOiRatio]
defaultValue = "0.1"

# BTC Perps Configuration

[setting.btcPerpsMarketId]
defaultValue = "200"

[setting.perpsBtcSkewScale]
defaultValue = "100000"

[setting.perpsBtcMaxFundingVelocity]
defaultValue = "9"

[setting.perpsBtcMakerFeeRatio]
defaultValue = "0.0007"

[setting.perpsBtcTakerFeeRatio]
defaultValue = "0.0003"

[setting.perpsBtcMaxMarketSize]
defaultValue = "10000"

[setting.perpsBtcInitialMarginRatio]
defaultValue = "2"

[setting.perpsBtcMaintenanceMarginScalar]
defaultValue = "1"

[setting.perpsBtcMinimumInitialMarginRatio]
defaultValue = "0.01"

[setting.perpsBtcLiquidationRewardRatioD18]
defaultValue = "0.01"

[setting.perpsBtcMaxLiquidationLimitAccumulationMultiplier]
defaultValue = "1"

[setting.perpsBtcMaxSecondsInLiquidationWindow]
defaultValue = "30"

[setting.perpsBtcMinimumPositionMargin]
defaultValue = "1"

[setting.perpsBtcLockedOiRatio]
defaultValue = "0.1"

# ETH Synth Configuration

[setting.synthEthAsyncFixedFee]
Expand Down Expand Up @@ -181,13 +229,28 @@ args = [
]
depends=["provision.perpsFactory", "invoke.createEthSynth"]

[invoke.setPerpsProxyCustomTransactorOnBtcSynthMarket]
target = ["spotFactory.SpotMarketProxy"]
fromCall.func = "getMarketOwner"
fromCall.args = ["<%= extras.synth_btc_market_id %>"]
func = "setCustomTransactorFees"
args = [
"<%= extras.synth_btc_market_id %>",
"<%= imports.perpsFactory.contracts.PerpsMarketProxy.address %>",
"<%= parseEther('0.0001') %>"
]
depends=["provision.perpsFactory", "invoke.createBtcSynth"]

# Pyth settlement strategy config
[setting.pythFeedUrl]
defaultValue = "https://api.synthetix.io/pyth-testnet/api/get_vaa_ccip?data={data}"

[setting.pythEthFeedId]
defaultValue = "0xca80ba6dc32e08d06f1aa886011eed1d77c77be9eb761cc10d72b7d0a2fd57a6"

[setting.pythBtcFeedId]
defaultValue = "0xf9c0172ba10dfa4d19088d94f5bf61d3b54d5bd7483a322a982e1373ee8ea31b"

[setting.priceWindowDuration]
defaultValue = "180"

Expand All @@ -206,4 +269,4 @@ args = [
],
]

depends=["invoke.createScPool", "invoke.createEthSynth", "invoke.createBtcSynth", "invoke.createLinkSynth", "invoke.createEthPerpsMarket"]
depends=["invoke.createScPool", "invoke.createEthSynth", "invoke.createBtcSynth", "invoke.createLinkSynth", "provision.perpsFactory"]
3 changes: 3 additions & 0 deletions omnibus-optimism-mainnet.toml
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,9 @@ defaultValue = "0x4200000000000000000000000000000000000006"
[setting.eth_aggregator_address]
defaultValue = "0x13e3Ee699D1909E989722E753853AE30b17e08c5"

[setting.btc_aggregator_address]
defaultValue = "0xD702DD976Fb76Fffc2D3963D037dfDae5b04E593"

[setting.snx_liquidation_reward]
defaultValue = "10000000000000000000"

Expand Down
2 changes: 1 addition & 1 deletion tomls/core.toml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
[setting.snx_package]
defaultValue = "synthetix:3.2.1-dev.b257e30b"
defaultValue = "synthetix:3.2.1-dev.3c89ca90"

[setting.owner]

Expand Down
27 changes: 27 additions & 0 deletions tomls/markets/common/settlement-strategies/btc/pyth.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
[setting.btcSettlementDelay]
defaultValue = "15"

[setting.btcSettlementWindowDuration]
defaultValue = "60"

[setting.btcPriceWindowDuration]
defaultValue = "600"

[setting.pythPriceVerificationAddress]
defaultValue = "0xff1a0f4744e8582DF1aE09D5611b887B6a12925C"

[setting.pythBtcFeedId]

[setting.pythFeedUrl]

[setting.settlementReward]
defaultValue = "0"

[setting.btcSettlementDeviationTolerance]
defaultValue = "0.05"

[setting.settlementMinimumUsdExchangeAmount]
defaultValue = "0.000001"

[setting.settlementMaxRoundingLoss]
defaultValue = "0.000001"
2 changes: 1 addition & 1 deletion tomls/markets/perps-factory.toml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ include = [
]

[setting.perps_market_package]
defaultValue = "synthetix-perps-market:3.2.1-dev.b257e30b"
defaultValue = "synthetix-perps-market:3.2.1-dev.3c89ca90"

[provision.perpsFactory]
source = "<%= settings.perps_market_package %>"
Expand Down
123 changes: 123 additions & 0 deletions tomls/markets/perps/btc.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,123 @@
include = [
"../perps-factory.toml",

# TODO: this is a funny necessary dependency because the oracle manager is registering the same node twice
# however, it will not emit "NodeRegistered" the second time because its an unnecessary call
"../../oracles/btc.toml",
"../common/settlement-strategies/btc/pyth.toml"
]

[setting.btcPerpsMarketId]

[setting.perpsBtcSkewScale]

[setting.perpsBtcMaxFundingVelocity]

[setting.perpsBtcMakerFeeRatio]

[setting.perpsBtcTakerFeeRatio]

[setting.perpsBtcMaxMarketSize]

[setting.perpsBtcInitialMarginRatio]

[setting.perpsBtcMaintenanceMarginFraction]

[setting.perpsBtcLiquidationRewardRatioD18]

[setting.perpsBtcMaxLiquidationLimitAccumulationMultiplier]

[setting.perpsBtcMaxSecondsInLiquidationWindow]

[setting.perpsBtcMinimumPositionMargin]

[setting.perpsBtcLockedOiRatio]

# strategy type for Perps markets is 0, for spot markets is 1
[setting.strategyType]
defaultValue = "0"

[invoke.createBtcPerpsMarket]
target = ["perpsFactory.PerpsMarketProxy"]
fromCall.func = "owner"
func = "createMarket"
args = ["<%= settings.btcPerpsMarketId %>", "Bitcoin", "BTC"]
depends = ["provision.perpsFactory"]

[invoke.setPerpsPriceBtc]
target = ["perpsFactory.PerpsMarketProxy"]
fromCall.func = "owner"
func = "updatePriceData"
args = [
"<%= settings.btcPerpsMarketId %>",
"<%= extras.btc_oracle_id %>"
]
depends = ["invoke.createBtcPerpsMarket", "invoke.registerBtcOracleNode"]

[invoke.setPerpsBtcSettlementStrategy]
target = ["perpsFactory.PerpsMarketProxy"]
fromCall.func = "owner"
func = "addSettlementStrategy"
args = [
"<%= settings.btcPerpsMarketId %>",
{ strategyType = "<%= settings.strategyType %>", settlementDelay = "<%= settings.btcSettlementDelay %>", settlementWindowDuration = "<%= settings.btcSettlementWindowDuration %>", priceWindowDuration = "<%= settings.priceWindowDuration %>", priceVerificationContract = "<%= settings.pythPriceVerificationAddress %>", feedId = "<%= settings.pythBtcFeedId %>", url = "<%= settings.pythFeedUrl %>", settlementReward = "<%= settings.settlementReward %>", priceDeviationTolerance = "<%= parseEther(settings.btcSettlementDeviationTolerance) %>", disabled = false }
]
depends = ["invoke.createBtcPerpsMarket"]

[invoke.setPerpsBtcFundingParameters]
target = ["perpsFactory.PerpsMarketProxy"]
fromCall.func = "owner"
func = "setFundingParameters"
args = [
"<%= settings.btcPerpsMarketId %>",
"<%= parseEther(settings.perpsBtcSkewScale) %>",
"<%= parseEther(settings.perpsBtcMaxFundingVelocity) %>"
]
depends = ["invoke.createBtcPerpsMarket"]

[invoke.setPerpsBtcOrderFees]
target = ["perpsFactory.PerpsMarketProxy"]
fromCall.func = "owner"
func = "setOrderFees"
args = [
"<%= settings.btcPerpsMarketId %>",
"<%= parseEther(settings.perpsBtcMakerFeeRatio) %>",
"<%= parseEther(settings.perpsBtcTakerFeeRatio) %>"
]
depends = ["invoke.createBtcPerpsMarket"]

[invoke.setPerpsBtcMaxMarketSize]
target = ["perpsFactory.PerpsMarketProxy"]
fromCall.func = "owner"
func = "setMaxMarketSize"
args = [
"<%= settings.btcPerpsMarketId %>",
"<%= parseEther(settings.perpsBtcMaxMarketSize) %>"
]
depends = ["invoke.createBtcPerpsMarket"]

[invoke.setPerpsBtcLiquidationParameters]
target = ["perpsFactory.PerpsMarketProxy"]
fromCall.func = "owner"
func = "setLiquidationParameters"
args = [
"<%= settings.btcPerpsMarketId %>",
"<%= parseEther(settings.perpsBtcInitialMarginRatio) %>",
"<%= parseEther(settings.perpsBtcMinimumInitialMarginRatio) %>",
"<%= parseEther(settings.perpsBtcMaintenanceMarginScalar) %>",
"<%= parseEther(settings.perpsBtcLiquidationRewardRatioD18) %>",
"<%= parseEther(settings.perpsBtcMaxLiquidationLimitAccumulationMultiplier) %>",
"<%= parseEther(settings.perpsBtcMaxSecondsInLiquidationWindow) %>",
"<%= parseEther(settings.perpsBtcMinimumPositionMargin) %>"
]
depends = ["invoke.createBtcPerpsMarket"]

[invoke.setPerpsBtcLockedOiRatio]
target = ["perpsFactory.PerpsMarketProxy"]
fromCall.func = "owner"
func = "setLockedOiRatio"
args = [
"<%= settings.btcPerpsMarketId %>",
"<%= parseEther(settings.perpsBtcLockedOiRatio) %>"
]
depends = ["invoke.createBtcPerpsMarket"]
3 changes: 2 additions & 1 deletion tomls/markets/perps/eth.toml
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,8 @@ func = "setLiquidationParameters"
args = [
"<%= settings.ethPerpsMarketId %>",
"<%= parseEther(settings.perpsEthInitialMarginRatio) %>",
"<%= parseEther(settings.perpsEthMaintenanceMarginFraction) %>",
"<%= parseEther(settings.perpsEthMinimumInitialMarginRatio) %>",
"<%= parseEther(settings.perpsEthMaintenanceMarginScalar) %>",
"<%= parseEther(settings.perpsEthLiquidationRewardRatioD18) %>",
"<%= parseEther(settings.perpsEthMaxLiquidationLimitAccumulationMultiplier) %>",
"<%= parseEther(settings.perpsEthMaxSecondsInLiquidationWindow) %>",
Expand Down
2 changes: 1 addition & 1 deletion tomls/markets/spot-factory.toml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ include = [
]

[setting.spot_market_package]
defaultValue = "synthetix-spot-market:3.2.1-dev.b257e30b"
defaultValue = "synthetix-spot-market:3.2.1-dev.3c89ca90"

[provision.spotFactory]
source = "<%= settings.spot_market_package %>"
Expand Down
23 changes: 23 additions & 0 deletions tomls/oracles/btc.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
include = [
"../core.toml"
]

[setting.btc_aggregator_address]

[invoke.registerBtcOracleNode]
target = ["system.oracle_manager.Proxy"]
func = "registerNode"
args = [
# 3 = chainlink aggregator type
3,
# 3 parameters are: address of the chainlink oracle
"<%= defaultAbiCoder.encode(['address', 'uint256', 'uint8'], [settings.btc_aggregator_address, 0, 8]) %>",
[]
]

extra.btc_oracle_id.event = "NodeRegistered"
extra.btc_oracle_id.arg = 0

depends = [
"provision.system"
]

0 comments on commit c05ed8f

Please sign in to comment.