{
"name": "hopper_vault",
"version": "0.1.0",
"description": "A sample vault program demonstrating Hopper Manager",
"layouts": [
{
"name": "VaultState",
"disc": 1,
"version": 1,
"layout_id": [171, 205, 239, 1, 35, 69, 103, 137],
"total_size": 57,
"fields": [
{"name": "authority", "type": "[u8;32]", "size": 32, "offset": 16},
{"name": "balance", "type": "WireU64", "size": 8, "offset": 48},
{"name": "bump", "type": "u8", "size": 1, "offset": 56}
]
},
{
"name": "VaultConfig",
"disc": 2,
"version": 1,
"layout_id": [99, 100, 101, 102, 103, 104, 105, 106],
"total_size": 49,
"fields": [
{"name": "admin", "type": "[u8;32]", "size": 32, "offset": 16},
{"name": "frozen", "type": "WireBool", "size": 1, "offset": 48}
]
}
],
"instructions": [
{
"name": "initialize",
"tag": 0,
"args": [],
"accounts": [
{"name": "vault", "writable": true, "signer": false, "layout_ref": "VaultState"},
{"name": "authority", "writable": false, "signer": true, "layout_ref": ""},
{"name": "system", "writable": false, "signer": false, "layout_ref": ""}
],
"capabilities": ["CreatesAccount", "MutatesState"],
"policy_pack": "",
"receipt_expected": true
},
{
"name": "deposit",
"tag": 1,
"args": [
{"name": "amount", "type": "WireU64", "size": 8}
],
"accounts": [
{"name": "vault", "writable": true, "signer": false, "layout_ref": "VaultState"},
{"name": "authority", "writable": false, "signer": true, "layout_ref": ""},
{"name": "token_src", "writable": true, "signer": false, "layout_ref": ""},
{"name": "token_dst", "writable": true, "signer": false, "layout_ref": ""},
{"name": "token_prog","writable": false, "signer": false, "layout_ref": ""}
],
"capabilities": ["MutatesState", "MutatesTreasury", "TransfersTokens"],
"policy_pack": "TREASURY_WRITE",
"receipt_expected": true
},
{
"name": "withdraw",
"tag": 2,
"args": [
{"name": "amount", "type": "WireU64", "size": 8}
],
"accounts": [
{"name": "vault", "writable": true, "signer": false, "layout_ref": "VaultState"},
{"name": "authority", "writable": false, "signer": true, "layout_ref": ""},
{"name": "token_src", "writable": true, "signer": false, "layout_ref": ""},
{"name": "token_dst", "writable": true, "signer": false, "layout_ref": ""},
{"name": "token_prog", "writable": false, "signer": false, "layout_ref": ""}
],
"capabilities": ["MutatesState", "MutatesTreasury", "TransfersTokens"],
"policy_pack": "TREASURY_WRITE",
"receipt_expected": true
},
{
"name": "freeze",
"tag": 3,
"args": [],
"accounts": [
{"name": "config", "writable": true, "signer": false, "layout_ref": "VaultConfig"},
{"name": "admin", "writable": false, "signer": true, "layout_ref": ""}
],
"capabilities": ["MutatesState", "ModifiesAuthority"],
"policy_pack": "AUTHORITY_CHANGE",
"receipt_expected": false
}
],
"contexts": [
{
"name": "Initialize",
"accounts": [
{"name": "vault", "kind": "HopperAccount", "writable": true, "signer": false, "layout_ref": "VaultState", "policy_ref": "", "seeds": [], "optional": false},
{"name": "authority", "kind": "Signer", "writable": false, "signer": true, "layout_ref": "", "policy_ref": "", "seeds": [], "optional": false},
{"name": "system", "kind": "ProgramRef", "writable": false, "signer": false, "layout_ref": "", "policy_ref": "", "seeds": [], "optional": false}
],
"policies": [],
"receipts_expected": true,
"mutation_classes": ["StateTransition"]
},
{
"name": "Deposit",
"accounts": [
{"name": "vault", "kind": "HopperAccount", "writable": true, "signer": false, "layout_ref": "VaultState", "policy_ref": "TREASURY_WRITE", "seeds": [], "optional": false},
{"name": "authority", "kind": "Signer", "writable": false, "signer": true, "layout_ref": "", "policy_ref": "", "seeds": [], "optional": false},
{"name": "token_src", "kind": "TokenAccount", "writable": true, "signer": false, "layout_ref": "", "policy_ref": "", "seeds": [], "optional": false},
{"name": "token_dst", "kind": "TokenAccount", "writable": true, "signer": false, "layout_ref": "", "policy_ref": "", "seeds": [], "optional": false},
{"name": "token_prog", "kind": "ProgramRef", "writable": false, "signer": false, "layout_ref": "", "policy_ref": "", "seeds": [], "optional": false}
],
"policies": ["TREASURY_WRITE"],
"receipts_expected": true,
"mutation_classes": ["Financial", "InPlace"]
},
{
"name": "Withdraw",
"accounts": [
{"name": "vault", "kind": "HopperAccount", "writable": true, "signer": false, "layout_ref": "VaultState", "policy_ref": "TREASURY_WRITE", "seeds": [], "optional": false},
{"name": "authority", "kind": "Signer", "writable": false, "signer": true, "layout_ref": "", "policy_ref": "", "seeds": [], "optional": false},
{"name": "token_src", "kind": "TokenAccount", "writable": true, "signer": false, "layout_ref": "", "policy_ref": "", "seeds": [], "optional": false},
{"name": "token_dst", "kind": "TokenAccount", "writable": true, "signer": false, "layout_ref": "", "policy_ref": "", "seeds": [], "optional": false},
{"name": "token_prog", "kind": "ProgramRef", "writable": false, "signer": false, "layout_ref": "", "policy_ref": "", "seeds": [], "optional": false}
],
"policies": ["TREASURY_WRITE"],
"receipts_expected": true,
"mutation_classes": ["Financial", "InPlace"]
},
{
"name": "Freeze",
"accounts": [
{"name": "config", "kind": "HopperAccount", "writable": true, "signer": false, "layout_ref": "VaultConfig", "policy_ref": "AUTHORITY_CHANGE", "seeds": [], "optional": false},
{"name": "admin", "kind": "Signer", "writable": false, "signer": true, "layout_ref": "", "policy_ref": "", "seeds": [], "optional": false}
],
"policies": ["AUTHORITY_CHANGE"],
"receipts_expected": false,
"mutation_classes": ["AuthoritySensitive"]
}
],
"events": [
{
"name": "DepositEvent",
"tag": 1,
"fields": [
{"name": "amount", "type": "WireU64", "size": 8, "offset": 0},
{"name": "new_balance", "type": "WireU64", "size": 8, "offset": 8}
]
}
],
"policies": [
{
"name": "TREASURY_WRITE",
"capabilities": ["MutatesState", "MutatesTreasury"],
"requirements": ["SignerAuthority", "SnapshotCommit", "ConservationCheck"]
},
{
"name": "AUTHORITY_CHANGE",
"capabilities": ["MutatesState", "ModifiesAuthority"],
"requirements": ["SignerAuthority", "CpiGuard", "InvariantCheck"]
}
]
}