From 628e6cd2c1c193705ba6c5c80e90813440683163 Mon Sep 17 00:00:00 2001 From: mgavillo Date: Wed, 22 May 2024 20:56:10 +0800 Subject: [PATCH] update versions to fit proposal vault version --- lib/client/rpc/proposals/proposals.ts | 11 +- lib/constants/conditionalVault.ts | 2 +- ..._vault_v1.ts => conditional_vault_v0.3.ts} | 30 +- lib/idl/conditional_vault_v1.json | 461 ------------------ lib/types/autocrats.ts | 6 +- 5 files changed, 13 insertions(+), 497 deletions(-) rename lib/idl/{conditional_vault_v1.ts => conditional_vault_v0.3.ts} (96%) delete mode 100644 lib/idl/conditional_vault_v1.json diff --git a/lib/client/rpc/proposals/proposals.ts b/lib/client/rpc/proposals/proposals.ts index d134c5d..1f9b2fa 100644 --- a/lib/client/rpc/proposals/proposals.ts +++ b/lib/client/rpc/proposals/proposals.ts @@ -1,5 +1,5 @@ import { PublicKey, Transaction } from "@solana/web3.js"; -import { AnchorProvider, BN } from "@coral-xyz/anchor"; +import { AnchorProvider, BN, Program } from "@coral-xyz/anchor"; import { TOKEN_PROGRAM_ID, createAssociatedTokenAccountIdempotentInstruction, @@ -36,6 +36,7 @@ import { } from "@/types/createProp"; import { FinalizeProposalClient } from "./finalizeProposal"; import { CreateProposalClient } from "./createProposal"; +import { autocratVersionToConditionalVaultMap } from "@/constants"; export class FutarchyRPCProposalsClient implements FutarchyProposalsClient { private rpcProvider: AnchorProvider; @@ -259,8 +260,9 @@ export class FutarchyRPCProposalsClient implements FutarchyProposalsClient { proposal: Proposal, underlyingToken: "base" | "quote" ) { - if (programVersion == "V0.3") { - const vaultProgram = this.autocratClient.vaultClient.vaultProgram; + if (programVersion == "V0.3" || programVersion == "V0.2") { + const vaultForVersion = autocratVersionToConditionalVaultMap[proposal.protocol.deploymentVersion] + const vaultProgram = new Program(vaultForVersion.idl, vaultForVersion.programId) const vaultAccount = underlyingToken == "base" @@ -293,7 +295,8 @@ export class FutarchyRPCProposalsClient implements FutarchyProposalsClient { } public async withdraw(proposal: Proposal) { - const vaultProgram = this.autocratClient.vaultClient.vaultProgram; + const vaultForVersion = autocratVersionToConditionalVaultMap[proposal.protocol.deploymentVersion] + const vaultProgram = new Program(vaultForVersion.idl, vaultForVersion.programId) const baseAccounts = await this.getVaultAccounts( proposal.baseVaultAccount, diff --git a/lib/constants/conditionalVault.ts b/lib/constants/conditionalVault.ts index af49330..ad5f04d 100644 --- a/lib/constants/conditionalVault.ts +++ b/lib/constants/conditionalVault.ts @@ -1,6 +1,6 @@ import { PublicKey } from "@solana/web3.js"; import { ConditionalVaultProgram, ProgramVersionLabel } from "@/types"; -import { IDL as ConditionalVaultV0_3_IDL } from "@/idl/conditional_vault_v1"; +import { IDL as ConditionalVaultV0_3_IDL } from "@/idl/conditional_vault_v0.3"; import { IDL as ConditionalVaultV0_2_IDL } from "@/idl/conditional_vault_v0.2"; import { IDL as ConditionalVaultV0_1_IDL } from "@/idl/conditional_vault_v0.1"; import { IDL as ConditionalVaultV0_IDL } from "@/idl/conditional_vault_v0.1"; diff --git a/lib/idl/conditional_vault_v1.ts b/lib/idl/conditional_vault_v0.3.ts similarity index 96% rename from lib/idl/conditional_vault_v1.ts rename to lib/idl/conditional_vault_v0.3.ts index 3671b25..f6d00d3 100644 --- a/lib/idl/conditional_vault_v1.ts +++ b/lib/idl/conditional_vault_v0.3.ts @@ -1,5 +1,5 @@ export type ConditionalVault = { - version: "1.0.0"; + version: "0.3.0"; name: "conditional_vault"; instructions: [ { @@ -341,14 +341,6 @@ export type ConditionalVault = { docs: ["The mint of the tokens that are deposited into the vault."]; type: "publicKey"; }, - { - name: "proposal"; - docs: [ - "We need to be able to create multiple vault for a single underlying token", - "account, so we use proposal as a PDA seed." - ]; - type: "publicKey"; - }, { name: "underlyingTokenAccount"; docs: ["The vault's storage account for deposited funds."]; @@ -403,10 +395,6 @@ export type ConditionalVault = { { name: "settlementAuthority"; type: "publicKey"; - }, - { - name: "proposal"; - type: "publicKey"; } ]; }; @@ -459,7 +447,7 @@ export type ConditionalVault = { }; export const IDL: ConditionalVault = { - version: "1.0.0", + version: "0.3.0", name: "conditional_vault", instructions: [ { @@ -801,14 +789,6 @@ export const IDL: ConditionalVault = { docs: ["The mint of the tokens that are deposited into the vault."], type: "publicKey", }, - { - name: "proposal", - docs: [ - "We need to be able to create multiple vault for a single underlying token", - "account, so we use proposal as a PDA seed.", - ], - type: "publicKey", - }, { name: "underlyingTokenAccount", docs: ["The vault's storage account for deposited funds."], @@ -864,10 +844,6 @@ export const IDL: ConditionalVault = { name: "settlementAuthority", type: "publicKey", }, - { - name: "proposal", - type: "publicKey", - }, ], }, }, @@ -916,4 +892,4 @@ export const IDL: ConditionalVault = { msg: "Once a vault has been settled, its status as either finalized or reverted cannot be changed", }, ], -}; +}; \ No newline at end of file diff --git a/lib/idl/conditional_vault_v1.json b/lib/idl/conditional_vault_v1.json deleted file mode 100644 index f32c25a..0000000 --- a/lib/idl/conditional_vault_v1.json +++ /dev/null @@ -1,461 +0,0 @@ -{ - "version": "1.0.0", - "name": "conditional_vault", - "instructions": [ - { - "name": "initializeConditionalVault", - "accounts": [ - { - "name": "vault", - "isMut": true, - "isSigner": false - }, - { - "name": "underlyingTokenMint", - "isMut": false, - "isSigner": false - }, - { - "name": "conditionalOnFinalizeTokenMint", - "isMut": true, - "isSigner": false - }, - { - "name": "conditionalOnRevertTokenMint", - "isMut": true, - "isSigner": false - }, - { - "name": "vaultUnderlyingTokenAccount", - "isMut": false, - "isSigner": false - }, - { - "name": "payer", - "isMut": true, - "isSigner": true - }, - { - "name": "tokenProgram", - "isMut": false, - "isSigner": false - }, - { - "name": "associatedTokenProgram", - "isMut": false, - "isSigner": false - }, - { - "name": "systemProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [ - { - "name": "args", - "type": { - "defined": "InitializeConditionalVaultArgs" - } - } - ] - }, - { - "name": "addMetadataToConditionalTokens", - "accounts": [ - { - "name": "payer", - "isMut": true, - "isSigner": true - }, - { - "name": "vault", - "isMut": true, - "isSigner": false - }, - { - "name": "underlyingTokenMint", - "isMut": true, - "isSigner": false - }, - { - "name": "underlyingTokenMetadata", - "isMut": false, - "isSigner": false - }, - { - "name": "conditionalOnFinalizeTokenMint", - "isMut": true, - "isSigner": false - }, - { - "name": "conditionalOnRevertTokenMint", - "isMut": true, - "isSigner": false - }, - { - "name": "conditionalOnFinalizeTokenMetadata", - "isMut": true, - "isSigner": false - }, - { - "name": "conditionalOnRevertTokenMetadata", - "isMut": true, - "isSigner": false - }, - { - "name": "tokenMetadataProgram", - "isMut": false, - "isSigner": false - }, - { - "name": "systemProgram", - "isMut": false, - "isSigner": false - }, - { - "name": "rent", - "isMut": false, - "isSigner": false - } - ], - "args": [ - { - "name": "args", - "type": { - "defined": "AddMetadataToConditionalTokensArgs" - } - } - ] - }, - { - "name": "settleConditionalVault", - "accounts": [ - { - "name": "settlementAuthority", - "isMut": false, - "isSigner": true - }, - { - "name": "vault", - "isMut": true, - "isSigner": false - } - ], - "args": [ - { - "name": "newStatus", - "type": { - "defined": "VaultStatus" - } - } - ] - }, - { - "name": "mergeConditionalTokensForUnderlyingTokens", - "accounts": [ - { - "name": "vault", - "isMut": false, - "isSigner": false - }, - { - "name": "conditionalOnFinalizeTokenMint", - "isMut": true, - "isSigner": false - }, - { - "name": "conditionalOnRevertTokenMint", - "isMut": true, - "isSigner": false - }, - { - "name": "vaultUnderlyingTokenAccount", - "isMut": true, - "isSigner": false - }, - { - "name": "authority", - "isMut": false, - "isSigner": true - }, - { - "name": "userConditionalOnFinalizeTokenAccount", - "isMut": true, - "isSigner": false - }, - { - "name": "userConditionalOnRevertTokenAccount", - "isMut": true, - "isSigner": false - }, - { - "name": "userUnderlyingTokenAccount", - "isMut": true, - "isSigner": false - }, - { - "name": "tokenProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [ - { - "name": "amount", - "type": "u64" - } - ] - }, - { - "name": "mintConditionalTokens", - "accounts": [ - { - "name": "vault", - "isMut": false, - "isSigner": false - }, - { - "name": "conditionalOnFinalizeTokenMint", - "isMut": true, - "isSigner": false - }, - { - "name": "conditionalOnRevertTokenMint", - "isMut": true, - "isSigner": false - }, - { - "name": "vaultUnderlyingTokenAccount", - "isMut": true, - "isSigner": false - }, - { - "name": "authority", - "isMut": false, - "isSigner": true - }, - { - "name": "userConditionalOnFinalizeTokenAccount", - "isMut": true, - "isSigner": false - }, - { - "name": "userConditionalOnRevertTokenAccount", - "isMut": true, - "isSigner": false - }, - { - "name": "userUnderlyingTokenAccount", - "isMut": true, - "isSigner": false - }, - { - "name": "tokenProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [ - { - "name": "amount", - "type": "u64" - } - ] - }, - { - "name": "redeemConditionalTokensForUnderlyingTokens", - "accounts": [ - { - "name": "vault", - "isMut": false, - "isSigner": false - }, - { - "name": "conditionalOnFinalizeTokenMint", - "isMut": true, - "isSigner": false - }, - { - "name": "conditionalOnRevertTokenMint", - "isMut": true, - "isSigner": false - }, - { - "name": "vaultUnderlyingTokenAccount", - "isMut": true, - "isSigner": false - }, - { - "name": "authority", - "isMut": false, - "isSigner": true - }, - { - "name": "userConditionalOnFinalizeTokenAccount", - "isMut": true, - "isSigner": false - }, - { - "name": "userConditionalOnRevertTokenAccount", - "isMut": true, - "isSigner": false - }, - { - "name": "userUnderlyingTokenAccount", - "isMut": true, - "isSigner": false - }, - { - "name": "tokenProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [] - } - ], - "accounts": [ - { - "name": "ConditionalVault", - "type": { - "kind": "struct", - "fields": [ - { - "name": "status", - "type": { - "defined": "VaultStatus" - } - }, - { - "name": "settlementAuthority", - "docs": [ - "The account that can either finalize the vault to make conditional tokens", - "redeemable for underlying tokens or revert the vault to make deposit", - "slips redeemable for underlying tokens." - ], - "type": "publicKey" - }, - { - "name": "underlyingTokenMint", - "docs": [ - "The mint of the tokens that are deposited into the vault." - ], - "type": "publicKey" - }, - { - "name": "proposal", - "docs": [ - "We need to be able to create multiple vault for a single underlying token", - "account, so we use proposal as a PDA seed." - ], - "type": "publicKey" - }, - { - "name": "underlyingTokenAccount", - "docs": ["The vault's storage account for deposited funds."], - "type": "publicKey" - }, - { - "name": "conditionalOnFinalizeTokenMint", - "type": "publicKey" - }, - { - "name": "conditionalOnRevertTokenMint", - "type": "publicKey" - }, - { - "name": "pdaBump", - "type": "u8" - }, - { - "name": "decimals", - "type": "u8" - } - ] - } - } - ], - "types": [ - { - "name": "AddMetadataToConditionalTokensArgs", - "type": { - "kind": "struct", - "fields": [ - { - "name": "proposalNumber", - "type": "u64" - }, - { - "name": "onFinalizeUri", - "type": "string" - }, - { - "name": "onRevertUri", - "type": "string" - } - ] - } - }, - { - "name": "InitializeConditionalVaultArgs", - "type": { - "kind": "struct", - "fields": [ - { - "name": "settlementAuthority", - "type": "publicKey" - }, - { - "name": "proposal", - "type": "publicKey" - } - ] - } - }, - { - "name": "VaultStatus", - "type": { - "kind": "enum", - "variants": [ - { - "name": "Active" - }, - { - "name": "Finalized" - }, - { - "name": "Reverted" - } - ] - } - } - ], - "errors": [ - { - "code": 6000, - "name": "InsufficientUnderlyingTokens", - "msg": "Insufficient underlying token balance to mint this amount of conditional tokens" - }, - { - "code": 6001, - "name": "InvalidVaultUnderlyingTokenAccount", - "msg": "This `vault_underlying_token_account` is not this vault's `underlying_token_account`" - }, - { - "code": 6002, - "name": "InvalidConditionalTokenMint", - "msg": "This conditional token mint is not this vault's conditional token mint" - }, - { - "code": 6003, - "name": "CantRedeemConditionalTokens", - "msg": "Vault needs to be settled as finalized before users can redeem conditional tokens for underlying tokens" - }, - { - "code": 6004, - "name": "VaultAlreadySettled", - "msg": "Once a vault has been settled, its status as either finalized or reverted cannot be changed" - } - ] -} diff --git a/lib/types/autocrats.ts b/lib/types/autocrats.ts index 15c2896..893f383 100644 --- a/lib/types/autocrats.ts +++ b/lib/types/autocrats.ts @@ -7,11 +7,10 @@ import { Autocrat as AutocratV0_3 } from "@/idl/autocrat_v0.3"; import { MergeWithOptionalFields, TokenProps } from "@/types"; import { OpenbookTwapV0_2 } from "@/idl/openbook_twap_v0.2"; import { OpenbookTwapV0_1 } from "@/idl/openbook_twap_v0.1"; -import { ConditionalVault as ConditionalVaultV1 } from "@/idl/conditional_vault_v1"; +import { ConditionalVault as ConditionalVaultV0_3 } from "@/idl/conditional_vault_v0.3"; import { ConditionalVault as ConditionalVaultV0_2 } from "@/idl/conditional_vault_v0.2"; import { ConditionalVault as ConditionalVaultV0_1 } from "@/idl/conditional_vault_v0.1"; import { ConditionalVault as ConditionalVaultV0 } from "@/idl/conditional_vault_v0.1"; -import { Autocrat as AutocratV1 } from "@metadaoproject/futarchy/dist/types/autocrat"; /** * Programs @@ -28,10 +27,9 @@ export type AutocratProgram = | AutocratV0_1 | AutocratV0_2 | AutocratV0_3 - | AutocratV1; export type ConditionalVaultProgram = - | ConditionalVaultV1 + | ConditionalVaultV0_3 | ConditionalVaultV0_2 | ConditionalVaultV0_1 | ConditionalVaultV0;