VPM-45 - Create NFTPUSDT Market Cap futures (Pre-market) [NFTPerp protocol]
This proposal outlines the creation of a futures market for NFTPerp, structured around the settlement principles detailed in the referenced research note.
It outlines the methodology for defining a token launch, calculating the market capitalisation at launch using a specified algorithm, and setting the futures contract settlement price. To the best of my understanding the market capitalization (MCAP) is calculated using a bespoke “MCAP Valuation Algorithm” once the token has launched (TGE). This involves computing the time-weighted average price (TWAP) of the token over a specified trading window and multiplying it by the total token supply. This resultant figure gives the market cap at the point of calculation, which is then used to determine the settlement price of a futures contract, based on a predetermined fraction of the MCAP.
Contributions to improving JSON proposal are welcome, in particular to refine these parameters further, ensuring a robust framework for market operations. Involvement in defining these auction and SLA parameters could enhance the proposal’s effectiveness applicability as well as quality of trading.
Market Summary:
NFTperp USDT futures
Settlement asset: USDT
Full Proposal JSON:
{
"batchProposalSubmission": {
"rationale": {
"description": "This proposal creates a futures market on the FDV of NFTPerp as discussed in this forum post: INSERT FORUM LINK",
"title": "VMP-45 - NFTPerp MCAP (Futures market)"
},
"terms": {
"closingTimestamp": "PLACEHOLDER", // TODO - grab closing timestamp
"changes": [
{
"enactmentTimestamp": "PLACEHOLDER", // TODO - grab enactment timestamp (1-2 hours after closing)
"newMarket": {
"changes": {
"linearSlippageFactor": "0.001",
"decimalPlaces": "6",
"positionDecimalPlaces": "-2",
"instrument": {
"name": "NFTPerp MCAP (Futures market)",
"code": "NFTPERP/USDT.MCAP", // This looks more like spot with forward slash
"future": {
"settlementAsset": "bf1e88d19db4b3ca0d1d5bdb73718a01686b18cf731ca26adedf3c8b83802bba",
"quoteName": "USDT",
"dataSourceSpecForSettlementData": {
"external": {
"ethOracle": {
"sourceChainId": "42161",
"address": "0x302461E6dBF45e59acb3BE9a9c84C0a997779612",
"abi": "[{\"type\":\"function\",\"name\":\"getData\",\"inputs\":[{\"name\":\"identifier\",\"type\":\"tuple\",\"internalType\":\"struct SettlementOracle.Identifier\",\"components\":[{\"name\":\"liveness\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"bondCurrency\",\"type\":\"address\",\"internalType\":\"contract IERC20\"},{\"name\":\"minimumBond\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"maximumBond\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"marketCode\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"quoteName\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"enactmentDate\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"ipfsLink\",\"type\":\"string\",\"internalType\":\"string\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"}]",
"method": "getData",
"args": [
{
"liveness": 28800,
"bondCurrency": "0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8",
"minimumBond": 500000000,
"maximumBond": 100000000000,
"ipfsLink": "ipfs://bafybeiepzqdjoxwzeh2vzwi5c4473vddemqjihc26tbuu32vkasisk537i", // TODO - check if we need a new IFPS link
"marketCode": "NFTPERP/USDT.MCAP",
"quoteName": "USDT",
"enactmentDate": "2024-03-20T11:00:00Z" // TODO - update this with correct enactment date
}
],
"requiredConfirmations": "64",
"trigger": {
"timeTrigger": {
"every": "600"
}
},
"filters": [
{
"key": {
"name": "resolved",
"type": "TYPE_BOOLEAN"
},
"conditions": [
{
"operator": "OPERATOR_EQUALS",
"value": "true"
}
]
},
{
"key": {
"name": "price",
"type": "TYPE_INTEGER",
"numberDecimalPlaces": "18"
},
"conditions": [
{
"operator": "OPERATOR_GREATER_THAN_OR_EQUAL",
"value": "0"
}
]
}
],
"normalisers": [
{
"name": "resolved",
"expression": "$[0]"
},
{
"name": "price",
"expression": "$[1]"
}
]
}
}
},
"dataSourceSpecForTradingTermination": {
"external": {
"ethOracle": {
"sourceChainId": "42161",
"address": "0x6d0b3a00265b8b4a1d22cf466c331014133ba614",
"abi": "[{\"type\":\"function\",\"name\":\"getData\",\"inputs\":[{\"name\":\"identifier\",\"type\":\"tuple\",\"internalType\":\"struct TerminationOracle.Identifier\",\"components\":[{\"name\":\"bondCurrency\",\"type\":\"address\",\"internalType\":\"contract IERC20\"},{\"name\":\"minimumBond\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"maximumBond\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"liveness\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"marketCode\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"quoteName\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"enactmentDate\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"ipfsLink\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"conditionalSettlementOracle\",\"type\":\"address\",\"internalType\":\"contract SettlementOracle\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"nonpayable\"}]",
"method": "getData",
"args": [
{
"liveness": 28800,
"bondCurrency": "0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8",
"minimumBond": 500000000,
"maximumBond": 100000000000,
"ipfsLink": "ipfs://bafybeiepzqdjoxwzeh2vzwi5c4473vddemqjihc26tbuu32vkasisk537i", // TODO - check this
"marketCode": "NFTPERP/USDT.MCAP",
"quoteName": "USDT",
"enactmentDate": "2024-03-20T11:00:00Z", // TODO - update this
"conditionalSettlementOracle": "0x302461E6dBF45e59acb3BE9a9c84C0a997779612"
}
],
"requiredConfirmations": "64",
"trigger": {
"timeTrigger": {
"every": "600"
}
},
"filters": [
{
"key": {
"name": "resolved",
"type": "TYPE_BOOLEAN"
},
"conditions": [
{
"operator": "OPERATOR_EQUALS",
"value": "true"
}
]
},
{
"key": {
"name": "terminated",
"type": "TYPE_BOOLEAN"
},
"conditions": [
{
"operator": "OPERATOR_EQUALS",
"value": "true"
}
]
}
],
"normalisers": [
{
"name": "resolved",
"expression": "$[0]"
},
{
"name": "terminated",
"expression": "$[2]"
}
]
}
}
},
"dataSourceSpecBinding": {
"settlementDataProperty": "price",
"tradingTerminationProperty": "terminated"
}
}
},
"metadata": [
"base:NFTPERP",
"quote:USDT",
"enactment:2024-03-20T11:00:00Z", // TODO - update this
"settlement:fromOracle",
"class:fx/crypto",
"oracle:uma",
"sector:defi",
"oracleChain:arbitrum",
"domain:nftperp.xyz"
],
},
]
},
"logNormal": {
"tau": 0.0002281542323,
"riskAversionParameter": 0.01,
"params": {
"mu": 0,
"r": 0,
"sigma": 5
}
},
"liquiditySlaParameters": {
"priceRange": "0.05", // TODO - check if this is too wide based on initial auction config
"commitmentMinTimeFraction": "0.5",
"performanceHysteresisEpochs": "0",
"slaCompetitionFactor": "0.8"
},
"liquidationStrategy": {
"disposalTimeStep": "5",
"disposalFraction": "0.1",
"fullDisposalSize": "10000",
"maxFractionConsumed": "0.1"
},
"liquidityFeeSettings": {
"method": "METHOD_CONSTANT",
"feeConstant": "0.005",
},
"liquidityMonitoringParameters": {
"targetStakeParameters": {
"timeWindow": "3600",
"scalingFactor": "0.05"
}
},
"markPriceConfiguration": {
"compositePriceType": "COMPOSITE_PRICE_TYPE_LAST_TRADE"
}
}
}
}
]
}
}
}
I had to cut out “priceMonitoringParameters” otherwise the proposal was too long to be posted.
Maybe we can discuss those in this comment section.