-
Notifications
You must be signed in to change notification settings - Fork 11
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Update whirlpool test program + codegen
- Loading branch information
1 parent
a2a4393
commit c2da05b
Showing
76 changed files
with
3,382 additions
and
946 deletions.
There are no files selected for viewing
Binary file not shown.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
90 changes: 50 additions & 40 deletions
90
packages/kamino-sdk/src/whirpools-client/accounts/FeeTier.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,95 +1,105 @@ | ||
import { PublicKey, Connection } from '@solana/web3.js'; | ||
import BN from 'bn.js'; // eslint-disable-line @typescript-eslint/no-unused-vars | ||
import * as borsh from '@project-serum/borsh'; // eslint-disable-line @typescript-eslint/no-unused-vars | ||
import * as types from '../types'; // eslint-disable-line @typescript-eslint/no-unused-vars | ||
import { WHIRLPOOL_PROGRAM_ID } from '../programId'; | ||
import { PublicKey, Connection } from "@solana/web3.js" | ||
import BN from "bn.js" // eslint-disable-line @typescript-eslint/no-unused-vars | ||
import * as borsh from "@coral-xyz/borsh" // eslint-disable-line @typescript-eslint/no-unused-vars | ||
import * as types from "../types" // eslint-disable-line @typescript-eslint/no-unused-vars | ||
import { WHIRLPOOL_PROGRAM_ID } from "../programId" | ||
|
||
export interface FeeTierFields { | ||
whirlpoolsConfig: PublicKey; | ||
tickSpacing: number; | ||
defaultFeeRate: number; | ||
whirlpoolsConfig: PublicKey | ||
tickSpacing: number | ||
defaultFeeRate: number | ||
} | ||
|
||
export interface FeeTierJSON { | ||
whirlpoolsConfig: string; | ||
tickSpacing: number; | ||
defaultFeeRate: number; | ||
whirlpoolsConfig: string | ||
tickSpacing: number | ||
defaultFeeRate: number | ||
} | ||
|
||
export class FeeTier { | ||
readonly whirlpoolsConfig: PublicKey; | ||
readonly tickSpacing: number; | ||
readonly defaultFeeRate: number; | ||
readonly whirlpoolsConfig: PublicKey | ||
readonly tickSpacing: number | ||
readonly defaultFeeRate: number | ||
|
||
static readonly discriminator = Buffer.from([56, 75, 159, 76, 142, 68, 190, 105]); | ||
static readonly discriminator = Buffer.from([ | ||
56, 75, 159, 76, 142, 68, 190, 105, | ||
]) | ||
|
||
static readonly layout = borsh.struct([ | ||
borsh.publicKey('whirlpoolsConfig'), | ||
borsh.u16('tickSpacing'), | ||
borsh.u16('defaultFeeRate'), | ||
]); | ||
borsh.publicKey("whirlpoolsConfig"), | ||
borsh.u16("tickSpacing"), | ||
borsh.u16("defaultFeeRate"), | ||
]) | ||
|
||
constructor(fields: FeeTierFields) { | ||
this.whirlpoolsConfig = fields.whirlpoolsConfig; | ||
this.tickSpacing = fields.tickSpacing; | ||
this.defaultFeeRate = fields.defaultFeeRate; | ||
this.whirlpoolsConfig = fields.whirlpoolsConfig | ||
this.tickSpacing = fields.tickSpacing | ||
this.defaultFeeRate = fields.defaultFeeRate | ||
} | ||
|
||
static async fetch(c: Connection, address: PublicKey): Promise<FeeTier | null> { | ||
const info = await c.getAccountInfo(address); | ||
static async fetch( | ||
c: Connection, | ||
address: PublicKey, | ||
programId: PublicKey = WHIRLPOOL_PROGRAM_ID | ||
): Promise<FeeTier | null> { | ||
const info = await c.getAccountInfo(address) | ||
|
||
if (info === null) { | ||
return null; | ||
return null | ||
} | ||
if (!info.owner.equals(WHIRLPOOL_PROGRAM_ID)) { | ||
throw new Error("account doesn't belong to this program"); | ||
if (!info.owner.equals(programId)) { | ||
throw new Error("account doesn't belong to this program") | ||
} | ||
|
||
return this.decode(info.data); | ||
return this.decode(info.data) | ||
} | ||
|
||
static async fetchMultiple(c: Connection, addresses: PublicKey[]): Promise<Array<FeeTier | null>> { | ||
const infos = await c.getMultipleAccountsInfo(addresses); | ||
static async fetchMultiple( | ||
c: Connection, | ||
addresses: PublicKey[], | ||
programId: PublicKey = WHIRLPOOL_PROGRAM_ID | ||
): Promise<Array<FeeTier | null>> { | ||
const infos = await c.getMultipleAccountsInfo(addresses) | ||
|
||
return infos.map((info) => { | ||
if (info === null) { | ||
return null; | ||
return null | ||
} | ||
if (!info.owner.equals(WHIRLPOOL_PROGRAM_ID)) { | ||
throw new Error("account doesn't belong to this program"); | ||
if (!info.owner.equals(programId)) { | ||
throw new Error("account doesn't belong to this program") | ||
} | ||
|
||
return this.decode(info.data); | ||
}); | ||
return this.decode(info.data) | ||
}) | ||
} | ||
|
||
static decode(data: Buffer): FeeTier { | ||
if (!data.slice(0, 8).equals(FeeTier.discriminator)) { | ||
throw new Error('invalid account discriminator'); | ||
throw new Error("invalid account discriminator") | ||
} | ||
|
||
const dec = FeeTier.layout.decode(data.slice(8)); | ||
const dec = FeeTier.layout.decode(data.slice(8)) | ||
|
||
return new FeeTier({ | ||
whirlpoolsConfig: dec.whirlpoolsConfig, | ||
tickSpacing: dec.tickSpacing, | ||
defaultFeeRate: dec.defaultFeeRate, | ||
}); | ||
}) | ||
} | ||
|
||
toJSON(): FeeTierJSON { | ||
return { | ||
whirlpoolsConfig: this.whirlpoolsConfig.toString(), | ||
tickSpacing: this.tickSpacing, | ||
defaultFeeRate: this.defaultFeeRate, | ||
}; | ||
} | ||
} | ||
|
||
static fromJSON(obj: FeeTierJSON): FeeTier { | ||
return new FeeTier({ | ||
whirlpoolsConfig: new PublicKey(obj.whirlpoolsConfig), | ||
tickSpacing: obj.tickSpacing, | ||
defaultFeeRate: obj.defaultFeeRate, | ||
}); | ||
}) | ||
} | ||
} |
Oops, something went wrong.