{
  "address": "Fv7op93iVyTGKVeD3bQvh3dsi6u5g8ULyvvg48dRqWqe",
  "metadata": {
    "name": "rwa_market",
    "version": "0.1.0",
    "spec": "0.1.0",
    "description": "RWA market program (asset listing, pricing, purchase limits)"
  },
  "instructions": [
    {
      "name": "buy",
      "docs": [
        "Buy `amount` RWA tokens for the listed price + fee. Trader signs and pays; RWA moves",
        "from the vault to the trader via the Asset PDA's delegate authority. `max_cost` guards",
        "slippage. Mirrors Market.buy(token, amount, maxCost)."
      ],
      "discriminator": [
        102,
        6,
        61,
        18,
        1,
        218,
        235,
        234
      ],
      "accounts": [
        {
          "name": "trader",
          "writable": true,
          "signer": true
        },
        {
          "name": "asset",
          "pda": {
            "seeds": [
              {
                "kind": "const",
                "value": [
                  97,
                  115,
                  115,
                  101,
                  116
                ]
              },
              {
                "kind": "account",
                "path": "asset.mint",
                "account": "Asset"
              }
            ]
          }
        },
        {
          "name": "rwa_mint"
        },
        {
          "name": "payout_mint"
        },
        {
          "name": "vault_rwa_ata",
          "writable": true
        },
        {
          "name": "vault_payout_ata",
          "writable": true
        },
        {
          "name": "trader_rwa_ata",
          "writable": true
        },
        {
          "name": "trader_payout_ata",
          "writable": true
        },
        {
          "name": "rwa_token_program"
        },
        {
          "name": "payout_token_program"
        }
      ],
      "args": [
        {
          "name": "amount",
          "type": "u64"
        },
        {
          "name": "max_cost",
          "type": "u64"
        }
      ]
    },
    {
      "name": "register_asset",
      "docs": [
        "List an asset for trading. Admin (multisig) only. Mirrors registerAsset()."
      ],
      "discriminator": [
        21,
        80,
        155,
        149,
        117,
        207,
        235,
        16
      ],
      "accounts": [
        {
          "name": "admin",
          "signer": true
        },
        {
          "name": "mint"
        },
        {
          "name": "asset",
          "writable": true,
          "pda": {
            "seeds": [
              {
                "kind": "const",
                "value": [
                  97,
                  115,
                  115,
                  101,
                  116
                ]
              },
              {
                "kind": "account",
                "path": "mint"
              }
            ]
          }
        },
        {
          "name": "payer",
          "writable": true,
          "signer": true
        },
        {
          "name": "system_program",
          "address": "11111111111111111111111111111111"
        }
      ],
      "args": [
        {
          "name": "vault",
          "type": "pubkey"
        },
        {
          "name": "payout_mint",
          "type": "pubkey"
        },
        {
          "name": "price_cents",
          "type": "u64"
        },
        {
          "name": "fee_bps",
          "type": "u16"
        },
        {
          "name": "price_updater",
          "type": "pubkey"
        }
      ]
    },
    {
      "name": "sell",
      "docs": [
        "Sell `amount` RWA tokens for the listed price minus fee. Trader signs and delivers RWA",
        "to the vault; payout moves from the vault to the trader via the Asset PDA delegate.",
        "`min_proceeds` guards slippage. Mirrors Market.sell(token, amount, minPayout)."
      ],
      "discriminator": [
        51,
        230,
        133,
        164,
        1,
        127,
        131,
        173
      ],
      "accounts": [
        {
          "name": "trader",
          "writable": true,
          "signer": true
        },
        {
          "name": "asset",
          "pda": {
            "seeds": [
              {
                "kind": "const",
                "value": [
                  97,
                  115,
                  115,
                  101,
                  116
                ]
              },
              {
                "kind": "account",
                "path": "asset.mint",
                "account": "Asset"
              }
            ]
          }
        },
        {
          "name": "rwa_mint"
        },
        {
          "name": "payout_mint"
        },
        {
          "name": "vault_rwa_ata",
          "writable": true
        },
        {
          "name": "vault_payout_ata",
          "writable": true
        },
        {
          "name": "trader_rwa_ata",
          "writable": true
        },
        {
          "name": "trader_payout_ata",
          "writable": true
        },
        {
          "name": "rwa_token_program"
        },
        {
          "name": "payout_token_program"
        }
      ],
      "args": [
        {
          "name": "amount",
          "type": "u64"
        },
        {
          "name": "min_proceeds",
          "type": "u64"
        }
      ]
    },
    {
      "name": "set_max_per_tx",
      "discriminator": [
        115,
        25,
        27,
        109,
        45,
        96,
        136,
        65
      ],
      "accounts": [
        {
          "name": "admin",
          "signer": true
        },
        {
          "name": "asset",
          "writable": true,
          "pda": {
            "seeds": [
              {
                "kind": "const",
                "value": [
                  97,
                  115,
                  115,
                  101,
                  116
                ]
              },
              {
                "kind": "account",
                "path": "asset.mint",
                "account": "Asset"
              }
            ]
          }
        }
      ],
      "args": [
        {
          "name": "limit",
          "type": "u64"
        }
      ]
    },
    {
      "name": "set_max_per_user",
      "discriminator": [
        204,
        53,
        206,
        72,
        102,
        250,
        129,
        65
      ],
      "accounts": [
        {
          "name": "admin",
          "signer": true
        },
        {
          "name": "asset",
          "writable": true,
          "pda": {
            "seeds": [
              {
                "kind": "const",
                "value": [
                  97,
                  115,
                  115,
                  101,
                  116
                ]
              },
              {
                "kind": "account",
                "path": "asset.mint",
                "account": "Asset"
              }
            ]
          }
        }
      ],
      "args": [
        {
          "name": "limit",
          "type": "u64"
        }
      ]
    },
    {
      "name": "set_price",
      "docs": [
        "Update price. price_updater only. Mirrors setPrice()."
      ],
      "discriminator": [
        16,
        19,
        182,
        8,
        149,
        83,
        72,
        181
      ],
      "accounts": [
        {
          "name": "signer",
          "signer": true
        },
        {
          "name": "asset",
          "writable": true,
          "pda": {
            "seeds": [
              {
                "kind": "const",
                "value": [
                  97,
                  115,
                  115,
                  101,
                  116
                ]
              },
              {
                "kind": "account",
                "path": "asset.mint",
                "account": "Asset"
              }
            ]
          }
        }
      ],
      "args": [
        {
          "name": "price_cents",
          "type": "u64"
        }
      ]
    }
  ],
  "accounts": [
    {
      "name": "Asset",
      "discriminator": [
        234,
        180,
        241,
        252,
        139,
        224,
        160,
        8
      ]
    }
  ],
  "events": [
    {
      "name": "Traded",
      "discriminator": [
        225,
        202,
        73,
        175,
        147,
        43,
        160,
        150
      ]
    }
  ],
  "errors": [
    {
      "code": 6000,
      "name": "Unauthorized",
      "msg": "caller is not authorized for this action"
    },
    {
      "code": 6001,
      "name": "InactiveAsset",
      "msg": "asset is not active for trading"
    },
    {
      "code": 6002,
      "name": "LimitExceeded",
      "msg": "amount exceeds the per-transaction limit"
    },
    {
      "code": 6003,
      "name": "SlippageExceeded",
      "msg": "price moved beyond the slippage bound"
    },
    {
      "code": 6004,
      "name": "MathOverflow",
      "msg": "arithmetic overflow"
    }
  ],
  "types": [
    {
      "name": "Asset",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "mint",
            "type": "pubkey"
          },
          {
            "name": "vault",
            "type": "pubkey"
          },
          {
            "name": "payout_mint",
            "type": "pubkey"
          },
          {
            "name": "admin",
            "type": "pubkey"
          },
          {
            "name": "price_updater",
            "type": "pubkey"
          },
          {
            "name": "price_cents",
            "type": "u64"
          },
          {
            "name": "fee_bps",
            "type": "u16"
          },
          {
            "name": "is_active",
            "type": "bool"
          },
          {
            "name": "max_per_tx",
            "type": "u64"
          },
          {
            "name": "max_per_user",
            "type": "u64"
          },
          {
            "name": "bump",
            "type": "u8"
          }
        ]
      }
    },
    {
      "name": "Traded",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "mint",
            "type": "pubkey"
          },
          {
            "name": "trader",
            "type": "pubkey"
          },
          {
            "name": "is_buy",
            "type": "bool"
          },
          {
            "name": "amount",
            "type": "u64"
          },
          {
            "name": "payout",
            "type": "u64"
          }
        ]
      }
    }
  ]
}