{
  "address": "Edicttra2izwdGeK9dwwh7azWmUbaeTJCf6x8BcnDPXu",
  "metadata": {
    "name": "edict",
    "version": "0.1.0",
    "spec": "0.1.0"
  },
  "instructions": [
    {
      "name": "allow_program",
      "docs": [
        "System, Token, Token-2022, Edict and the loaders are refused: see FORBIDDEN."
      ],
      "discriminator": [
        26,
        4,
        187,
        19,
        149,
        54,
        5,
        153
      ],
      "accounts": [
        {
          "name": "owner",
          "writable": true,
          "signer": true,
          "relations": [
            "vault"
          ]
        },
        {
          "name": "vault"
        },
        {
          "name": "entry",
          "writable": true,
          "pda": {
            "seeds": [
              {
                "kind": "const",
                "value": [
                  112,
                  114,
                  111,
                  103,
                  114,
                  97,
                  109
                ]
              },
              {
                "kind": "account",
                "path": "vault"
              },
              {
                "kind": "arg",
                "path": "program"
              }
            ]
          }
        },
        {
          "name": "system_program",
          "address": "11111111111111111111111111111111"
        }
      ],
      "args": [
        {
          "name": "program",
          "type": "pubkey"
        }
      ]
    },
    {
      "name": "allow_recipient",
      "discriminator": [
        213,
        155,
        160,
        15,
        4,
        132,
        66,
        53
      ],
      "accounts": [
        {
          "name": "owner",
          "writable": true,
          "signer": true,
          "relations": [
            "vault"
          ]
        },
        {
          "name": "vault"
        },
        {
          "name": "entry",
          "writable": true,
          "pda": {
            "seeds": [
              {
                "kind": "const",
                "value": [
                  114,
                  101,
                  99,
                  105,
                  112,
                  105,
                  101,
                  110,
                  116
                ]
              },
              {
                "kind": "account",
                "path": "vault"
              },
              {
                "kind": "arg",
                "path": "key"
              }
            ]
          }
        },
        {
          "name": "system_program",
          "address": "11111111111111111111111111111111"
        }
      ],
      "args": [
        {
          "name": "key",
          "type": "pubkey"
        }
      ]
    },
    {
      "name": "call",
      "docs": [
        "CPI into an allowlisted program, the authority signing. The accounts after the fixed five are the",
        "CPI's accounts, in order, flags kept (the authority is signed for). Before: every vault token",
        "account given (Token or Token-2022, owner field = authority) must have a rule. After: each must",
        "still exist, be the authority's, and carry no delegate and no close authority (as must any account",
        "that became the authority's); the authority must still be a plain system account; the net outflow",
        "per mint, plus the authority's lamport drop as SOL, must fit per_tx, both windows and the hold line."
      ],
      "discriminator": [
        181,
        94,
        56,
        161,
        194,
        221,
        200,
        3
      ],
      "accounts": [
        {
          "name": "agent",
          "signer": true,
          "relations": [
            "vault"
          ]
        },
        {
          "name": "vault",
          "writable": true
        },
        {
          "name": "authority",
          "writable": true,
          "pda": {
            "seeds": [
              {
                "kind": "const",
                "value": [
                  97,
                  117,
                  116,
                  104,
                  111,
                  114,
                  105,
                  116,
                  121
                ]
              },
              {
                "kind": "account",
                "path": "vault"
              }
            ]
          }
        },
        {
          "name": "target_program"
        },
        {
          "name": "program_entry"
        }
      ],
      "args": [
        {
          "name": "data",
          "type": "bytes"
        }
      ],
      "returns": "u8"
    },
    {
      "name": "cancel_hold",
      "docs": [
        "Works while frozen. The rent goes back to whoever queued it."
      ],
      "discriminator": [
        66,
        207,
        141,
        82,
        28,
        200,
        180,
        136
      ],
      "accounts": [
        {
          "name": "signer",
          "signer": true
        },
        {
          "name": "vault",
          "relations": [
            "hold"
          ]
        },
        {
          "name": "hold",
          "writable": true
        },
        {
          "name": "payer",
          "writable": true,
          "relations": [
            "hold"
          ]
        }
      ],
      "args": []
    },
    {
      "name": "create_vault",
      "discriminator": [
        29,
        237,
        247,
        208,
        193,
        82,
        54,
        135
      ],
      "accounts": [
        {
          "name": "owner",
          "writable": true,
          "signer": true
        },
        {
          "name": "vault",
          "writable": true,
          "pda": {
            "seeds": [
              {
                "kind": "const",
                "value": [
                  118,
                  97,
                  117,
                  108,
                  116
                ]
              },
              {
                "kind": "account",
                "path": "owner"
              },
              {
                "kind": "arg",
                "path": "id"
              }
            ]
          }
        },
        {
          "name": "system_program",
          "address": "11111111111111111111111111111111"
        }
      ],
      "args": [
        {
          "name": "id",
          "type": "u64"
        },
        {
          "name": "agent",
          "type": "pubkey"
        },
        {
          "name": "guardian",
          "type": "pubkey"
        },
        {
          "name": "hold_delay",
          "type": "i64"
        },
        {
          "name": "hold_ttl",
          "type": "i64"
        },
        {
          "name": "tripwire_strikes",
          "type": "u8"
        },
        {
          "name": "tripwire_window",
          "type": "i64"
        }
      ]
    },
    {
      "name": "expire_hold",
      "docs": [
        "Anyone, once a hold has expired: closes it, rent back to the payer."
      ],
      "discriminator": [
        180,
        235,
        181,
        215,
        239,
        218,
        104,
        166
      ],
      "accounts": [
        {
          "name": "signer",
          "signer": true
        },
        {
          "name": "vault",
          "relations": [
            "hold"
          ]
        },
        {
          "name": "hold",
          "writable": true
        },
        {
          "name": "payer",
          "writable": true,
          "relations": [
            "hold"
          ]
        }
      ],
      "args": []
    },
    {
      "name": "freeze",
      "discriminator": [
        255,
        91,
        207,
        84,
        251,
        194,
        254,
        63
      ],
      "accounts": [
        {
          "name": "signer",
          "signer": true
        },
        {
          "name": "vault",
          "writable": true
        }
      ],
      "args": []
    },
    {
      "name": "owner_withdraw_sol",
      "docs": [
        "The owner rescues SOL to any destination, frozen or not. The authority keeps its rent minimum."
      ],
      "discriminator": [
        73,
        190,
        205,
        238,
        173,
        234,
        178,
        199
      ],
      "accounts": [
        {
          "name": "owner",
          "signer": true,
          "relations": [
            "vault"
          ]
        },
        {
          "name": "vault"
        },
        {
          "name": "authority",
          "writable": true,
          "pda": {
            "seeds": [
              {
                "kind": "const",
                "value": [
                  97,
                  117,
                  116,
                  104,
                  111,
                  114,
                  105,
                  116,
                  121
                ]
              },
              {
                "kind": "account",
                "path": "vault"
              }
            ]
          }
        },
        {
          "name": "to",
          "writable": true
        },
        {
          "name": "system_program",
          "address": "11111111111111111111111111111111"
        }
      ],
      "args": [
        {
          "name": "amount",
          "type": "u64"
        }
      ]
    },
    {
      "name": "owner_withdraw_token",
      "docs": [
        "The owner rescues tokens to any token account of the mint, frozen or not."
      ],
      "discriminator": [
        113,
        80,
        101,
        84,
        80,
        135,
        215,
        156
      ],
      "accounts": [
        {
          "name": "owner",
          "signer": true,
          "relations": [
            "vault"
          ]
        },
        {
          "name": "vault"
        },
        {
          "name": "authority",
          "pda": {
            "seeds": [
              {
                "kind": "const",
                "value": [
                  97,
                  117,
                  116,
                  104,
                  111,
                  114,
                  105,
                  116,
                  121
                ]
              },
              {
                "kind": "account",
                "path": "vault"
              }
            ]
          }
        },
        {
          "name": "from",
          "writable": true
        },
        {
          "name": "to",
          "writable": true
        },
        {
          "name": "mint"
        },
        {
          "name": "token_program"
        }
      ],
      "args": [
        {
          "name": "amount",
          "type": "u64"
        }
      ]
    },
    {
      "name": "queue_transfer",
      "docs": [
        "Queue a move above the hold line (`mint` = SOL or a token; `recipient` = the wallet, for tokens",
        "the owner of the destination token account). Skips per_tx and per_hour but must fit per_day.",
        "Releasable after hold_delay, for hold_ttl. The agent pays the rent and gets it back."
      ],
      "discriminator": [
        199,
        153,
        111,
        84,
        116,
        143,
        214,
        76
      ],
      "accounts": [
        {
          "name": "agent",
          "writable": true,
          "signer": true,
          "relations": [
            "vault"
          ]
        },
        {
          "name": "vault",
          "writable": true
        },
        {
          "name": "hold",
          "writable": true,
          "pda": {
            "seeds": [
              {
                "kind": "const",
                "value": [
                  104,
                  111,
                  108,
                  100
                ]
              },
              {
                "kind": "account",
                "path": "vault"
              },
              {
                "kind": "account",
                "path": "vault.next_hold_nonce",
                "account": "Vault"
              }
            ]
          }
        },
        {
          "name": "recipient"
        },
        {
          "name": "recipient_entry"
        },
        {
          "name": "system_program",
          "address": "11111111111111111111111111111111"
        }
      ],
      "args": [
        {
          "name": "mint",
          "type": "pubkey"
        },
        {
          "name": "amount",
          "type": "u64"
        }
      ],
      "returns": "u8"
    },
    {
      "name": "release_hold_sol",
      "docs": [
        "Agent or owner, once hold_delay has passed and before it expires: the queued SOL goes out."
      ],
      "discriminator": [
        93,
        248,
        13,
        232,
        64,
        1,
        243,
        163
      ],
      "accounts": [
        {
          "name": "signer",
          "signer": true
        },
        {
          "name": "vault",
          "writable": true,
          "relations": [
            "hold"
          ]
        },
        {
          "name": "authority",
          "writable": true,
          "pda": {
            "seeds": [
              {
                "kind": "const",
                "value": [
                  97,
                  117,
                  116,
                  104,
                  111,
                  114,
                  105,
                  116,
                  121
                ]
              },
              {
                "kind": "account",
                "path": "vault"
              }
            ]
          }
        },
        {
          "name": "hold",
          "writable": true
        },
        {
          "name": "payer",
          "writable": true,
          "relations": [
            "hold"
          ]
        },
        {
          "name": "recipient",
          "writable": true
        },
        {
          "name": "recipient_entry"
        },
        {
          "name": "system_program",
          "address": "11111111111111111111111111111111"
        }
      ],
      "args": [],
      "returns": "u8"
    },
    {
      "name": "release_hold_token",
      "docs": [
        "Same as release_hold_sol, for a token hold, to a token account owned by the hold's recipient."
      ],
      "discriminator": [
        12,
        163,
        135,
        159,
        63,
        71,
        89,
        195
      ],
      "accounts": [
        {
          "name": "signer",
          "signer": true
        },
        {
          "name": "vault",
          "writable": true,
          "relations": [
            "hold"
          ]
        },
        {
          "name": "authority",
          "pda": {
            "seeds": [
              {
                "kind": "const",
                "value": [
                  97,
                  117,
                  116,
                  104,
                  111,
                  114,
                  105,
                  116,
                  121
                ]
              },
              {
                "kind": "account",
                "path": "vault"
              }
            ]
          }
        },
        {
          "name": "hold",
          "writable": true
        },
        {
          "name": "payer",
          "writable": true,
          "relations": [
            "hold"
          ]
        },
        {
          "name": "recipient_entry"
        },
        {
          "name": "from",
          "writable": true
        },
        {
          "name": "to",
          "writable": true
        },
        {
          "name": "mint"
        },
        {
          "name": "token_program"
        }
      ],
      "args": [],
      "returns": "u8"
    },
    {
      "name": "remove_rule",
      "discriminator": [
        208,
        2,
        212,
        252,
        142,
        122,
        159,
        232
      ],
      "accounts": [
        {
          "name": "owner",
          "signer": true,
          "relations": [
            "vault"
          ]
        },
        {
          "name": "vault",
          "writable": true
        }
      ],
      "args": [
        {
          "name": "mint",
          "type": "pubkey"
        }
      ]
    },
    {
      "name": "revoke_program",
      "discriminator": [
        151,
        155,
        84,
        70,
        193,
        219,
        15,
        43
      ],
      "accounts": [
        {
          "name": "owner",
          "writable": true,
          "signer": true,
          "relations": [
            "vault"
          ]
        },
        {
          "name": "vault"
        },
        {
          "name": "entry",
          "writable": true,
          "pda": {
            "seeds": [
              {
                "kind": "const",
                "value": [
                  112,
                  114,
                  111,
                  103,
                  114,
                  97,
                  109
                ]
              },
              {
                "kind": "account",
                "path": "vault"
              },
              {
                "kind": "arg",
                "path": "program"
              }
            ]
          }
        }
      ],
      "args": [
        {
          "name": "program",
          "type": "pubkey"
        }
      ]
    },
    {
      "name": "revoke_recipient",
      "discriminator": [
        135,
        0,
        161,
        228,
        156,
        230,
        136,
        92
      ],
      "accounts": [
        {
          "name": "owner",
          "writable": true,
          "signer": true,
          "relations": [
            "vault"
          ]
        },
        {
          "name": "vault"
        },
        {
          "name": "entry",
          "writable": true,
          "pda": {
            "seeds": [
              {
                "kind": "const",
                "value": [
                  114,
                  101,
                  99,
                  105,
                  112,
                  105,
                  101,
                  110,
                  116
                ]
              },
              {
                "kind": "account",
                "path": "vault"
              },
              {
                "kind": "arg",
                "path": "key"
              }
            ]
          }
        }
      ],
      "args": [
        {
          "name": "key",
          "type": "pubkey"
        }
      ]
    },
    {
      "name": "set_agent",
      "discriminator": [
        154,
        74,
        121,
        91,
        137,
        19,
        101,
        166
      ],
      "accounts": [
        {
          "name": "owner",
          "signer": true,
          "relations": [
            "vault"
          ]
        },
        {
          "name": "vault",
          "writable": true
        }
      ],
      "args": [
        {
          "name": "agent",
          "type": "pubkey"
        }
      ]
    },
    {
      "name": "set_guardian",
      "docs": [
        "Pubkey::default() = no guardian."
      ],
      "discriminator": [
        147,
        243,
        50,
        121,
        154,
        164,
        50,
        30
      ],
      "accounts": [
        {
          "name": "owner",
          "signer": true,
          "relations": [
            "vault"
          ]
        },
        {
          "name": "vault",
          "writable": true
        }
      ],
      "args": [
        {
          "name": "guardian",
          "type": "pubkey"
        }
      ]
    },
    {
      "name": "set_holds",
      "docs": [
        "Applies to holds queued from now on."
      ],
      "discriminator": [
        148,
        119,
        76,
        96,
        8,
        65,
        97,
        205
      ],
      "accounts": [
        {
          "name": "owner",
          "signer": true,
          "relations": [
            "vault"
          ]
        },
        {
          "name": "vault",
          "writable": true
        }
      ],
      "args": [
        {
          "name": "hold_delay",
          "type": "i64"
        },
        {
          "name": "hold_ttl",
          "type": "i64"
        }
      ]
    },
    {
      "name": "set_rule",
      "docs": [
        "Add or update the rule for `mint` (SOL = Pubkey::default()). An update keeps the windows."
      ],
      "discriminator": [
        237,
        148,
        178,
        172,
        127,
        70,
        114,
        103
      ],
      "accounts": [
        {
          "name": "owner",
          "signer": true,
          "relations": [
            "vault"
          ]
        },
        {
          "name": "vault",
          "writable": true
        }
      ],
      "args": [
        {
          "name": "mint",
          "type": "pubkey"
        },
        {
          "name": "per_tx",
          "type": "u64"
        },
        {
          "name": "per_hour",
          "type": "u64"
        },
        {
          "name": "per_day",
          "type": "u64"
        },
        {
          "name": "hold_above",
          "type": "u64"
        }
      ]
    },
    {
      "name": "set_tripwire",
      "docs": [
        "strikes = 0 turns the tripwire off. Clears the strike count."
      ],
      "discriminator": [
        80,
        121,
        193,
        2,
        53,
        40,
        221,
        130
      ],
      "accounts": [
        {
          "name": "owner",
          "signer": true,
          "relations": [
            "vault"
          ]
        },
        {
          "name": "vault",
          "writable": true
        }
      ],
      "args": [
        {
          "name": "strikes",
          "type": "u8"
        },
        {
          "name": "window",
          "type": "i64"
        }
      ]
    },
    {
      "name": "transfer_sol",
      "docs": [
        "SOL from the authority to an allowlisted recipient."
      ],
      "discriminator": [
        78,
        10,
        236,
        247,
        109,
        117,
        21,
        76
      ],
      "accounts": [
        {
          "name": "agent",
          "signer": true,
          "relations": [
            "vault"
          ]
        },
        {
          "name": "vault",
          "writable": true
        },
        {
          "name": "authority",
          "writable": true,
          "pda": {
            "seeds": [
              {
                "kind": "const",
                "value": [
                  97,
                  117,
                  116,
                  104,
                  111,
                  114,
                  105,
                  116,
                  121
                ]
              },
              {
                "kind": "account",
                "path": "vault"
              }
            ]
          }
        },
        {
          "name": "recipient",
          "writable": true
        },
        {
          "name": "recipient_entry"
        },
        {
          "name": "system_program",
          "address": "11111111111111111111111111111111"
        }
      ],
      "args": [
        {
          "name": "amount",
          "type": "u64"
        }
      ],
      "returns": "u8"
    },
    {
      "name": "transfer_token",
      "docs": [
        "Tokens from a vault token account to a token account owned by an allowlisted recipient."
      ],
      "discriminator": [
        219,
        17,
        122,
        53,
        237,
        171,
        232,
        222
      ],
      "accounts": [
        {
          "name": "agent",
          "signer": true,
          "relations": [
            "vault"
          ]
        },
        {
          "name": "vault",
          "writable": true
        },
        {
          "name": "authority",
          "pda": {
            "seeds": [
              {
                "kind": "const",
                "value": [
                  97,
                  117,
                  116,
                  104,
                  111,
                  114,
                  105,
                  116,
                  121
                ]
              },
              {
                "kind": "account",
                "path": "vault"
              }
            ]
          }
        },
        {
          "name": "from",
          "writable": true
        },
        {
          "name": "to",
          "writable": true
        },
        {
          "name": "recipient_entry"
        },
        {
          "name": "mint"
        },
        {
          "name": "token_program"
        }
      ],
      "args": [
        {
          "name": "amount",
          "type": "u64"
        }
      ],
      "returns": "u8"
    },
    {
      "name": "unfreeze",
      "docs": [
        "Only the owner unfreezes. Clears the strike count."
      ],
      "discriminator": [
        133,
        160,
        68,
        253,
        80,
        232,
        218,
        247
      ],
      "accounts": [
        {
          "name": "owner",
          "signer": true,
          "relations": [
            "vault"
          ]
        },
        {
          "name": "vault",
          "writable": true
        }
      ],
      "args": []
    }
  ],
  "accounts": [
    {
      "name": "AllowEntry",
      "discriminator": [
        3,
        29,
        6,
        254,
        2,
        209,
        219,
        245
      ]
    },
    {
      "name": "Hold",
      "discriminator": [
        110,
        65,
        238,
        142,
        146,
        91,
        196,
        171
      ]
    },
    {
      "name": "Vault",
      "discriminator": [
        211,
        8,
        232,
        43,
        2,
        152,
        117,
        119
      ]
    }
  ],
  "events": [
    {
      "name": "Allowed",
      "discriminator": [
        106,
        173,
        214,
        122,
        135,
        22,
        173,
        117
      ]
    },
    {
      "name": "Cancelled",
      "discriminator": [
        136,
        23,
        42,
        65,
        143,
        233,
        234,
        46
      ]
    },
    {
      "name": "Expired",
      "discriminator": [
        197,
        227,
        104,
        103,
        133,
        50,
        207,
        161
      ]
    },
    {
      "name": "Frozen",
      "discriminator": [
        115,
        77,
        189,
        83,
        81,
        71,
        245,
        232
      ]
    },
    {
      "name": "Held",
      "discriminator": [
        46,
        8,
        96,
        23,
        131,
        53,
        182,
        98
      ]
    },
    {
      "name": "Passed",
      "discriminator": [
        119,
        108,
        155,
        248,
        118,
        13,
        176,
        41
      ]
    },
    {
      "name": "Refused",
      "discriminator": [
        230,
        49,
        133,
        208,
        106,
        62,
        106,
        169
      ]
    },
    {
      "name": "Released",
      "discriminator": [
        232,
        229,
        255,
        136,
        101,
        189,
        15,
        220
      ]
    },
    {
      "name": "Revoked",
      "discriminator": [
        113,
        216,
        148,
        99,
        124,
        184,
        0,
        65
      ]
    },
    {
      "name": "RuleRemoved",
      "discriminator": [
        34,
        51,
        38,
        103,
        163,
        140,
        151,
        123
      ]
    },
    {
      "name": "RuleSet",
      "discriminator": [
        141,
        22,
        70,
        140,
        45,
        27,
        175,
        119
      ]
    },
    {
      "name": "Unfrozen",
      "discriminator": [
        222,
        72,
        230,
        135,
        198,
        225,
        71,
        65
      ]
    },
    {
      "name": "VaultCreated",
      "discriminator": [
        117,
        25,
        120,
        254,
        75,
        236,
        78,
        115
      ]
    },
    {
      "name": "Withdrawn",
      "discriminator": [
        20,
        89,
        223,
        198,
        194,
        124,
        219,
        13
      ]
    }
  ],
  "errors": [
    {
      "code": 6000,
      "name": "Unauthorized"
    },
    {
      "code": 6001,
      "name": "InvalidParams"
    },
    {
      "code": 6002,
      "name": "InvalidRule",
      "msg": "need per_tx > 0 and per_tx <= per_hour <= per_day"
    },
    {
      "code": 6003,
      "name": "TooManyRules"
    },
    {
      "code": 6004,
      "name": "RuleNotFound"
    },
    {
      "code": 6005,
      "name": "ForbiddenProgram",
      "msg": "System, Token, Token-2022, Edict and the loaders can never be allowlisted"
    },
    {
      "code": 6006,
      "name": "ZeroAmount"
    },
    {
      "code": 6007,
      "name": "InsufficientFunds",
      "msg": "the authority must keep its rent minimum"
    },
    {
      "code": 6008,
      "name": "WrongAsset"
    },
    {
      "code": 6009,
      "name": "WrongRecipient"
    },
    {
      "code": 6010,
      "name": "NotYet"
    },
    {
      "code": 6011,
      "name": "Expired"
    },
    {
      "code": 6012,
      "name": "NotExpired"
    },
    {
      "code": 6013,
      "name": "ApprovalLeft",
      "msg": "a vault token account was left with a delegate"
    },
    {
      "code": 6014,
      "name": "AuthorityChanged",
      "msg": "a vault account changed owner or got a close authority"
    },
    {
      "code": 6015,
      "name": "AccountClosed",
      "msg": "a vault token account was closed"
    },
    {
      "code": 6016,
      "name": "OverPerTx"
    },
    {
      "code": 6017,
      "name": "OverHourly"
    },
    {
      "code": 6018,
      "name": "OverDaily"
    },
    {
      "code": 6019,
      "name": "OverHoldLine",
      "msg": "over the hold line: a call cannot be queued"
    },
    {
      "code": 6020,
      "name": "UntrackedOutflow",
      "msg": "SOL left the authority but there is no SOL rule"
    },
    {
      "code": 6021,
      "name": "NotTokenAccount",
      "msg": "not a token account, mint or token program of the expected kind"
    }
  ],
  "types": [
    {
      "name": "AllowEntry",
      "docs": [
        "[\"recipient\", vault, key] or [\"program\", vault, key]: existence = allowed."
      ],
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "vault",
            "type": "pubkey"
          },
          {
            "name": "key",
            "type": "pubkey"
          },
          {
            "name": "created_at",
            "type": "i64"
          },
          {
            "name": "bump",
            "type": "u8"
          }
        ]
      }
    },
    {
      "name": "Allowed",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "vault",
            "type": "pubkey"
          },
          {
            "name": "kind",
            "type": "u8"
          },
          {
            "name": "key",
            "type": "pubkey"
          }
        ]
      }
    },
    {
      "name": "AssetRule",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "mint",
            "type": "pubkey"
          },
          {
            "name": "per_tx",
            "type": "u64"
          },
          {
            "name": "per_hour",
            "type": "u64"
          },
          {
            "name": "per_day",
            "type": "u64"
          },
          {
            "name": "hold_above",
            "type": "u64"
          },
          {
            "name": "hour",
            "type": {
              "array": [
                "u64",
                13
              ]
            }
          },
          {
            "name": "hour_slot",
            "type": "i64"
          },
          {
            "name": "day",
            "type": {
              "array": [
                "u64",
                25
              ]
            }
          },
          {
            "name": "day_slot",
            "type": "i64"
          }
        ]
      }
    },
    {
      "name": "Cancelled",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "vault",
            "type": "pubkey"
          },
          {
            "name": "hold",
            "type": "pubkey"
          },
          {
            "name": "by",
            "type": "pubkey"
          }
        ]
      }
    },
    {
      "name": "Expired",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "vault",
            "type": "pubkey"
          },
          {
            "name": "hold",
            "type": "pubkey"
          }
        ]
      }
    },
    {
      "name": "Frozen",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "vault",
            "type": "pubkey"
          },
          {
            "name": "by",
            "type": "u8"
          }
        ]
      }
    },
    {
      "name": "Held",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "vault",
            "type": "pubkey"
          },
          {
            "name": "hold",
            "type": "pubkey"
          },
          {
            "name": "nonce",
            "type": "u64"
          },
          {
            "name": "mint",
            "type": "pubkey"
          },
          {
            "name": "amount",
            "type": "u64"
          },
          {
            "name": "recipient",
            "type": "pubkey"
          },
          {
            "name": "release_at",
            "type": "i64"
          },
          {
            "name": "expires_at",
            "type": "i64"
          }
        ]
      }
    },
    {
      "name": "Hold",
      "docs": [
        "[\"hold\", vault, nonce]"
      ],
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "vault",
            "type": "pubkey"
          },
          {
            "name": "nonce",
            "type": "u64"
          },
          {
            "name": "mint",
            "type": "pubkey"
          },
          {
            "name": "amount",
            "type": "u64"
          },
          {
            "name": "recipient",
            "type": "pubkey"
          },
          {
            "name": "payer",
            "type": "pubkey"
          },
          {
            "name": "created_at",
            "type": "i64"
          },
          {
            "name": "release_at",
            "type": "i64"
          },
          {
            "name": "expires_at",
            "type": "i64"
          },
          {
            "name": "bump",
            "type": "u8"
          }
        ]
      }
    },
    {
      "name": "Passed",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "vault",
            "type": "pubkey"
          },
          {
            "name": "kind",
            "type": "u8"
          },
          {
            "name": "mint",
            "type": "pubkey"
          },
          {
            "name": "amount",
            "type": "u64"
          },
          {
            "name": "target",
            "type": "pubkey"
          }
        ]
      }
    },
    {
      "name": "Refused",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "vault",
            "type": "pubkey"
          },
          {
            "name": "reason",
            "type": "u8"
          },
          {
            "name": "mint",
            "type": "pubkey"
          },
          {
            "name": "amount",
            "type": "u64"
          },
          {
            "name": "target",
            "type": "pubkey"
          }
        ]
      }
    },
    {
      "name": "Released",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "vault",
            "type": "pubkey"
          },
          {
            "name": "hold",
            "type": "pubkey"
          },
          {
            "name": "mint",
            "type": "pubkey"
          },
          {
            "name": "amount",
            "type": "u64"
          },
          {
            "name": "recipient",
            "type": "pubkey"
          },
          {
            "name": "by",
            "type": "pubkey"
          }
        ]
      }
    },
    {
      "name": "Revoked",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "vault",
            "type": "pubkey"
          },
          {
            "name": "kind",
            "type": "u8"
          },
          {
            "name": "key",
            "type": "pubkey"
          }
        ]
      }
    },
    {
      "name": "RuleRemoved",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "vault",
            "type": "pubkey"
          },
          {
            "name": "mint",
            "type": "pubkey"
          }
        ]
      }
    },
    {
      "name": "RuleSet",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "vault",
            "type": "pubkey"
          },
          {
            "name": "mint",
            "type": "pubkey"
          },
          {
            "name": "per_tx",
            "type": "u64"
          },
          {
            "name": "per_hour",
            "type": "u64"
          },
          {
            "name": "per_day",
            "type": "u64"
          },
          {
            "name": "hold_above",
            "type": "u64"
          }
        ]
      }
    },
    {
      "name": "Unfrozen",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "vault",
            "type": "pubkey"
          }
        ]
      }
    },
    {
      "name": "Vault",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "owner",
            "type": "pubkey"
          },
          {
            "name": "agent",
            "type": "pubkey"
          },
          {
            "name": "guardian",
            "type": "pubkey"
          },
          {
            "name": "id",
            "type": "u64"
          },
          {
            "name": "bump",
            "type": "u8"
          },
          {
            "name": "authority_bump",
            "type": "u8"
          },
          {
            "name": "frozen",
            "type": "bool"
          },
          {
            "name": "hold_delay",
            "type": "i64"
          },
          {
            "name": "hold_ttl",
            "type": "i64"
          },
          {
            "name": "tripwire_strikes",
            "type": "u8"
          },
          {
            "name": "tripwire_window",
            "type": "i64"
          },
          {
            "name": "strikes",
            "type": "u8"
          },
          {
            "name": "strikes_since",
            "type": "i64"
          },
          {
            "name": "next_hold_nonce",
            "type": "u64"
          },
          {
            "name": "passed",
            "type": "u64"
          },
          {
            "name": "refused",
            "type": "u64"
          },
          {
            "name": "held",
            "type": "u64"
          },
          {
            "name": "rules",
            "type": {
              "vec": {
                "defined": {
                  "name": "AssetRule"
                }
              }
            }
          }
        ]
      }
    },
    {
      "name": "VaultCreated",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "vault",
            "type": "pubkey"
          },
          {
            "name": "owner",
            "type": "pubkey"
          },
          {
            "name": "agent",
            "type": "pubkey"
          },
          {
            "name": "guardian",
            "type": "pubkey"
          },
          {
            "name": "id",
            "type": "u64"
          }
        ]
      }
    },
    {
      "name": "Withdrawn",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "vault",
            "type": "pubkey"
          },
          {
            "name": "mint",
            "type": "pubkey"
          },
          {
            "name": "amount",
            "type": "u64"
          },
          {
            "name": "to",
            "type": "pubkey"
          }
        ]
      }
    }
  ]
}