From f961aae234aa3e642ffb8fa41a1a5945a4518662 Mon Sep 17 00:00:00 2001 From: emerson Date: Thu, 3 Nov 2022 16:39:17 +0000 Subject: [PATCH 01/18] Update dependency --- package.json | 7 ++++--- yarn.lock | 18 +++++++++--------- 2 files changed, 13 insertions(+), 12 deletions(-) diff --git a/package.json b/package.json index 18eaf70..97761fc 100644 --- a/package.json +++ b/package.json @@ -8,8 +8,8 @@ "dist" ], "dependencies": { - "@dappio-wonderland/gateway-idls": "^0.2.6", - "@dappio-wonderland/navigator": "^0.2.11", + "@dappio-wonderland/gateway-idls": "^0.2.7-test.2", + "@dappio-wonderland/navigator": "^0.2.14-test.10", "@jup-ag/core": "1.0.0-beta.26", "@project-serum/anchor": "^0.24.2", "@project-serum/borsh": "^0.2.5", @@ -45,6 +45,7 @@ "testAdapterNftFinance": "ANCHOR_WALLET=~/.config/solana/gateway.json ts-mocha -p ./tsconfig.json -t 1000000 tests/testAdapterNftFinance.ts", "testAdapterFrancium": "ANCHOR_WALLET=~/.config/solana/gateway.json ts-mocha -p ./tsconfig.json -t 1000000 tests/testAdapterFrancium.ts", "testAdapterKatana": "ANCHOR_WALLET=~/.config/solana/gateway.json ts-mocha -p ./tsconfig.json -t 1000000 tests/testAdapterKatana.ts", - "testAdapterFriktion": "ANCHOR_WALLET=~/.config/solana/gateway.json ts-mocha -p ./tsconfig.json -t 1000000 tests/testAdapterFriktion.ts" + "testAdapterFriktion": "ANCHOR_WALLET=~/.config/solana/gateway.json ts-mocha -p ./tsconfig.json -t 1000000 tests/testAdapterFriktion.ts", + "testAdapterGenopets": "ANCHOR_WALLET=~/.config/solana/gateway.json ts-mocha -p ./tsconfig.json -t 1000000 tests/testAdapterGenopets.ts" } } diff --git a/yarn.lock b/yarn.lock index cee6642..acc2380 100644 --- a/yarn.lock +++ b/yarn.lock @@ -21,15 +21,15 @@ tiny-invariant "^1.1.0" toformat "^2.0.0" -"@dappio-wonderland/gateway-idls@^0.2.6": - version "0.2.6" - resolved "https://registry.yarnpkg.com/@dappio-wonderland/gateway-idls/-/gateway-idls-0.2.6.tgz#dcd823b6527036aef7dbec5e9eb28cf5cdea2e60" - integrity sha512-jOvrS74Vnw5MlH6DTgHJQWoXlO81f71/2+LdefrKbybjorDUZ3xeQOCUofBA83PFNGXGP4VyWY4qGenVRuH+SQ== - -"@dappio-wonderland/navigator@^0.2.11": - version "0.2.11" - resolved "https://registry.yarnpkg.com/@dappio-wonderland/navigator/-/navigator-0.2.11.tgz#825599fd563eaee5ffc70aff7344006d190fb6c3" - integrity sha512-3o0+/4edUvI0smFnt8xxS0tKkcT4GPpw3us2uX1I8bAj/kIlgU5Ndqq+AOeAUc4vHnD9NH/pC6G3FhM72184rg== +"@dappio-wonderland/gateway-idls@^0.2.7-test.2": + version "0.2.7-test.2" + resolved "https://registry.yarnpkg.com/@dappio-wonderland/gateway-idls/-/gateway-idls-0.2.7-test.2.tgz#840b766db3479633ceba542f62ed5ac1ed3c0156" + integrity sha512-5pXfz+kcPXgHJF93Wgmu49sNzg5yIZ0DDdjwRYXPXS4eVwh65+J4wgnNN2l4wVfwxTe9dYsjifKnY1Ckg56JXQ== + +"@dappio-wonderland/navigator@^0.2.14-test.10": + version "0.2.14-test.10" + resolved "https://registry.yarnpkg.com/@dappio-wonderland/navigator/-/navigator-0.2.14-test.10.tgz#c58e8f7fa3cbe067efc1b3e9b59f12df7acf386f" + integrity sha512-VB1VLycfWEgr/wFjdyo7OiLs1fIRDr0+sdtA6ZmpncVX1XqLeroC+gA8lk9RmiJptGINEeDx9Ww881+1ksna7Q== dependencies: "@project-serum/borsh" "^0.2.2" "@project-serum/serum" "^0.13.61" From b21a7e637bc5a2aed21184d634217f000ce85f53 Mon Sep 17 00:00:00 2001 From: emerson Date: Thu, 3 Nov 2022 16:40:24 +0000 Subject: [PATCH 02/18] Support Genopets --- src/builder.ts | 46 +++ src/ids.ts | 6 +- src/protocols/genopets.ts | 617 ++++++++++++++++++++++++++++++++++++++ src/types.ts | 17 ++ 4 files changed, 685 insertions(+), 1 deletion(-) create mode 100644 src/protocols/genopets.ts diff --git a/src/builder.ts b/src/builder.ts index 366f968..27eff93 100644 --- a/src/builder.ts +++ b/src/builder.ts @@ -14,6 +14,7 @@ import { nftFinance, katana, friktion, + genopets, } from "@dappio-wonderland/navigator"; import { ActionType, @@ -63,6 +64,7 @@ import { ProtocolFrancium } from "./protocols/francium"; import { ProtocolKatana } from "./protocols/katana"; import { ProtocolTulip } from "./protocols/tulip"; import { ProtocolFriktion } from "./protocols/friktion"; +import { ProtocolGenopets } from "./protocols/genopets"; export class GatewayBuilder { public params: GatewayParams; @@ -109,6 +111,8 @@ export class GatewayBuilder { // Extra Metadata poolDirection: PoolDirection.Obverse, swapMinOutAmount: new anchor.BN(0), + lockDuration: 0, + asSgene: 0, }; this._metadata = { @@ -437,6 +441,20 @@ export class GatewayBuilder { this.params ); + break; + case SupportedProtocols.Genopets: + this._metadata.farm = await genopets.infos.getFarm( + this._provider.connection, + stakeParams.farmId + ); + + protocol = new ProtocolGenopets( + this._provider.connection, + this._program, + await this.getGatewayStateKey(), + this.params + ); + break; default: throw new Error("Unsupported Protocol"); @@ -539,6 +557,20 @@ export class GatewayBuilder { this.params ); + break; + case SupportedProtocols.Genopets: + this._metadata.farm = await genopets.infos.getFarm( + this._provider.connection, + unstakeParams.farmId + ); + + protocol = new ProtocolGenopets( + this._provider.connection, + this._program, + await this.getGatewayStateKey(), + this.params + ); + break; default: throw new Error("Unsupported Protocol"); @@ -627,6 +659,20 @@ export class GatewayBuilder { await this.getGatewayStateKey(), this.params ); + break; + case SupportedProtocols.Genopets: + this._metadata.farm = await genopets.infos.getFarm( + this._provider.connection, + harvestParams.farmId + ); + + protocol = new ProtocolGenopets( + this._provider.connection, + this._program, + await this.getGatewayStateKey(), + this.params + ); + break; default: throw new Error("Unsupported Protocol"); diff --git a/src/ids.ts b/src/ids.ts index 65343a9..0ea949e 100644 --- a/src/ids.ts +++ b/src/ids.ts @@ -3,7 +3,7 @@ import { PublicKey } from "@solana/web3.js"; // Program IDs export const GATEWAY_PROGRAM_ID = new PublicKey( - "GATEp6AEtXtwHABNWHKH9qeh3uJDZtZJ7YBNYzHsX3FS" + "9dwUanLrLHoaUEw7YYZG4VkqWWvMpxjmNYmTB71Gzwnu" ); export const RAYDIUM_ADAPTER_PROGRAM_ID = new PublicKey( @@ -26,6 +26,10 @@ export const NFT_FINANCE_ADAPTER_PROGRAM_ID = new PublicKey( "ADPTyBr92sBCE1hdYBRvXbMpF4hKs17xyDjFPxopcsrh" ); +export const GENOPETS_ADAPTER_PROGRAM_ID = new PublicKey( + "ADPTR3wPKDCZ8HNBBpY3GGXB8hu6DZDqyPJMimyHjKNk" +); + export const SERUM_PROGRAM_ID = new PublicKey( "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" ); diff --git a/src/protocols/genopets.ts b/src/protocols/genopets.ts new file mode 100644 index 0000000..b943fce --- /dev/null +++ b/src/protocols/genopets.ts @@ -0,0 +1,617 @@ +import * as anchor from "@project-serum/anchor"; +import { + TOKEN_PROGRAM_ID, + getAssociatedTokenAddress, + ASSOCIATED_TOKEN_PROGRAM_ID, +} from "@solana/spl-token-v2"; +import { struct, u64, u8 } from "@project-serum/borsh"; +import { + createATAWithoutCheckIx, + getActivityIndex, + getGatewayAuthority, +} from "../utils"; +import { IFarmInfo, genopets } from "@dappio-wonderland/navigator"; +import { + GatewayParams, + HarvestParams, + HarvestType, + IProtocolFarm, + PAYLOAD_SIZE, + StakeParams, + UnstakeParams, +} from "../types"; +import { GENOPETS_ADAPTER_PROGRAM_ID } from "../ids"; +import { Gateway } from "@dappio-wonderland/gateway-idls"; + +export class ProtocolGenopets implements IProtocolFarm { + constructor( + private _connection: anchor.web3.Connection, + private _gatewayProgram: anchor.Program, + private _gatewayStateKey: anchor.web3.PublicKey, + private _gatewayParams: GatewayParams + ) {} + + async stake( + params: StakeParams, + farmInfo: IFarmInfo, + userKey: anchor.web3.PublicKey + ): Promise<{ txs: anchor.web3.Transaction[]; input: Buffer }> { + // Handle payload input here + const inputLayout = struct([u64("stakeAmount"), u8("lockDuration")]); + let payload = Buffer.alloc(PAYLOAD_SIZE); + inputLayout.encode( + { + stakeAmount: new anchor.BN(params.lpAmount), + lockDuration: params.lockDuration ? params.lockDuration : 0, + }, + payload + ); + + this._gatewayParams.asSgene = params.version ? 1 : 0; + this._gatewayParams.lockDuration = params.lockDuration + ? params.lockDuration + : 0; + + // Handle transaction here + const farm = farmInfo as genopets.FarmInfo; + const farmWrapper = new genopets.FarmInfoWrapper(farm); + const farmerId = await genopets.infos.getFarmerId(farm, userKey); + const farmerAccount = await this._connection.getAccountInfo(farmerId); + let userDeposit = genopets.calcDeposit(userKey, 0); + let userReDeposit = genopets.calcDeposit(userKey, 1); + if (farmerAccount) { + const farmer = (await genopets.infos.getFarmer( + this._connection, + farmerId + )) as genopets.FarmerInfo; + const farmerWrapper = new genopets.FarmerInfoWrapper(farmer); + userDeposit = farmerWrapper.getUserDeposit(); + userReDeposit = farmerWrapper.getUserReDeposit(); + } + + let preInstructions: anchor.web3.TransactionInstruction[] = []; + + const userPoolTokenAccount = await getAssociatedTokenAddress( + farm.geneMint, + userKey + ); + preInstructions.push(await createATAWithoutCheckIx(userKey, farm.geneMint)); + + const userSgeneTokenAccount = await getAssociatedTokenAddress( + farm.mintSgene, + userKey + ); + preInstructions.push( + await createATAWithoutCheckIx(userKey, farm.mintSgene) + ); + + const vaultATA = await getAssociatedTokenAddress( + farm.geneMint, + farmerId, + true + ); + preInstructions.push( + await createATAWithoutCheckIx(farmerId, farm.geneMint, userKey) + ); + + const remainingAccounts = [ + { pubkey: userKey, isSigner: true, isWritable: true }, // 0 + { pubkey: farm.farmId, isSigner: false, isWritable: true }, // 1 + { + pubkey: farmWrapper.getStakingPool(farm.geneMint), + isSigner: false, + isWritable: true, + }, // 2 + { pubkey: farm.geneMint, isSigner: false, isWritable: true }, // 3 + { pubkey: farmerId, isSigner: false, isWritable: true }, // 4 + { + pubkey: userPoolTokenAccount, + isSigner: false, + isWritable: true, + }, // 5 + { + pubkey: userSgeneTokenAccount, + isSigner: false, + isWritable: true, + }, // 6 + { + pubkey: vaultATA, + isSigner: false, + isWritable: true, + }, // 7 + { + pubkey: farm.sgeneMinter, + isSigner: false, + isWritable: false, + }, // 8 + { + pubkey: farm.mintSgene, + isSigner: false, + isWritable: true, + }, // 9 + { + pubkey: userDeposit, + isSigner: false, + isWritable: true, + }, // 10 + { + pubkey: userReDeposit, + isSigner: false, + isWritable: true, + }, // 11 + { + pubkey: ASSOCIATED_TOKEN_PROGRAM_ID, + isSigner: false, + isWritable: false, + }, // 12 + { pubkey: TOKEN_PROGRAM_ID, isSigner: false, isWritable: false }, // 13 + { + pubkey: anchor.web3.SystemProgram.programId, + isSigner: false, + isWritable: false, + }, // 14 + { + pubkey: anchor.web3.SYSVAR_RENT_PUBKEY, + isSigner: false, + isWritable: false, + }, // 15 + ]; + + const txStake = await this._gatewayProgram.methods + .stake() + .accounts({ + gatewayState: this._gatewayStateKey, + adapterProgramId: GENOPETS_ADAPTER_PROGRAM_ID, + baseProgramId: genopets.GENOPETS_FARM_PROGRAM_ID, + activityIndex: await getActivityIndex(userKey), + gatewayAuthority: getGatewayAuthority(), + }) + .preInstructions(preInstructions) + .remainingAccounts(remainingAccounts) + .transaction(); + + return { txs: [txStake], input: payload }; + } + + async unstake( + params: UnstakeParams, + farmInfo: IFarmInfo, + userKey: anchor.web3.PublicKey + ): Promise<{ txs: anchor.web3.Transaction[]; input: Buffer }> { + const isAsSgene = params.version ? true : false; + + // Handle payload input here + const inputLayout = struct([u64("dummy1")]); + let payload = Buffer.alloc(PAYLOAD_SIZE); + inputLayout.encode( + { + dummy1: new anchor.BN(69), + }, + payload + ); + + this._gatewayParams.asSgene = isAsSgene ? 1 : 0; + + // Handle transaction here + const farm = farmInfo as genopets.FarmInfo; + const farmWrapper = new genopets.FarmInfoWrapper(farm); + const farmerId = await genopets.infos.getFarmerId(farm, userKey); + const farmerAccount = await this._connection.getAccountInfo(farmerId); + let userDeposit = genopets.calcDeposit(userKey, 0); + let userReDeposit = genopets.calcDeposit(userKey, 1); + if (farmerAccount) { + const farmer = (await genopets.infos.getFarmer( + this._connection, + farmerId + )) as genopets.FarmerInfo; + const farmerWrapper = new genopets.FarmerInfoWrapper(farmer); + userDeposit = farmerWrapper.getUserDeposit(); + userReDeposit = farmerWrapper.getUserReDeposit(); + } + + let preInstructions: anchor.web3.TransactionInstruction[] = []; + + const userPoolTokenAccount = await getAssociatedTokenAddress( + farm.geneMint, + userKey + ); + preInstructions.push(await createATAWithoutCheckIx(userKey, farm.geneMint)); + + const userSgeneTokenAccount = await getAssociatedTokenAddress( + farm.mintSgene, + userKey + ); + preInstructions.push( + await createATAWithoutCheckIx(userKey, farm.mintSgene) + ); + + const vaultATA = await getAssociatedTokenAddress( + farm.geneMint, + farmerId, + true + ); + + const remainingAccounts = [ + { pubkey: userKey, isSigner: true, isWritable: true }, // 0 + { pubkey: farm.farmId, isSigner: false, isWritable: true }, // 1 + { + pubkey: farmWrapper.getStakingPool(farm.geneMint), + isSigner: false, + isWritable: true, + }, // 2 + { pubkey: farm.geneMint, isSigner: false, isWritable: false }, // 3 + { pubkey: farmerId, isSigner: false, isWritable: true }, // 4 + { + pubkey: userPoolTokenAccount, + isSigner: false, + isWritable: true, + }, // 5 + { + pubkey: vaultATA, + isSigner: false, + isWritable: true, + }, // 6 + { + pubkey: farm.sgeneMinter, + isSigner: false, + isWritable: false, + }, // 7 + { + pubkey: userSgeneTokenAccount, + isSigner: false, + isWritable: true, + }, // 8 + { + pubkey: farm.mintSgene, + isSigner: false, + isWritable: true, + }, // 9 + { + pubkey: farm.geneRewarder, + isSigner: false, + isWritable: false, + }, // 10 + { + pubkey: farm.ataGeneRewarder, + isSigner: false, + isWritable: true, + }, // 11 + { + pubkey: userDeposit, + isSigner: false, + isWritable: true, + }, // 12 + { + pubkey: userReDeposit, + isSigner: false, + isWritable: true, + }, // 13 + { + pubkey: ASSOCIATED_TOKEN_PROGRAM_ID, + isSigner: false, + isWritable: false, + }, // 14 + { + pubkey: TOKEN_PROGRAM_ID, + isSigner: false, + isWritable: false, + }, // 15 + { + pubkey: anchor.web3.SystemProgram.programId, + isSigner: false, + isWritable: false, + }, // 16 + { + pubkey: anchor.web3.SYSVAR_RENT_PUBKEY, + isSigner: false, + isWritable: false, + }, // 17 + ]; + + const txUnstake = await this._gatewayProgram.methods + .unstake() + .accounts({ + gatewayState: this._gatewayStateKey, + adapterProgramId: GENOPETS_ADAPTER_PROGRAM_ID, + baseProgramId: genopets.GENOPETS_FARM_PROGRAM_ID, + activityIndex: await getActivityIndex(userKey), + gatewayAuthority: getGatewayAuthority(), + }) + .preInstructions(preInstructions) + .remainingAccounts(remainingAccounts) + .transaction(); + + return { txs: [txUnstake], input: payload }; + } + + async harvest( + params: HarvestParams, + farmInfo: IFarmInfo, + userKey: anchor.web3.PublicKey + ): Promise<{ txs: anchor.web3.Transaction[]; input: Buffer }> { + // Handle payload input here + const inputLayout = struct([u8("asSgene")]); + let payload = Buffer.alloc(PAYLOAD_SIZE); + inputLayout.encode( + { + asSgene: params.type == HarvestType.WithdrawAsSgene ? 1 : 0, + }, + payload + ); + + this._gatewayParams.asSgene = + params.type == HarvestType.WithdrawAsSgene ? 1 : 0; + + // Handle transaction here + const farm = farmInfo as genopets.FarmInfo; + const farmWrapper = new genopets.FarmInfoWrapper(farm); + const farmerId = await genopets.infos.getFarmerId(farm, userKey); + const farmerAccount = await this._connection.getAccountInfo(farmerId); + let userDeposit = genopets.calcDeposit(userKey, 0); + let userReDeposit = genopets.calcDeposit(userKey, 1); + + console.log("before userDeposit:", userDeposit.toBase58()); + console.log("before userReDeposit:", userReDeposit.toBase58()); + // if (farmerAccount) { + // const farmer = (await genopets.infos.getFarmer( + // this._connection, + // farmerId + // )) as genopets.FarmerInfo; + // const farmerWrapper = new genopets.FarmerInfoWrapper(farmer); + // userDeposit = farmerWrapper.getUserDeposit(); + // userReDeposit = farmerWrapper.getUserReDeposit(); + // } + // console.log("userDeposit:", userDeposit.toBase58()); + // console.log("userReDeposit:", userReDeposit.toBase58()); + + let preInstructions: anchor.web3.TransactionInstruction[] = []; + + const userSgeneTokenAccount = await getAssociatedTokenAddress( + farm.mintSgene, + userKey + ); + preInstructions.push( + await createATAWithoutCheckIx(userKey, farm.mintSgene) + ); + + let remainingAccounts: anchor.web3.AccountMeta[] = []; + switch (params.type) { + case HarvestType.WithdrawAsSgene: + if (farmerAccount) { + const farmer = (await genopets.infos.getFarmer( + this._connection, + farmerId + )) as genopets.FarmerInfo; + const farmerWrapper = new genopets.FarmerInfoWrapper(farmer); + userDeposit = params.farmerKey || farmerWrapper.getUserDeposit(); + userReDeposit = farmerWrapper.getUserReDeposit(); + } + console.log("userDeposit:", userDeposit.toBase58()); + console.log("userReDeposit:", userReDeposit.toBase58()); + + remainingAccounts = [ + { pubkey: userKey, isSigner: true, isWritable: true }, // 0 + { pubkey: farm.farmId, isSigner: false, isWritable: true }, // 1 + { pubkey: farmerId, isSigner: false, isWritable: true }, // 2 + { + pubkey: farm.sgeneMinter, + isSigner: false, + isWritable: false, + }, // 3 + { + pubkey: userSgeneTokenAccount, + isSigner: false, + isWritable: true, + }, // 4 + { + pubkey: farm.mintSgene, + isSigner: false, + isWritable: true, + }, // 5 + { + pubkey: userDeposit, + isSigner: false, + isWritable: true, + }, // 6 + { + pubkey: ASSOCIATED_TOKEN_PROGRAM_ID, + isSigner: false, + isWritable: false, + }, // 7 + { + pubkey: TOKEN_PROGRAM_ID, + isSigner: false, + isWritable: false, + }, // 8 + { + pubkey: anchor.web3.SystemProgram.programId, + isSigner: false, + isWritable: false, + }, // 9 + { + pubkey: anchor.web3.SYSVAR_RENT_PUBKEY, + isSigner: false, + isWritable: false, + }, // 10 + ]; + break; + case HarvestType.Withdraw: + if (farmerAccount) { + const farmer = (await genopets.infos.getFarmer( + this._connection, + farmerId + )) as genopets.FarmerInfo; + const farmerWrapper = new genopets.FarmerInfoWrapper(farmer); + userDeposit = params.farmerKey || farmerWrapper.getUserDeposit(); + userReDeposit = farmerWrapper.getUserDeposit(); + } + console.log("userDeposit:", userDeposit.toBase58()); + console.log("userReDeposit:", userReDeposit.toBase58()); + + const userPoolTokenAccount = await getAssociatedTokenAddress( + farm.geneMint, + userKey + ); + preInstructions.push( + await createATAWithoutCheckIx(userKey, farm.geneMint) + ); + + const vaultATA = await getAssociatedTokenAddress( + farm.geneMint, + farmerId, + true + ); + remainingAccounts = [ + { pubkey: userKey, isSigner: true, isWritable: true }, // 0 + { pubkey: farm.farmId, isSigner: false, isWritable: true }, // 1 + { + pubkey: farmWrapper.getStakingPool(farm.geneMint), + isSigner: false, + isWritable: true, + }, // 2 + { pubkey: farm.geneMint, isSigner: false, isWritable: false }, // 3 + { pubkey: farmerId, isSigner: false, isWritable: true }, // 4 + { + pubkey: userPoolTokenAccount, + isSigner: false, + isWritable: true, + }, // 5 + { + pubkey: vaultATA, + isSigner: false, + isWritable: true, + }, // 6 + { + pubkey: farm.sgeneMinter, + isSigner: false, + isWritable: false, + }, // 7 + { + pubkey: userSgeneTokenAccount, + isSigner: false, + isWritable: true, + }, // 8 + { + pubkey: farm.mintSgene, + isSigner: false, + isWritable: true, + }, // 9 + { + pubkey: farm.geneRewarder, + isSigner: false, + isWritable: false, + }, // 10 + { + pubkey: farm.ataGeneRewarder, + isSigner: false, + isWritable: true, + }, // 11 + { + pubkey: userReDeposit, + isSigner: false, + isWritable: true, + }, // 12 + { + pubkey: userDeposit, + isSigner: false, + isWritable: true, + }, // 13 + { + pubkey: ASSOCIATED_TOKEN_PROGRAM_ID, + isSigner: false, + isWritable: false, + }, // 14 + { + pubkey: TOKEN_PROGRAM_ID, + isSigner: false, + isWritable: false, + }, // 15 + { + pubkey: anchor.web3.SystemProgram.programId, + isSigner: false, + isWritable: false, + }, // 16 + { + pubkey: anchor.web3.SYSVAR_RENT_PUBKEY, + isSigner: false, + isWritable: false, + }, // 17 + ]; + break; + default: + if (farmerAccount) { + const farmer = (await genopets.infos.getFarmer( + this._connection, + farmerId + )) as genopets.FarmerInfo; + const farmerWrapper = new genopets.FarmerInfoWrapper(farmer); + userDeposit = farmerWrapper.getUserDeposit(); + userReDeposit = farmerWrapper.getUserReDeposit(); + } + console.log("userDeposit:", userDeposit.toBase58()); + console.log("userReDeposit:", userReDeposit.toBase58()); + + remainingAccounts = [ + { pubkey: userKey, isSigner: true, isWritable: true }, // 0 + { pubkey: farm.farmId, isSigner: false, isWritable: true }, // 1 + { pubkey: farmerId, isSigner: false, isWritable: true }, // 2 + { + pubkey: farm.sgeneMinter, + isSigner: false, + isWritable: false, + }, // 3 + { + pubkey: farm.mintSgene, + isSigner: false, + isWritable: true, + }, // 4 + { + pubkey: userSgeneTokenAccount, + isSigner: false, + isWritable: true, + }, // 5 + { + pubkey: userDeposit, + isSigner: false, + isWritable: true, + }, // 6 + { + pubkey: ASSOCIATED_TOKEN_PROGRAM_ID, + isSigner: false, + isWritable: false, + }, // 7 + { + pubkey: TOKEN_PROGRAM_ID, + isSigner: false, + isWritable: false, + }, // 8 + { + pubkey: anchor.web3.SystemProgram.programId, + isSigner: false, + isWritable: false, + }, // 9 + { + pubkey: anchor.web3.SYSVAR_RENT_PUBKEY, + isSigner: false, + isWritable: false, + }, // 10 + ]; + break; + } + + const txHarvest = await this._gatewayProgram.methods + .harvest() + .accounts({ + gatewayState: this._gatewayStateKey, + adapterProgramId: GENOPETS_ADAPTER_PROGRAM_ID, + baseProgramId: genopets.GENOPETS_FARM_PROGRAM_ID, + activityIndex: await getActivityIndex(userKey), + gatewayAuthority: getGatewayAuthority(), + }) + .preInstructions(preInstructions) + .remainingAccounts(remainingAccounts) + .transaction(); + + return { txs: [txHarvest], input: payload }; + } +} diff --git a/src/types.ts b/src/types.ts index 06c25ed..5e23421 100644 --- a/src/types.ts +++ b/src/types.ts @@ -219,6 +219,7 @@ export enum SupportedProtocols { Francium = 9, Friktion = 10, Katana = 11, + Genopets = 12, } export interface RouteInfoExtend extends RouteInfo { @@ -272,6 +273,7 @@ export interface StakeParams { farmerKey?: anchor.web3.PublicKey; lpAmount?: number; version?: number; + lockDuration?: number; } export interface UnstakeParams { @@ -287,6 +289,7 @@ export interface HarvestParams { farmId: anchor.web3.PublicKey; farmerKey?: anchor.web3.PublicKey; version?: number; + type?: HarvestType; } export interface SupplyParams { @@ -398,6 +401,12 @@ export enum PoolDirection { Reverse, } +export enum HarvestType { + WithdrawAsSgene, + ClaimRewards, + Withdraw, +} + export type GatewayParams = TypeDef< { name: "GatewayParams"; @@ -458,6 +467,14 @@ export type GatewayParams = TypeDef< { name: "poolDirection"; type: "u8"; + }, + { + name: "lockDuration"; + type: "u8"; + }, + { + name: "asSgene"; + type: "u8"; } ]; }; From dd721cdd2d49fb158bc443bd9d76d66f6775a9eb Mon Sep 17 00:00:00 2001 From: emerson Date: Thu, 3 Nov 2022 16:40:30 +0000 Subject: [PATCH 03/18] Add test --- tests/testAdapterGenopets.ts | 223 +++++++++++++++++++++++++++++++++++ 1 file changed, 223 insertions(+) create mode 100644 tests/testAdapterGenopets.ts diff --git a/tests/testAdapterGenopets.ts b/tests/testAdapterGenopets.ts new file mode 100644 index 0000000..3adb5fa --- /dev/null +++ b/tests/testAdapterGenopets.ts @@ -0,0 +1,223 @@ +import * as anchor from "@project-serum/anchor"; +import { PublicKey, Connection } from "@solana/web3.js"; +import NodeWallet from "@project-serum/anchor/dist/cjs/nodewallet"; +import { getAccount, getAssociatedTokenAddress } from "@solana/spl-token-v2"; +import { + AddLiquidityParams, + StakeParams, + GatewayBuilder, + SupportedProtocols, + SwapParams, + UnstakeParams, + RemoveLiquidityParams, + HarvestParams, + WSOL, + HarvestType, +} from "../src"; +import { genopets } from "@dappio-wonderland/navigator"; + +describe("Gateway", () => { + const connection = new Connection("https://rpc-mainnet-fork.epochs.studio", { + commitment: "confirmed", + wsEndpoint: "wss://rpc-mainnet-fork.epochs.studio/ws", + }); + // const connection = new Connection("https://solana-api.tt-prod.net", { + // commitment: "confirmed", + // confirmTransactionInitialTimeout: 180 * 1000, + // }); + // const connection = new Connection("https://ssc-dao.genesysgo.net", { + // commitment: "confirmed", + // confirmTransactionInitialTimeout: 180 * 1000, + // }); + // const connection = new Connection("https:////api.mainnet-beta.solana.com", { + // commitment: "confirmed", + // confirmTransactionInitialTimeout: 180 * 1000, + // }); + + const options = anchor.AnchorProvider.defaultOptions(); + const wallet = NodeWallet.local(); + const provider = new anchor.AnchorProvider(connection, wallet, options); + + anchor.setProvider(provider); + + const zapInAmount = 10000; + + // it("Swap + AddLiquidity + Stake in Genopets", async () => { + // // const poolId = new anchor.web3.PublicKey( + // // "DPgYdwgz7ZytfrzLeRYJwXq9JGeskaXTRrM8biFEnLs1" // PRGC-USDC + // // ); + // const farmId = new anchor.web3.PublicKey( + // "tEAbLeDznDdQ5jvdk1cdm2qUzoYmyc6nX5FChAyAB2U" // GENE + // ); + // const swapParams: SwapParams = { + // protocol: SupportedProtocols.Jupiter, + // fromTokenMint: new PublicKey( + // // "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v" // USDC + // "So11111111111111111111111111111111111111112" // WSOL + // ), + // toTokenMint: new PublicKey( + // "GENEtH5amGSi8kHAtQoezp1XEXwZJ8vcuePYnXdKrMYz" // GENE + // ), + // amount: zapInAmount / 2, // Swap half of the fromToken to proceed zapIn + // slippage: 1, + // }; + // // const addLiquidityParams: AddLiquidityParams = { + // // protocol: SupportedProtocols.Genopets, + // // poolId, + // // }; + // const farm = (await genopets.infos.getFarm( + // connection, + // farmId + // )) as genopets.FarmInfo; + // const stakeParams: StakeParams = { + // protocol: SupportedProtocols.Genopets, + // farmId, + // version: 1, + // lpAmount: 1000, + // lockDuration: 0, + // }; + + // const gateway = new GatewayBuilder(provider); + + // // await gateway.swap(swapParams); + // console.log(gateway.params.swapMinOutAmount.toNumber()); + // // Work-around + // // addLiquidityParams.tokenInAmount = + // // gateway.params.swapMinOutAmount.toNumber(); + // // await gateway.addLiquidity(addLiquidityParams); + // await gateway.stake(stakeParams); + + // await gateway.finalize(); + + // console.log(gateway.params); + // // console.log(`swapInAmount: ${gateway.params.swapInAmount}`); + // // console.log(`swapMinOutAmount: ${gateway.params.swapMinOutAmount}`); + + // const txs = gateway.transactions(); + + // console.log("======"); + // console.log("Txs are sent..."); + // for (let tx of txs) { + // const sig = await provider.sendAndConfirm(tx, [], { + // skipPreflight: true, + // commitment: "confirmed", + // } as unknown as anchor.web3.ConfirmOptions); + // console.log(sig); + // } + // console.log("Txs are executed"); + // console.log("======"); + // }); + + it("Unstake + Harvest + RemoveLiquidity + Swap in Genopets", async () => { + // const poolId = new anchor.web3.PublicKey( + // "GaqgfieVmnmY4ZsZHHA6L5RSVzCGL3sKx4UgHBaYNy8m" // RAY-SRM + // ); + const farmId = new anchor.web3.PublicKey( + "tEAbLeDznDdQ5jvdk1cdm2qUzoYmyc6nX5FChAyAB2U" + ); + + // const pool = await genopets.infos.getPool(connection, poolId); + // const poolWrapper = new genopets.PoolInfoWrapper(pool as genopets.PoolInfo); + const farm = (await genopets.infos.getFarm( + connection, + farmId + )) as genopets.FarmInfo; + + // Get share amount + const ledgerKey = await genopets.infos.getFarmerId( + farm, + provider.wallet.publicKey + ); + const farmer = (await genopets.infos.getFarmer( + connection, + ledgerKey + )) as genopets.FarmerInfo; + const shareAmount = Number(farmer.totalRewards); + console.log(shareAmount); + + // const { tokenAAmount, tokenBAmount } = await poolWrapper.getTokenAmounts( + // shareAmount + // ); + const harvestParams1: HarvestParams = { + protocol: SupportedProtocols.Genopets, + farmId, + type: HarvestType.ClaimRewards, + }; + + let depositId: anchor.web3.PublicKey; + for (let deposit of farmer.userDeposit) { + if (deposit?.isYield == true) { + depositId = deposit.depositId; + break; + } + } + const harvestParams2: HarvestParams = { + protocol: SupportedProtocols.Genopets, + farmId, + type: HarvestType.WithdrawAsSgene, + farmerKey: depositId!, + }; + + for (let deposit of farmer.userDeposit) { + if (deposit?.isYield == false) { + depositId = deposit.depositId; + } + } + const harvestParams3: HarvestParams = { + protocol: SupportedProtocols.Genopets, + farmId, + type: HarvestType.Withdraw, + farmerKey: new PublicKey("Epr3R75CTWeRWdB9sqBjj192dgJyAt4tvyZzPJtbbQNT"), + }; + // const unstakeParams: UnstakeParams = { + // protocol: SupportedProtocols.Genopets, + // farmId, + // shareAmount, + // version: 1, + // }; + // const removeLiquidityParams: RemoveLiquidityParams = { + // protocol: SupportedProtocols.Raydium, + // poolId, + // }; + // const swapParams: SwapParams = { + // protocol: SupportedProtocols.Jupiter, + // fromTokenMint: new PublicKey( + // "GENEtH5amGSi8kHAtQoezp1XEXwZJ8vcuePYnXdKrMYz" // GENE + // ), + // toTokenMint: new PublicKey( + // "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v" // USDC + // ), + // amount: 100, // swap coin to pc + // slippage: 3, + // }; + + const gateway = new GatewayBuilder(provider); + + // await gateway.harvest(harvestParams1); + // await gateway.harvest(harvestParams2); + await gateway.harvest(harvestParams3); + // await gateway.unstake(unstakeParams); + // await gateway.removeLiquidity(removeLiquidityParams); + // await gateway.swap(swapParams); + + await gateway.finalize(); + + console.log(gateway.params); + // console.log(`swapInAmount: ${gateway.gatewayParams.swapInAmount}`); + // console.log(`swapMinOutAmount: ${gateway.gatewayParams.swapMinOutAmount}`); + + const txs = gateway.transactions(); + + console.log("======"); + console.log("Txs are sent..."); + for (let tx of txs) { + const sig = await provider.sendAndConfirm(tx, [], { + skipPreflight: true, + commitment: "confirmed", + } as unknown as anchor.web3.ConfirmOptions); + console.log(sig); + } + console.log("Txs are executed"); + console.log("======"); + }); +}); From ed12c3f46b69e640d1ce48c7bac8c76274983404 Mon Sep 17 00:00:00 2001 From: emerson Date: Thu, 3 Nov 2022 18:06:54 +0000 Subject: [PATCH 04/18] Add optional props --- src/types.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/types.ts b/src/types.ts index 5e23421..e28f45e 100644 --- a/src/types.ts +++ b/src/types.ts @@ -274,6 +274,7 @@ export interface StakeParams { lpAmount?: number; version?: number; lockDuration?: number; + mint?: anchor.web3.PublicKey; } export interface UnstakeParams { @@ -282,6 +283,7 @@ export interface UnstakeParams { shareAmount: number; farmerKey?: anchor.web3.PublicKey; version?: number; + mint?: anchor.web3.PublicKey; } export interface HarvestParams { @@ -290,6 +292,7 @@ export interface HarvestParams { farmerKey?: anchor.web3.PublicKey; version?: number; type?: HarvestType; + mint?: anchor.web3.PublicKey; } export interface SupplyParams { From 1d9a8de54e589045d3f46c1b3caabe688d1ec296 Mon Sep 17 00:00:00 2001 From: emerson Date: Thu, 3 Nov 2022 20:30:54 +0000 Subject: [PATCH 05/18] Generalize input mint --- src/protocols/genopets.ts | 51 +++++++++++++++------------------------ 1 file changed, 20 insertions(+), 31 deletions(-) diff --git a/src/protocols/genopets.ts b/src/protocols/genopets.ts index b943fce..93ea68c 100644 --- a/src/protocols/genopets.ts +++ b/src/protocols/genopets.ts @@ -72,10 +72,10 @@ export class ProtocolGenopets implements IProtocolFarm { let preInstructions: anchor.web3.TransactionInstruction[] = []; const userPoolTokenAccount = await getAssociatedTokenAddress( - farm.geneMint, + params.mint, userKey ); - preInstructions.push(await createATAWithoutCheckIx(userKey, farm.geneMint)); + preInstructions.push(await createATAWithoutCheckIx(userKey, params.mint)); const userSgeneTokenAccount = await getAssociatedTokenAddress( farm.mintSgene, @@ -86,23 +86,23 @@ export class ProtocolGenopets implements IProtocolFarm { ); const vaultATA = await getAssociatedTokenAddress( - farm.geneMint, + params.mint, farmerId, true ); preInstructions.push( - await createATAWithoutCheckIx(farmerId, farm.geneMint, userKey) + await createATAWithoutCheckIx(farmerId, params.mint, userKey) ); const remainingAccounts = [ { pubkey: userKey, isSigner: true, isWritable: true }, // 0 { pubkey: farm.farmId, isSigner: false, isWritable: true }, // 1 { - pubkey: farmWrapper.getStakingPool(farm.geneMint), + pubkey: farmWrapper.getStakingPool(params.mint), isSigner: false, isWritable: true, }, // 2 - { pubkey: farm.geneMint, isSigner: false, isWritable: true }, // 3 + { pubkey: params.mint, isSigner: false, isWritable: true }, // 3 { pubkey: farmerId, isSigner: false, isWritable: true }, // 4 { pubkey: userPoolTokenAccount, @@ -205,17 +205,17 @@ export class ProtocolGenopets implements IProtocolFarm { farmerId )) as genopets.FarmerInfo; const farmerWrapper = new genopets.FarmerInfoWrapper(farmer); - userDeposit = farmerWrapper.getUserDeposit(); - userReDeposit = farmerWrapper.getUserReDeposit(); + userDeposit = params.farmerKey || farmerWrapper.getUserDeposit(); + userReDeposit = farmerWrapper.getUserDeposit(); } let preInstructions: anchor.web3.TransactionInstruction[] = []; const userPoolTokenAccount = await getAssociatedTokenAddress( - farm.geneMint, + params.mint, userKey ); - preInstructions.push(await createATAWithoutCheckIx(userKey, farm.geneMint)); + preInstructions.push(await createATAWithoutCheckIx(userKey, params.mint)); const userSgeneTokenAccount = await getAssociatedTokenAddress( farm.mintSgene, @@ -226,7 +226,7 @@ export class ProtocolGenopets implements IProtocolFarm { ); const vaultATA = await getAssociatedTokenAddress( - farm.geneMint, + params.mint, farmerId, true ); @@ -235,11 +235,11 @@ export class ProtocolGenopets implements IProtocolFarm { { pubkey: userKey, isSigner: true, isWritable: true }, // 0 { pubkey: farm.farmId, isSigner: false, isWritable: true }, // 1 { - pubkey: farmWrapper.getStakingPool(farm.geneMint), + pubkey: farmWrapper.getStakingPool(params.mint), isSigner: false, isWritable: true, }, // 2 - { pubkey: farm.geneMint, isSigner: false, isWritable: false }, // 3 + { pubkey: params.mint, isSigner: false, isWritable: false }, // 3 { pubkey: farmerId, isSigner: false, isWritable: true }, // 4 { pubkey: userPoolTokenAccount, @@ -277,12 +277,12 @@ export class ProtocolGenopets implements IProtocolFarm { isWritable: true, }, // 11 { - pubkey: userDeposit, + pubkey: userReDeposit, isSigner: false, isWritable: true, }, // 12 { - pubkey: userReDeposit, + pubkey: userDeposit, isSigner: false, isWritable: true, }, // 13 @@ -352,17 +352,6 @@ export class ProtocolGenopets implements IProtocolFarm { console.log("before userDeposit:", userDeposit.toBase58()); console.log("before userReDeposit:", userReDeposit.toBase58()); - // if (farmerAccount) { - // const farmer = (await genopets.infos.getFarmer( - // this._connection, - // farmerId - // )) as genopets.FarmerInfo; - // const farmerWrapper = new genopets.FarmerInfoWrapper(farmer); - // userDeposit = farmerWrapper.getUserDeposit(); - // userReDeposit = farmerWrapper.getUserReDeposit(); - // } - // console.log("userDeposit:", userDeposit.toBase58()); - // console.log("userReDeposit:", userReDeposit.toBase58()); let preInstructions: anchor.web3.TransactionInstruction[] = []; @@ -449,15 +438,15 @@ export class ProtocolGenopets implements IProtocolFarm { console.log("userReDeposit:", userReDeposit.toBase58()); const userPoolTokenAccount = await getAssociatedTokenAddress( - farm.geneMint, + params.mint, userKey ); preInstructions.push( - await createATAWithoutCheckIx(userKey, farm.geneMint) + await createATAWithoutCheckIx(userKey, params.mint) ); const vaultATA = await getAssociatedTokenAddress( - farm.geneMint, + params.mint, farmerId, true ); @@ -465,11 +454,11 @@ export class ProtocolGenopets implements IProtocolFarm { { pubkey: userKey, isSigner: true, isWritable: true }, // 0 { pubkey: farm.farmId, isSigner: false, isWritable: true }, // 1 { - pubkey: farmWrapper.getStakingPool(farm.geneMint), + pubkey: farmWrapper.getStakingPool(params.mint), isSigner: false, isWritable: true, }, // 2 - { pubkey: farm.geneMint, isSigner: false, isWritable: false }, // 3 + { pubkey: params.mint, isSigner: false, isWritable: false }, // 3 { pubkey: farmerId, isSigner: false, isWritable: true }, // 4 { pubkey: userPoolTokenAccount, From 107f53ce16ab3a105914c6538c86d5a06eb82b36 Mon Sep 17 00:00:00 2001 From: emerson Date: Thu, 3 Nov 2022 20:31:01 +0000 Subject: [PATCH 06/18] Update --- tests/testAdapterGenopets.ts | 318 +++++++++++++++++++++++++---------- 1 file changed, 230 insertions(+), 88 deletions(-) diff --git a/tests/testAdapterGenopets.ts b/tests/testAdapterGenopets.ts index 3adb5fa..4548e60 100644 --- a/tests/testAdapterGenopets.ts +++ b/tests/testAdapterGenopets.ts @@ -17,10 +17,13 @@ import { import { genopets } from "@dappio-wonderland/navigator"; describe("Gateway", () => { - const connection = new Connection("https://rpc-mainnet-fork.epochs.studio", { - commitment: "confirmed", - wsEndpoint: "wss://rpc-mainnet-fork.epochs.studio/ws", - }); + const connection = new Connection( + "https://rpc-mainnet-fork.epochs.studio/notcache", + { + commitment: "confirmed", + wsEndpoint: "wss://rpc-mainnet-fork.epochs.studio/ws", + } + ); // const connection = new Connection("https://solana-api.tt-prod.net", { // commitment: "confirmed", // confirmTransactionInitialTimeout: 180 * 1000, @@ -41,114 +44,110 @@ describe("Gateway", () => { anchor.setProvider(provider); const zapInAmount = 10000; + const GENE_USDC_LP = new PublicKey( + "7GKvfHEXenNiWYbJBKae89mdaMPr5gGMYwZmyC8gBNVG" + ); + const GENE_MINT = new PublicKey( + "GENEtH5amGSi8kHAtQoezp1XEXwZJ8vcuePYnXdKrMYz" + ); - // it("Swap + AddLiquidity + Stake in Genopets", async () => { - // // const poolId = new anchor.web3.PublicKey( - // // "DPgYdwgz7ZytfrzLeRYJwXq9JGeskaXTRrM8biFEnLs1" // PRGC-USDC - // // ); - // const farmId = new anchor.web3.PublicKey( - // "tEAbLeDznDdQ5jvdk1cdm2qUzoYmyc6nX5FChAyAB2U" // GENE - // ); - // const swapParams: SwapParams = { - // protocol: SupportedProtocols.Jupiter, - // fromTokenMint: new PublicKey( - // // "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v" // USDC - // "So11111111111111111111111111111111111111112" // WSOL - // ), - // toTokenMint: new PublicKey( - // "GENEtH5amGSi8kHAtQoezp1XEXwZJ8vcuePYnXdKrMYz" // GENE - // ), - // amount: zapInAmount / 2, // Swap half of the fromToken to proceed zapIn - // slippage: 1, - // }; - // // const addLiquidityParams: AddLiquidityParams = { - // // protocol: SupportedProtocols.Genopets, - // // poolId, - // // }; - // const farm = (await genopets.infos.getFarm( - // connection, - // farmId - // )) as genopets.FarmInfo; - // const stakeParams: StakeParams = { - // protocol: SupportedProtocols.Genopets, - // farmId, - // version: 1, - // lpAmount: 1000, - // lockDuration: 0, - // }; + const mint = GENE_USDC_LP; + // const mint = GENE_MINT; - // const gateway = new GatewayBuilder(provider); + it("Stake in Genopets", async () => { + const farmId = new anchor.web3.PublicKey( + "tEAbLeDznDdQ5jvdk1cdm2qUzoYmyc6nX5FChAyAB2U" // GENE + ); + const swapParams: SwapParams = { + protocol: SupportedProtocols.Jupiter, + fromTokenMint: new PublicKey( + // "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v" // USDC + "So11111111111111111111111111111111111111112" // WSOL + ), + toTokenMint: new PublicKey( + "GENEtH5amGSi8kHAtQoezp1XEXwZJ8vcuePYnXdKrMYz" // GENE + ), + amount: zapInAmount / 2, // Swap half of the fromToken to proceed zapIn + slippage: 1, + }; + // const addLiquidityParams: AddLiquidityParams = { + // protocol: SupportedProtocols.Genopets, + // poolId, + // }; + const farm = (await genopets.infos.getFarm( + connection, + farmId + )) as genopets.FarmInfo; + const stakeParams: StakeParams = { + protocol: SupportedProtocols.Genopets, + farmId, + version: 1, + lpAmount: 10000, + lockDuration: 0, + mint, + }; - // // await gateway.swap(swapParams); - // console.log(gateway.params.swapMinOutAmount.toNumber()); - // // Work-around - // // addLiquidityParams.tokenInAmount = - // // gateway.params.swapMinOutAmount.toNumber(); - // // await gateway.addLiquidity(addLiquidityParams); - // await gateway.stake(stakeParams); + const gateway = new GatewayBuilder(provider); - // await gateway.finalize(); + // await gateway.swap(swapParams); + console.log(gateway.params.swapMinOutAmount.toNumber()); + // Work-around + // addLiquidityParams.tokenInAmount = + // gateway.params.swapMinOutAmount.toNumber(); + // await gateway.addLiquidity(addLiquidityParams); + await gateway.stake(stakeParams); - // console.log(gateway.params); - // // console.log(`swapInAmount: ${gateway.params.swapInAmount}`); - // // console.log(`swapMinOutAmount: ${gateway.params.swapMinOutAmount}`); + await gateway.finalize(); - // const txs = gateway.transactions(); + console.log(gateway.params); + // console.log(`swapInAmount: ${gateway.params.swapInAmount}`); + // console.log(`swapMinOutAmount: ${gateway.params.swapMinOutAmount}`); - // console.log("======"); - // console.log("Txs are sent..."); - // for (let tx of txs) { - // const sig = await provider.sendAndConfirm(tx, [], { - // skipPreflight: true, - // commitment: "confirmed", - // } as unknown as anchor.web3.ConfirmOptions); - // console.log(sig); - // } - // console.log("Txs are executed"); - // console.log("======"); - // }); + const txs = gateway.transactions(); - it("Unstake + Harvest + RemoveLiquidity + Swap in Genopets", async () => { - // const poolId = new anchor.web3.PublicKey( - // "GaqgfieVmnmY4ZsZHHA6L5RSVzCGL3sKx4UgHBaYNy8m" // RAY-SRM - // ); + console.log("======"); + console.log("Txs are sent..."); + for (let tx of txs) { + const sig = await provider.sendAndConfirm(tx, [], { + skipPreflight: true, + commitment: "confirmed", + } as unknown as anchor.web3.ConfirmOptions); + console.log(sig); + } + console.log("Txs are executed"); + console.log("======"); + }); + + it("Unstake + Harvest in Genopets", async () => { const farmId = new anchor.web3.PublicKey( "tEAbLeDznDdQ5jvdk1cdm2qUzoYmyc6nX5FChAyAB2U" ); - // const pool = await genopets.infos.getPool(connection, poolId); - // const poolWrapper = new genopets.PoolInfoWrapper(pool as genopets.PoolInfo); const farm = (await genopets.infos.getFarm( connection, farmId )) as genopets.FarmInfo; - // Get share amount - const ledgerKey = await genopets.infos.getFarmerId( + const farmerId = await genopets.infos.getFarmerId( farm, provider.wallet.publicKey ); const farmer = (await genopets.infos.getFarmer( connection, - ledgerKey + farmerId )) as genopets.FarmerInfo; - const shareAmount = Number(farmer.totalRewards); - console.log(shareAmount); - // const { tokenAAmount, tokenBAmount } = await poolWrapper.getTokenAmounts( - // shareAmount - // ); const harvestParams1: HarvestParams = { protocol: SupportedProtocols.Genopets, farmId, type: HarvestType.ClaimRewards, + mint, }; let depositId: anchor.web3.PublicKey; for (let deposit of farmer.userDeposit) { if (deposit?.isYield == true) { depositId = deposit.depositId; - break; } } const harvestParams2: HarvestParams = { @@ -156,10 +155,17 @@ describe("Gateway", () => { farmId, type: HarvestType.WithdrawAsSgene, farmerKey: depositId!, + mint, }; for (let deposit of farmer.userDeposit) { - if (deposit?.isYield == false) { + const timestamp = Number(deposit?.lockUntil); + const currentTimestamp = Number(new Date()) / 1000; + if ( + deposit?.isYield == false && + deposit.poolToken.equals(mint) && + timestamp < currentTimestamp + ) { depositId = deposit.depositId; } } @@ -167,14 +173,16 @@ describe("Gateway", () => { protocol: SupportedProtocols.Genopets, farmId, type: HarvestType.Withdraw, - farmerKey: new PublicKey("Epr3R75CTWeRWdB9sqBjj192dgJyAt4tvyZzPJtbbQNT"), + farmerKey: depositId!, + mint, + }; + const unstakeParams: UnstakeParams = { + protocol: SupportedProtocols.Genopets, + farmId, + shareAmount: 1000, // dummy + farmerKey: depositId!, + mint, }; - // const unstakeParams: UnstakeParams = { - // protocol: SupportedProtocols.Genopets, - // farmId, - // shareAmount, - // version: 1, - // }; // const removeLiquidityParams: RemoveLiquidityParams = { // protocol: SupportedProtocols.Raydium, // poolId, @@ -195,8 +203,8 @@ describe("Gateway", () => { // await gateway.harvest(harvestParams1); // await gateway.harvest(harvestParams2); - await gateway.harvest(harvestParams3); - // await gateway.unstake(unstakeParams); + // await gateway.harvest(harvestParams3); + await gateway.unstake(unstakeParams); // await gateway.removeLiquidity(removeLiquidityParams); // await gateway.swap(swapParams); @@ -220,4 +228,138 @@ describe("Gateway", () => { console.log("Txs are executed"); console.log("======"); }); + + // it("Unstake all in Genopets", async () => { + // const farmId = new anchor.web3.PublicKey( + // "tEAbLeDznDdQ5jvdk1cdm2qUzoYmyc6nX5FChAyAB2U" + // ); + + // const farm = (await genopets.infos.getFarm( + // connection, + // farmId + // )) as genopets.FarmInfo; + + // const farmerId = await genopets.infos.getFarmerId( + // farm, + // provider.wallet.publicKey + // ); + // const farmer = (await genopets.infos.getFarmer( + // connection, + // farmerId + // )) as genopets.FarmerInfo; + + // const gateway = new GatewayBuilder(provider); + + // const harvestParams1: HarvestParams = { + // protocol: SupportedProtocols.Genopets, + // farmId, + // type: HarvestType.ClaimRewards, + // mint, + // }; + // await gateway.harvest(harvestParams1); + + // let depositId: anchor.web3.PublicKey; + // let counter = 0; + // for (let deposit of farmer.userDeposit) { + // const timestamp = Number(deposit?.lockUntil); + // const currentTimestamp = Number(new Date()) / 1000; + // if ( + // deposit?.isYield == false && + // deposit.poolToken.equals(mint) && + // timestamp < currentTimestamp + // ) { + // depositId = deposit.depositId; + + // const unstakeParams: UnstakeParams = { + // protocol: SupportedProtocols.Genopets, + // farmId, + // shareAmount: 1000, // dummy + // farmerKey: depositId!, + // mint, + // }; + + // await gateway.unstake(unstakeParams); + // counter++; + // if (counter == 1) break; + // } + // } + + // await gateway.finalize(); + + // console.log(gateway.params); + + // const txs = gateway.transactions(); + + // console.log("======"); + // console.log("Txs are sent..."); + // for (let tx of txs) { + // const sig = await provider.sendAndConfirm(tx, [], { + // skipPreflight: true, + // commitment: "confirmed", + // } as unknown as anchor.web3.ConfirmOptions); + // console.log(sig); + // } + // console.log("Txs are executed"); + // console.log("======"); + // }); + + // it("Harvest all in Genopets", async () => { + // const farmId = new anchor.web3.PublicKey( + // "tEAbLeDznDdQ5jvdk1cdm2qUzoYmyc6nX5FChAyAB2U" + // ); + + // const farm = (await genopets.infos.getFarm( + // connection, + // farmId + // )) as genopets.FarmInfo; + + // const farmerId = await genopets.infos.getFarmerId( + // farm, + // provider.wallet.publicKey + // ); + // const farmer = (await genopets.infos.getFarmer( + // connection, + // farmerId + // )) as genopets.FarmerInfo; + + // const gateway = new GatewayBuilder(provider); + + // let depositId: anchor.web3.PublicKey; + // let counter = 0; + // for (let deposit of farmer.userDeposit) { + // if (deposit?.isYield == true) { + // depositId = deposit.depositId; + + // const harvestParams2: HarvestParams = { + // protocol: SupportedProtocols.Genopets, + // farmId, + // type: HarvestType.WithdrawAsSgene, + // farmerKey: depositId!, + // mint, + // }; + + // await gateway.harvest(harvestParams2); + // counter++; + // if (counter == 6) break; + // } + // } + + // await gateway.finalize(); + + // console.log(gateway.params); + + // const txs = gateway.transactions(); + + // console.log("======"); + // console.log("Txs are sent..."); + // for (let tx of txs) { + // const sig = await provider.sendAndConfirm(tx, [], { + // skipPreflight: true, + // commitment: "confirmed", + // } as unknown as anchor.web3.ConfirmOptions); + // console.log(sig); + // } + // console.log("Txs are executed"); + // console.log("======"); + // }); }); From 92f4188c5203091a532fa98eafb11212f09ed0d5 Mon Sep 17 00:00:00 2001 From: emerson Date: Thu, 3 Nov 2022 21:11:33 +0000 Subject: [PATCH 07/18] Rename --- src/types.ts | 6 +++--- tests/testAdapterGenopets.ts | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/types.ts b/src/types.ts index e28f45e..1449c75 100644 --- a/src/types.ts +++ b/src/types.ts @@ -405,9 +405,9 @@ export enum PoolDirection { } export enum HarvestType { - WithdrawAsSgene, - ClaimRewards, - Withdraw, + initialize, + completeAsGene, + completeAsSGene, } export type GatewayParams = TypeDef< diff --git a/tests/testAdapterGenopets.ts b/tests/testAdapterGenopets.ts index 4548e60..c76fe4d 100644 --- a/tests/testAdapterGenopets.ts +++ b/tests/testAdapterGenopets.ts @@ -140,7 +140,7 @@ describe("Gateway", () => { const harvestParams1: HarvestParams = { protocol: SupportedProtocols.Genopets, farmId, - type: HarvestType.ClaimRewards, + type: HarvestType.initialize, mint, }; @@ -153,7 +153,7 @@ describe("Gateway", () => { const harvestParams2: HarvestParams = { protocol: SupportedProtocols.Genopets, farmId, - type: HarvestType.WithdrawAsSgene, + type: HarvestType.completeAsSGene, farmerKey: depositId!, mint, }; @@ -172,7 +172,7 @@ describe("Gateway", () => { const harvestParams3: HarvestParams = { protocol: SupportedProtocols.Genopets, farmId, - type: HarvestType.Withdraw, + type: HarvestType.completeAsGene, farmerKey: depositId!, mint, }; From bf1fc9ea1c87b132bf331b36d9ca613f17a96c81 Mon Sep 17 00:00:00 2001 From: emerson Date: Thu, 3 Nov 2022 21:12:02 +0000 Subject: [PATCH 08/18] Reorganize switch case --- src/protocols/genopets.ts | 37 +++++++++++++++---------------------- 1 file changed, 15 insertions(+), 22 deletions(-) diff --git a/src/protocols/genopets.ts b/src/protocols/genopets.ts index 93ea68c..c9d4271 100644 --- a/src/protocols/genopets.ts +++ b/src/protocols/genopets.ts @@ -47,7 +47,6 @@ export class ProtocolGenopets implements IProtocolFarm { payload ); - this._gatewayParams.asSgene = params.version ? 1 : 0; this._gatewayParams.lockDuration = params.lockDuration ? params.lockDuration : 0; @@ -178,8 +177,6 @@ export class ProtocolGenopets implements IProtocolFarm { farmInfo: IFarmInfo, userKey: anchor.web3.PublicKey ): Promise<{ txs: anchor.web3.Transaction[]; input: Buffer }> { - const isAsSgene = params.version ? true : false; - // Handle payload input here const inputLayout = struct([u64("dummy1")]); let payload = Buffer.alloc(PAYLOAD_SIZE); @@ -190,8 +187,6 @@ export class ProtocolGenopets implements IProtocolFarm { payload ); - this._gatewayParams.asSgene = isAsSgene ? 1 : 0; - // Handle transaction here const farm = farmInfo as genopets.FarmInfo; const farmWrapper = new genopets.FarmInfoWrapper(farm); @@ -334,13 +329,13 @@ export class ProtocolGenopets implements IProtocolFarm { let payload = Buffer.alloc(PAYLOAD_SIZE); inputLayout.encode( { - asSgene: params.type == HarvestType.WithdrawAsSgene ? 1 : 0, + asSgene: params.type == HarvestType.completeAsSGene ? 1 : 0, }, payload ); this._gatewayParams.asSgene = - params.type == HarvestType.WithdrawAsSgene ? 1 : 0; + params.type == HarvestType.completeAsSGene ? 1 : 0; // Handle transaction here const farm = farmInfo as genopets.FarmInfo; @@ -365,18 +360,16 @@ export class ProtocolGenopets implements IProtocolFarm { let remainingAccounts: anchor.web3.AccountMeta[] = []; switch (params.type) { - case HarvestType.WithdrawAsSgene: + case HarvestType.initialize: if (farmerAccount) { const farmer = (await genopets.infos.getFarmer( this._connection, farmerId )) as genopets.FarmerInfo; const farmerWrapper = new genopets.FarmerInfoWrapper(farmer); - userDeposit = params.farmerKey || farmerWrapper.getUserDeposit(); + userDeposit = farmerWrapper.getUserDeposit(); userReDeposit = farmerWrapper.getUserReDeposit(); } - console.log("userDeposit:", userDeposit.toBase58()); - console.log("userReDeposit:", userReDeposit.toBase58()); remainingAccounts = [ { pubkey: userKey, isSigner: true, isWritable: true }, // 0 @@ -388,12 +381,12 @@ export class ProtocolGenopets implements IProtocolFarm { isWritable: false, }, // 3 { - pubkey: userSgeneTokenAccount, + pubkey: farm.mintSgene, isSigner: false, isWritable: true, }, // 4 { - pubkey: farm.mintSgene, + pubkey: userSgeneTokenAccount, isSigner: false, isWritable: true, }, // 5 @@ -424,7 +417,7 @@ export class ProtocolGenopets implements IProtocolFarm { }, // 10 ]; break; - case HarvestType.Withdraw: + case HarvestType.completeAsGene: if (farmerAccount) { const farmer = (await genopets.infos.getFarmer( this._connection, @@ -434,8 +427,6 @@ export class ProtocolGenopets implements IProtocolFarm { userDeposit = params.farmerKey || farmerWrapper.getUserDeposit(); userReDeposit = farmerWrapper.getUserDeposit(); } - console.log("userDeposit:", userDeposit.toBase58()); - console.log("userReDeposit:", userReDeposit.toBase58()); const userPoolTokenAccount = await getAssociatedTokenAddress( params.mint, @@ -527,18 +518,16 @@ export class ProtocolGenopets implements IProtocolFarm { }, // 17 ]; break; - default: + case HarvestType.completeAsSGene: if (farmerAccount) { const farmer = (await genopets.infos.getFarmer( this._connection, farmerId )) as genopets.FarmerInfo; const farmerWrapper = new genopets.FarmerInfoWrapper(farmer); - userDeposit = farmerWrapper.getUserDeposit(); + userDeposit = params.farmerKey || farmerWrapper.getUserDeposit(); userReDeposit = farmerWrapper.getUserReDeposit(); } - console.log("userDeposit:", userDeposit.toBase58()); - console.log("userReDeposit:", userReDeposit.toBase58()); remainingAccounts = [ { pubkey: userKey, isSigner: true, isWritable: true }, // 0 @@ -550,12 +539,12 @@ export class ProtocolGenopets implements IProtocolFarm { isWritable: false, }, // 3 { - pubkey: farm.mintSgene, + pubkey: userSgeneTokenAccount, isSigner: false, isWritable: true, }, // 4 { - pubkey: userSgeneTokenAccount, + pubkey: farm.mintSgene, isSigner: false, isWritable: true, }, // 5 @@ -586,6 +575,10 @@ export class ProtocolGenopets implements IProtocolFarm { }, // 10 ]; break; + + default: + console.error("Error: Unsupported harvest type"); + break; } const txHarvest = await this._gatewayProgram.methods From 55290bbd2354dc6f3b08422c53a5016ddab20609 Mon Sep 17 00:00:00 2001 From: emerson Date: Thu, 3 Nov 2022 21:37:45 +0000 Subject: [PATCH 09/18] Update dependency --- package.json | 4 ++-- yarn.lock | 18 +++++++++--------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/package.json b/package.json index 97761fc..e8b7dee 100644 --- a/package.json +++ b/package.json @@ -8,8 +8,8 @@ "dist" ], "dependencies": { - "@dappio-wonderland/gateway-idls": "^0.2.7-test.2", - "@dappio-wonderland/navigator": "^0.2.14-test.10", + "@dappio-wonderland/gateway-idls": "^0.2.7-test.3", + "@dappio-wonderland/navigator": "^0.2.14-test.11", "@jup-ag/core": "1.0.0-beta.26", "@project-serum/anchor": "^0.24.2", "@project-serum/borsh": "^0.2.5", diff --git a/yarn.lock b/yarn.lock index acc2380..a8b78d3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -21,15 +21,15 @@ tiny-invariant "^1.1.0" toformat "^2.0.0" -"@dappio-wonderland/gateway-idls@^0.2.7-test.2": - version "0.2.7-test.2" - resolved "https://registry.yarnpkg.com/@dappio-wonderland/gateway-idls/-/gateway-idls-0.2.7-test.2.tgz#840b766db3479633ceba542f62ed5ac1ed3c0156" - integrity sha512-5pXfz+kcPXgHJF93Wgmu49sNzg5yIZ0DDdjwRYXPXS4eVwh65+J4wgnNN2l4wVfwxTe9dYsjifKnY1Ckg56JXQ== - -"@dappio-wonderland/navigator@^0.2.14-test.10": - version "0.2.14-test.10" - resolved "https://registry.yarnpkg.com/@dappio-wonderland/navigator/-/navigator-0.2.14-test.10.tgz#c58e8f7fa3cbe067efc1b3e9b59f12df7acf386f" - integrity sha512-VB1VLycfWEgr/wFjdyo7OiLs1fIRDr0+sdtA6ZmpncVX1XqLeroC+gA8lk9RmiJptGINEeDx9Ww881+1ksna7Q== +"@dappio-wonderland/gateway-idls@^0.2.7-test.3": + version "0.2.7-test.3" + resolved "https://registry.yarnpkg.com/@dappio-wonderland/gateway-idls/-/gateway-idls-0.2.7-test.3.tgz#26958b259071b0c18a67d62f270464af1da9fc79" + integrity sha512-Aa9z49BhoB0DQW0z+SvEp7oI4mFKN8qZJSoItuQnnb26GFENKqkw3mK87HBK2dL+vwPtlUZNvuqLwFCb2zU9lg== + +"@dappio-wonderland/navigator@^0.2.14-test.11": + version "0.2.14-test.11" + resolved "https://registry.yarnpkg.com/@dappio-wonderland/navigator/-/navigator-0.2.14-test.11.tgz#d745ef8cf9bce6aa368a3bd9e7e42b77041d8b74" + integrity sha512-o1eeUWf7eYG+WT4sQCUVXHeFPliDUeJtcMqwrMiK9dad9X/LQ3zQm0/rnl3OKLN42EqngAtohiYyT0rK3Eysyg== dependencies: "@project-serum/borsh" "^0.2.2" "@project-serum/serum" "^0.13.61" From 20617800777b9c1a6c3ba8f894fc3a447c5b4d2c Mon Sep 17 00:00:00 2001 From: emerson Date: Thu, 3 Nov 2022 21:38:15 +0000 Subject: [PATCH 10/18] Rename due to program update --- src/builder.ts | 2 +- src/types.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/builder.ts b/src/builder.ts index 27eff93..d1c2818 100644 --- a/src/builder.ts +++ b/src/builder.ts @@ -112,7 +112,7 @@ export class GatewayBuilder { poolDirection: PoolDirection.Obverse, swapMinOutAmount: new anchor.BN(0), lockDuration: 0, - asSgene: 0, + harvestType: 0, }; this._metadata = { diff --git a/src/types.ts b/src/types.ts index 1449c75..26ddc89 100644 --- a/src/types.ts +++ b/src/types.ts @@ -476,7 +476,7 @@ export type GatewayParams = TypeDef< type: "u8"; }, { - name: "asSgene"; + name: "harvestType"; type: "u8"; } ]; From 0df1b07f5bca835f98775fb0ee078148e109e725 Mon Sep 17 00:00:00 2001 From: emerson Date: Thu, 3 Nov 2022 21:38:29 +0000 Subject: [PATCH 11/18] Update --- src/protocols/genopets.ts | 22 +++++++++------------- 1 file changed, 9 insertions(+), 13 deletions(-) diff --git a/src/protocols/genopets.ts b/src/protocols/genopets.ts index c9d4271..3275496 100644 --- a/src/protocols/genopets.ts +++ b/src/protocols/genopets.ts @@ -56,8 +56,8 @@ export class ProtocolGenopets implements IProtocolFarm { const farmWrapper = new genopets.FarmInfoWrapper(farm); const farmerId = await genopets.infos.getFarmerId(farm, userKey); const farmerAccount = await this._connection.getAccountInfo(farmerId); - let userDeposit = genopets.calcDeposit(userKey, 0); - let userReDeposit = genopets.calcDeposit(userKey, 1); + let userDeposit = genopets.getFarmerDepositKey(userKey, 0); + let userReDeposit = genopets.getFarmerDepositKey(userKey, 1); if (farmerAccount) { const farmer = (await genopets.infos.getFarmer( this._connection, @@ -192,8 +192,8 @@ export class ProtocolGenopets implements IProtocolFarm { const farmWrapper = new genopets.FarmInfoWrapper(farm); const farmerId = await genopets.infos.getFarmerId(farm, userKey); const farmerAccount = await this._connection.getAccountInfo(farmerId); - let userDeposit = genopets.calcDeposit(userKey, 0); - let userReDeposit = genopets.calcDeposit(userKey, 1); + let userDeposit = genopets.getFarmerDepositKey(userKey, 0); + let userReDeposit = genopets.getFarmerDepositKey(userKey, 1); if (farmerAccount) { const farmer = (await genopets.infos.getFarmer( this._connection, @@ -325,28 +325,24 @@ export class ProtocolGenopets implements IProtocolFarm { userKey: anchor.web3.PublicKey ): Promise<{ txs: anchor.web3.Transaction[]; input: Buffer }> { // Handle payload input here - const inputLayout = struct([u8("asSgene")]); + const inputLayout = struct([u8("harvestType")]); let payload = Buffer.alloc(PAYLOAD_SIZE); inputLayout.encode( { - asSgene: params.type == HarvestType.completeAsSGene ? 1 : 0, + harvestType: params.type == params.type, }, payload ); - this._gatewayParams.asSgene = - params.type == HarvestType.completeAsSGene ? 1 : 0; + this._gatewayParams.harvestType = params.type; // Handle transaction here const farm = farmInfo as genopets.FarmInfo; const farmWrapper = new genopets.FarmInfoWrapper(farm); const farmerId = await genopets.infos.getFarmerId(farm, userKey); const farmerAccount = await this._connection.getAccountInfo(farmerId); - let userDeposit = genopets.calcDeposit(userKey, 0); - let userReDeposit = genopets.calcDeposit(userKey, 1); - - console.log("before userDeposit:", userDeposit.toBase58()); - console.log("before userReDeposit:", userReDeposit.toBase58()); + let userDeposit = genopets.getFarmerDepositKey(userKey, 0); + let userReDeposit = genopets.getFarmerDepositKey(userKey, 1); let preInstructions: anchor.web3.TransactionInstruction[] = []; From e1bcf60c98905670ad439eb03e3ed70bf4fd2fa5 Mon Sep 17 00:00:00 2001 From: emerson Date: Thu, 3 Nov 2022 22:03:30 +0000 Subject: [PATCH 12/18] Fix issue --- src/protocols/genopets.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/protocols/genopets.ts b/src/protocols/genopets.ts index 3275496..ed4093d 100644 --- a/src/protocols/genopets.ts +++ b/src/protocols/genopets.ts @@ -329,7 +329,7 @@ export class ProtocolGenopets implements IProtocolFarm { let payload = Buffer.alloc(PAYLOAD_SIZE); inputLayout.encode( { - harvestType: params.type == params.type, + harvestType: params.type, }, payload ); From 36561ae9336c5dca3e940c6e24af34e450196080 Mon Sep 17 00:00:00 2001 From: emerson Date: Thu, 3 Nov 2022 22:18:50 +0000 Subject: [PATCH 13/18] Add add/remove liquidity --- tests/testAdapterGenopets.ts | 56 +++++++++++------------------------- 1 file changed, 17 insertions(+), 39 deletions(-) diff --git a/tests/testAdapterGenopets.ts b/tests/testAdapterGenopets.ts index c76fe4d..53cfcc2 100644 --- a/tests/testAdapterGenopets.ts +++ b/tests/testAdapterGenopets.ts @@ -43,7 +43,6 @@ describe("Gateway", () => { anchor.setProvider(provider); - const zapInAmount = 10000; const GENE_USDC_LP = new PublicKey( "7GKvfHEXenNiWYbJBKae89mdaMPr5gGMYwZmyC8gBNVG" ); @@ -55,25 +54,17 @@ describe("Gateway", () => { // const mint = GENE_MINT; it("Stake in Genopets", async () => { + const poolId = new anchor.web3.PublicKey( + "Enq8vJucRbkzKA1i1PahJNhMyUTzoVL5Cs8n5rC3NLGn" // GENE-USDC + ); const farmId = new anchor.web3.PublicKey( - "tEAbLeDznDdQ5jvdk1cdm2qUzoYmyc6nX5FChAyAB2U" // GENE + "tEAbLeDznDdQ5jvdk1cdm2qUzoYmyc6nX5FChAyAB2U" ); - const swapParams: SwapParams = { - protocol: SupportedProtocols.Jupiter, - fromTokenMint: new PublicKey( - // "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v" // USDC - "So11111111111111111111111111111111111111112" // WSOL - ), - toTokenMint: new PublicKey( - "GENEtH5amGSi8kHAtQoezp1XEXwZJ8vcuePYnXdKrMYz" // GENE - ), - amount: zapInAmount / 2, // Swap half of the fromToken to proceed zapIn - slippage: 1, + const addLiquidityParams: AddLiquidityParams = { + protocol: SupportedProtocols.Raydium, + poolId, + tokenInAmount: 100, }; - // const addLiquidityParams: AddLiquidityParams = { - // protocol: SupportedProtocols.Genopets, - // poolId, - // }; const farm = (await genopets.infos.getFarm( connection, farmId @@ -89,12 +80,7 @@ describe("Gateway", () => { const gateway = new GatewayBuilder(provider); - // await gateway.swap(swapParams); - console.log(gateway.params.swapMinOutAmount.toNumber()); - // Work-around - // addLiquidityParams.tokenInAmount = - // gateway.params.swapMinOutAmount.toNumber(); - // await gateway.addLiquidity(addLiquidityParams); + await gateway.addLiquidity(addLiquidityParams); await gateway.stake(stakeParams); await gateway.finalize(); @@ -122,6 +108,9 @@ describe("Gateway", () => { const farmId = new anchor.web3.PublicKey( "tEAbLeDznDdQ5jvdk1cdm2qUzoYmyc6nX5FChAyAB2U" ); + const poolId = new anchor.web3.PublicKey( + "Enq8vJucRbkzKA1i1PahJNhMyUTzoVL5Cs8n5rC3NLGn" // GENE-USDC + ); const farm = (await genopets.infos.getFarm( connection, @@ -183,21 +172,10 @@ describe("Gateway", () => { farmerKey: depositId!, mint, }; - // const removeLiquidityParams: RemoveLiquidityParams = { - // protocol: SupportedProtocols.Raydium, - // poolId, - // }; - // const swapParams: SwapParams = { - // protocol: SupportedProtocols.Jupiter, - // fromTokenMint: new PublicKey( - // "GENEtH5amGSi8kHAtQoezp1XEXwZJ8vcuePYnXdKrMYz" // GENE - // ), - // toTokenMint: new PublicKey( - // "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v" // USDC - // ), - // amount: 100, // swap coin to pc - // slippage: 3, - // }; + const removeLiquidityParams: RemoveLiquidityParams = { + protocol: SupportedProtocols.Raydium, + poolId, + }; const gateway = new GatewayBuilder(provider); @@ -205,7 +183,7 @@ describe("Gateway", () => { // await gateway.harvest(harvestParams2); // await gateway.harvest(harvestParams3); await gateway.unstake(unstakeParams); - // await gateway.removeLiquidity(removeLiquidityParams); + await gateway.removeLiquidity(removeLiquidityParams); // await gateway.swap(swapParams); await gateway.finalize(); From ea203e4744895ad5745a2562fe4d3bf3f372c021 Mon Sep 17 00:00:00 2001 From: emerson Date: Fri, 4 Nov 2022 00:35:16 +0000 Subject: [PATCH 14/18] Update dependency --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index e8b7dee..c67d5a1 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,7 @@ ], "dependencies": { "@dappio-wonderland/gateway-idls": "^0.2.7-test.3", - "@dappio-wonderland/navigator": "^0.2.14-test.11", + "@dappio-wonderland/navigator": "^0.2.14-test.13", "@jup-ag/core": "1.0.0-beta.26", "@project-serum/anchor": "^0.24.2", "@project-serum/borsh": "^0.2.5", diff --git a/yarn.lock b/yarn.lock index a8b78d3..d1951ed 100644 --- a/yarn.lock +++ b/yarn.lock @@ -26,10 +26,10 @@ resolved "https://registry.yarnpkg.com/@dappio-wonderland/gateway-idls/-/gateway-idls-0.2.7-test.3.tgz#26958b259071b0c18a67d62f270464af1da9fc79" integrity sha512-Aa9z49BhoB0DQW0z+SvEp7oI4mFKN8qZJSoItuQnnb26GFENKqkw3mK87HBK2dL+vwPtlUZNvuqLwFCb2zU9lg== -"@dappio-wonderland/navigator@^0.2.14-test.11": - version "0.2.14-test.11" - resolved "https://registry.yarnpkg.com/@dappio-wonderland/navigator/-/navigator-0.2.14-test.11.tgz#d745ef8cf9bce6aa368a3bd9e7e42b77041d8b74" - integrity sha512-o1eeUWf7eYG+WT4sQCUVXHeFPliDUeJtcMqwrMiK9dad9X/LQ3zQm0/rnl3OKLN42EqngAtohiYyT0rK3Eysyg== +"@dappio-wonderland/navigator@^0.2.14-test.13": + version "0.2.14-test.13" + resolved "https://registry.yarnpkg.com/@dappio-wonderland/navigator/-/navigator-0.2.14-test.13.tgz#abfbf04ff8ff96133355075fa2ee99bb82968ca0" + integrity sha512-ao0O3LA9Q+al6BC7KlsnMUnWQcB0ZQTzjHp8Mgs1eP8jhnsYiMhCUlMBxd+YX8/iADRJS8TjbpbGCoJdHye1kg== dependencies: "@project-serum/borsh" "^0.2.2" "@project-serum/serum" "^0.13.61" From 801494875af97cdd66d0394246aab27525cbebb0 Mon Sep 17 00:00:00 2001 From: emerson Date: Fri, 4 Nov 2022 00:44:55 +0000 Subject: [PATCH 15/18] Refactor --- src/protocols/genopets.ts | 118 ++++++++++++++++++----------------- tests/testAdapterGenopets.ts | 68 +++++++++----------- 2 files changed, 91 insertions(+), 95 deletions(-) diff --git a/src/protocols/genopets.ts b/src/protocols/genopets.ts index ed4093d..d055077 100644 --- a/src/protocols/genopets.ts +++ b/src/protocols/genopets.ts @@ -56,52 +56,54 @@ export class ProtocolGenopets implements IProtocolFarm { const farmWrapper = new genopets.FarmInfoWrapper(farm); const farmerId = await genopets.infos.getFarmerId(farm, userKey); const farmerAccount = await this._connection.getAccountInfo(farmerId); - let userDeposit = genopets.getFarmerDepositKey(userKey, 0); - let userReDeposit = genopets.getFarmerDepositKey(userKey, 1); + let userDeposit = genopets.getFarmerInstanceKey(userKey, 0); + let userReDeposit = genopets.getFarmerInstanceKey(userKey, 1); if (farmerAccount) { const farmer = (await genopets.infos.getFarmer( this._connection, farmerId )) as genopets.FarmerInfo; const farmerWrapper = new genopets.FarmerInfoWrapper(farmer); - userDeposit = farmerWrapper.getUserDeposit(); - userReDeposit = farmerWrapper.getUserReDeposit(); + userDeposit = farmerWrapper.getFarmerInstance(); + userReDeposit = farmerWrapper.getLatestFarmerInstance(); } let preInstructions: anchor.web3.TransactionInstruction[] = []; const userPoolTokenAccount = await getAssociatedTokenAddress( - params.mint, + farm.poolToken, userKey ); - preInstructions.push(await createATAWithoutCheckIx(userKey, params.mint)); + preInstructions.push( + await createATAWithoutCheckIx(userKey, farm.poolToken) + ); const userSgeneTokenAccount = await getAssociatedTokenAddress( - farm.mintSgene, + farm.master.mintSgene, userKey ); preInstructions.push( - await createATAWithoutCheckIx(userKey, farm.mintSgene) + await createATAWithoutCheckIx(userKey, farm.master.mintSgene) ); const vaultATA = await getAssociatedTokenAddress( - params.mint, + farm.poolToken, farmerId, true ); preInstructions.push( - await createATAWithoutCheckIx(farmerId, params.mint, userKey) + await createATAWithoutCheckIx(farmerId, farm.poolToken, userKey) ); const remainingAccounts = [ { pubkey: userKey, isSigner: true, isWritable: true }, // 0 - { pubkey: farm.farmId, isSigner: false, isWritable: true }, // 1 + { pubkey: farm.master.id, isSigner: false, isWritable: true }, // 1 { - pubkey: farmWrapper.getStakingPool(params.mint), + pubkey: farm.farmId, isSigner: false, isWritable: true, }, // 2 - { pubkey: params.mint, isSigner: false, isWritable: true }, // 3 + { pubkey: farm.poolToken, isSigner: false, isWritable: true }, // 3 { pubkey: farmerId, isSigner: false, isWritable: true }, // 4 { pubkey: userPoolTokenAccount, @@ -119,12 +121,12 @@ export class ProtocolGenopets implements IProtocolFarm { isWritable: true, }, // 7 { - pubkey: farm.sgeneMinter, + pubkey: farm.master.sgeneMinter, isSigner: false, isWritable: false, }, // 8 { - pubkey: farm.mintSgene, + pubkey: farm.master.mintSgene, isSigner: false, isWritable: true, }, // 9 @@ -192,49 +194,51 @@ export class ProtocolGenopets implements IProtocolFarm { const farmWrapper = new genopets.FarmInfoWrapper(farm); const farmerId = await genopets.infos.getFarmerId(farm, userKey); const farmerAccount = await this._connection.getAccountInfo(farmerId); - let userDeposit = genopets.getFarmerDepositKey(userKey, 0); - let userReDeposit = genopets.getFarmerDepositKey(userKey, 1); + let userDeposit = genopets.getFarmerInstanceKey(userKey, 0); + let userReDeposit = genopets.getFarmerInstanceKey(userKey, 1); if (farmerAccount) { const farmer = (await genopets.infos.getFarmer( this._connection, farmerId )) as genopets.FarmerInfo; const farmerWrapper = new genopets.FarmerInfoWrapper(farmer); - userDeposit = params.farmerKey || farmerWrapper.getUserDeposit(); - userReDeposit = farmerWrapper.getUserDeposit(); + userDeposit = params.farmerKey || farmerWrapper.getFarmerInstance(); + userReDeposit = farmerWrapper.getFarmerInstance(); } let preInstructions: anchor.web3.TransactionInstruction[] = []; const userPoolTokenAccount = await getAssociatedTokenAddress( - params.mint, + farm.poolToken, userKey ); - preInstructions.push(await createATAWithoutCheckIx(userKey, params.mint)); + preInstructions.push( + await createATAWithoutCheckIx(userKey, farm.poolToken) + ); const userSgeneTokenAccount = await getAssociatedTokenAddress( - farm.mintSgene, + farm.master.mintSgene, userKey ); preInstructions.push( - await createATAWithoutCheckIx(userKey, farm.mintSgene) + await createATAWithoutCheckIx(userKey, farm.master.mintSgene) ); const vaultATA = await getAssociatedTokenAddress( - params.mint, + farm.poolToken, farmerId, true ); const remainingAccounts = [ { pubkey: userKey, isSigner: true, isWritable: true }, // 0 - { pubkey: farm.farmId, isSigner: false, isWritable: true }, // 1 + { pubkey: farm.master.id, isSigner: false, isWritable: true }, // 1 { - pubkey: farmWrapper.getStakingPool(params.mint), + pubkey: farm.farmId, isSigner: false, isWritable: true, }, // 2 - { pubkey: params.mint, isSigner: false, isWritable: false }, // 3 + { pubkey: farm.poolToken, isSigner: false, isWritable: false }, // 3 { pubkey: farmerId, isSigner: false, isWritable: true }, // 4 { pubkey: userPoolTokenAccount, @@ -247,7 +251,7 @@ export class ProtocolGenopets implements IProtocolFarm { isWritable: true, }, // 6 { - pubkey: farm.sgeneMinter, + pubkey: farm.master.sgeneMinter, isSigner: false, isWritable: false, }, // 7 @@ -257,17 +261,17 @@ export class ProtocolGenopets implements IProtocolFarm { isWritable: true, }, // 8 { - pubkey: farm.mintSgene, + pubkey: farm.master.mintSgene, isSigner: false, isWritable: true, }, // 9 { - pubkey: farm.geneRewarder, + pubkey: farm.master.geneRewarder, isSigner: false, isWritable: false, }, // 10 { - pubkey: farm.ataGeneRewarder, + pubkey: farm.master.ataGeneRewarder, isSigner: false, isWritable: true, }, // 11 @@ -341,17 +345,17 @@ export class ProtocolGenopets implements IProtocolFarm { const farmWrapper = new genopets.FarmInfoWrapper(farm); const farmerId = await genopets.infos.getFarmerId(farm, userKey); const farmerAccount = await this._connection.getAccountInfo(farmerId); - let userDeposit = genopets.getFarmerDepositKey(userKey, 0); - let userReDeposit = genopets.getFarmerDepositKey(userKey, 1); + let userDeposit = genopets.getFarmerInstanceKey(userKey, 0); + let userReDeposit = genopets.getFarmerInstanceKey(userKey, 1); let preInstructions: anchor.web3.TransactionInstruction[] = []; const userSgeneTokenAccount = await getAssociatedTokenAddress( - farm.mintSgene, + farm.master.mintSgene, userKey ); preInstructions.push( - await createATAWithoutCheckIx(userKey, farm.mintSgene) + await createATAWithoutCheckIx(userKey, farm.master.mintSgene) ); let remainingAccounts: anchor.web3.AccountMeta[] = []; @@ -363,21 +367,21 @@ export class ProtocolGenopets implements IProtocolFarm { farmerId )) as genopets.FarmerInfo; const farmerWrapper = new genopets.FarmerInfoWrapper(farmer); - userDeposit = farmerWrapper.getUserDeposit(); - userReDeposit = farmerWrapper.getUserReDeposit(); + userDeposit = farmerWrapper.getFarmerInstance(); + userReDeposit = farmerWrapper.getLatestFarmerInstance(); } remainingAccounts = [ { pubkey: userKey, isSigner: true, isWritable: true }, // 0 - { pubkey: farm.farmId, isSigner: false, isWritable: true }, // 1 + { pubkey: farm.master.id, isSigner: false, isWritable: true }, // 1 { pubkey: farmerId, isSigner: false, isWritable: true }, // 2 { - pubkey: farm.sgeneMinter, + pubkey: farm.master.sgeneMinter, isSigner: false, isWritable: false, }, // 3 { - pubkey: farm.mintSgene, + pubkey: farm.master.mintSgene, isSigner: false, isWritable: true, }, // 4 @@ -420,32 +424,32 @@ export class ProtocolGenopets implements IProtocolFarm { farmerId )) as genopets.FarmerInfo; const farmerWrapper = new genopets.FarmerInfoWrapper(farmer); - userDeposit = params.farmerKey || farmerWrapper.getUserDeposit(); - userReDeposit = farmerWrapper.getUserDeposit(); + userDeposit = params.farmerKey || farmerWrapper.getFarmerInstance(); + userReDeposit = farmerWrapper.getFarmerInstance(); } const userPoolTokenAccount = await getAssociatedTokenAddress( - params.mint, + farm.poolToken, userKey ); preInstructions.push( - await createATAWithoutCheckIx(userKey, params.mint) + await createATAWithoutCheckIx(userKey, farm.poolToken) ); const vaultATA = await getAssociatedTokenAddress( - params.mint, + farm.poolToken, farmerId, true ); remainingAccounts = [ { pubkey: userKey, isSigner: true, isWritable: true }, // 0 - { pubkey: farm.farmId, isSigner: false, isWritable: true }, // 1 + { pubkey: farm.master.id, isSigner: false, isWritable: true }, // 1 { - pubkey: farmWrapper.getStakingPool(params.mint), + pubkey: farm.farmId, isSigner: false, isWritable: true, }, // 2 - { pubkey: params.mint, isSigner: false, isWritable: false }, // 3 + { pubkey: farm.poolToken, isSigner: false, isWritable: false }, // 3 { pubkey: farmerId, isSigner: false, isWritable: true }, // 4 { pubkey: userPoolTokenAccount, @@ -458,7 +462,7 @@ export class ProtocolGenopets implements IProtocolFarm { isWritable: true, }, // 6 { - pubkey: farm.sgeneMinter, + pubkey: farm.master.sgeneMinter, isSigner: false, isWritable: false, }, // 7 @@ -468,17 +472,17 @@ export class ProtocolGenopets implements IProtocolFarm { isWritable: true, }, // 8 { - pubkey: farm.mintSgene, + pubkey: farm.master.mintSgene, isSigner: false, isWritable: true, }, // 9 { - pubkey: farm.geneRewarder, + pubkey: farm.master.geneRewarder, isSigner: false, isWritable: false, }, // 10 { - pubkey: farm.ataGeneRewarder, + pubkey: farm.master.ataGeneRewarder, isSigner: false, isWritable: true, }, // 11 @@ -521,16 +525,16 @@ export class ProtocolGenopets implements IProtocolFarm { farmerId )) as genopets.FarmerInfo; const farmerWrapper = new genopets.FarmerInfoWrapper(farmer); - userDeposit = params.farmerKey || farmerWrapper.getUserDeposit(); - userReDeposit = farmerWrapper.getUserReDeposit(); + userDeposit = params.farmerKey || farmerWrapper.getFarmerInstance(); + userReDeposit = farmerWrapper.getLatestFarmerInstance(); } remainingAccounts = [ { pubkey: userKey, isSigner: true, isWritable: true }, // 0 - { pubkey: farm.farmId, isSigner: false, isWritable: true }, // 1 + { pubkey: farm.master.id, isSigner: false, isWritable: true }, // 1 { pubkey: farmerId, isSigner: false, isWritable: true }, // 2 { - pubkey: farm.sgeneMinter, + pubkey: farm.master.sgeneMinter, isSigner: false, isWritable: false, }, // 3 @@ -540,7 +544,7 @@ export class ProtocolGenopets implements IProtocolFarm { isWritable: true, }, // 4 { - pubkey: farm.mintSgene, + pubkey: farm.master.mintSgene, isSigner: false, isWritable: true, }, // 5 diff --git a/tests/testAdapterGenopets.ts b/tests/testAdapterGenopets.ts index 53cfcc2..d0ea6d7 100644 --- a/tests/testAdapterGenopets.ts +++ b/tests/testAdapterGenopets.ts @@ -57,9 +57,7 @@ describe("Gateway", () => { const poolId = new anchor.web3.PublicKey( "Enq8vJucRbkzKA1i1PahJNhMyUTzoVL5Cs8n5rC3NLGn" // GENE-USDC ); - const farmId = new anchor.web3.PublicKey( - "tEAbLeDznDdQ5jvdk1cdm2qUzoYmyc6nX5FChAyAB2U" - ); + const farmId = genopets.getFarmId(mint); const addLiquidityParams: AddLiquidityParams = { protocol: SupportedProtocols.Raydium, poolId, @@ -105,9 +103,7 @@ describe("Gateway", () => { }); it("Unstake + Harvest in Genopets", async () => { - const farmId = new anchor.web3.PublicKey( - "tEAbLeDznDdQ5jvdk1cdm2qUzoYmyc6nX5FChAyAB2U" - ); + const farmId = genopets.getFarmId(mint); const poolId = new anchor.web3.PublicKey( "Enq8vJucRbkzKA1i1PahJNhMyUTzoVL5Cs8n5rC3NLGn" // GENE-USDC ); @@ -133,43 +129,43 @@ describe("Gateway", () => { mint, }; - let depositId: anchor.web3.PublicKey; - for (let deposit of farmer.userDeposit) { - if (deposit?.isYield == true) { - depositId = deposit.depositId; + let farmerInstanceId: anchor.web3.PublicKey; + for (let farmerInstance of farmer.instance) { + if (farmerInstance?.isYield == true) { + farmerInstanceId = farmerInstance.id; } } const harvestParams2: HarvestParams = { protocol: SupportedProtocols.Genopets, farmId, type: HarvestType.completeAsSGene, - farmerKey: depositId!, + farmerKey: farmerInstanceId!, mint, }; - for (let deposit of farmer.userDeposit) { - const timestamp = Number(deposit?.lockUntil); + for (let farmerInstance of farmer.instance) { + const timestamp = Number(farmerInstance?.lockUntil); const currentTimestamp = Number(new Date()) / 1000; if ( - deposit?.isYield == false && - deposit.poolToken.equals(mint) && + farmerInstance?.isYield == false && + farmerInstance.poolToken.equals(mint) && timestamp < currentTimestamp ) { - depositId = deposit.depositId; + farmerInstanceId = farmerInstance.id; } } const harvestParams3: HarvestParams = { protocol: SupportedProtocols.Genopets, farmId, type: HarvestType.completeAsGene, - farmerKey: depositId!, + farmerKey: farmerInstanceId!, mint, }; const unstakeParams: UnstakeParams = { protocol: SupportedProtocols.Genopets, farmId, shareAmount: 1000, // dummy - farmerKey: depositId!, + farmerKey: farmerInstanceId!, mint, }; const removeLiquidityParams: RemoveLiquidityParams = { @@ -208,9 +204,7 @@ describe("Gateway", () => { }); // it("Unstake all in Genopets", async () => { - // const farmId = new anchor.web3.PublicKey( - // "tEAbLeDznDdQ5jvdk1cdm2qUzoYmyc6nX5FChAyAB2U" - // ); + // const farmId = genopets.getFarmId(mint); // const farm = (await genopets.infos.getFarm( // connection, @@ -231,28 +225,28 @@ describe("Gateway", () => { // const harvestParams1: HarvestParams = { // protocol: SupportedProtocols.Genopets, // farmId, - // type: HarvestType.ClaimRewards, + // type: HarvestType.initialize, // mint, // }; // await gateway.harvest(harvestParams1); - // let depositId: anchor.web3.PublicKey; + // let farmerInstanceId: anchor.web3.PublicKey; // let counter = 0; - // for (let deposit of farmer.userDeposit) { - // const timestamp = Number(deposit?.lockUntil); + // for (let farmerInstance of farmer.instance) { + // const timestamp = Number(farmerInstance?.lockUntil); // const currentTimestamp = Number(new Date()) / 1000; // if ( - // deposit?.isYield == false && - // deposit.poolToken.equals(mint) && + // farmerInstance?.isYield == false && + // farmerInstance.poolToken.equals(mint) && // timestamp < currentTimestamp // ) { - // depositId = deposit.depositId; + // farmerInstanceId = farmerInstance.id; // const unstakeParams: UnstakeParams = { // protocol: SupportedProtocols.Genopets, // farmId, // shareAmount: 1000, // dummy - // farmerKey: depositId!, + // farmerKey: farmerInstanceId!, // mint, // }; @@ -282,9 +276,7 @@ describe("Gateway", () => { // }); // it("Harvest all in Genopets", async () => { - // const farmId = new anchor.web3.PublicKey( - // "tEAbLeDznDdQ5jvdk1cdm2qUzoYmyc6nX5FChAyAB2U" - // ); + // const farmId = genopets.getFarmId(mint); // const farm = (await genopets.infos.getFarm( // connection, @@ -302,17 +294,17 @@ describe("Gateway", () => { // const gateway = new GatewayBuilder(provider); - // let depositId: anchor.web3.PublicKey; + // let farmerInstanceId: anchor.web3.PublicKey; // let counter = 0; - // for (let deposit of farmer.userDeposit) { - // if (deposit?.isYield == true) { - // depositId = deposit.depositId; + // for (let farmerInstance of farmer.instance) { + // if (farmerInstance?.isYield == true) { + // farmerInstanceId = farmerInstance.id; // const harvestParams2: HarvestParams = { // protocol: SupportedProtocols.Genopets, // farmId, - // type: HarvestType.WithdrawAsSgene, - // farmerKey: depositId!, + // type: HarvestType.completeAsSGene, + // farmerKey: farmerInstanceId!, // mint, // }; From f8dba20e0fdcbd5b2eed6f6bc2d3b4f9545fe5be Mon Sep 17 00:00:00 2001 From: emerson Date: Fri, 4 Nov 2022 00:50:58 +0000 Subject: [PATCH 16/18] Add swap --- tests/testAdapterGenopets.ts | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/tests/testAdapterGenopets.ts b/tests/testAdapterGenopets.ts index d0ea6d7..ea3d8a0 100644 --- a/tests/testAdapterGenopets.ts +++ b/tests/testAdapterGenopets.ts @@ -58,6 +58,17 @@ describe("Gateway", () => { "Enq8vJucRbkzKA1i1PahJNhMyUTzoVL5Cs8n5rC3NLGn" // GENE-USDC ); const farmId = genopets.getFarmId(mint); + const swapParams: SwapParams = { + protocol: SupportedProtocols.Jupiter, + fromTokenMint: new PublicKey( + "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v" // USDC + ), + toTokenMint: new PublicKey( + "GENEtH5amGSi8kHAtQoezp1XEXwZJ8vcuePYnXdKrMYz" // GENE + ), + amount: 100, // Swap half of the fromToken to proceed zapIn + slippage: 1, + }; const addLiquidityParams: AddLiquidityParams = { protocol: SupportedProtocols.Raydium, poolId, @@ -78,6 +89,7 @@ describe("Gateway", () => { const gateway = new GatewayBuilder(provider); + await gateway.swap(swapParams); await gateway.addLiquidity(addLiquidityParams); await gateway.stake(stakeParams); @@ -121,6 +133,19 @@ describe("Gateway", () => { connection, farmerId )) as genopets.FarmerInfo; + const swapParams: SwapParams = { + protocol: SupportedProtocols.Jupiter, + fromTokenMint: new PublicKey( + // "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v" // USDC + "GENEtH5amGSi8kHAtQoezp1XEXwZJ8vcuePYnXdKrMYz" // GENE + ), + toTokenMint: new PublicKey( + "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v" // USDC + // "GENEtH5amGSi8kHAtQoezp1XEXwZJ8vcuePYnXdKrMYz" // GENE + ), + amount: 100, // Swap half of the fromToken to proceed zapIn + slippage: 1, + }; const harvestParams1: HarvestParams = { protocol: SupportedProtocols.Genopets, @@ -180,7 +205,7 @@ describe("Gateway", () => { // await gateway.harvest(harvestParams3); await gateway.unstake(unstakeParams); await gateway.removeLiquidity(removeLiquidityParams); - // await gateway.swap(swapParams); + await gateway.swap(swapParams); await gateway.finalize(); From 4c226762c7c7d8685f334bd496dd2252d900577d Mon Sep 17 00:00:00 2001 From: Wei Date: Fri, 4 Nov 2022 01:02:24 +0000 Subject: [PATCH 17/18] update test file --- tests/testAdapterGenopets.ts | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/tests/testAdapterGenopets.ts b/tests/testAdapterGenopets.ts index ea3d8a0..185d0c8 100644 --- a/tests/testAdapterGenopets.ts +++ b/tests/testAdapterGenopets.ts @@ -52,7 +52,7 @@ describe("Gateway", () => { const mint = GENE_USDC_LP; // const mint = GENE_MINT; - + let outAmount = 0; it("Stake in Genopets", async () => { const poolId = new anchor.web3.PublicKey( "Enq8vJucRbkzKA1i1PahJNhMyUTzoVL5Cs8n5rC3NLGn" // GENE-USDC @@ -67,7 +67,7 @@ describe("Gateway", () => { "GENEtH5amGSi8kHAtQoezp1XEXwZJ8vcuePYnXdKrMYz" // GENE ), amount: 100, // Swap half of the fromToken to proceed zapIn - slippage: 1, + slippage: 50, }; const addLiquidityParams: AddLiquidityParams = { protocol: SupportedProtocols.Raydium, @@ -90,6 +90,7 @@ describe("Gateway", () => { const gateway = new GatewayBuilder(provider); await gateway.swap(swapParams); + outAmount = gateway.params.swapMinOutAmount.toNumber(); await gateway.addLiquidity(addLiquidityParams); await gateway.stake(stakeParams); @@ -143,8 +144,8 @@ describe("Gateway", () => { "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v" // USDC // "GENEtH5amGSi8kHAtQoezp1XEXwZJ8vcuePYnXdKrMYz" // GENE ), - amount: 100, // Swap half of the fromToken to proceed zapIn - slippage: 1, + amount: outAmount, // Swap half of the fromToken to proceed zapIn + slippage: 50, }; const harvestParams1: HarvestParams = { From fae1343cb9981c5804df0706268fc36708dca203 Mon Sep 17 00:00:00 2001 From: Wei Date: Fri, 4 Nov 2022 16:18:53 +0000 Subject: [PATCH 18/18] change naming --- tests/testAdapterGenopets.ts | 33 +++++++++++++-------------------- 1 file changed, 13 insertions(+), 20 deletions(-) diff --git a/tests/testAdapterGenopets.ts b/tests/testAdapterGenopets.ts index 185d0c8..f83fc89 100644 --- a/tests/testAdapterGenopets.ts +++ b/tests/testAdapterGenopets.ts @@ -49,6 +49,9 @@ describe("Gateway", () => { const GENE_MINT = new PublicKey( "GENEtH5amGSi8kHAtQoezp1XEXwZJ8vcuePYnXdKrMYz" ); + const USDC_MINT = new PublicKey( + "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v" + ); const mint = GENE_USDC_LP; // const mint = GENE_MINT; @@ -60,14 +63,10 @@ describe("Gateway", () => { const farmId = genopets.getFarmId(mint); const swapParams: SwapParams = { protocol: SupportedProtocols.Jupiter, - fromTokenMint: new PublicKey( - "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v" // USDC - ), - toTokenMint: new PublicKey( - "GENEtH5amGSi8kHAtQoezp1XEXwZJ8vcuePYnXdKrMYz" // GENE - ), + fromTokenMint: USDC_MINT, + toTokenMint: GENE_MINT, amount: 100, // Swap half of the fromToken to proceed zapIn - slippage: 50, + slippage: 1, }; const addLiquidityParams: AddLiquidityParams = { protocol: SupportedProtocols.Raydium, @@ -96,7 +95,7 @@ describe("Gateway", () => { await gateway.finalize(); - console.log(gateway.params); + // console.log(`swapInAmount: ${gateway.params.swapInAmount}`); // console.log(`swapMinOutAmount: ${gateway.params.swapMinOutAmount}`); @@ -136,16 +135,10 @@ describe("Gateway", () => { )) as genopets.FarmerInfo; const swapParams: SwapParams = { protocol: SupportedProtocols.Jupiter, - fromTokenMint: new PublicKey( - // "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v" // USDC - "GENEtH5amGSi8kHAtQoezp1XEXwZJ8vcuePYnXdKrMYz" // GENE - ), - toTokenMint: new PublicKey( - "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v" // USDC - // "GENEtH5amGSi8kHAtQoezp1XEXwZJ8vcuePYnXdKrMYz" // GENE - ), + fromTokenMint: GENE_MINT, + toTokenMint: USDC_MINT, amount: outAmount, // Swap half of the fromToken to proceed zapIn - slippage: 50, + slippage: 2, }; const harvestParams1: HarvestParams = { @@ -210,7 +203,7 @@ describe("Gateway", () => { await gateway.finalize(); - console.log(gateway.params); + // console.log(`swapInAmount: ${gateway.gatewayParams.swapInAmount}`); // console.log(`swapMinOutAmount: ${gateway.gatewayParams.swapMinOutAmount}`); @@ -284,7 +277,7 @@ describe("Gateway", () => { // await gateway.finalize(); - // console.log(gateway.params); + // // const txs = gateway.transactions(); @@ -342,7 +335,7 @@ describe("Gateway", () => { // await gateway.finalize(); - // console.log(gateway.params); + // // const txs = gateway.transactions();