{
    "version": "0.0.0",
    "name": "mamam",
    "instructions": [
        {
            "name": "initializeExchange",
            "accounts": [
                {
                    "name": "exchange",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "payer",
                    "isMut": true,
                    "isSigner": true
                },
                {
                    "name": "systemProgram",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "rent",
                    "isMut": false,
                    "isSigner": false
                }
            ],
            "args": [
                {
                    "name": "bump",
                    "type": "u8"
                }
            ]
        },
        {
            "name": "initializeMarket",
            "accounts": [
                {
                    "name": "exchange",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "market",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "coinMintPk",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "pcMintPk",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "coinVaultPk",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "pcVaultPk",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "bidsPk",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "asksPk",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "reqQPk",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "eventQPk",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "serumMarketAuthority",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "systemProgram",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "rent",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "serumDexProgram",
                    "isMut": false,
                    "isSigner": false
                }
            ],
            "args": [
                {
                    "name": "vaultSignerNonce",
                    "type": "u64"
                }
            ]
        },
        {
            "name": "initUserOnMarket",
            "accounts": [
                {
                    "name": "exchange",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "serumOpenOrders",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "serumMarket",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "serumMarketAuthority",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "serumDexProgramId",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "user",
                    "isMut": true,
                    "isSigner": true
                },
                {
                    "name": "systemProgram",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "rent",
                    "isMut": false,
                    "isSigner": false
                }
            ],
            "args": [
                {
                    "name": "bump",
                    "type": "u8"
                }
            ]
        },
        {
            "name": "placeOrder",
            "accounts": [
                {
                    "name": "exchange",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "user",
                    "isMut": false,
                    "isSigner": true
                },
                {
                    "name": "orderPayer",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "market",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "openOrders",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "requestQueue",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "eventQueue",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "bids",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "asks",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "coinVault",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "pcVault",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "serumDexProgramId",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "tokenProgram",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "rent",
                    "isMut": false,
                    "isSigner": false
                }
            ],
            "args": [
                {
                    "name": "side",
                    "type": "u8"
                },
                {
                    "name": "limit",
                    "type": "u64"
                },
                {
                    "name": "maxCoinQty",
                    "type": "u64"
                },
                {
                    "name": "maxPcQty",
                    "type": "u64"
                }
            ]
        },
        {
            "name": "initializeAmm",
            "accounts": [
                {
                    "name": "exchange",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "amm",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "vault1",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "vault2",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "market",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "oracle1",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "oracle2",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "payer",
                    "isMut": true,
                    "isSigner": true
                },
                {
                    "name": "systemProgram",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "rent",
                    "isMut": false,
                    "isSigner": false
                }
            ],
            "args": [
                {
                    "name": "bump",
                    "type": "u8"
                },
                {
                    "name": "length",
                    "type": "u64"
                },
                {
                    "name": "timeGranularity",
                    "type": "u64"
                },
                {
                    "name": "range",
                    "type": "u64"
                }
            ]
        },
        {
            "name": "initAmmOnMarket",
            "accounts": [
                {
                    "name": "exchange",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "serumOpenOrders",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "serumMarket",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "serumMarketAuthority",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "serumDexProgramId",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "amm",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "payer",
                    "isMut": true,
                    "isSigner": true
                },
                {
                    "name": "systemProgram",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "rent",
                    "isMut": false,
                    "isSigner": false
                }
            ],
            "args": [
                {
                    "name": "bump",
                    "type": "u8"
                }
            ]
        },
        {
            "name": "depositAmm",
            "accounts": [
                {
                    "name": "exchange",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "amm",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "vault1",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "vault2",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "userToken1",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "userToken2",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "user",
                    "isMut": true,
                    "isSigner": true
                },
                {
                    "name": "tokenProgram",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "systemProgram",
                    "isMut": false,
                    "isSigner": false
                }
            ],
            "args": [
                {
                    "name": "value1",
                    "type": "u64"
                },
                {
                    "name": "value2",
                    "type": "u64"
                }
            ]
        },
        {
            "name": "updatePrice",
            "accounts": [
                {
                    "name": "exchange",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "amm",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "oracle1",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "oracle2",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "vault1",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "vault2",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "market",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "openOrders",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "requestQueue",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "eventQueue",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "bids",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "asks",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "coinVault",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "pcVault",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "pruneAuthority",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "serumDexProgramId",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "tokenProgram",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "rent",
                    "isMut": false,
                    "isSigner": false
                }
            ],
            "args": []
        }
    ],
    "accounts": [
        {
            "name": "Exchange",
            "type": {
                "kind": "struct",
                "fields": [
                    {
                        "name": "authority",
                        "type": "publicKey"
                    },
                    {
                        "name": "markets",
                        "type": {
                            "vec": {
                                "defined": "MarketData"
                            }
                        }
                    },
                    {
                        "name": "amms",
                        "type": {
                            "vec": {
                                "defined": "AmmData"
                            }
                        }
                    }
                ]
            }
        },
        {
            "name": "Amm",
            "type": {
                "kind": "struct",
                "fields": [
                    {
                        "name": "market",
                        "type": {
                            "defined": "MarketData"
                        }
                    },
                    {
                        "name": "marketAddress",
                        "type": "publicKey"
                    },
                    {
                        "name": "vault1",
                        "type": "publicKey"
                    },
                    {
                        "name": "vault2",
                        "type": "publicKey"
                    },
                    {
                        "name": "ema",
                        "type": "u64"
                    },
                    {
                        "name": "timestamp",
                        "type": "u64"
                    },
                    {
                        "name": "length",
                        "type": "u64"
                    },
                    {
                        "name": "timeGranularity",
                        "type": "u64"
                    },
                    {
                        "name": "range",
                        "type": "u64"
                    }
                ]
            }
        }
    ],
    "types": [
        {
            "name": "SerumData",
            "type": {
                "kind": "struct",
                "fields": [
                    {
                        "name": "coinLotSize",
                        "type": "u64"
                    },
                    {
                        "name": "pcLotSize",
                        "type": "u64"
                    },
                    {
                        "name": "vaultSignerNonce",
                        "type": "u64"
                    },
                    {
                        "name": "pcDustThreshold",
                        "type": "u64"
                    }
                ]
            }
        },
        {
            "name": "AmmData",
            "type": {
                "kind": "struct",
                "fields": [
                    {
                        "name": "address",
                        "type": "publicKey"
                    },
                    {
                        "name": "marketAddress",
                        "type": "publicKey"
                    }
                ]
            }
        },
        {
            "name": "MarketData",
            "type": {
                "kind": "struct",
                "fields": [
                    {
                        "name": "address",
                        "type": "publicKey"
                    },
                    {
                        "name": "pairName",
                        "type": "string"
                    },
                    {
                        "name": "asset1",
                        "type": {
                            "defined": "AssetData"
                        }
                    },
                    {
                        "name": "asset2",
                        "type": {
                            "defined": "AssetData"
                        }
                    }
                ]
            }
        },
        {
            "name": "AssetData",
            "type": {
                "kind": "struct",
                "fields": [
                    {
                        "name": "symbol",
                        "type": {
                            "defined": "Symbol"
                        }
                    },
                    {
                        "name": "tokenMint",
                        "type": "publicKey"
                    },
                    {
                        "name": "spotOracle",
                        "type": "publicKey"
                    }
                ]
            }
        },
        {
            "name": "ErrorCode",
            "type": {
                "kind": "enum",
                "variants": [
                    {
                        "name": "SampleError"
                    }
                ]
            }
        },
        {
            "name": "Symbol",
            "type": {
                "kind": "enum",
                "variants": [
                    {
                        "name": "BTC"
                    },
                    {
                        "name": "ETH"
                    },
                    {
                        "name": "USDC"
                    }
                ]
            }
        }
    ],
    "metadata": {
        "address": "3HGwuAEzU8vtqZasvKsYWF34cdw7j4y3AbtWJo1BrN19"
    }
}
