{
  "_format": "hh-sol-artifact-1",
  "contractName": "IMargin",
  "sourceName": "contracts/interfaces/IMargin.sol",
  "abi": [
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "trader",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "depositAmount",
          "type": "uint256"
        },
        {
          "components": [
            {
              "internalType": "int256",
              "name": "quoteSize",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "baseSize",
              "type": "int256"
            },
            {
              "internalType": "uint256",
              "name": "tradeSize",
              "type": "uint256"
            }
          ],
          "indexed": false,
          "internalType": "struct IMargin.Position",
          "name": "position",
          "type": "tuple"
        }
      ],
      "name": "AddMargin",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "trader",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "quoteAmount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "baseAmount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "int256",
          "name": "fundingFee",
          "type": "int256"
        },
        {
          "components": [
            {
              "internalType": "int256",
              "name": "quoteSize",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "baseSize",
              "type": "int256"
            },
            {
              "internalType": "uint256",
              "name": "tradeSize",
              "type": "uint256"
            }
          ],
          "indexed": false,
          "internalType": "struct IMargin.Position",
          "name": "position",
          "type": "tuple"
        }
      ],
      "name": "ClosePosition",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "liquidator",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "trader",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "quoteAmount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "baseAmount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "bonus",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "int256",
          "name": "fundingFee",
          "type": "int256"
        },
        {
          "components": [
            {
              "internalType": "int256",
              "name": "quoteSize",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "baseSize",
              "type": "int256"
            },
            {
              "internalType": "uint256",
              "name": "tradeSize",
              "type": "uint256"
            }
          ],
          "indexed": false,
          "internalType": "struct IMargin.Position",
          "name": "position",
          "type": "tuple"
        }
      ],
      "name": "Liquidate",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "trader",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "side",
          "type": "uint8"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "baseAmount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "quoteAmount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "int256",
          "name": "fundingFee",
          "type": "int256"
        },
        {
          "components": [
            {
              "internalType": "int256",
              "name": "quoteSize",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "baseSize",
              "type": "int256"
            },
            {
              "internalType": "uint256",
              "name": "tradeSize",
              "type": "uint256"
            }
          ],
          "indexed": false,
          "internalType": "struct IMargin.Position",
          "name": "position",
          "type": "tuple"
        }
      ],
      "name": "OpenPosition",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "trader",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "withdrawAmount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "int256",
          "name": "fundingFee",
          "type": "int256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "withdrawAmountFromMargin",
          "type": "uint256"
        },
        {
          "components": [
            {
              "internalType": "int256",
              "name": "quoteSize",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "baseSize",
              "type": "int256"
            },
            {
              "internalType": "uint256",
              "name": "tradeSize",
              "type": "uint256"
            }
          ],
          "indexed": false,
          "internalType": "struct IMargin.Position",
          "name": "position",
          "type": "tuple"
        }
      ],
      "name": "RemoveMargin",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "timeStamp",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "int256",
          "name": "cpf",
          "type": "int256"
        }
      ],
      "name": "UpdateCPF",
      "type": "event"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "trader",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "depositAmount",
          "type": "uint256"
        }
      ],
      "name": "addMargin",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "amm",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "baseToken",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "trader",
          "type": "address"
        }
      ],
      "name": "calDebtRatio",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "debtRatio",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "trader",
          "type": "address"
        }
      ],
      "name": "calFundingFee",
      "outputs": [
        {
          "internalType": "int256",
          "name": "fundingFee",
          "type": "int256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "trader",
          "type": "address"
        }
      ],
      "name": "calUnrealizedPnl",
      "outputs": [
        {
          "internalType": "int256",
          "name": "",
          "type": "int256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "trader",
          "type": "address"
        }
      ],
      "name": "canLiquidate",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "trader",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "quoteAmount",
          "type": "uint256"
        }
      ],
      "name": "closePosition",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "baseAmount",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "config",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "factory",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getNewLatestCPF",
      "outputs": [
        {
          "internalType": "int256",
          "name": "",
          "type": "int256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "trader",
          "type": "address"
        }
      ],
      "name": "getPosition",
      "outputs": [
        {
          "internalType": "int256",
          "name": "baseSize",
          "type": "int256"
        },
        {
          "internalType": "int256",
          "name": "quoteSize",
          "type": "int256"
        },
        {
          "internalType": "uint256",
          "name": "tradeSize",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "trader",
          "type": "address"
        }
      ],
      "name": "getWithdrawable",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "baseToken_",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "quoteToken_",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "amm_",
          "type": "address"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "trader",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        }
      ],
      "name": "liquidate",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "quoteAmount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "baseAmount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "bonus",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "netPosition",
      "outputs": [
        {
          "internalType": "int256",
          "name": "netQuotePosition",
          "type": "int256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "trader",
          "type": "address"
        },
        {
          "internalType": "uint8",
          "name": "side",
          "type": "uint8"
        },
        {
          "internalType": "uint256",
          "name": "quoteAmount",
          "type": "uint256"
        }
      ],
      "name": "openPosition",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "baseAmount",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bool",
          "name": "isLong",
          "type": "bool"
        },
        {
          "internalType": "uint256",
          "name": "quoteAmount",
          "type": "uint256"
        }
      ],
      "name": "querySwapBaseWithAmm",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "quoteToken",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "trader",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "withdrawAmount",
          "type": "uint256"
        }
      ],
      "name": "removeMargin",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "totalPosition",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "totalQuotePosition",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "updateCPF",
      "outputs": [
        {
          "internalType": "int256",
          "name": "",
          "type": "int256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x",
  "deployedBytecode": "0x",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
