= ({
{description}
- Cost: {priceMTM ? baseUnitToDecimalFormat(priceMTM, 6) : '...'} MTM
+ Cost: {priceMTM ? baseUnitToWholeNumber(priceMTM, 6) : '...'} MTM
@@ -133,7 +135,7 @@ const AIServiceCard: React.FC = ({
transition-all duration-200 shadow-lg hover:shadow-green-500/25
disabled:opacity-50 disabled:cursor-not-allowed disabled:hover:shadow-none"
>
- {generationState.loading ? 'Processing...' : `Pay ${priceMTM ? baseUnitToDecimalFormat(priceMTM, 6) : '...'} MTM & Generate`}
+ {generationState.loading ? 'Processing...' : `Pay ${priceMTM ? baseUnitToWholeNumber(priceMTM, 6) : '...'} MTM & Generate`}
diff --git a/src/entity/Tweet.ts b/src/entity/Tweet.ts
index 888a9d9..c3f5a07 100644
--- a/src/entity/Tweet.ts
+++ b/src/entity/Tweet.ts
@@ -10,4 +10,10 @@ export class Tweet {
@Column({ unique: true })
transactionSignature!: string;
+
+ @Column({ type: 'boolean', nullable: true })
+ isLockCreated!: boolean | null;
+
+ @Column({ type: 'text', unique: true, nullable: true })
+ lockEscrow!: string | null;
}
diff --git a/src/locker-utils/index.ts b/src/locker-utils/index.ts
new file mode 100644
index 0000000..40628c5
--- /dev/null
+++ b/src/locker-utils/index.ts
@@ -0,0 +1,196 @@
+/**
+ * Methods from jup-lock:
+ * - createLockerProgram
+ * - deriveEscrow
+ * - createVestingPlanV2
+ * Reference: https://github.com/jup-ag/jup-lock/blob/main/tests/locker_utils/index.ts
+ */
+
+import assert from 'assert';
+import 'dotenv/config';
+
+import {
+ ASSOCIATED_TOKEN_PROGRAM_ID,
+ createAssociatedTokenAccountInstruction,
+ getAssociatedTokenAddressSync,
+ TOKEN_2022_PROGRAM_ID,
+} from '@solana/spl-token';
+import {
+ AnchorProvider,
+ BN,
+ Program,
+ Wallet,
+ web3,
+ workspace,
+} from '@coral-xyz/anchor';
+import { AccountMeta, Connection, TransactionExpiredTimeoutError } from '@solana/web3.js';
+
+// TODO: Generate type file from IDL json
+import { Locker } from '../../target/types/locker';
+import { TokenExtensionUtil } from './token-2022/token-extensions';
+import {
+ OptionRemainingAccountsInfoData,
+ RemainingAccountsBuilder,
+ RemainingAccountsType,
+} from './token-2022/remaining-accounts';
+
+assert(process.env.NEXT_PUBLIC_SOLANA_RPC_URL);
+
+const connection = new Connection(process.env.NEXT_PUBLIC_SOLANA_RPC_URL);
+
+export function createLockerProgram(wallet: Wallet): Program {
+ const provider = new AnchorProvider(connection, wallet, {
+ maxRetries: 3,
+ });
+ provider.opts.commitment = 'confirmed';
+
+ return workspace.Locker as Program;
+}
+
+export function deriveEscrow(base: web3.PublicKey, programId: web3.PublicKey) {
+ return web3.PublicKey.findProgramAddressSync(
+ [Buffer.from('escrow'), base.toBuffer()],
+ programId
+ );
+}
+
+export interface CreateVestingPlanParams {
+ ownerKeypair: web3.Keypair;
+ tokenMint: web3.PublicKey;
+ isAssertion: boolean;
+ vestingStartTime: BN;
+ cliffTime: BN;
+ frequency: BN;
+ cliffUnlockAmount: BN;
+ amountPerPeriod: BN;
+ numberOfPeriod: BN;
+ recipient: web3.PublicKey;
+ updateRecipientMode: number;
+ cancelMode: number;
+ tokenProgram?: web3.PublicKey;
+}
+
+// V2 instructions
+export async function createVestingPlanV2(params: CreateVestingPlanParams) {
+ let {
+ ownerKeypair,
+ tokenMint,
+ isAssertion,
+ vestingStartTime,
+ cliffTime,
+ frequency,
+ cliffUnlockAmount,
+ amountPerPeriod,
+ numberOfPeriod,
+ recipient,
+ updateRecipientMode,
+ cancelMode,
+ tokenProgram,
+ } = params;
+
+ const program = createLockerProgram(new Wallet(ownerKeypair));
+
+ const baseKP = web3.Keypair.generate();
+
+ let [escrow] = deriveEscrow(baseKP.publicKey, program.programId);
+
+ const senderToken = getAssociatedTokenAddressSync(
+ tokenMint,
+ ownerKeypair.publicKey,
+ false,
+ tokenProgram,
+ ASSOCIATED_TOKEN_PROGRAM_ID
+ );
+
+ const escrowToken = getAssociatedTokenAddressSync(
+ tokenMint,
+ escrow,
+ true,
+ tokenProgram,
+ ASSOCIATED_TOKEN_PROGRAM_ID
+ );
+
+ let remainingAccountsInfo: OptionRemainingAccountsInfoData | null = null;
+ let remainingAccounts: AccountMeta[] = [];
+ if (tokenProgram == TOKEN_2022_PROGRAM_ID) {
+ let inputTransferHookAccounts =
+ await TokenExtensionUtil.getExtraAccountMetasForTransferHook(
+ program.provider.connection,
+ tokenMint,
+ senderToken,
+ escrowToken,
+ ownerKeypair.publicKey,
+ TOKEN_2022_PROGRAM_ID
+ );
+
+ [remainingAccountsInfo, remainingAccounts] = new RemainingAccountsBuilder()
+ .addSlice(
+ RemainingAccountsType.TransferHookEscrow,
+ inputTransferHookAccounts
+ )
+ .build() as [OptionRemainingAccountsInfoData, AccountMeta[]];
+ }
+
+ assert(tokenProgram);
+
+ try {
+ await program.methods
+ .createVestingEscrowV2(
+ {
+ vestingStartTime,
+ cliffTime,
+ frequency,
+ cliffUnlockAmount,
+ amountPerPeriod,
+ numberOfPeriod,
+ updateRecipientMode,
+ cancelMode,
+ },
+ remainingAccountsInfo
+ )
+ .accounts({
+ base: baseKP.publicKey,
+ senderToken,
+ escrowToken,
+ recipient,
+ tokenMint,
+ sender: ownerKeypair.publicKey,
+ tokenProgram,
+ systemProgram: web3.SystemProgram.programId,
+ escrow,
+ // TODO: Fix type error for escrowToken
+ } as any)
+ .remainingAccounts(remainingAccounts ? remainingAccounts : [])
+ .preInstructions([
+ createAssociatedTokenAccountInstruction(
+ ownerKeypair.publicKey,
+ escrowToken,
+ escrow,
+ tokenMint,
+ tokenProgram,
+ ASSOCIATED_TOKEN_PROGRAM_ID
+ ),
+ ])
+ .signers([baseKP, ownerKeypair])
+ .rpc();
+
+ return escrow;
+ } catch (error) {
+ if (error instanceof TransactionExpiredTimeoutError) {
+ console.error('Transaction confirmation delayed for', error.signature);
+ console.log('Confirming the transaction again...');
+ const confirmedTransaction = await connection.getTransaction(error.signature, {
+ commitment: 'confirmed',
+ maxSupportedTransactionVersion: 0
+ });
+
+ if(confirmedTransaction === null) {
+ console.error('Transaction failed for', error.signature);
+ throw error;
+ }
+
+ return escrow;
+ }
+ throw error;
+ }
+}
diff --git a/src/locker-utils/token-2022/remaining-accounts.ts b/src/locker-utils/token-2022/remaining-accounts.ts
new file mode 100644
index 0000000..e30c082
--- /dev/null
+++ b/src/locker-utils/token-2022/remaining-accounts.ts
@@ -0,0 +1,50 @@
+// Reference: https://github.com/jup-ag/jup-lock/blob/main/tests/locker_utils/index.ts
+
+import { AccountMeta } from '@solana/web3.js';
+
+export enum RemainingAccountsType {
+ TransferHookEscrow = 'transferHookEscrow',
+}
+
+type RemainingAccountsAnchorType = { transferHookEscrow: {} };
+
+export type RemainingAccountsSliceData = {
+ accountsType: RemainingAccountsAnchorType;
+ length: number;
+};
+
+export type RemainingAccountsInfoData = {
+ slices: RemainingAccountsSliceData[];
+};
+
+// Option on Rust
+// null is treated as None in Rust. undefined doesn't work.
+export type OptionRemainingAccountsInfoData = RemainingAccountsInfoData | null;
+
+export class RemainingAccountsBuilder {
+ private remainingAccounts: AccountMeta[] = [];
+ private slices: RemainingAccountsSliceData[] = [];
+
+ constructor() {}
+
+ addSlice(
+ accountsType: RemainingAccountsType,
+ accounts?: AccountMeta[]
+ ): this {
+ if (!accounts || accounts.length === 0) return this;
+
+ this.slices.push({
+ accountsType: { [accountsType]: {} } as RemainingAccountsAnchorType,
+ length: accounts.length,
+ });
+ this.remainingAccounts.push(...accounts);
+
+ return this;
+ }
+
+ build(): [OptionRemainingAccountsInfoData, AccountMeta[] | undefined] {
+ return this.slices.length === 0
+ ? [null, undefined]
+ : [{ slices: this.slices }, this.remainingAccounts];
+ }
+}
diff --git a/src/locker-utils/token-2022/token-extensions.ts b/src/locker-utils/token-2022/token-extensions.ts
new file mode 100644
index 0000000..7a779ef
--- /dev/null
+++ b/src/locker-utils/token-2022/token-extensions.ts
@@ -0,0 +1,57 @@
+// Reference: https://github.com/jup-ag/jup-lock/blob/main/tests/locker_utils/index.ts
+
+import {
+ AccountMeta,
+ Connection,
+ PublicKey,
+ TransactionInstruction,
+} from '@solana/web3.js';
+import {
+ addExtraAccountsToInstruction,
+ getMint,
+ getTransferHook,
+ TOKEN_2022_PROGRAM_ID,
+} from '@solana/spl-token';
+
+export class TokenExtensionUtil {
+ public static async getExtraAccountMetasForTransferHook(
+ connection: Connection,
+ tokenMint: PublicKey,
+ source: PublicKey,
+ destination: PublicKey,
+ owner: PublicKey,
+ tokenProgram: PublicKey
+ ): Promise {
+ let mint = await getMint(connection, tokenMint, 'confirmed', tokenProgram);
+ const transferHook = getTransferHook(mint);
+
+ if (!transferHook) return undefined;
+
+ const instruction = new TransactionInstruction({
+ programId: TOKEN_2022_PROGRAM_ID,
+ keys: [
+ { pubkey: source, isSigner: false, isWritable: false },
+ {
+ pubkey: tokenMint,
+ isSigner: false,
+ isWritable: false,
+ },
+ { pubkey: destination, isSigner: false, isWritable: false },
+ { pubkey: owner, isSigner: false, isWritable: false },
+ { pubkey: owner, isSigner: false, isWritable: false },
+ ],
+ });
+
+ // Note:
+ await addExtraAccountsToInstruction(
+ connection,
+ instruction,
+ tokenMint,
+ 'confirmed',
+ transferHook.programId,
+ );
+
+ const extraAccountMetas = instruction.keys.slice(5);
+ return extraAccountMetas.length > 0 ? extraAccountMetas : undefined;
+ }
+}
diff --git a/src/services/paymentService.ts b/src/services/paymentService.ts
index 6e809a2..7bdcba1 100644
--- a/src/services/paymentService.ts
+++ b/src/services/paymentService.ts
@@ -12,11 +12,11 @@ import {
import { WalletType } from './types'
assert(process.env.NEXT_PUBLIC_SOLANA_RPC_URL, 'SOLANA_RPC_URL is required');
-assert(process.env.NEXT_PUBLIC_MTM_TOKEN_MINT, 'MTM_TOKEN_MINT is required');
-assert(process.env.NEXT_PUBLIC_PAYMENT_RECEIVER_ADDRESS, 'PAYMENT_RECEIVER_ADDRESS is required');
+assert(process.env.NEXT_PUBLIC_MTM_MINT_ADDRESS, 'MTM_MINT_ADDRESS is required');
+assert(process.env.NEXT_PUBLIC_MTM_RECIPIENT_MULTISIG_ADDRESS, 'MTM_RECIPIENT_MULTISIG_ADDRESS is required');
-const MTM_TOKEN_MINT = process.env.NEXT_PUBLIC_MTM_TOKEN_MINT;
-const PAYMENT_RECEIVER_ADDRESS = process.env.NEXT_PUBLIC_PAYMENT_RECEIVER_ADDRESS;
+const MTM_TOKEN_MINT = process.env.NEXT_PUBLIC_MTM_MINT_ADDRESS;
+const PAYMENT_RECEIVER_ADDRESS = process.env.NEXT_PUBLIC_MTM_RECIPIENT_MULTISIG_ADDRESS;
const SOLANA_RPC_URL = process.env.NEXT_PUBLIC_SOLANA_RPC_URL;
const SOLANA_WEBSOCKET_URL = process.env.NEXT_PUBLIC_SOLANA_WEBSOCKET_URL;
diff --git a/src/utils/create-lock.ts b/src/utils/create-lock.ts
new file mode 100644
index 0000000..727fa53
--- /dev/null
+++ b/src/utils/create-lock.ts
@@ -0,0 +1,106 @@
+import assert from 'assert';
+import BN from 'bn.js';
+import 'dotenv/config';
+import bs58 from 'bs58';
+import Big from 'big.js';
+
+import * as anchor from "@coral-xyz/anchor";
+import {
+ TOKEN_PROGRAM_ID,
+} from "@solana/spl-token";
+import { Connection, Keypair, PublicKey } from "@solana/web3.js";
+
+import { createVestingPlanV2 } from '../locker-utils';
+
+assert(process.env.NEXT_PUBLIC_SOLANA_RPC_URL);
+assert(process.env.WSOL_LOCKER_ACCOUNT_PK);
+assert(process.env.WSOL_MINT_ADDRESS);
+
+const RPC_ENDPOINT= process.env.NEXT_PUBLIC_SOLANA_RPC_URL;
+const WSOL_MINT_ADDRESS = process.env.WSOL_MINT_ADDRESS;
+const WSOL_LOCKER_ACCOUNT_PK = process.env.WSOL_LOCKER_ACCOUNT_PK;
+
+const userKP = anchor.web3.Keypair.fromSecretKey(bs58.decode(WSOL_LOCKER_ACCOUNT_PK));
+
+const connection = new Connection(RPC_ENDPOINT);
+const token = new PublicKey(WSOL_MINT_ADDRESS);
+
+const provider = new anchor.AnchorProvider(
+ connection,
+ new anchor.Wallet(userKP),
+ // Commitment level required for simulating transaction
+ { preflightCommitment: 'processed' }
+);
+
+anchor.setProvider(provider);
+
+export async function createLock(tokenLockerKeypair: anchor.web3.Keypair, recipientPubKey: anchor.web3.PublicKey, duration: BN, balance: BN): Promise {
+
+ if (balance.eq(new BN(0))) {
+ console.log('No balance available to create lock, skipping...');
+ return;
+ }
+
+ console.log('Creating a lock...');
+
+ const escrow = await createVestingPlanV2({
+ ownerKeypair: tokenLockerKeypair,
+ vestingStartTime: new BN(Math.floor(Date.now() / 1000) - 60), // Start immediately
+ tokenMint: token,
+ isAssertion: true,
+ cliffTime: duration,
+ frequency: new BN(1), // Not needed since full unlock happens at cliff
+ cliffUnlockAmount: balance, // The entire amount should be released at cliff
+ amountPerPeriod: new BN(0), // No tokens should be released before cliff
+ numberOfPeriod: new BN(1), // Only release tokens once
+ recipient: recipientPubKey,
+ updateRecipientMode: 0,
+ cancelMode: 1, // Only creator can cancel the lock
+ tokenProgram: TOKEN_PROGRAM_ID,
+ });
+
+ if (escrow) {
+ console.log('Lock created successfully:',escrow.toString());
+ }
+
+ return escrow;
+}
+
+export async function extractInfo(transactionSignature: string) {
+ const transaction = await connection.getParsedTransaction(transactionSignature, 'confirmed');
+ if (!transaction) {
+ throw new Error('Transaction not found');
+ }
+
+ const transferInstruction = transaction.transaction.message.instructions.find(
+ (instr) => 'parsed' in instr && instr.programId.equals(TOKEN_PROGRAM_ID)
+ );
+
+ if (!transferInstruction || !('parsed' in transferInstruction)) {
+ throw new Error('Transfer instruction not found');
+ }
+
+ const { info: { amount, authority } } = transferInstruction.parsed;
+ return { authority, amount };
+}
+
+export async function createRewardLock(authority: string, amount: string) {
+ const { WSOL_LOCKER_ACCOUNT_PK, WSOL_LOCK_DURATION_IN_SECONDS, WSOL_MINT_ADDRESS, NEXT_PUBLIC_MTM_MINT_ADDRESS, REWARD_MULTIPLIER } = process.env;
+ if (!WSOL_LOCKER_ACCOUNT_PK || !WSOL_LOCK_DURATION_IN_SECONDS || !WSOL_MINT_ADDRESS || !NEXT_PUBLIC_MTM_MINT_ADDRESS || !REWARD_MULTIPLIER) {
+ throw new Error('Missing required environment variables');
+ }
+
+ const duration = new BN(WSOL_LOCK_DURATION_IN_SECONDS).add(new BN(Math.floor(Date.now() / 1000)));
+ const tokenLockerKeypair = Keypair.fromSecretKey(bs58.decode(WSOL_LOCKER_ACCOUNT_PK));
+ const recipientPublicKey = new PublicKey(authority);
+
+ const url = `https://api.jup.ag/price/v2?ids=${NEXT_PUBLIC_MTM_MINT_ADDRESS}&vsToken=${WSOL_MINT_ADDRESS}`;
+ const response = await fetch(url);
+ const { data } = await response.json();
+
+ const priceWSOLFor1MTM = new Big(data[NEXT_PUBLIC_MTM_MINT_ADDRESS].price).toFixed(9);
+ const mtmAmount = new Big(amount).div(new Big(10).pow(6));
+ const wsolAmount = new BN(new Big(mtmAmount).times(priceWSOLFor1MTM).times(new Big(10).pow(9)).times(REWARD_MULTIPLIER).toFixed(0));
+
+ return createLock(tokenLockerKeypair, recipientPublicKey, duration, wsolAmount);
+}
diff --git a/src/utils/extractTxInfo.ts b/src/utils/extractTxInfo.ts
new file mode 100644
index 0000000..555eeef
--- /dev/null
+++ b/src/utils/extractTxInfo.ts
@@ -0,0 +1,22 @@
+import { TOKEN_PROGRAM_ID } from "@solana/spl-token";
+import { Connection } from "@solana/web3.js";
+
+const connection = new Connection(process.env.NEXT_PUBLIC_SOLANA_RPC_URL!);
+
+export async function extractTxInfo(transactionSignature: string) {
+ const result = await connection.getParsedTransaction(transactionSignature, 'confirmed');
+ if (!result) {
+ throw new Error('Transaction not found');
+ }
+
+ const transferInstruction = result.transaction.message.instructions.find(
+ (instr) => 'parsed' in instr && instr.programId.equals(TOKEN_PROGRAM_ID)
+ );
+
+ if (!transferInstruction || !('parsed' in transferInstruction)) {
+ throw new Error('Transfer instruction not found');
+ }
+
+ const { info: { amount, authority } } = transferInstruction.parsed;
+ return { authority, amount };
+ }
diff --git a/src/utils/tweetMessage.ts b/src/utils/tweetMessage.ts
new file mode 100644
index 0000000..77eb453
--- /dev/null
+++ b/src/utils/tweetMessage.ts
@@ -0,0 +1,19 @@
+export const generateTweetText = (transactionSignature: string, handle: string | undefined) => {
+ return `Check out this meme that I generated! \n TX Hash: '${transactionSignature}' \n @${handle} \n`;
+};
+
+export const extractData = (tweet: string | object) => {
+ const tweetText = typeof tweet === 'string' ? tweet : JSON.stringify(tweet);
+
+ const decodedTweet = tweetText.replace(/'/g, "'").replace(/"/g, '"');
+
+ const urlMatch = decodedTweet.match(//);
+ const txSignatureMatch = decodedTweet.match(/TX Hash: '([^']+)'/);
+ const handleMatch = decodedTweet.match(/@([A-Za-z0-9_]+)/);
+
+ return {
+ memeUrl: urlMatch ? urlMatch[1] : null,
+ txSignature: txSignatureMatch ? txSignatureMatch[1].trim() : null,
+ handle: handleMatch ? handleMatch[1] : null,
+ };
+};
diff --git a/src/utils/verifyPayment.ts b/src/utils/verifyPayment.ts
index 92986d8..efa87c4 100644
--- a/src/utils/verifyPayment.ts
+++ b/src/utils/verifyPayment.ts
@@ -3,8 +3,7 @@ import BN from 'bn.js';
import { Connection } from '@solana/web3.js';
import { TOKEN_PROGRAM_ID } from '@solana/spl-token';
-
-import { Payment } from '../entity/Payment';
+import { extractTxInfo } from './extractTxInfo';
assert(process.env.NEXT_PUBLIC_SOLANA_RPC_URL, 'SOLANA_RPC_URL is required');
@@ -44,6 +43,7 @@ export async function markSignatureAsUsed(transactionSignature: string): Promise
});
}
+// TODO: Verify that payment receiver is correct
export async function verifyPayment(
transactionSignature: string,
tokenAmount: BN,
@@ -54,22 +54,7 @@ export async function verifyPayment(
return false;
}
- const transaction = await connection.getParsedTransaction(transactionSignature, 'confirmed');
- if (!transaction) {
- throw new Error('Transaction not found');
- }
-
- const transferInstruction = transaction.transaction.message.instructions.find(
- (instr) => 'parsed' in instr && instr.programId.equals(TOKEN_PROGRAM_ID)
- );
-
- if (!transferInstruction || !('parsed' in transferInstruction)) {
- throw new Error('Transfer instruction not found');
- }
-
- const { parsed } = transferInstruction;
- const { info } = parsed;
- const { amount } = info;
+ const { amount } = await extractTxInfo(transactionSignature);
const transactionAmount = new BN(amount);
diff --git a/src/utils/verifyTweet.ts b/src/utils/verifyTweet.ts
index c7ddc5e..16f27e3 100644
--- a/src/utils/verifyTweet.ts
+++ b/src/utils/verifyTweet.ts
@@ -1,4 +1,8 @@
+import { DataSource, EntityTarget } from 'typeorm';
+
import { Tweet } from '../entity/Tweet';
+import { createRewardLock } from './create-lock';
+import { extractTxInfo } from './extractTxInfo';
export async function verifySignatureInTweet(transactionSignature: string): Promise {
const paymentRepository = global.appDataSource.getRepository(global.entities.Payment);
@@ -18,14 +22,48 @@ export async function verifySignatureInTweet(transactionSignature: string): Prom
return true;
}
-export async function saveTweet(data: Partial): Promise<{ isFourthUser: boolean }> {
- return await global.appDataSource.transaction(async (transactionalEntityManager) => {
- const tweetRepository = transactionalEntityManager.getRepository(global.entities.Tweet);
+export async function processTweet(txSignature: string, memeUrl: string | null) {
+ const tweetRepository = (global.appDataSource as DataSource).getRepository(
+ global.entities.Tweet as EntityTarget
+ );
- const tweet = await tweetRepository.save(data);
-
- return {
- isFourthUser: tweet.id % 4 === 0
- };
+ const tweet = await tweetRepository.save({
+ transactionSignature: txSignature,
+ url: memeUrl,
});
+
+ const isFourthUser = tweet.id % 4 === 0;
+
+ try {
+ if (isFourthUser) {
+ const { authority, amount } = await extractTxInfo(txSignature);
+
+ if (!authority || Number(amount) <= 0) {
+ return { error: "Invalid transaction details" };
+ }
+
+ const escrow = await createRewardLock(authority, amount);
+
+ if (!escrow) {
+ throw new Error("Lock not created");
+ }
+
+ await tweetRepository.update(tweet.id, {
+ isLockCreated: true,
+ lockEscrow: escrow.toString()
+ });
+
+ return { success: true, data: { escrow } };
+ }
+
+ return { success: true, message: 'Tweet verified' };
+ } catch (error) {
+ await tweetRepository.update(tweet.id, {
+ isLockCreated: false,
+ });
+
+ console.error('Error locking tokens: ', error);
+
+ throw new Error("Transaction failed.");
+ }
}
diff --git a/target/idl/locker.json b/target/idl/locker.json
new file mode 100644
index 0000000..89f109a
--- /dev/null
+++ b/target/idl/locker.json
@@ -0,0 +1,3143 @@
+{
+ "address": "LocpQgucEQHbqNABEYvBvwoxCPsSbG91A1QaQhQQqjn",
+ "metadata": {
+ "name": "locker",
+ "version": "0.4.0",
+ "spec": "0.1.0",
+ "description": "Created with Anchor"
+ },
+ "instructions": [
+ {
+ "name": "cancel_vesting_escrow",
+ "docs": [
+ "Cancel a vesting escrow.",
+ "- The claimable token will be transferred to recipient",
+ "- The remaining token will be transferred to the creator",
+ "This instruction supports both splToken and token2022",
+ "# Arguments",
+ "",
+ "* ctx - The accounts needed by instruction.",
+ "* remaining_accounts_info: additional accounts needed by instruction",
+ ""
+ ],
+ "discriminator": [
+ 217,
+ 233,
+ 13,
+ 3,
+ 143,
+ 101,
+ 53,
+ 201
+ ],
+ "accounts": [
+ {
+ "name": "escrow",
+ "docs": [
+ "Escrow."
+ ],
+ "writable": true
+ },
+ {
+ "name": "token_mint",
+ "docs": [
+ "Mint."
+ ],
+ "writable": true,
+ "relations": [
+ "escrow"
+ ]
+ },
+ {
+ "name": "escrow_token",
+ "docs": [
+ "Escrow Token Account."
+ ],
+ "writable": true,
+ "pda": {
+ "seeds": [
+ {
+ "kind": "account",
+ "path": "escrow"
+ },
+ {
+ "kind": "account",
+ "path": "token_program"
+ },
+ {
+ "kind": "account",
+ "path": "token_mint"
+ }
+ ],
+ "program": {
+ "kind": "const",
+ "value": [
+ 140,
+ 151,
+ 37,
+ 143,
+ 78,
+ 36,
+ 137,
+ 241,
+ 187,
+ 61,
+ 16,
+ 41,
+ 20,
+ 142,
+ 13,
+ 131,
+ 11,
+ 90,
+ 19,
+ 153,
+ 218,
+ 255,
+ 16,
+ 132,
+ 4,
+ 142,
+ 123,
+ 216,
+ 219,
+ 233,
+ 248,
+ 89
+ ]
+ }
+ }
+ },
+ {
+ "name": "creator_token",
+ "docs": [
+ "Creator Token Account."
+ ],
+ "writable": true,
+ "pda": {
+ "seeds": [
+ {
+ "kind": "account",
+ "path": "escrow"
+ },
+ {
+ "kind": "account",
+ "path": "token_program"
+ },
+ {
+ "kind": "account",
+ "path": "token_mint"
+ }
+ ],
+ "program": {
+ "kind": "const",
+ "value": [
+ 140,
+ 151,
+ 37,
+ 143,
+ 78,
+ 36,
+ 137,
+ 241,
+ 187,
+ 61,
+ 16,
+ 41,
+ 20,
+ 142,
+ 13,
+ 131,
+ 11,
+ 90,
+ 19,
+ 153,
+ 218,
+ 255,
+ 16,
+ 132,
+ 4,
+ 142,
+ 123,
+ 216,
+ 219,
+ 233,
+ 248,
+ 89
+ ]
+ }
+ }
+ },
+ {
+ "name": "recipient_token",
+ "docs": [
+ "Receipient Token Account."
+ ],
+ "writable": true,
+ "pda": {
+ "seeds": [
+ {
+ "kind": "account",
+ "path": "escrow"
+ },
+ {
+ "kind": "account",
+ "path": "token_program"
+ },
+ {
+ "kind": "account",
+ "path": "token_mint"
+ }
+ ],
+ "program": {
+ "kind": "const",
+ "value": [
+ 140,
+ 151,
+ 37,
+ 143,
+ 78,
+ 36,
+ 137,
+ 241,
+ 187,
+ 61,
+ 16,
+ 41,
+ 20,
+ 142,
+ 13,
+ 131,
+ 11,
+ 90,
+ 19,
+ 153,
+ 218,
+ 255,
+ 16,
+ 132,
+ 4,
+ 142,
+ 123,
+ 216,
+ 219,
+ 233,
+ 248,
+ 89
+ ]
+ }
+ }
+ },
+ {
+ "name": "rent_receiver",
+ "docs": [
+ "CHECKED: The Token Account will receive the rent"
+ ],
+ "writable": true
+ },
+ {
+ "name": "signer",
+ "docs": [
+ "Signer."
+ ],
+ "writable": true,
+ "signer": true
+ },
+ {
+ "name": "memo_program",
+ "docs": [
+ "Memo program."
+ ],
+ "address": "MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr"
+ },
+ {
+ "name": "token_program",
+ "docs": [
+ "Token program."
+ ]
+ },
+ {
+ "name": "event_authority",
+ "pda": {
+ "seeds": [
+ {
+ "kind": "const",
+ "value": [
+ 95,
+ 95,
+ 101,
+ 118,
+ 101,
+ 110,
+ 116,
+ 95,
+ 97,
+ 117,
+ 116,
+ 104,
+ 111,
+ 114,
+ 105,
+ 116,
+ 121
+ ]
+ }
+ ]
+ }
+ },
+ {
+ "name": "program"
+ }
+ ],
+ "args": [
+ {
+ "name": "remaining_accounts_info",
+ "type": {
+ "option": {
+ "defined": {
+ "name": "RemainingAccountsInfo"
+ }
+ }
+ }
+ }
+ ]
+ },
+ {
+ "name": "claim",
+ "docs": [
+ "Claim maximum amount from the vesting escrow",
+ "# Arguments",
+ "",
+ "* ctx - The accounts needed by instruction.",
+ "* max_amount - The maximum amount claimed by the recipient",
+ ""
+ ],
+ "discriminator": [
+ 62,
+ 198,
+ 214,
+ 193,
+ 213,
+ 159,
+ 108,
+ 210
+ ],
+ "accounts": [
+ {
+ "name": "escrow",
+ "docs": [
+ "Escrow."
+ ],
+ "writable": true
+ },
+ {
+ "name": "escrow_token",
+ "docs": [
+ "Escrow Token Account."
+ ],
+ "writable": true,
+ "pda": {
+ "seeds": [
+ {
+ "kind": "account",
+ "path": "escrow"
+ },
+ {
+ "kind": "const",
+ "value": [
+ 6,
+ 221,
+ 246,
+ 225,
+ 215,
+ 101,
+ 161,
+ 147,
+ 217,
+ 203,
+ 225,
+ 70,
+ 206,
+ 235,
+ 121,
+ 172,
+ 28,
+ 180,
+ 133,
+ 237,
+ 95,
+ 91,
+ 55,
+ 145,
+ 58,
+ 140,
+ 245,
+ 133,
+ 126,
+ 255,
+ 0,
+ 169
+ ]
+ },
+ {
+ "kind": "account",
+ "path": "escrow"
+ }
+ ],
+ "program": {
+ "kind": "const",
+ "value": [
+ 140,
+ 151,
+ 37,
+ 143,
+ 78,
+ 36,
+ 137,
+ 241,
+ 187,
+ 61,
+ 16,
+ 41,
+ 20,
+ 142,
+ 13,
+ 131,
+ 11,
+ 90,
+ 19,
+ 153,
+ 218,
+ 255,
+ 16,
+ 132,
+ 4,
+ 142,
+ 123,
+ 216,
+ 219,
+ 233,
+ 248,
+ 89
+ ]
+ }
+ }
+ },
+ {
+ "name": "recipient",
+ "docs": [
+ "Recipient."
+ ],
+ "writable": true,
+ "signer": true,
+ "relations": [
+ "escrow"
+ ]
+ },
+ {
+ "name": "recipient_token",
+ "docs": [
+ "Recipient Token Account."
+ ],
+ "writable": true
+ },
+ {
+ "name": "token_program",
+ "docs": [
+ "Token program."
+ ],
+ "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"
+ },
+ {
+ "name": "event_authority",
+ "pda": {
+ "seeds": [
+ {
+ "kind": "const",
+ "value": [
+ 95,
+ 95,
+ 101,
+ 118,
+ 101,
+ 110,
+ 116,
+ 95,
+ 97,
+ 117,
+ 116,
+ 104,
+ 111,
+ 114,
+ 105,
+ 116,
+ 121
+ ]
+ }
+ ]
+ }
+ },
+ {
+ "name": "program"
+ }
+ ],
+ "args": [
+ {
+ "name": "max_amount",
+ "type": "u64"
+ }
+ ]
+ },
+ {
+ "name": "claim_v2",
+ "docs": [
+ "Claim maximum amount from the vesting escrow",
+ "This instruction supports both splToken and token2022",
+ "# Arguments",
+ "",
+ "* ctx - The accounts needed by instruction.",
+ "* max_amount - The maximum amount claimed by the recipient",
+ "* remaining_accounts_info: additional accounts needed by instruction",
+ ""
+ ],
+ "discriminator": [
+ 229,
+ 87,
+ 46,
+ 162,
+ 21,
+ 157,
+ 231,
+ 114
+ ],
+ "accounts": [
+ {
+ "name": "escrow",
+ "docs": [
+ "Escrow."
+ ],
+ "writable": true
+ },
+ {
+ "name": "token_mint",
+ "docs": [
+ "Mint."
+ ],
+ "relations": [
+ "escrow"
+ ]
+ },
+ {
+ "name": "escrow_token",
+ "docs": [
+ "Escrow Token Account."
+ ],
+ "writable": true,
+ "pda": {
+ "seeds": [
+ {
+ "kind": "account",
+ "path": "escrow"
+ },
+ {
+ "kind": "account",
+ "path": "token_program"
+ },
+ {
+ "kind": "account",
+ "path": "token_mint"
+ }
+ ],
+ "program": {
+ "kind": "const",
+ "value": [
+ 140,
+ 151,
+ 37,
+ 143,
+ 78,
+ 36,
+ 137,
+ 241,
+ 187,
+ 61,
+ 16,
+ 41,
+ 20,
+ 142,
+ 13,
+ 131,
+ 11,
+ 90,
+ 19,
+ 153,
+ 218,
+ 255,
+ 16,
+ 132,
+ 4,
+ 142,
+ 123,
+ 216,
+ 219,
+ 233,
+ 248,
+ 89
+ ]
+ }
+ }
+ },
+ {
+ "name": "recipient",
+ "docs": [
+ "Recipient."
+ ],
+ "writable": true,
+ "signer": true,
+ "relations": [
+ "escrow"
+ ]
+ },
+ {
+ "name": "recipient_token",
+ "docs": [
+ "Recipient Token Account."
+ ],
+ "writable": true
+ },
+ {
+ "name": "memo_program",
+ "docs": [
+ "Memo program."
+ ],
+ "address": "MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr"
+ },
+ {
+ "name": "token_program",
+ "docs": [
+ "Token program."
+ ]
+ },
+ {
+ "name": "event_authority",
+ "pda": {
+ "seeds": [
+ {
+ "kind": "const",
+ "value": [
+ 95,
+ 95,
+ 101,
+ 118,
+ 101,
+ 110,
+ 116,
+ 95,
+ 97,
+ 117,
+ 116,
+ 104,
+ 111,
+ 114,
+ 105,
+ 116,
+ 121
+ ]
+ }
+ ]
+ }
+ },
+ {
+ "name": "program"
+ }
+ ],
+ "args": [
+ {
+ "name": "max_amount",
+ "type": "u64"
+ },
+ {
+ "name": "remaining_accounts_info",
+ "type": {
+ "option": {
+ "defined": {
+ "name": "RemainingAccountsInfo"
+ }
+ }
+ }
+ }
+ ]
+ },
+ {
+ "name": "close_vesting_escrow",
+ "docs": [
+ "Close vesting escrow",
+ "- Close vesting escrow and escrow ATA and escrow metadata if recipient already claimed all tokens",
+ "- Rent receiver must be escrow's creator",
+ "This instruction supports both splToken and token2022",
+ "# Arguments",
+ "",
+ "* ctx - The accounts needed by instruction.",
+ "* remaining_accounts_info: additional accounts needed by instruction",
+ ""
+ ],
+ "discriminator": [
+ 221,
+ 185,
+ 95,
+ 135,
+ 136,
+ 67,
+ 252,
+ 87
+ ],
+ "accounts": [
+ {
+ "name": "escrow",
+ "docs": [
+ "Escrow."
+ ],
+ "writable": true
+ },
+ {
+ "name": "escrow_metadata",
+ "writable": true,
+ "pda": {
+ "seeds": [
+ {
+ "kind": "const",
+ "value": [
+ 101,
+ 115,
+ 99,
+ 114,
+ 111,
+ 119,
+ 95,
+ 109,
+ 101,
+ 116,
+ 97,
+ 100,
+ 97,
+ 116,
+ 97
+ ]
+ },
+ {
+ "kind": "account",
+ "path": "escrow"
+ }
+ ]
+ }
+ },
+ {
+ "name": "token_mint",
+ "docs": [
+ "Mint."
+ ],
+ "writable": true
+ },
+ {
+ "name": "escrow_token",
+ "writable": true
+ },
+ {
+ "name": "creator_token",
+ "writable": true
+ },
+ {
+ "name": "creator",
+ "docs": [
+ "Creator."
+ ],
+ "writable": true,
+ "signer": true,
+ "relations": [
+ "escrow"
+ ]
+ },
+ {
+ "name": "token_program",
+ "docs": [
+ "Token program."
+ ]
+ },
+ {
+ "name": "memo_program",
+ "docs": [
+ "Memo program."
+ ],
+ "address": "MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr"
+ },
+ {
+ "name": "event_authority",
+ "pda": {
+ "seeds": [
+ {
+ "kind": "const",
+ "value": [
+ 95,
+ 95,
+ 101,
+ 118,
+ 101,
+ 110,
+ 116,
+ 95,
+ 97,
+ 117,
+ 116,
+ 104,
+ 111,
+ 114,
+ 105,
+ 116,
+ 121
+ ]
+ }
+ ]
+ }
+ },
+ {
+ "name": "program"
+ }
+ ],
+ "args": [
+ {
+ "name": "remaining_accounts_info",
+ "type": {
+ "option": {
+ "defined": {
+ "name": "RemainingAccountsInfo"
+ }
+ }
+ }
+ }
+ ]
+ },
+ {
+ "name": "create_root_escrow",
+ "docs": [
+ "Create root escrow"
+ ],
+ "discriminator": [
+ 116,
+ 212,
+ 12,
+ 188,
+ 77,
+ 226,
+ 32,
+ 201
+ ],
+ "accounts": [
+ {
+ "name": "base",
+ "signer": true
+ },
+ {
+ "name": "root_escrow",
+ "docs": [
+ "Root Escrow."
+ ],
+ "writable": true,
+ "pda": {
+ "seeds": [
+ {
+ "kind": "const",
+ "value": [
+ 114,
+ 111,
+ 111,
+ 116,
+ 95,
+ 101,
+ 115,
+ 99,
+ 114,
+ 111,
+ 119
+ ]
+ },
+ {
+ "kind": "account",
+ "path": "base"
+ },
+ {
+ "kind": "account",
+ "path": "token_mint"
+ },
+ {
+ "kind": "arg",
+ "path": "params.version"
+ }
+ ]
+ }
+ },
+ {
+ "name": "token_mint"
+ },
+ {
+ "name": "payer",
+ "docs": [
+ "payer."
+ ],
+ "writable": true,
+ "signer": true
+ },
+ {
+ "name": "creator"
+ },
+ {
+ "name": "system_program",
+ "docs": [
+ "system program."
+ ],
+ "address": "11111111111111111111111111111111"
+ },
+ {
+ "name": "event_authority",
+ "pda": {
+ "seeds": [
+ {
+ "kind": "const",
+ "value": [
+ 95,
+ 95,
+ 101,
+ 118,
+ 101,
+ 110,
+ 116,
+ 95,
+ 97,
+ 117,
+ 116,
+ 104,
+ 111,
+ 114,
+ 105,
+ 116,
+ 121
+ ]
+ }
+ ]
+ }
+ },
+ {
+ "name": "program"
+ }
+ ],
+ "args": [
+ {
+ "name": "params",
+ "type": {
+ "defined": {
+ "name": "CreateRootEscrowParameters"
+ }
+ }
+ }
+ ]
+ },
+ {
+ "name": "create_vesting_escrow",
+ "docs": [
+ "Create a vesting escrow for the given params",
+ "# Arguments",
+ "",
+ "* ctx - The accounts needed by instruction.",
+ "* params - The params needed by instruction.",
+ "* vesting_start_time - The creation time of this escrow",
+ "* cliff_time - Trade cliff time of the escrow",
+ "* frequency - How frequent the claimable amount will be updated",
+ "* cliff_unlock_amount - The amount unlocked after cliff time",
+ "* amount_per_period - The amount unlocked per vesting period",
+ "* number_of_period - The total number of vesting period",
+ "* update_recipient_mode - Decide who can update the recipient of the escrow",
+ "* cancel_mode - Decide who can cancel the the escrow",
+ ""
+ ],
+ "discriminator": [
+ 23,
+ 100,
+ 197,
+ 94,
+ 222,
+ 153,
+ 38,
+ 90
+ ],
+ "accounts": [
+ {
+ "name": "base",
+ "docs": [
+ "Base."
+ ],
+ "writable": true,
+ "signer": true
+ },
+ {
+ "name": "escrow",
+ "docs": [
+ "Escrow."
+ ],
+ "writable": true,
+ "pda": {
+ "seeds": [
+ {
+ "kind": "const",
+ "value": [
+ 101,
+ 115,
+ 99,
+ 114,
+ 111,
+ 119
+ ]
+ },
+ {
+ "kind": "account",
+ "path": "base"
+ }
+ ]
+ }
+ },
+ {
+ "name": "escrow_token",
+ "docs": [
+ "Escrow Token Account."
+ ],
+ "writable": true,
+ "pda": {
+ "seeds": [
+ {
+ "kind": "account",
+ "path": "escrow"
+ },
+ {
+ "kind": "const",
+ "value": [
+ 6,
+ 221,
+ 246,
+ 225,
+ 215,
+ 101,
+ 161,
+ 147,
+ 217,
+ 203,
+ 225,
+ 70,
+ 206,
+ 235,
+ 121,
+ 172,
+ 28,
+ 180,
+ 133,
+ 237,
+ 95,
+ 91,
+ 55,
+ 145,
+ 58,
+ 140,
+ 245,
+ 133,
+ 126,
+ 255,
+ 0,
+ 169
+ ]
+ },
+ {
+ "kind": "account",
+ "path": "sender_token.mint",
+ "account": "TokenAccount"
+ }
+ ],
+ "program": {
+ "kind": "const",
+ "value": [
+ 140,
+ 151,
+ 37,
+ 143,
+ 78,
+ 36,
+ 137,
+ 241,
+ 187,
+ 61,
+ 16,
+ 41,
+ 20,
+ 142,
+ 13,
+ 131,
+ 11,
+ 90,
+ 19,
+ 153,
+ 218,
+ 255,
+ 16,
+ 132,
+ 4,
+ 142,
+ 123,
+ 216,
+ 219,
+ 233,
+ 248,
+ 89
+ ]
+ }
+ }
+ },
+ {
+ "name": "sender",
+ "docs": [
+ "Sender."
+ ],
+ "writable": true,
+ "signer": true
+ },
+ {
+ "name": "sender_token",
+ "docs": [
+ "Sender Token Account."
+ ],
+ "writable": true
+ },
+ {
+ "name": "recipient"
+ },
+ {
+ "name": "token_program",
+ "docs": [
+ "Token program."
+ ],
+ "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"
+ },
+ {
+ "name": "system_program",
+ "docs": [
+ "system program."
+ ],
+ "address": "11111111111111111111111111111111"
+ },
+ {
+ "name": "event_authority",
+ "pda": {
+ "seeds": [
+ {
+ "kind": "const",
+ "value": [
+ 95,
+ 95,
+ 101,
+ 118,
+ 101,
+ 110,
+ 116,
+ 95,
+ 97,
+ 117,
+ 116,
+ 104,
+ 111,
+ 114,
+ 105,
+ 116,
+ 121
+ ]
+ }
+ ]
+ }
+ },
+ {
+ "name": "program"
+ }
+ ],
+ "args": [
+ {
+ "name": "params",
+ "type": {
+ "defined": {
+ "name": "CreateVestingEscrowParameters"
+ }
+ }
+ }
+ ]
+ },
+ {
+ "name": "create_vesting_escrow_from_root",
+ "docs": [
+ "Crate vesting escrow from root"
+ ],
+ "discriminator": [
+ 6,
+ 238,
+ 161,
+ 108,
+ 252,
+ 114,
+ 246,
+ 91
+ ],
+ "accounts": [
+ {
+ "name": "root_escrow",
+ "docs": [
+ "Root Escrow."
+ ],
+ "writable": true
+ },
+ {
+ "name": "base",
+ "pda": {
+ "seeds": [
+ {
+ "kind": "const",
+ "value": [
+ 98,
+ 97,
+ 115,
+ 101
+ ]
+ },
+ {
+ "kind": "account",
+ "path": "root_escrow"
+ },
+ {
+ "kind": "account",
+ "path": "recipient"
+ }
+ ]
+ }
+ },
+ {
+ "name": "escrow",
+ "docs": [
+ "Escrow."
+ ],
+ "writable": true,
+ "pda": {
+ "seeds": [
+ {
+ "kind": "const",
+ "value": [
+ 101,
+ 115,
+ 99,
+ 114,
+ 111,
+ 119
+ ]
+ },
+ {
+ "kind": "account",
+ "path": "base"
+ }
+ ]
+ }
+ },
+ {
+ "name": "escrow_token",
+ "docs": [
+ "Escrow Token Account."
+ ],
+ "writable": true,
+ "pda": {
+ "seeds": [
+ {
+ "kind": "account",
+ "path": "escrow"
+ },
+ {
+ "kind": "account",
+ "path": "token_program"
+ },
+ {
+ "kind": "account",
+ "path": "token_mint"
+ }
+ ],
+ "program": {
+ "kind": "const",
+ "value": [
+ 140,
+ 151,
+ 37,
+ 143,
+ 78,
+ 36,
+ 137,
+ 241,
+ 187,
+ 61,
+ 16,
+ 41,
+ 20,
+ 142,
+ 13,
+ 131,
+ 11,
+ 90,
+ 19,
+ 153,
+ 218,
+ 255,
+ 16,
+ 132,
+ 4,
+ 142,
+ 123,
+ 216,
+ 219,
+ 233,
+ 248,
+ 89
+ ]
+ }
+ }
+ },
+ {
+ "name": "root_escrow_token",
+ "writable": true,
+ "pda": {
+ "seeds": [
+ {
+ "kind": "account",
+ "path": "root_escrow"
+ },
+ {
+ "kind": "account",
+ "path": "token_program"
+ },
+ {
+ "kind": "account",
+ "path": "token_mint"
+ }
+ ],
+ "program": {
+ "kind": "const",
+ "value": [
+ 140,
+ 151,
+ 37,
+ 143,
+ 78,
+ 36,
+ 137,
+ 241,
+ 187,
+ 61,
+ 16,
+ 41,
+ 20,
+ 142,
+ 13,
+ 131,
+ 11,
+ 90,
+ 19,
+ 153,
+ 218,
+ 255,
+ 16,
+ 132,
+ 4,
+ 142,
+ 123,
+ 216,
+ 219,
+ 233,
+ 248,
+ 89
+ ]
+ }
+ }
+ },
+ {
+ "name": "token_mint",
+ "docs": [
+ "Mint."
+ ],
+ "relations": [
+ "root_escrow"
+ ]
+ },
+ {
+ "name": "payer",
+ "docs": [
+ "Rent Payer"
+ ],
+ "writable": true,
+ "signer": true
+ },
+ {
+ "name": "recipient"
+ },
+ {
+ "name": "system_program",
+ "docs": [
+ "system program."
+ ],
+ "address": "11111111111111111111111111111111"
+ },
+ {
+ "name": "token_program",
+ "docs": [
+ "Token program."
+ ]
+ },
+ {
+ "name": "associated_token_program",
+ "address": "ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"
+ },
+ {
+ "name": "event_authority",
+ "pda": {
+ "seeds": [
+ {
+ "kind": "const",
+ "value": [
+ 95,
+ 95,
+ 101,
+ 118,
+ 101,
+ 110,
+ 116,
+ 95,
+ 97,
+ 117,
+ 116,
+ 104,
+ 111,
+ 114,
+ 105,
+ 116,
+ 121
+ ]
+ }
+ ]
+ }
+ },
+ {
+ "name": "program"
+ }
+ ],
+ "args": [
+ {
+ "name": "params",
+ "type": {
+ "defined": {
+ "name": "CreateVestingEscrowFromRootParams"
+ }
+ }
+ },
+ {
+ "name": "proof",
+ "type": {
+ "vec": {
+ "array": [
+ "u8",
+ 32
+ ]
+ }
+ }
+ },
+ {
+ "name": "remaining_accounts_info",
+ "type": {
+ "option": {
+ "defined": {
+ "name": "RemainingAccountsInfo"
+ }
+ }
+ }
+ }
+ ]
+ },
+ {
+ "name": "create_vesting_escrow_metadata",
+ "docs": [
+ "Create vesting escrow metadata",
+ "# Arguments",
+ "",
+ "* ctx - The accounts needed by instruction.",
+ "* params - The params needed by instruction.",
+ "* name - The name of the vesting escrow",
+ "* description - The description of the vesting escrow",
+ "* creator_email - The email of the creator",
+ "* recipient_email - The email of the recipient",
+ ""
+ ],
+ "discriminator": [
+ 93,
+ 78,
+ 33,
+ 103,
+ 173,
+ 125,
+ 70,
+ 0
+ ],
+ "accounts": [
+ {
+ "name": "escrow",
+ "docs": [
+ "The [Escrow]."
+ ],
+ "writable": true
+ },
+ {
+ "name": "creator",
+ "docs": [
+ "Creator of the escrow."
+ ],
+ "signer": true,
+ "relations": [
+ "escrow"
+ ]
+ },
+ {
+ "name": "escrow_metadata",
+ "docs": [
+ "The [ProposalMeta]."
+ ],
+ "writable": true,
+ "pda": {
+ "seeds": [
+ {
+ "kind": "const",
+ "value": [
+ 101,
+ 115,
+ 99,
+ 114,
+ 111,
+ 119,
+ 95,
+ 109,
+ 101,
+ 116,
+ 97,
+ 100,
+ 97,
+ 116,
+ 97
+ ]
+ },
+ {
+ "kind": "account",
+ "path": "escrow"
+ }
+ ]
+ }
+ },
+ {
+ "name": "payer",
+ "docs": [
+ "Payer of the [ProposalMeta]."
+ ],
+ "writable": true,
+ "signer": true
+ },
+ {
+ "name": "system_program",
+ "docs": [
+ "system program."
+ ],
+ "address": "11111111111111111111111111111111"
+ }
+ ],
+ "args": [
+ {
+ "name": "params",
+ "type": {
+ "defined": {
+ "name": "CreateVestingEscrowMetadataParameters"
+ }
+ }
+ }
+ ]
+ },
+ {
+ "name": "create_vesting_escrow_v2",
+ "docs": [
+ "Create a vesting escrow for the given params",
+ "This instruction supports both splToken and token2022",
+ "# Arguments",
+ "",
+ "* ctx - The accounts needed by instruction.",
+ "* params - The params needed by instruction.",
+ "* vesting_start_time - The creation time of this escrow",
+ "* cliff_time - Trade cliff time of the escrow",
+ "* frequency - How frequent the claimable amount will be updated",
+ "* cliff_unlock_amount - The amount unlocked after cliff time",
+ "* amount_per_period - The amount unlocked per vesting period",
+ "* number_of_period - The total number of vesting period",
+ "* update_recipient_mode - Decide who can update the recipient of the escrow",
+ "* cancel_mode - Decide who can cancel the the escrow",
+ "* remaining_accounts_info: additional accounts needed by instruction",
+ ""
+ ],
+ "discriminator": [
+ 181,
+ 155,
+ 104,
+ 183,
+ 182,
+ 128,
+ 35,
+ 47
+ ],
+ "accounts": [
+ {
+ "name": "base",
+ "docs": [
+ "Base."
+ ],
+ "writable": true,
+ "signer": true
+ },
+ {
+ "name": "escrow",
+ "docs": [
+ "Escrow."
+ ],
+ "writable": true,
+ "pda": {
+ "seeds": [
+ {
+ "kind": "const",
+ "value": [
+ 101,
+ 115,
+ 99,
+ 114,
+ 111,
+ 119
+ ]
+ },
+ {
+ "kind": "account",
+ "path": "base"
+ }
+ ]
+ }
+ },
+ {
+ "name": "token_mint"
+ },
+ {
+ "name": "escrow_token",
+ "docs": [
+ "Escrow Token Account."
+ ],
+ "writable": true,
+ "pda": {
+ "seeds": [
+ {
+ "kind": "account",
+ "path": "escrow"
+ },
+ {
+ "kind": "account",
+ "path": "token_program"
+ },
+ {
+ "kind": "account",
+ "path": "token_mint"
+ }
+ ],
+ "program": {
+ "kind": "const",
+ "value": [
+ 140,
+ 151,
+ 37,
+ 143,
+ 78,
+ 36,
+ 137,
+ 241,
+ 187,
+ 61,
+ 16,
+ 41,
+ 20,
+ 142,
+ 13,
+ 131,
+ 11,
+ 90,
+ 19,
+ 153,
+ 218,
+ 255,
+ 16,
+ 132,
+ 4,
+ 142,
+ 123,
+ 216,
+ 219,
+ 233,
+ 248,
+ 89
+ ]
+ }
+ }
+ },
+ {
+ "name": "sender",
+ "docs": [
+ "Sender."
+ ],
+ "writable": true,
+ "signer": true
+ },
+ {
+ "name": "sender_token",
+ "docs": [
+ "Sender Token Account."
+ ],
+ "writable": true
+ },
+ {
+ "name": "recipient"
+ },
+ {
+ "name": "token_program",
+ "docs": [
+ "Token program."
+ ]
+ },
+ {
+ "name": "system_program",
+ "docs": [
+ "system program."
+ ],
+ "address": "11111111111111111111111111111111"
+ },
+ {
+ "name": "event_authority",
+ "pda": {
+ "seeds": [
+ {
+ "kind": "const",
+ "value": [
+ 95,
+ 95,
+ 101,
+ 118,
+ 101,
+ 110,
+ 116,
+ 95,
+ 97,
+ 117,
+ 116,
+ 104,
+ 111,
+ 114,
+ 105,
+ 116,
+ 121
+ ]
+ }
+ ]
+ }
+ },
+ {
+ "name": "program"
+ }
+ ],
+ "args": [
+ {
+ "name": "params",
+ "type": {
+ "defined": {
+ "name": "CreateVestingEscrowParameters"
+ }
+ }
+ },
+ {
+ "name": "remaining_accounts_info",
+ "type": {
+ "option": {
+ "defined": {
+ "name": "RemainingAccountsInfo"
+ }
+ }
+ }
+ }
+ ]
+ },
+ {
+ "name": "fund_root_escrow",
+ "docs": [
+ "Fund root escrow"
+ ],
+ "discriminator": [
+ 251,
+ 106,
+ 189,
+ 200,
+ 108,
+ 15,
+ 144,
+ 95
+ ],
+ "accounts": [
+ {
+ "name": "root_escrow",
+ "docs": [
+ "Root Escrow."
+ ],
+ "writable": true
+ },
+ {
+ "name": "token_mint",
+ "relations": [
+ "root_escrow"
+ ]
+ },
+ {
+ "name": "root_escrow_token",
+ "docs": [
+ "Escrow Token Account."
+ ],
+ "writable": true,
+ "pda": {
+ "seeds": [
+ {
+ "kind": "account",
+ "path": "root_escrow"
+ },
+ {
+ "kind": "account",
+ "path": "token_program"
+ },
+ {
+ "kind": "account",
+ "path": "token_mint"
+ }
+ ],
+ "program": {
+ "kind": "const",
+ "value": [
+ 140,
+ 151,
+ 37,
+ 143,
+ 78,
+ 36,
+ 137,
+ 241,
+ 187,
+ 61,
+ 16,
+ 41,
+ 20,
+ 142,
+ 13,
+ 131,
+ 11,
+ 90,
+ 19,
+ 153,
+ 218,
+ 255,
+ 16,
+ 132,
+ 4,
+ 142,
+ 123,
+ 216,
+ 219,
+ 233,
+ 248,
+ 89
+ ]
+ }
+ }
+ },
+ {
+ "name": "payer",
+ "docs": [
+ "Payer."
+ ],
+ "writable": true,
+ "signer": true
+ },
+ {
+ "name": "payer_token",
+ "docs": [
+ "Payer Token Account."
+ ],
+ "writable": true
+ },
+ {
+ "name": "token_program",
+ "docs": [
+ "Token program."
+ ]
+ },
+ {
+ "name": "system_program",
+ "docs": [
+ "system program."
+ ],
+ "address": "11111111111111111111111111111111"
+ },
+ {
+ "name": "associated_token_program",
+ "address": "ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"
+ },
+ {
+ "name": "event_authority",
+ "pda": {
+ "seeds": [
+ {
+ "kind": "const",
+ "value": [
+ 95,
+ 95,
+ 101,
+ 118,
+ 101,
+ 110,
+ 116,
+ 95,
+ 97,
+ 117,
+ 116,
+ 104,
+ 111,
+ 114,
+ 105,
+ 116,
+ 121
+ ]
+ }
+ ]
+ }
+ },
+ {
+ "name": "program"
+ }
+ ],
+ "args": [
+ {
+ "name": "max_amount",
+ "type": "u64"
+ },
+ {
+ "name": "remaining_accounts_info",
+ "type": {
+ "option": {
+ "defined": {
+ "name": "RemainingAccountsInfo"
+ }
+ }
+ }
+ }
+ ]
+ },
+ {
+ "name": "update_vesting_escrow_recipient",
+ "docs": [
+ "Update vesting escrow metadata",
+ "# Arguments",
+ "",
+ "* ctx - The accounts needed by instruction.",
+ "* new_recipient - The address of the new recipient",
+ "* new_recipient_email - The email of the new recipient",
+ ""
+ ],
+ "discriminator": [
+ 26,
+ 242,
+ 127,
+ 255,
+ 237,
+ 109,
+ 47,
+ 206
+ ],
+ "accounts": [
+ {
+ "name": "escrow",
+ "docs": [
+ "Escrow."
+ ],
+ "writable": true
+ },
+ {
+ "name": "escrow_metadata",
+ "docs": [
+ "Escrow metadata."
+ ],
+ "writable": true,
+ "optional": true
+ },
+ {
+ "name": "signer",
+ "docs": [
+ "Signer."
+ ],
+ "writable": true,
+ "signer": true
+ },
+ {
+ "name": "system_program",
+ "docs": [
+ "system program."
+ ],
+ "address": "11111111111111111111111111111111"
+ },
+ {
+ "name": "event_authority",
+ "pda": {
+ "seeds": [
+ {
+ "kind": "const",
+ "value": [
+ 95,
+ 95,
+ 101,
+ 118,
+ 101,
+ 110,
+ 116,
+ 95,
+ 97,
+ 117,
+ 116,
+ 104,
+ 111,
+ 114,
+ 105,
+ 116,
+ 121
+ ]
+ }
+ ]
+ }
+ },
+ {
+ "name": "program"
+ }
+ ],
+ "args": [
+ {
+ "name": "new_recipient",
+ "type": "pubkey"
+ },
+ {
+ "name": "new_recipient_email",
+ "type": {
+ "option": "string"
+ }
+ }
+ ]
+ }
+ ],
+ "accounts": [
+ {
+ "name": "RootEscrow",
+ "discriminator": [
+ 253,
+ 209,
+ 220,
+ 107,
+ 206,
+ 191,
+ 71,
+ 158
+ ]
+ },
+ {
+ "name": "VestingEscrow",
+ "discriminator": [
+ 244,
+ 119,
+ 183,
+ 4,
+ 73,
+ 116,
+ 135,
+ 195
+ ]
+ },
+ {
+ "name": "VestingEscrowMetadata",
+ "discriminator": [
+ 24,
+ 204,
+ 166,
+ 104,
+ 87,
+ 158,
+ 76,
+ 13
+ ]
+ }
+ ],
+ "events": [
+ {
+ "name": "EventCancelVestingEscrow",
+ "discriminator": [
+ 113,
+ 2,
+ 117,
+ 173,
+ 195,
+ 39,
+ 101,
+ 155
+ ]
+ },
+ {
+ "name": "EventCancelVestingEscrowV3",
+ "discriminator": [
+ 41,
+ 143,
+ 236,
+ 79,
+ 116,
+ 120,
+ 91,
+ 143
+ ]
+ },
+ {
+ "name": "EventClaim",
+ "discriminator": [
+ 171,
+ 144,
+ 1,
+ 189,
+ 120,
+ 200,
+ 38,
+ 11
+ ]
+ },
+ {
+ "name": "EventClaimV3",
+ "discriminator": [
+ 229,
+ 197,
+ 142,
+ 10,
+ 41,
+ 122,
+ 171,
+ 154
+ ]
+ },
+ {
+ "name": "EventCloseClaimStatus",
+ "discriminator": [
+ 87,
+ 68,
+ 38,
+ 194,
+ 241,
+ 155,
+ 125,
+ 107
+ ]
+ },
+ {
+ "name": "EventCloseVestingEscrow",
+ "discriminator": [
+ 45,
+ 141,
+ 253,
+ 209,
+ 196,
+ 133,
+ 21,
+ 204
+ ]
+ },
+ {
+ "name": "EventCreateRootEscrow",
+ "discriminator": [
+ 105,
+ 216,
+ 97,
+ 182,
+ 27,
+ 224,
+ 199,
+ 228
+ ]
+ },
+ {
+ "name": "EventCreateVestingEscrow",
+ "discriminator": [
+ 248,
+ 222,
+ 89,
+ 61,
+ 170,
+ 208,
+ 131,
+ 117
+ ]
+ },
+ {
+ "name": "EventFundRootEscrow",
+ "discriminator": [
+ 74,
+ 8,
+ 68,
+ 181,
+ 198,
+ 235,
+ 138,
+ 81
+ ]
+ },
+ {
+ "name": "EventUpdateVestingEscrowRecipient",
+ "discriminator": [
+ 206,
+ 218,
+ 33,
+ 65,
+ 133,
+ 237,
+ 131,
+ 57
+ ]
+ }
+ ],
+ "errors": [
+ {
+ "code": 6000,
+ "name": "MathOverflow",
+ "msg": "Math operation overflow"
+ },
+ {
+ "code": 6001,
+ "name": "FrequencyIsZero",
+ "msg": "Frequency is zero"
+ },
+ {
+ "code": 6002,
+ "name": "InvalidEscrowTokenAddress",
+ "msg": "Invalid escrow token address"
+ },
+ {
+ "code": 6003,
+ "name": "InvalidUpdateRecipientMode",
+ "msg": "Invalid update recipient mode"
+ },
+ {
+ "code": 6004,
+ "name": "InvalidCancelMode",
+ "msg": "Invalid cancel mode"
+ },
+ {
+ "code": 6005,
+ "name": "NotPermitToDoThisAction",
+ "msg": "Not permit to do this action"
+ },
+ {
+ "code": 6006,
+ "name": "InvalidRecipientTokenAccount",
+ "msg": "Invalid recipient token account"
+ },
+ {
+ "code": 6007,
+ "name": "InvalidCreatorTokenAccount",
+ "msg": "Invalid creator token account"
+ },
+ {
+ "code": 6008,
+ "name": "InvalidEscrowMetadata",
+ "msg": "Invalid escrow metadata"
+ },
+ {
+ "code": 6009,
+ "name": "InvalidVestingStartTime",
+ "msg": "Invalid vesting start time"
+ },
+ {
+ "code": 6010,
+ "name": "AlreadyCancelled",
+ "msg": "Already cancelled"
+ },
+ {
+ "code": 6011,
+ "name": "CancelledAtIsZero",
+ "msg": "Cancelled timestamp is zero"
+ },
+ {
+ "code": 6012,
+ "name": "IncorrectTokenProgramId",
+ "msg": "Invalid token program ID"
+ },
+ {
+ "code": 6013,
+ "name": "TransferFeeCalculationFailure",
+ "msg": "Calculate transfer fee failure"
+ },
+ {
+ "code": 6014,
+ "name": "UnsupportedMint",
+ "msg": "Unsupported mint"
+ },
+ {
+ "code": 6015,
+ "name": "InvalidRemainingAccountSlice",
+ "msg": "Invalid remaining accounts"
+ },
+ {
+ "code": 6016,
+ "name": "InsufficientRemainingAccounts",
+ "msg": "Insufficient remaining accounts"
+ },
+ {
+ "code": 6017,
+ "name": "DuplicatedRemainingAccountTypes",
+ "msg": "Same accounts type is provided more than once"
+ },
+ {
+ "code": 6018,
+ "name": "NoTransferHookProgram",
+ "msg": "Missing remaining accounts for transfer hook."
+ },
+ {
+ "code": 6019,
+ "name": "ClaimingIsNotFinished",
+ "msg": "Claiming is not finished"
+ },
+ {
+ "code": 6020,
+ "name": "InvalidMerkleProof",
+ "msg": "Invalid merkle proof"
+ },
+ {
+ "code": 6021,
+ "name": "EscrowNotCancelled",
+ "msg": "Escrow is not cancelled"
+ },
+ {
+ "code": 6022,
+ "name": "AmountIsZero",
+ "msg": "Amount is zero"
+ },
+ {
+ "code": 6023,
+ "name": "InvalidParams",
+ "msg": "Invalid params"
+ }
+ ],
+ "types": [
+ {
+ "name": "AccountsType",
+ "type": {
+ "kind": "enum",
+ "variants": [
+ {
+ "name": "TransferHookEscrow"
+ }
+ ]
+ }
+ },
+ {
+ "name": "CreateRootEscrowParameters",
+ "type": {
+ "kind": "struct",
+ "fields": [
+ {
+ "name": "max_claim_amount",
+ "type": "u64"
+ },
+ {
+ "name": "max_escrow",
+ "type": "u64"
+ },
+ {
+ "name": "version",
+ "type": "u64"
+ },
+ {
+ "name": "root",
+ "type": {
+ "array": [
+ "u8",
+ 32
+ ]
+ }
+ }
+ ]
+ }
+ },
+ {
+ "name": "CreateVestingEscrowFromRootParams",
+ "type": {
+ "kind": "struct",
+ "fields": [
+ {
+ "name": "vesting_start_time",
+ "type": "u64"
+ },
+ {
+ "name": "cliff_time",
+ "type": "u64"
+ },
+ {
+ "name": "frequency",
+ "type": "u64"
+ },
+ {
+ "name": "cliff_unlock_amount",
+ "type": "u64"
+ },
+ {
+ "name": "amount_per_period",
+ "type": "u64"
+ },
+ {
+ "name": "number_of_period",
+ "type": "u64"
+ },
+ {
+ "name": "update_recipient_mode",
+ "type": "u8"
+ },
+ {
+ "name": "cancel_mode",
+ "type": "u8"
+ }
+ ]
+ }
+ },
+ {
+ "name": "CreateVestingEscrowMetadataParameters",
+ "type": {
+ "kind": "struct",
+ "fields": [
+ {
+ "name": "name",
+ "type": "string"
+ },
+ {
+ "name": "description",
+ "type": "string"
+ },
+ {
+ "name": "creator_email",
+ "type": "string"
+ },
+ {
+ "name": "recipient_email",
+ "type": "string"
+ }
+ ]
+ }
+ },
+ {
+ "name": "CreateVestingEscrowParameters",
+ "docs": [
+ "Accounts for [locker::create_vesting_escrow]."
+ ],
+ "type": {
+ "kind": "struct",
+ "fields": [
+ {
+ "name": "vesting_start_time",
+ "type": "u64"
+ },
+ {
+ "name": "cliff_time",
+ "type": "u64"
+ },
+ {
+ "name": "frequency",
+ "type": "u64"
+ },
+ {
+ "name": "cliff_unlock_amount",
+ "type": "u64"
+ },
+ {
+ "name": "amount_per_period",
+ "type": "u64"
+ },
+ {
+ "name": "number_of_period",
+ "type": "u64"
+ },
+ {
+ "name": "update_recipient_mode",
+ "type": "u8"
+ },
+ {
+ "name": "cancel_mode",
+ "type": "u8"
+ }
+ ]
+ }
+ },
+ {
+ "name": "EventCancelVestingEscrow",
+ "type": {
+ "kind": "struct",
+ "fields": [
+ {
+ "name": "escrow",
+ "type": "pubkey"
+ },
+ {
+ "name": "signer",
+ "type": "pubkey"
+ },
+ {
+ "name": "claimable_amount",
+ "type": "u64"
+ },
+ {
+ "name": "remaining_amount",
+ "type": "u64"
+ },
+ {
+ "name": "cancelled_at",
+ "type": "u64"
+ }
+ ]
+ }
+ },
+ {
+ "name": "EventCancelVestingEscrowV3",
+ "type": {
+ "kind": "struct",
+ "fields": [
+ {
+ "name": "escrow",
+ "type": "pubkey"
+ },
+ {
+ "name": "signer",
+ "type": "pubkey"
+ },
+ {
+ "name": "remaining_amount",
+ "type": "u64"
+ },
+ {
+ "name": "cancelled_at",
+ "type": "u64"
+ }
+ ]
+ }
+ },
+ {
+ "name": "EventClaim",
+ "type": {
+ "kind": "struct",
+ "fields": [
+ {
+ "name": "amount",
+ "type": "u64"
+ },
+ {
+ "name": "current_ts",
+ "type": "u64"
+ },
+ {
+ "name": "escrow",
+ "type": "pubkey"
+ }
+ ]
+ }
+ },
+ {
+ "name": "EventClaimV3",
+ "type": {
+ "kind": "struct",
+ "fields": [
+ {
+ "name": "amount",
+ "type": "u64"
+ },
+ {
+ "name": "current_ts",
+ "type": "u64"
+ },
+ {
+ "name": "escrow",
+ "type": "pubkey"
+ },
+ {
+ "name": "vesting_start_time",
+ "type": "u64"
+ },
+ {
+ "name": "cliff_time",
+ "type": "u64"
+ },
+ {
+ "name": "frequency",
+ "type": "u64"
+ },
+ {
+ "name": "cliff_unlock_amount",
+ "type": "u64"
+ },
+ {
+ "name": "amount_per_period",
+ "type": "u64"
+ },
+ {
+ "name": "number_of_period",
+ "type": "u64"
+ },
+ {
+ "name": "recipient",
+ "type": "pubkey"
+ }
+ ]
+ }
+ },
+ {
+ "name": "EventCloseClaimStatus",
+ "type": {
+ "kind": "struct",
+ "fields": [
+ {
+ "name": "escrow",
+ "type": "pubkey"
+ },
+ {
+ "name": "recipient",
+ "type": "pubkey"
+ },
+ {
+ "name": "rent_receiver",
+ "type": "pubkey"
+ }
+ ]
+ }
+ },
+ {
+ "name": "EventCloseVestingEscrow",
+ "type": {
+ "kind": "struct",
+ "fields": [
+ {
+ "name": "escrow",
+ "type": "pubkey"
+ }
+ ]
+ }
+ },
+ {
+ "name": "EventCreateRootEscrow",
+ "type": {
+ "kind": "struct",
+ "fields": [
+ {
+ "name": "root_escrow",
+ "type": "pubkey"
+ },
+ {
+ "name": "max_claim_amount",
+ "type": "u64"
+ },
+ {
+ "name": "max_escrow",
+ "type": "u64"
+ },
+ {
+ "name": "version",
+ "type": "u64"
+ },
+ {
+ "name": "root",
+ "type": {
+ "array": [
+ "u8",
+ 32
+ ]
+ }
+ }
+ ]
+ }
+ },
+ {
+ "name": "EventCreateVestingEscrow",
+ "type": {
+ "kind": "struct",
+ "fields": [
+ {
+ "name": "vesting_start_time",
+ "type": "u64"
+ },
+ {
+ "name": "cliff_time",
+ "type": "u64"
+ },
+ {
+ "name": "frequency",
+ "type": "u64"
+ },
+ {
+ "name": "cliff_unlock_amount",
+ "type": "u64"
+ },
+ {
+ "name": "amount_per_period",
+ "type": "u64"
+ },
+ {
+ "name": "number_of_period",
+ "type": "u64"
+ },
+ {
+ "name": "update_recipient_mode",
+ "type": "u8"
+ },
+ {
+ "name": "cancel_mode",
+ "type": "u8"
+ },
+ {
+ "name": "recipient",
+ "type": "pubkey"
+ },
+ {
+ "name": "escrow",
+ "type": "pubkey"
+ }
+ ]
+ }
+ },
+ {
+ "name": "EventFundRootEscrow",
+ "type": {
+ "kind": "struct",
+ "fields": [
+ {
+ "name": "root_escrow",
+ "type": "pubkey"
+ },
+ {
+ "name": "funded_amount",
+ "type": "u64"
+ }
+ ]
+ }
+ },
+ {
+ "name": "EventUpdateVestingEscrowRecipient",
+ "type": {
+ "kind": "struct",
+ "fields": [
+ {
+ "name": "escrow",
+ "type": "pubkey"
+ },
+ {
+ "name": "old_recipient",
+ "type": "pubkey"
+ },
+ {
+ "name": "new_recipient",
+ "type": "pubkey"
+ },
+ {
+ "name": "signer",
+ "type": "pubkey"
+ }
+ ]
+ }
+ },
+ {
+ "name": "RemainingAccountsInfo",
+ "type": {
+ "kind": "struct",
+ "fields": [
+ {
+ "name": "slices",
+ "type": {
+ "vec": {
+ "defined": {
+ "name": "RemainingAccountsSlice"
+ }
+ }
+ }
+ }
+ ]
+ }
+ },
+ {
+ "name": "RemainingAccountsSlice",
+ "type": {
+ "kind": "struct",
+ "fields": [
+ {
+ "name": "accounts_type",
+ "type": {
+ "defined": {
+ "name": "AccountsType"
+ }
+ }
+ },
+ {
+ "name": "length",
+ "type": "u8"
+ }
+ ]
+ }
+ },
+ {
+ "name": "RootEscrow",
+ "serialization": "bytemuck",
+ "repr": {
+ "kind": "c"
+ },
+ "type": {
+ "kind": "struct",
+ "fields": [
+ {
+ "name": "token_mint",
+ "docs": [
+ "token mint"
+ ],
+ "type": "pubkey"
+ },
+ {
+ "name": "creator",
+ "docs": [
+ "creator of the escrow"
+ ],
+ "type": "pubkey"
+ },
+ {
+ "name": "base",
+ "docs": [
+ "escrow base key"
+ ],
+ "type": "pubkey"
+ },
+ {
+ "name": "root",
+ "docs": [
+ "256 bit merkle root"
+ ],
+ "type": {
+ "array": [
+ "u8",
+ 32
+ ]
+ }
+ },
+ {
+ "name": "bump",
+ "docs": [
+ "bump"
+ ],
+ "type": "u8"
+ },
+ {
+ "name": "token_program_flag",
+ "docs": [
+ "token program flag"
+ ],
+ "type": "u8"
+ },
+ {
+ "name": "padding_0",
+ "docs": [
+ "padding"
+ ],
+ "type": {
+ "array": [
+ "u8",
+ 6
+ ]
+ }
+ },
+ {
+ "name": "max_claim_amount",
+ "docs": [
+ "max claim amount"
+ ],
+ "type": "u64"
+ },
+ {
+ "name": "max_escrow",
+ "docs": [
+ "max escrow"
+ ],
+ "type": "u64"
+ },
+ {
+ "name": "total_funded_amount",
+ "docs": [
+ "total funded amount"
+ ],
+ "type": "u64"
+ },
+ {
+ "name": "total_escrow_created",
+ "docs": [
+ "total escrow created"
+ ],
+ "type": "u64"
+ },
+ {
+ "name": "total_distribute_amount",
+ "docs": [
+ "total distributed amount"
+ ],
+ "type": "u64"
+ },
+ {
+ "name": "version",
+ "docs": [
+ "version"
+ ],
+ "type": "u64"
+ },
+ {
+ "name": "padding",
+ "docs": [
+ "padding"
+ ],
+ "type": "u64"
+ },
+ {
+ "name": "buffer",
+ "docs": [
+ "buffer"
+ ],
+ "type": {
+ "array": [
+ "u128",
+ 5
+ ]
+ }
+ }
+ ]
+ }
+ },
+ {
+ "name": "VestingEscrow",
+ "serialization": "bytemuck",
+ "repr": {
+ "kind": "c"
+ },
+ "type": {
+ "kind": "struct",
+ "fields": [
+ {
+ "name": "recipient",
+ "docs": [
+ "recipient address"
+ ],
+ "type": "pubkey"
+ },
+ {
+ "name": "token_mint",
+ "docs": [
+ "token mint"
+ ],
+ "type": "pubkey"
+ },
+ {
+ "name": "creator",
+ "docs": [
+ "creator of the escrow"
+ ],
+ "type": "pubkey"
+ },
+ {
+ "name": "base",
+ "docs": [
+ "escrow base key"
+ ],
+ "type": "pubkey"
+ },
+ {
+ "name": "escrow_bump",
+ "docs": [
+ "escrow bump"
+ ],
+ "type": "u8"
+ },
+ {
+ "name": "update_recipient_mode",
+ "docs": [
+ "update_recipient_mode"
+ ],
+ "type": "u8"
+ },
+ {
+ "name": "cancel_mode",
+ "docs": [
+ "cancel_mode"
+ ],
+ "type": "u8"
+ },
+ {
+ "name": "token_program_flag",
+ "docs": [
+ "token program flag"
+ ],
+ "type": "u8"
+ },
+ {
+ "name": "padding_0",
+ "docs": [
+ "padding"
+ ],
+ "type": {
+ "array": [
+ "u8",
+ 4
+ ]
+ }
+ },
+ {
+ "name": "cliff_time",
+ "docs": [
+ "cliff time"
+ ],
+ "type": "u64"
+ },
+ {
+ "name": "frequency",
+ "docs": [
+ "frequency"
+ ],
+ "type": "u64"
+ },
+ {
+ "name": "cliff_unlock_amount",
+ "docs": [
+ "cliff unlock amount"
+ ],
+ "type": "u64"
+ },
+ {
+ "name": "amount_per_period",
+ "docs": [
+ "amount per period"
+ ],
+ "type": "u64"
+ },
+ {
+ "name": "number_of_period",
+ "docs": [
+ "number of period"
+ ],
+ "type": "u64"
+ },
+ {
+ "name": "total_claimed_amount",
+ "docs": [
+ "total claimed amount"
+ ],
+ "type": "u64"
+ },
+ {
+ "name": "vesting_start_time",
+ "docs": [
+ "vesting start time"
+ ],
+ "type": "u64"
+ },
+ {
+ "name": "cancelled_at",
+ "docs": [
+ "cancelled_at"
+ ],
+ "type": "u64"
+ },
+ {
+ "name": "padding_1",
+ "docs": [
+ "buffer"
+ ],
+ "type": "u64"
+ },
+ {
+ "name": "buffer",
+ "docs": [
+ "buffer"
+ ],
+ "type": {
+ "array": [
+ "u128",
+ 5
+ ]
+ }
+ }
+ ]
+ }
+ },
+ {
+ "name": "VestingEscrowMetadata",
+ "docs": [
+ "Metadata about an escrow."
+ ],
+ "type": {
+ "kind": "struct",
+ "fields": [
+ {
+ "name": "escrow",
+ "docs": [
+ "The [Escrow]."
+ ],
+ "type": "pubkey"
+ },
+ {
+ "name": "name",
+ "docs": [
+ "Name of escrow."
+ ],
+ "type": "string"
+ },
+ {
+ "name": "description",
+ "docs": [
+ "Description of escrow."
+ ],
+ "type": "string"
+ },
+ {
+ "name": "creator_email",
+ "docs": [
+ "Email of creator"
+ ],
+ "type": "string"
+ },
+ {
+ "name": "recipient_email",
+ "docs": [
+ "Email of recipient"
+ ],
+ "type": "string"
+ }
+ ]
+ }
+ }
+ ]
+}
\ No newline at end of file
diff --git a/target/types/locker.ts b/target/types/locker.ts
new file mode 100644
index 0000000..f068081
--- /dev/null
+++ b/target/types/locker.ts
@@ -0,0 +1,3149 @@
+/**
+ * Program IDL in camelCase format in order to be used in JS/TS.
+ *
+ * Note that this is only a type helper and is not the actual IDL. The original
+ * IDL can be found at `target/idl/locker.json`.
+ */
+export type Locker = {
+ "address": "LocpQgucEQHbqNABEYvBvwoxCPsSbG91A1QaQhQQqjn",
+ "metadata": {
+ "name": "locker",
+ "version": "0.4.0",
+ "spec": "0.1.0",
+ "description": "Created with Anchor"
+ },
+ "instructions": [
+ {
+ "name": "cancelVestingEscrow",
+ "docs": [
+ "Cancel a vesting escrow.",
+ "- The claimable token will be transferred to recipient",
+ "- The remaining token will be transferred to the creator",
+ "This instruction supports both splToken and token2022",
+ "# Arguments",
+ "",
+ "* ctx - The accounts needed by instruction.",
+ "* remaining_accounts_info: additional accounts needed by instruction",
+ ""
+ ],
+ "discriminator": [
+ 217,
+ 233,
+ 13,
+ 3,
+ 143,
+ 101,
+ 53,
+ 201
+ ],
+ "accounts": [
+ {
+ "name": "escrow",
+ "docs": [
+ "Escrow."
+ ],
+ "writable": true
+ },
+ {
+ "name": "tokenMint",
+ "docs": [
+ "Mint."
+ ],
+ "writable": true,
+ "relations": [
+ "escrow"
+ ]
+ },
+ {
+ "name": "escrowToken",
+ "docs": [
+ "Escrow Token Account."
+ ],
+ "writable": true,
+ "pda": {
+ "seeds": [
+ {
+ "kind": "account",
+ "path": "escrow"
+ },
+ {
+ "kind": "account",
+ "path": "tokenProgram"
+ },
+ {
+ "kind": "account",
+ "path": "tokenMint"
+ }
+ ],
+ "program": {
+ "kind": "const",
+ "value": [
+ 140,
+ 151,
+ 37,
+ 143,
+ 78,
+ 36,
+ 137,
+ 241,
+ 187,
+ 61,
+ 16,
+ 41,
+ 20,
+ 142,
+ 13,
+ 131,
+ 11,
+ 90,
+ 19,
+ 153,
+ 218,
+ 255,
+ 16,
+ 132,
+ 4,
+ 142,
+ 123,
+ 216,
+ 219,
+ 233,
+ 248,
+ 89
+ ]
+ }
+ }
+ },
+ {
+ "name": "creatorToken",
+ "docs": [
+ "Creator Token Account."
+ ],
+ "writable": true,
+ "pda": {
+ "seeds": [
+ {
+ "kind": "account",
+ "path": "escrow"
+ },
+ {
+ "kind": "account",
+ "path": "tokenProgram"
+ },
+ {
+ "kind": "account",
+ "path": "tokenMint"
+ }
+ ],
+ "program": {
+ "kind": "const",
+ "value": [
+ 140,
+ 151,
+ 37,
+ 143,
+ 78,
+ 36,
+ 137,
+ 241,
+ 187,
+ 61,
+ 16,
+ 41,
+ 20,
+ 142,
+ 13,
+ 131,
+ 11,
+ 90,
+ 19,
+ 153,
+ 218,
+ 255,
+ 16,
+ 132,
+ 4,
+ 142,
+ 123,
+ 216,
+ 219,
+ 233,
+ 248,
+ 89
+ ]
+ }
+ }
+ },
+ {
+ "name": "recipientToken",
+ "docs": [
+ "Receipient Token Account."
+ ],
+ "writable": true,
+ "pda": {
+ "seeds": [
+ {
+ "kind": "account",
+ "path": "escrow"
+ },
+ {
+ "kind": "account",
+ "path": "tokenProgram"
+ },
+ {
+ "kind": "account",
+ "path": "tokenMint"
+ }
+ ],
+ "program": {
+ "kind": "const",
+ "value": [
+ 140,
+ 151,
+ 37,
+ 143,
+ 78,
+ 36,
+ 137,
+ 241,
+ 187,
+ 61,
+ 16,
+ 41,
+ 20,
+ 142,
+ 13,
+ 131,
+ 11,
+ 90,
+ 19,
+ 153,
+ 218,
+ 255,
+ 16,
+ 132,
+ 4,
+ 142,
+ 123,
+ 216,
+ 219,
+ 233,
+ 248,
+ 89
+ ]
+ }
+ }
+ },
+ {
+ "name": "rentReceiver",
+ "docs": [
+ "CHECKED: The Token Account will receive the rent"
+ ],
+ "writable": true
+ },
+ {
+ "name": "signer",
+ "docs": [
+ "Signer."
+ ],
+ "writable": true,
+ "signer": true
+ },
+ {
+ "name": "memoProgram",
+ "docs": [
+ "Memo program."
+ ],
+ "address": "MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr"
+ },
+ {
+ "name": "tokenProgram",
+ "docs": [
+ "Token program."
+ ]
+ },
+ {
+ "name": "eventAuthority",
+ "pda": {
+ "seeds": [
+ {
+ "kind": "const",
+ "value": [
+ 95,
+ 95,
+ 101,
+ 118,
+ 101,
+ 110,
+ 116,
+ 95,
+ 97,
+ 117,
+ 116,
+ 104,
+ 111,
+ 114,
+ 105,
+ 116,
+ 121
+ ]
+ }
+ ]
+ }
+ },
+ {
+ "name": "program"
+ }
+ ],
+ "args": [
+ {
+ "name": "remainingAccountsInfo",
+ "type": {
+ "option": {
+ "defined": {
+ "name": "remainingAccountsInfo"
+ }
+ }
+ }
+ }
+ ]
+ },
+ {
+ "name": "claim",
+ "docs": [
+ "Claim maximum amount from the vesting escrow",
+ "# Arguments",
+ "",
+ "* ctx - The accounts needed by instruction.",
+ "* max_amount - The maximum amount claimed by the recipient",
+ ""
+ ],
+ "discriminator": [
+ 62,
+ 198,
+ 214,
+ 193,
+ 213,
+ 159,
+ 108,
+ 210
+ ],
+ "accounts": [
+ {
+ "name": "escrow",
+ "docs": [
+ "Escrow."
+ ],
+ "writable": true
+ },
+ {
+ "name": "escrowToken",
+ "docs": [
+ "Escrow Token Account."
+ ],
+ "writable": true,
+ "pda": {
+ "seeds": [
+ {
+ "kind": "account",
+ "path": "escrow"
+ },
+ {
+ "kind": "const",
+ "value": [
+ 6,
+ 221,
+ 246,
+ 225,
+ 215,
+ 101,
+ 161,
+ 147,
+ 217,
+ 203,
+ 225,
+ 70,
+ 206,
+ 235,
+ 121,
+ 172,
+ 28,
+ 180,
+ 133,
+ 237,
+ 95,
+ 91,
+ 55,
+ 145,
+ 58,
+ 140,
+ 245,
+ 133,
+ 126,
+ 255,
+ 0,
+ 169
+ ]
+ },
+ {
+ "kind": "account",
+ "path": "escrow"
+ }
+ ],
+ "program": {
+ "kind": "const",
+ "value": [
+ 140,
+ 151,
+ 37,
+ 143,
+ 78,
+ 36,
+ 137,
+ 241,
+ 187,
+ 61,
+ 16,
+ 41,
+ 20,
+ 142,
+ 13,
+ 131,
+ 11,
+ 90,
+ 19,
+ 153,
+ 218,
+ 255,
+ 16,
+ 132,
+ 4,
+ 142,
+ 123,
+ 216,
+ 219,
+ 233,
+ 248,
+ 89
+ ]
+ }
+ }
+ },
+ {
+ "name": "recipient",
+ "docs": [
+ "Recipient."
+ ],
+ "writable": true,
+ "signer": true,
+ "relations": [
+ "escrow"
+ ]
+ },
+ {
+ "name": "recipientToken",
+ "docs": [
+ "Recipient Token Account."
+ ],
+ "writable": true
+ },
+ {
+ "name": "tokenProgram",
+ "docs": [
+ "Token program."
+ ],
+ "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"
+ },
+ {
+ "name": "eventAuthority",
+ "pda": {
+ "seeds": [
+ {
+ "kind": "const",
+ "value": [
+ 95,
+ 95,
+ 101,
+ 118,
+ 101,
+ 110,
+ 116,
+ 95,
+ 97,
+ 117,
+ 116,
+ 104,
+ 111,
+ 114,
+ 105,
+ 116,
+ 121
+ ]
+ }
+ ]
+ }
+ },
+ {
+ "name": "program"
+ }
+ ],
+ "args": [
+ {
+ "name": "maxAmount",
+ "type": "u64"
+ }
+ ]
+ },
+ {
+ "name": "claimV2",
+ "docs": [
+ "Claim maximum amount from the vesting escrow",
+ "This instruction supports both splToken and token2022",
+ "# Arguments",
+ "",
+ "* ctx - The accounts needed by instruction.",
+ "* max_amount - The maximum amount claimed by the recipient",
+ "* remaining_accounts_info: additional accounts needed by instruction",
+ ""
+ ],
+ "discriminator": [
+ 229,
+ 87,
+ 46,
+ 162,
+ 21,
+ 157,
+ 231,
+ 114
+ ],
+ "accounts": [
+ {
+ "name": "escrow",
+ "docs": [
+ "Escrow."
+ ],
+ "writable": true
+ },
+ {
+ "name": "tokenMint",
+ "docs": [
+ "Mint."
+ ],
+ "relations": [
+ "escrow"
+ ]
+ },
+ {
+ "name": "escrowToken",
+ "docs": [
+ "Escrow Token Account."
+ ],
+ "writable": true,
+ "pda": {
+ "seeds": [
+ {
+ "kind": "account",
+ "path": "escrow"
+ },
+ {
+ "kind": "account",
+ "path": "tokenProgram"
+ },
+ {
+ "kind": "account",
+ "path": "tokenMint"
+ }
+ ],
+ "program": {
+ "kind": "const",
+ "value": [
+ 140,
+ 151,
+ 37,
+ 143,
+ 78,
+ 36,
+ 137,
+ 241,
+ 187,
+ 61,
+ 16,
+ 41,
+ 20,
+ 142,
+ 13,
+ 131,
+ 11,
+ 90,
+ 19,
+ 153,
+ 218,
+ 255,
+ 16,
+ 132,
+ 4,
+ 142,
+ 123,
+ 216,
+ 219,
+ 233,
+ 248,
+ 89
+ ]
+ }
+ }
+ },
+ {
+ "name": "recipient",
+ "docs": [
+ "Recipient."
+ ],
+ "writable": true,
+ "signer": true,
+ "relations": [
+ "escrow"
+ ]
+ },
+ {
+ "name": "recipientToken",
+ "docs": [
+ "Recipient Token Account."
+ ],
+ "writable": true
+ },
+ {
+ "name": "memoProgram",
+ "docs": [
+ "Memo program."
+ ],
+ "address": "MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr"
+ },
+ {
+ "name": "tokenProgram",
+ "docs": [
+ "Token program."
+ ]
+ },
+ {
+ "name": "eventAuthority",
+ "pda": {
+ "seeds": [
+ {
+ "kind": "const",
+ "value": [
+ 95,
+ 95,
+ 101,
+ 118,
+ 101,
+ 110,
+ 116,
+ 95,
+ 97,
+ 117,
+ 116,
+ 104,
+ 111,
+ 114,
+ 105,
+ 116,
+ 121
+ ]
+ }
+ ]
+ }
+ },
+ {
+ "name": "program"
+ }
+ ],
+ "args": [
+ {
+ "name": "maxAmount",
+ "type": "u64"
+ },
+ {
+ "name": "remainingAccountsInfo",
+ "type": {
+ "option": {
+ "defined": {
+ "name": "remainingAccountsInfo"
+ }
+ }
+ }
+ }
+ ]
+ },
+ {
+ "name": "closeVestingEscrow",
+ "docs": [
+ "Close vesting escrow",
+ "- Close vesting escrow and escrow ATA and escrow metadata if recipient already claimed all tokens",
+ "- Rent receiver must be escrow's creator",
+ "This instruction supports both splToken and token2022",
+ "# Arguments",
+ "",
+ "* ctx - The accounts needed by instruction.",
+ "* remaining_accounts_info: additional accounts needed by instruction",
+ ""
+ ],
+ "discriminator": [
+ 221,
+ 185,
+ 95,
+ 135,
+ 136,
+ 67,
+ 252,
+ 87
+ ],
+ "accounts": [
+ {
+ "name": "escrow",
+ "docs": [
+ "Escrow."
+ ],
+ "writable": true
+ },
+ {
+ "name": "escrowMetadata",
+ "writable": true,
+ "pda": {
+ "seeds": [
+ {
+ "kind": "const",
+ "value": [
+ 101,
+ 115,
+ 99,
+ 114,
+ 111,
+ 119,
+ 95,
+ 109,
+ 101,
+ 116,
+ 97,
+ 100,
+ 97,
+ 116,
+ 97
+ ]
+ },
+ {
+ "kind": "account",
+ "path": "escrow"
+ }
+ ]
+ }
+ },
+ {
+ "name": "tokenMint",
+ "docs": [
+ "Mint."
+ ],
+ "writable": true
+ },
+ {
+ "name": "escrowToken",
+ "writable": true
+ },
+ {
+ "name": "creatorToken",
+ "writable": true
+ },
+ {
+ "name": "creator",
+ "docs": [
+ "Creator."
+ ],
+ "writable": true,
+ "signer": true,
+ "relations": [
+ "escrow"
+ ]
+ },
+ {
+ "name": "tokenProgram",
+ "docs": [
+ "Token program."
+ ]
+ },
+ {
+ "name": "memoProgram",
+ "docs": [
+ "Memo program."
+ ],
+ "address": "MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr"
+ },
+ {
+ "name": "eventAuthority",
+ "pda": {
+ "seeds": [
+ {
+ "kind": "const",
+ "value": [
+ 95,
+ 95,
+ 101,
+ 118,
+ 101,
+ 110,
+ 116,
+ 95,
+ 97,
+ 117,
+ 116,
+ 104,
+ 111,
+ 114,
+ 105,
+ 116,
+ 121
+ ]
+ }
+ ]
+ }
+ },
+ {
+ "name": "program"
+ }
+ ],
+ "args": [
+ {
+ "name": "remainingAccountsInfo",
+ "type": {
+ "option": {
+ "defined": {
+ "name": "remainingAccountsInfo"
+ }
+ }
+ }
+ }
+ ]
+ },
+ {
+ "name": "createRootEscrow",
+ "docs": [
+ "Create root escrow"
+ ],
+ "discriminator": [
+ 116,
+ 212,
+ 12,
+ 188,
+ 77,
+ 226,
+ 32,
+ 201
+ ],
+ "accounts": [
+ {
+ "name": "base",
+ "signer": true
+ },
+ {
+ "name": "rootEscrow",
+ "docs": [
+ "Root Escrow."
+ ],
+ "writable": true,
+ "pda": {
+ "seeds": [
+ {
+ "kind": "const",
+ "value": [
+ 114,
+ 111,
+ 111,
+ 116,
+ 95,
+ 101,
+ 115,
+ 99,
+ 114,
+ 111,
+ 119
+ ]
+ },
+ {
+ "kind": "account",
+ "path": "base"
+ },
+ {
+ "kind": "account",
+ "path": "tokenMint"
+ },
+ {
+ "kind": "arg",
+ "path": "params.version"
+ }
+ ]
+ }
+ },
+ {
+ "name": "tokenMint"
+ },
+ {
+ "name": "payer",
+ "docs": [
+ "payer."
+ ],
+ "writable": true,
+ "signer": true
+ },
+ {
+ "name": "creator"
+ },
+ {
+ "name": "systemProgram",
+ "docs": [
+ "system program."
+ ],
+ "address": "11111111111111111111111111111111"
+ },
+ {
+ "name": "eventAuthority",
+ "pda": {
+ "seeds": [
+ {
+ "kind": "const",
+ "value": [
+ 95,
+ 95,
+ 101,
+ 118,
+ 101,
+ 110,
+ 116,
+ 95,
+ 97,
+ 117,
+ 116,
+ 104,
+ 111,
+ 114,
+ 105,
+ 116,
+ 121
+ ]
+ }
+ ]
+ }
+ },
+ {
+ "name": "program"
+ }
+ ],
+ "args": [
+ {
+ "name": "params",
+ "type": {
+ "defined": {
+ "name": "createRootEscrowParameters"
+ }
+ }
+ }
+ ]
+ },
+ {
+ "name": "createVestingEscrow",
+ "docs": [
+ "Create a vesting escrow for the given params",
+ "# Arguments",
+ "",
+ "* ctx - The accounts needed by instruction.",
+ "* params - The params needed by instruction.",
+ "* vesting_start_time - The creation time of this escrow",
+ "* cliff_time - Trade cliff time of the escrow",
+ "* frequency - How frequent the claimable amount will be updated",
+ "* cliff_unlock_amount - The amount unlocked after cliff time",
+ "* amount_per_period - The amount unlocked per vesting period",
+ "* number_of_period - The total number of vesting period",
+ "* update_recipient_mode - Decide who can update the recipient of the escrow",
+ "* cancel_mode - Decide who can cancel the the escrow",
+ ""
+ ],
+ "discriminator": [
+ 23,
+ 100,
+ 197,
+ 94,
+ 222,
+ 153,
+ 38,
+ 90
+ ],
+ "accounts": [
+ {
+ "name": "base",
+ "docs": [
+ "Base."
+ ],
+ "writable": true,
+ "signer": true
+ },
+ {
+ "name": "escrow",
+ "docs": [
+ "Escrow."
+ ],
+ "writable": true,
+ "pda": {
+ "seeds": [
+ {
+ "kind": "const",
+ "value": [
+ 101,
+ 115,
+ 99,
+ 114,
+ 111,
+ 119
+ ]
+ },
+ {
+ "kind": "account",
+ "path": "base"
+ }
+ ]
+ }
+ },
+ {
+ "name": "escrowToken",
+ "docs": [
+ "Escrow Token Account."
+ ],
+ "writable": true,
+ "pda": {
+ "seeds": [
+ {
+ "kind": "account",
+ "path": "escrow"
+ },
+ {
+ "kind": "const",
+ "value": [
+ 6,
+ 221,
+ 246,
+ 225,
+ 215,
+ 101,
+ 161,
+ 147,
+ 217,
+ 203,
+ 225,
+ 70,
+ 206,
+ 235,
+ 121,
+ 172,
+ 28,
+ 180,
+ 133,
+ 237,
+ 95,
+ 91,
+ 55,
+ 145,
+ 58,
+ 140,
+ 245,
+ 133,
+ 126,
+ 255,
+ 0,
+ 169
+ ]
+ },
+ {
+ "kind": "account",
+ "path": "sender_token.mint",
+ "account": "tokenAccount"
+ }
+ ],
+ "program": {
+ "kind": "const",
+ "value": [
+ 140,
+ 151,
+ 37,
+ 143,
+ 78,
+ 36,
+ 137,
+ 241,
+ 187,
+ 61,
+ 16,
+ 41,
+ 20,
+ 142,
+ 13,
+ 131,
+ 11,
+ 90,
+ 19,
+ 153,
+ 218,
+ 255,
+ 16,
+ 132,
+ 4,
+ 142,
+ 123,
+ 216,
+ 219,
+ 233,
+ 248,
+ 89
+ ]
+ }
+ }
+ },
+ {
+ "name": "sender",
+ "docs": [
+ "Sender."
+ ],
+ "writable": true,
+ "signer": true
+ },
+ {
+ "name": "senderToken",
+ "docs": [
+ "Sender Token Account."
+ ],
+ "writable": true
+ },
+ {
+ "name": "recipient"
+ },
+ {
+ "name": "tokenProgram",
+ "docs": [
+ "Token program."
+ ],
+ "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"
+ },
+ {
+ "name": "systemProgram",
+ "docs": [
+ "system program."
+ ],
+ "address": "11111111111111111111111111111111"
+ },
+ {
+ "name": "eventAuthority",
+ "pda": {
+ "seeds": [
+ {
+ "kind": "const",
+ "value": [
+ 95,
+ 95,
+ 101,
+ 118,
+ 101,
+ 110,
+ 116,
+ 95,
+ 97,
+ 117,
+ 116,
+ 104,
+ 111,
+ 114,
+ 105,
+ 116,
+ 121
+ ]
+ }
+ ]
+ }
+ },
+ {
+ "name": "program"
+ }
+ ],
+ "args": [
+ {
+ "name": "params",
+ "type": {
+ "defined": {
+ "name": "createVestingEscrowParameters"
+ }
+ }
+ }
+ ]
+ },
+ {
+ "name": "createVestingEscrowFromRoot",
+ "docs": [
+ "Crate vesting escrow from root"
+ ],
+ "discriminator": [
+ 6,
+ 238,
+ 161,
+ 108,
+ 252,
+ 114,
+ 246,
+ 91
+ ],
+ "accounts": [
+ {
+ "name": "rootEscrow",
+ "docs": [
+ "Root Escrow."
+ ],
+ "writable": true
+ },
+ {
+ "name": "base",
+ "pda": {
+ "seeds": [
+ {
+ "kind": "const",
+ "value": [
+ 98,
+ 97,
+ 115,
+ 101
+ ]
+ },
+ {
+ "kind": "account",
+ "path": "rootEscrow"
+ },
+ {
+ "kind": "account",
+ "path": "recipient"
+ }
+ ]
+ }
+ },
+ {
+ "name": "escrow",
+ "docs": [
+ "Escrow."
+ ],
+ "writable": true,
+ "pda": {
+ "seeds": [
+ {
+ "kind": "const",
+ "value": [
+ 101,
+ 115,
+ 99,
+ 114,
+ 111,
+ 119
+ ]
+ },
+ {
+ "kind": "account",
+ "path": "base"
+ }
+ ]
+ }
+ },
+ {
+ "name": "escrowToken",
+ "docs": [
+ "Escrow Token Account."
+ ],
+ "writable": true,
+ "pda": {
+ "seeds": [
+ {
+ "kind": "account",
+ "path": "escrow"
+ },
+ {
+ "kind": "account",
+ "path": "tokenProgram"
+ },
+ {
+ "kind": "account",
+ "path": "tokenMint"
+ }
+ ],
+ "program": {
+ "kind": "const",
+ "value": [
+ 140,
+ 151,
+ 37,
+ 143,
+ 78,
+ 36,
+ 137,
+ 241,
+ 187,
+ 61,
+ 16,
+ 41,
+ 20,
+ 142,
+ 13,
+ 131,
+ 11,
+ 90,
+ 19,
+ 153,
+ 218,
+ 255,
+ 16,
+ 132,
+ 4,
+ 142,
+ 123,
+ 216,
+ 219,
+ 233,
+ 248,
+ 89
+ ]
+ }
+ }
+ },
+ {
+ "name": "rootEscrowToken",
+ "writable": true,
+ "pda": {
+ "seeds": [
+ {
+ "kind": "account",
+ "path": "rootEscrow"
+ },
+ {
+ "kind": "account",
+ "path": "tokenProgram"
+ },
+ {
+ "kind": "account",
+ "path": "tokenMint"
+ }
+ ],
+ "program": {
+ "kind": "const",
+ "value": [
+ 140,
+ 151,
+ 37,
+ 143,
+ 78,
+ 36,
+ 137,
+ 241,
+ 187,
+ 61,
+ 16,
+ 41,
+ 20,
+ 142,
+ 13,
+ 131,
+ 11,
+ 90,
+ 19,
+ 153,
+ 218,
+ 255,
+ 16,
+ 132,
+ 4,
+ 142,
+ 123,
+ 216,
+ 219,
+ 233,
+ 248,
+ 89
+ ]
+ }
+ }
+ },
+ {
+ "name": "tokenMint",
+ "docs": [
+ "Mint."
+ ],
+ "relations": [
+ "rootEscrow"
+ ]
+ },
+ {
+ "name": "payer",
+ "docs": [
+ "Rent Payer"
+ ],
+ "writable": true,
+ "signer": true
+ },
+ {
+ "name": "recipient"
+ },
+ {
+ "name": "systemProgram",
+ "docs": [
+ "system program."
+ ],
+ "address": "11111111111111111111111111111111"
+ },
+ {
+ "name": "tokenProgram",
+ "docs": [
+ "Token program."
+ ]
+ },
+ {
+ "name": "associatedTokenProgram",
+ "address": "ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"
+ },
+ {
+ "name": "eventAuthority",
+ "pda": {
+ "seeds": [
+ {
+ "kind": "const",
+ "value": [
+ 95,
+ 95,
+ 101,
+ 118,
+ 101,
+ 110,
+ 116,
+ 95,
+ 97,
+ 117,
+ 116,
+ 104,
+ 111,
+ 114,
+ 105,
+ 116,
+ 121
+ ]
+ }
+ ]
+ }
+ },
+ {
+ "name": "program"
+ }
+ ],
+ "args": [
+ {
+ "name": "params",
+ "type": {
+ "defined": {
+ "name": "createVestingEscrowFromRootParams"
+ }
+ }
+ },
+ {
+ "name": "proof",
+ "type": {
+ "vec": {
+ "array": [
+ "u8",
+ 32
+ ]
+ }
+ }
+ },
+ {
+ "name": "remainingAccountsInfo",
+ "type": {
+ "option": {
+ "defined": {
+ "name": "remainingAccountsInfo"
+ }
+ }
+ }
+ }
+ ]
+ },
+ {
+ "name": "createVestingEscrowMetadata",
+ "docs": [
+ "Create vesting escrow metadata",
+ "# Arguments",
+ "",
+ "* ctx - The accounts needed by instruction.",
+ "* params - The params needed by instruction.",
+ "* name - The name of the vesting escrow",
+ "* description - The description of the vesting escrow",
+ "* creator_email - The email of the creator",
+ "* recipient_email - The email of the recipient",
+ ""
+ ],
+ "discriminator": [
+ 93,
+ 78,
+ 33,
+ 103,
+ 173,
+ 125,
+ 70,
+ 0
+ ],
+ "accounts": [
+ {
+ "name": "escrow",
+ "docs": [
+ "The [Escrow]."
+ ],
+ "writable": true
+ },
+ {
+ "name": "creator",
+ "docs": [
+ "Creator of the escrow."
+ ],
+ "signer": true,
+ "relations": [
+ "escrow"
+ ]
+ },
+ {
+ "name": "escrowMetadata",
+ "docs": [
+ "The [ProposalMeta]."
+ ],
+ "writable": true,
+ "pda": {
+ "seeds": [
+ {
+ "kind": "const",
+ "value": [
+ 101,
+ 115,
+ 99,
+ 114,
+ 111,
+ 119,
+ 95,
+ 109,
+ 101,
+ 116,
+ 97,
+ 100,
+ 97,
+ 116,
+ 97
+ ]
+ },
+ {
+ "kind": "account",
+ "path": "escrow"
+ }
+ ]
+ }
+ },
+ {
+ "name": "payer",
+ "docs": [
+ "Payer of the [ProposalMeta]."
+ ],
+ "writable": true,
+ "signer": true
+ },
+ {
+ "name": "systemProgram",
+ "docs": [
+ "system program."
+ ],
+ "address": "11111111111111111111111111111111"
+ }
+ ],
+ "args": [
+ {
+ "name": "params",
+ "type": {
+ "defined": {
+ "name": "createVestingEscrowMetadataParameters"
+ }
+ }
+ }
+ ]
+ },
+ {
+ "name": "createVestingEscrowV2",
+ "docs": [
+ "Create a vesting escrow for the given params",
+ "This instruction supports both splToken and token2022",
+ "# Arguments",
+ "",
+ "* ctx - The accounts needed by instruction.",
+ "* params - The params needed by instruction.",
+ "* vesting_start_time - The creation time of this escrow",
+ "* cliff_time - Trade cliff time of the escrow",
+ "* frequency - How frequent the claimable amount will be updated",
+ "* cliff_unlock_amount - The amount unlocked after cliff time",
+ "* amount_per_period - The amount unlocked per vesting period",
+ "* number_of_period - The total number of vesting period",
+ "* update_recipient_mode - Decide who can update the recipient of the escrow",
+ "* cancel_mode - Decide who can cancel the the escrow",
+ "* remaining_accounts_info: additional accounts needed by instruction",
+ ""
+ ],
+ "discriminator": [
+ 181,
+ 155,
+ 104,
+ 183,
+ 182,
+ 128,
+ 35,
+ 47
+ ],
+ "accounts": [
+ {
+ "name": "base",
+ "docs": [
+ "Base."
+ ],
+ "writable": true,
+ "signer": true
+ },
+ {
+ "name": "escrow",
+ "docs": [
+ "Escrow."
+ ],
+ "writable": true,
+ "pda": {
+ "seeds": [
+ {
+ "kind": "const",
+ "value": [
+ 101,
+ 115,
+ 99,
+ 114,
+ 111,
+ 119
+ ]
+ },
+ {
+ "kind": "account",
+ "path": "base"
+ }
+ ]
+ }
+ },
+ {
+ "name": "tokenMint"
+ },
+ {
+ "name": "escrowToken",
+ "docs": [
+ "Escrow Token Account."
+ ],
+ "writable": true,
+ "pda": {
+ "seeds": [
+ {
+ "kind": "account",
+ "path": "escrow"
+ },
+ {
+ "kind": "account",
+ "path": "tokenProgram"
+ },
+ {
+ "kind": "account",
+ "path": "tokenMint"
+ }
+ ],
+ "program": {
+ "kind": "const",
+ "value": [
+ 140,
+ 151,
+ 37,
+ 143,
+ 78,
+ 36,
+ 137,
+ 241,
+ 187,
+ 61,
+ 16,
+ 41,
+ 20,
+ 142,
+ 13,
+ 131,
+ 11,
+ 90,
+ 19,
+ 153,
+ 218,
+ 255,
+ 16,
+ 132,
+ 4,
+ 142,
+ 123,
+ 216,
+ 219,
+ 233,
+ 248,
+ 89
+ ]
+ }
+ }
+ },
+ {
+ "name": "sender",
+ "docs": [
+ "Sender."
+ ],
+ "writable": true,
+ "signer": true
+ },
+ {
+ "name": "senderToken",
+ "docs": [
+ "Sender Token Account."
+ ],
+ "writable": true
+ },
+ {
+ "name": "recipient"
+ },
+ {
+ "name": "tokenProgram",
+ "docs": [
+ "Token program."
+ ]
+ },
+ {
+ "name": "systemProgram",
+ "docs": [
+ "system program."
+ ],
+ "address": "11111111111111111111111111111111"
+ },
+ {
+ "name": "eventAuthority",
+ "pda": {
+ "seeds": [
+ {
+ "kind": "const",
+ "value": [
+ 95,
+ 95,
+ 101,
+ 118,
+ 101,
+ 110,
+ 116,
+ 95,
+ 97,
+ 117,
+ 116,
+ 104,
+ 111,
+ 114,
+ 105,
+ 116,
+ 121
+ ]
+ }
+ ]
+ }
+ },
+ {
+ "name": "program"
+ }
+ ],
+ "args": [
+ {
+ "name": "params",
+ "type": {
+ "defined": {
+ "name": "createVestingEscrowParameters"
+ }
+ }
+ },
+ {
+ "name": "remainingAccountsInfo",
+ "type": {
+ "option": {
+ "defined": {
+ "name": "remainingAccountsInfo"
+ }
+ }
+ }
+ }
+ ]
+ },
+ {
+ "name": "fundRootEscrow",
+ "docs": [
+ "Fund root escrow"
+ ],
+ "discriminator": [
+ 251,
+ 106,
+ 189,
+ 200,
+ 108,
+ 15,
+ 144,
+ 95
+ ],
+ "accounts": [
+ {
+ "name": "rootEscrow",
+ "docs": [
+ "Root Escrow."
+ ],
+ "writable": true
+ },
+ {
+ "name": "tokenMint",
+ "relations": [
+ "rootEscrow"
+ ]
+ },
+ {
+ "name": "rootEscrowToken",
+ "docs": [
+ "Escrow Token Account."
+ ],
+ "writable": true,
+ "pda": {
+ "seeds": [
+ {
+ "kind": "account",
+ "path": "rootEscrow"
+ },
+ {
+ "kind": "account",
+ "path": "tokenProgram"
+ },
+ {
+ "kind": "account",
+ "path": "tokenMint"
+ }
+ ],
+ "program": {
+ "kind": "const",
+ "value": [
+ 140,
+ 151,
+ 37,
+ 143,
+ 78,
+ 36,
+ 137,
+ 241,
+ 187,
+ 61,
+ 16,
+ 41,
+ 20,
+ 142,
+ 13,
+ 131,
+ 11,
+ 90,
+ 19,
+ 153,
+ 218,
+ 255,
+ 16,
+ 132,
+ 4,
+ 142,
+ 123,
+ 216,
+ 219,
+ 233,
+ 248,
+ 89
+ ]
+ }
+ }
+ },
+ {
+ "name": "payer",
+ "docs": [
+ "Payer."
+ ],
+ "writable": true,
+ "signer": true
+ },
+ {
+ "name": "payerToken",
+ "docs": [
+ "Payer Token Account."
+ ],
+ "writable": true
+ },
+ {
+ "name": "tokenProgram",
+ "docs": [
+ "Token program."
+ ]
+ },
+ {
+ "name": "systemProgram",
+ "docs": [
+ "system program."
+ ],
+ "address": "11111111111111111111111111111111"
+ },
+ {
+ "name": "associatedTokenProgram",
+ "address": "ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"
+ },
+ {
+ "name": "eventAuthority",
+ "pda": {
+ "seeds": [
+ {
+ "kind": "const",
+ "value": [
+ 95,
+ 95,
+ 101,
+ 118,
+ 101,
+ 110,
+ 116,
+ 95,
+ 97,
+ 117,
+ 116,
+ 104,
+ 111,
+ 114,
+ 105,
+ 116,
+ 121
+ ]
+ }
+ ]
+ }
+ },
+ {
+ "name": "program"
+ }
+ ],
+ "args": [
+ {
+ "name": "maxAmount",
+ "type": "u64"
+ },
+ {
+ "name": "remainingAccountsInfo",
+ "type": {
+ "option": {
+ "defined": {
+ "name": "remainingAccountsInfo"
+ }
+ }
+ }
+ }
+ ]
+ },
+ {
+ "name": "updateVestingEscrowRecipient",
+ "docs": [
+ "Update vesting escrow metadata",
+ "# Arguments",
+ "",
+ "* ctx - The accounts needed by instruction.",
+ "* new_recipient - The address of the new recipient",
+ "* new_recipient_email - The email of the new recipient",
+ ""
+ ],
+ "discriminator": [
+ 26,
+ 242,
+ 127,
+ 255,
+ 237,
+ 109,
+ 47,
+ 206
+ ],
+ "accounts": [
+ {
+ "name": "escrow",
+ "docs": [
+ "Escrow."
+ ],
+ "writable": true
+ },
+ {
+ "name": "escrowMetadata",
+ "docs": [
+ "Escrow metadata."
+ ],
+ "writable": true,
+ "optional": true
+ },
+ {
+ "name": "signer",
+ "docs": [
+ "Signer."
+ ],
+ "writable": true,
+ "signer": true
+ },
+ {
+ "name": "systemProgram",
+ "docs": [
+ "system program."
+ ],
+ "address": "11111111111111111111111111111111"
+ },
+ {
+ "name": "eventAuthority",
+ "pda": {
+ "seeds": [
+ {
+ "kind": "const",
+ "value": [
+ 95,
+ 95,
+ 101,
+ 118,
+ 101,
+ 110,
+ 116,
+ 95,
+ 97,
+ 117,
+ 116,
+ 104,
+ 111,
+ 114,
+ 105,
+ 116,
+ 121
+ ]
+ }
+ ]
+ }
+ },
+ {
+ "name": "program"
+ }
+ ],
+ "args": [
+ {
+ "name": "newRecipient",
+ "type": "pubkey"
+ },
+ {
+ "name": "newRecipientEmail",
+ "type": {
+ "option": "string"
+ }
+ }
+ ]
+ }
+ ],
+ "accounts": [
+ {
+ "name": "rootEscrow",
+ "discriminator": [
+ 253,
+ 209,
+ 220,
+ 107,
+ 206,
+ 191,
+ 71,
+ 158
+ ]
+ },
+ {
+ "name": "vestingEscrow",
+ "discriminator": [
+ 244,
+ 119,
+ 183,
+ 4,
+ 73,
+ 116,
+ 135,
+ 195
+ ]
+ },
+ {
+ "name": "vestingEscrowMetadata",
+ "discriminator": [
+ 24,
+ 204,
+ 166,
+ 104,
+ 87,
+ 158,
+ 76,
+ 13
+ ]
+ }
+ ],
+ "events": [
+ {
+ "name": "eventCancelVestingEscrow",
+ "discriminator": [
+ 113,
+ 2,
+ 117,
+ 173,
+ 195,
+ 39,
+ 101,
+ 155
+ ]
+ },
+ {
+ "name": "eventCancelVestingEscrowV3",
+ "discriminator": [
+ 41,
+ 143,
+ 236,
+ 79,
+ 116,
+ 120,
+ 91,
+ 143
+ ]
+ },
+ {
+ "name": "eventClaim",
+ "discriminator": [
+ 171,
+ 144,
+ 1,
+ 189,
+ 120,
+ 200,
+ 38,
+ 11
+ ]
+ },
+ {
+ "name": "eventClaimV3",
+ "discriminator": [
+ 229,
+ 197,
+ 142,
+ 10,
+ 41,
+ 122,
+ 171,
+ 154
+ ]
+ },
+ {
+ "name": "eventCloseClaimStatus",
+ "discriminator": [
+ 87,
+ 68,
+ 38,
+ 194,
+ 241,
+ 155,
+ 125,
+ 107
+ ]
+ },
+ {
+ "name": "eventCloseVestingEscrow",
+ "discriminator": [
+ 45,
+ 141,
+ 253,
+ 209,
+ 196,
+ 133,
+ 21,
+ 204
+ ]
+ },
+ {
+ "name": "eventCreateRootEscrow",
+ "discriminator": [
+ 105,
+ 216,
+ 97,
+ 182,
+ 27,
+ 224,
+ 199,
+ 228
+ ]
+ },
+ {
+ "name": "eventCreateVestingEscrow",
+ "discriminator": [
+ 248,
+ 222,
+ 89,
+ 61,
+ 170,
+ 208,
+ 131,
+ 117
+ ]
+ },
+ {
+ "name": "eventFundRootEscrow",
+ "discriminator": [
+ 74,
+ 8,
+ 68,
+ 181,
+ 198,
+ 235,
+ 138,
+ 81
+ ]
+ },
+ {
+ "name": "eventUpdateVestingEscrowRecipient",
+ "discriminator": [
+ 206,
+ 218,
+ 33,
+ 65,
+ 133,
+ 237,
+ 131,
+ 57
+ ]
+ }
+ ],
+ "errors": [
+ {
+ "code": 6000,
+ "name": "mathOverflow",
+ "msg": "Math operation overflow"
+ },
+ {
+ "code": 6001,
+ "name": "frequencyIsZero",
+ "msg": "Frequency is zero"
+ },
+ {
+ "code": 6002,
+ "name": "invalidEscrowTokenAddress",
+ "msg": "Invalid escrow token address"
+ },
+ {
+ "code": 6003,
+ "name": "invalidUpdateRecipientMode",
+ "msg": "Invalid update recipient mode"
+ },
+ {
+ "code": 6004,
+ "name": "invalidCancelMode",
+ "msg": "Invalid cancel mode"
+ },
+ {
+ "code": 6005,
+ "name": "notPermitToDoThisAction",
+ "msg": "Not permit to do this action"
+ },
+ {
+ "code": 6006,
+ "name": "invalidRecipientTokenAccount",
+ "msg": "Invalid recipient token account"
+ },
+ {
+ "code": 6007,
+ "name": "invalidCreatorTokenAccount",
+ "msg": "Invalid creator token account"
+ },
+ {
+ "code": 6008,
+ "name": "invalidEscrowMetadata",
+ "msg": "Invalid escrow metadata"
+ },
+ {
+ "code": 6009,
+ "name": "invalidVestingStartTime",
+ "msg": "Invalid vesting start time"
+ },
+ {
+ "code": 6010,
+ "name": "alreadyCancelled",
+ "msg": "Already cancelled"
+ },
+ {
+ "code": 6011,
+ "name": "cancelledAtIsZero",
+ "msg": "Cancelled timestamp is zero"
+ },
+ {
+ "code": 6012,
+ "name": "incorrectTokenProgramId",
+ "msg": "Invalid token program ID"
+ },
+ {
+ "code": 6013,
+ "name": "transferFeeCalculationFailure",
+ "msg": "Calculate transfer fee failure"
+ },
+ {
+ "code": 6014,
+ "name": "unsupportedMint",
+ "msg": "Unsupported mint"
+ },
+ {
+ "code": 6015,
+ "name": "invalidRemainingAccountSlice",
+ "msg": "Invalid remaining accounts"
+ },
+ {
+ "code": 6016,
+ "name": "insufficientRemainingAccounts",
+ "msg": "Insufficient remaining accounts"
+ },
+ {
+ "code": 6017,
+ "name": "duplicatedRemainingAccountTypes",
+ "msg": "Same accounts type is provided more than once"
+ },
+ {
+ "code": 6018,
+ "name": "noTransferHookProgram",
+ "msg": "Missing remaining accounts for transfer hook."
+ },
+ {
+ "code": 6019,
+ "name": "claimingIsNotFinished",
+ "msg": "Claiming is not finished"
+ },
+ {
+ "code": 6020,
+ "name": "invalidMerkleProof",
+ "msg": "Invalid merkle proof"
+ },
+ {
+ "code": 6021,
+ "name": "escrowNotCancelled",
+ "msg": "Escrow is not cancelled"
+ },
+ {
+ "code": 6022,
+ "name": "amountIsZero",
+ "msg": "Amount is zero"
+ },
+ {
+ "code": 6023,
+ "name": "invalidParams",
+ "msg": "Invalid params"
+ }
+ ],
+ "types": [
+ {
+ "name": "accountsType",
+ "type": {
+ "kind": "enum",
+ "variants": [
+ {
+ "name": "transferHookEscrow"
+ }
+ ]
+ }
+ },
+ {
+ "name": "createRootEscrowParameters",
+ "type": {
+ "kind": "struct",
+ "fields": [
+ {
+ "name": "maxClaimAmount",
+ "type": "u64"
+ },
+ {
+ "name": "maxEscrow",
+ "type": "u64"
+ },
+ {
+ "name": "version",
+ "type": "u64"
+ },
+ {
+ "name": "root",
+ "type": {
+ "array": [
+ "u8",
+ 32
+ ]
+ }
+ }
+ ]
+ }
+ },
+ {
+ "name": "createVestingEscrowFromRootParams",
+ "type": {
+ "kind": "struct",
+ "fields": [
+ {
+ "name": "vestingStartTime",
+ "type": "u64"
+ },
+ {
+ "name": "cliffTime",
+ "type": "u64"
+ },
+ {
+ "name": "frequency",
+ "type": "u64"
+ },
+ {
+ "name": "cliffUnlockAmount",
+ "type": "u64"
+ },
+ {
+ "name": "amountPerPeriod",
+ "type": "u64"
+ },
+ {
+ "name": "numberOfPeriod",
+ "type": "u64"
+ },
+ {
+ "name": "updateRecipientMode",
+ "type": "u8"
+ },
+ {
+ "name": "cancelMode",
+ "type": "u8"
+ }
+ ]
+ }
+ },
+ {
+ "name": "createVestingEscrowMetadataParameters",
+ "type": {
+ "kind": "struct",
+ "fields": [
+ {
+ "name": "name",
+ "type": "string"
+ },
+ {
+ "name": "description",
+ "type": "string"
+ },
+ {
+ "name": "creatorEmail",
+ "type": "string"
+ },
+ {
+ "name": "recipientEmail",
+ "type": "string"
+ }
+ ]
+ }
+ },
+ {
+ "name": "createVestingEscrowParameters",
+ "docs": [
+ "Accounts for [locker::create_vesting_escrow]."
+ ],
+ "type": {
+ "kind": "struct",
+ "fields": [
+ {
+ "name": "vestingStartTime",
+ "type": "u64"
+ },
+ {
+ "name": "cliffTime",
+ "type": "u64"
+ },
+ {
+ "name": "frequency",
+ "type": "u64"
+ },
+ {
+ "name": "cliffUnlockAmount",
+ "type": "u64"
+ },
+ {
+ "name": "amountPerPeriod",
+ "type": "u64"
+ },
+ {
+ "name": "numberOfPeriod",
+ "type": "u64"
+ },
+ {
+ "name": "updateRecipientMode",
+ "type": "u8"
+ },
+ {
+ "name": "cancelMode",
+ "type": "u8"
+ }
+ ]
+ }
+ },
+ {
+ "name": "eventCancelVestingEscrow",
+ "type": {
+ "kind": "struct",
+ "fields": [
+ {
+ "name": "escrow",
+ "type": "pubkey"
+ },
+ {
+ "name": "signer",
+ "type": "pubkey"
+ },
+ {
+ "name": "claimableAmount",
+ "type": "u64"
+ },
+ {
+ "name": "remainingAmount",
+ "type": "u64"
+ },
+ {
+ "name": "cancelledAt",
+ "type": "u64"
+ }
+ ]
+ }
+ },
+ {
+ "name": "eventCancelVestingEscrowV3",
+ "type": {
+ "kind": "struct",
+ "fields": [
+ {
+ "name": "escrow",
+ "type": "pubkey"
+ },
+ {
+ "name": "signer",
+ "type": "pubkey"
+ },
+ {
+ "name": "remainingAmount",
+ "type": "u64"
+ },
+ {
+ "name": "cancelledAt",
+ "type": "u64"
+ }
+ ]
+ }
+ },
+ {
+ "name": "eventClaim",
+ "type": {
+ "kind": "struct",
+ "fields": [
+ {
+ "name": "amount",
+ "type": "u64"
+ },
+ {
+ "name": "currentTs",
+ "type": "u64"
+ },
+ {
+ "name": "escrow",
+ "type": "pubkey"
+ }
+ ]
+ }
+ },
+ {
+ "name": "eventClaimV3",
+ "type": {
+ "kind": "struct",
+ "fields": [
+ {
+ "name": "amount",
+ "type": "u64"
+ },
+ {
+ "name": "currentTs",
+ "type": "u64"
+ },
+ {
+ "name": "escrow",
+ "type": "pubkey"
+ },
+ {
+ "name": "vestingStartTime",
+ "type": "u64"
+ },
+ {
+ "name": "cliffTime",
+ "type": "u64"
+ },
+ {
+ "name": "frequency",
+ "type": "u64"
+ },
+ {
+ "name": "cliffUnlockAmount",
+ "type": "u64"
+ },
+ {
+ "name": "amountPerPeriod",
+ "type": "u64"
+ },
+ {
+ "name": "numberOfPeriod",
+ "type": "u64"
+ },
+ {
+ "name": "recipient",
+ "type": "pubkey"
+ }
+ ]
+ }
+ },
+ {
+ "name": "eventCloseClaimStatus",
+ "type": {
+ "kind": "struct",
+ "fields": [
+ {
+ "name": "escrow",
+ "type": "pubkey"
+ },
+ {
+ "name": "recipient",
+ "type": "pubkey"
+ },
+ {
+ "name": "rentReceiver",
+ "type": "pubkey"
+ }
+ ]
+ }
+ },
+ {
+ "name": "eventCloseVestingEscrow",
+ "type": {
+ "kind": "struct",
+ "fields": [
+ {
+ "name": "escrow",
+ "type": "pubkey"
+ }
+ ]
+ }
+ },
+ {
+ "name": "eventCreateRootEscrow",
+ "type": {
+ "kind": "struct",
+ "fields": [
+ {
+ "name": "rootEscrow",
+ "type": "pubkey"
+ },
+ {
+ "name": "maxClaimAmount",
+ "type": "u64"
+ },
+ {
+ "name": "maxEscrow",
+ "type": "u64"
+ },
+ {
+ "name": "version",
+ "type": "u64"
+ },
+ {
+ "name": "root",
+ "type": {
+ "array": [
+ "u8",
+ 32
+ ]
+ }
+ }
+ ]
+ }
+ },
+ {
+ "name": "eventCreateVestingEscrow",
+ "type": {
+ "kind": "struct",
+ "fields": [
+ {
+ "name": "vestingStartTime",
+ "type": "u64"
+ },
+ {
+ "name": "cliffTime",
+ "type": "u64"
+ },
+ {
+ "name": "frequency",
+ "type": "u64"
+ },
+ {
+ "name": "cliffUnlockAmount",
+ "type": "u64"
+ },
+ {
+ "name": "amountPerPeriod",
+ "type": "u64"
+ },
+ {
+ "name": "numberOfPeriod",
+ "type": "u64"
+ },
+ {
+ "name": "updateRecipientMode",
+ "type": "u8"
+ },
+ {
+ "name": "cancelMode",
+ "type": "u8"
+ },
+ {
+ "name": "recipient",
+ "type": "pubkey"
+ },
+ {
+ "name": "escrow",
+ "type": "pubkey"
+ }
+ ]
+ }
+ },
+ {
+ "name": "eventFundRootEscrow",
+ "type": {
+ "kind": "struct",
+ "fields": [
+ {
+ "name": "rootEscrow",
+ "type": "pubkey"
+ },
+ {
+ "name": "fundedAmount",
+ "type": "u64"
+ }
+ ]
+ }
+ },
+ {
+ "name": "eventUpdateVestingEscrowRecipient",
+ "type": {
+ "kind": "struct",
+ "fields": [
+ {
+ "name": "escrow",
+ "type": "pubkey"
+ },
+ {
+ "name": "oldRecipient",
+ "type": "pubkey"
+ },
+ {
+ "name": "newRecipient",
+ "type": "pubkey"
+ },
+ {
+ "name": "signer",
+ "type": "pubkey"
+ }
+ ]
+ }
+ },
+ {
+ "name": "remainingAccountsInfo",
+ "type": {
+ "kind": "struct",
+ "fields": [
+ {
+ "name": "slices",
+ "type": {
+ "vec": {
+ "defined": {
+ "name": "remainingAccountsSlice"
+ }
+ }
+ }
+ }
+ ]
+ }
+ },
+ {
+ "name": "remainingAccountsSlice",
+ "type": {
+ "kind": "struct",
+ "fields": [
+ {
+ "name": "accountsType",
+ "type": {
+ "defined": {
+ "name": "accountsType"
+ }
+ }
+ },
+ {
+ "name": "length",
+ "type": "u8"
+ }
+ ]
+ }
+ },
+ {
+ "name": "rootEscrow",
+ "serialization": "bytemuck",
+ "repr": {
+ "kind": "c"
+ },
+ "type": {
+ "kind": "struct",
+ "fields": [
+ {
+ "name": "tokenMint",
+ "docs": [
+ "token mint"
+ ],
+ "type": "pubkey"
+ },
+ {
+ "name": "creator",
+ "docs": [
+ "creator of the escrow"
+ ],
+ "type": "pubkey"
+ },
+ {
+ "name": "base",
+ "docs": [
+ "escrow base key"
+ ],
+ "type": "pubkey"
+ },
+ {
+ "name": "root",
+ "docs": [
+ "256 bit merkle root"
+ ],
+ "type": {
+ "array": [
+ "u8",
+ 32
+ ]
+ }
+ },
+ {
+ "name": "bump",
+ "docs": [
+ "bump"
+ ],
+ "type": "u8"
+ },
+ {
+ "name": "tokenProgramFlag",
+ "docs": [
+ "token program flag"
+ ],
+ "type": "u8"
+ },
+ {
+ "name": "padding0",
+ "docs": [
+ "padding"
+ ],
+ "type": {
+ "array": [
+ "u8",
+ 6
+ ]
+ }
+ },
+ {
+ "name": "maxClaimAmount",
+ "docs": [
+ "max claim amount"
+ ],
+ "type": "u64"
+ },
+ {
+ "name": "maxEscrow",
+ "docs": [
+ "max escrow"
+ ],
+ "type": "u64"
+ },
+ {
+ "name": "totalFundedAmount",
+ "docs": [
+ "total funded amount"
+ ],
+ "type": "u64"
+ },
+ {
+ "name": "totalEscrowCreated",
+ "docs": [
+ "total escrow created"
+ ],
+ "type": "u64"
+ },
+ {
+ "name": "totalDistributeAmount",
+ "docs": [
+ "total distributed amount"
+ ],
+ "type": "u64"
+ },
+ {
+ "name": "version",
+ "docs": [
+ "version"
+ ],
+ "type": "u64"
+ },
+ {
+ "name": "padding",
+ "docs": [
+ "padding"
+ ],
+ "type": "u64"
+ },
+ {
+ "name": "buffer",
+ "docs": [
+ "buffer"
+ ],
+ "type": {
+ "array": [
+ "u128",
+ 5
+ ]
+ }
+ }
+ ]
+ }
+ },
+ {
+ "name": "vestingEscrow",
+ "serialization": "bytemuck",
+ "repr": {
+ "kind": "c"
+ },
+ "type": {
+ "kind": "struct",
+ "fields": [
+ {
+ "name": "recipient",
+ "docs": [
+ "recipient address"
+ ],
+ "type": "pubkey"
+ },
+ {
+ "name": "tokenMint",
+ "docs": [
+ "token mint"
+ ],
+ "type": "pubkey"
+ },
+ {
+ "name": "creator",
+ "docs": [
+ "creator of the escrow"
+ ],
+ "type": "pubkey"
+ },
+ {
+ "name": "base",
+ "docs": [
+ "escrow base key"
+ ],
+ "type": "pubkey"
+ },
+ {
+ "name": "escrowBump",
+ "docs": [
+ "escrow bump"
+ ],
+ "type": "u8"
+ },
+ {
+ "name": "updateRecipientMode",
+ "docs": [
+ "updateRecipientMode"
+ ],
+ "type": "u8"
+ },
+ {
+ "name": "cancelMode",
+ "docs": [
+ "cancelMode"
+ ],
+ "type": "u8"
+ },
+ {
+ "name": "tokenProgramFlag",
+ "docs": [
+ "token program flag"
+ ],
+ "type": "u8"
+ },
+ {
+ "name": "padding0",
+ "docs": [
+ "padding"
+ ],
+ "type": {
+ "array": [
+ "u8",
+ 4
+ ]
+ }
+ },
+ {
+ "name": "cliffTime",
+ "docs": [
+ "cliff time"
+ ],
+ "type": "u64"
+ },
+ {
+ "name": "frequency",
+ "docs": [
+ "frequency"
+ ],
+ "type": "u64"
+ },
+ {
+ "name": "cliffUnlockAmount",
+ "docs": [
+ "cliff unlock amount"
+ ],
+ "type": "u64"
+ },
+ {
+ "name": "amountPerPeriod",
+ "docs": [
+ "amount per period"
+ ],
+ "type": "u64"
+ },
+ {
+ "name": "numberOfPeriod",
+ "docs": [
+ "number of period"
+ ],
+ "type": "u64"
+ },
+ {
+ "name": "totalClaimedAmount",
+ "docs": [
+ "total claimed amount"
+ ],
+ "type": "u64"
+ },
+ {
+ "name": "vestingStartTime",
+ "docs": [
+ "vesting start time"
+ ],
+ "type": "u64"
+ },
+ {
+ "name": "cancelledAt",
+ "docs": [
+ "cancelledAt"
+ ],
+ "type": "u64"
+ },
+ {
+ "name": "padding1",
+ "docs": [
+ "buffer"
+ ],
+ "type": "u64"
+ },
+ {
+ "name": "buffer",
+ "docs": [
+ "buffer"
+ ],
+ "type": {
+ "array": [
+ "u128",
+ 5
+ ]
+ }
+ }
+ ]
+ }
+ },
+ {
+ "name": "vestingEscrowMetadata",
+ "docs": [
+ "Metadata about an escrow."
+ ],
+ "type": {
+ "kind": "struct",
+ "fields": [
+ {
+ "name": "escrow",
+ "docs": [
+ "The [Escrow]."
+ ],
+ "type": "pubkey"
+ },
+ {
+ "name": "name",
+ "docs": [
+ "Name of escrow."
+ ],
+ "type": "string"
+ },
+ {
+ "name": "description",
+ "docs": [
+ "Description of escrow."
+ ],
+ "type": "string"
+ },
+ {
+ "name": "creatorEmail",
+ "docs": [
+ "Email of creator"
+ ],
+ "type": "string"
+ },
+ {
+ "name": "recipientEmail",
+ "docs": [
+ "Email of recipient"
+ ],
+ "type": "string"
+ }
+ ]
+ }
+ }
+ ]
+};