mirror of https://github.com/certusone/oyster.git
Merge pull request #1 from jstarry/fix-borrow
fix: borrow instruction inputs
This commit is contained in:
commit
8e761239ea
|
@ -1,12 +1,12 @@
|
||||||
import { AccountLayout, Token } from "@solana/spl-token";
|
import { AccountLayout, MintLayout, Token } from "@solana/spl-token";
|
||||||
import {
|
import {
|
||||||
Account,
|
Account,
|
||||||
PublicKey,
|
PublicKey,
|
||||||
SystemProgram,
|
SystemProgram,
|
||||||
TransactionInstruction,
|
TransactionInstruction,
|
||||||
} from "@solana/web3.js";
|
} from "@solana/web3.js";
|
||||||
import { TOKEN_PROGRAM_ID, WRAPPED_SOL_MINT } from "../constants/ids";
|
import { LENDING_PROGRAM_ID, TOKEN_PROGRAM_ID, WRAPPED_SOL_MINT } from "../constants/ids";
|
||||||
import { TokenAccount } from "../models";
|
import { LendingObligationLayout, TokenAccount } from "../models";
|
||||||
import { cache, TokenAccountParser } from "./../contexts/accounts";
|
import { cache, TokenAccountParser } from "./../contexts/accounts";
|
||||||
|
|
||||||
export function ensureSplAccount(
|
export function ensureSplAccount(
|
||||||
|
@ -75,6 +75,50 @@ export function createTempMemoryAccount(
|
||||||
return account.publicKey;
|
return account.publicKey;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function createUninitializedObligation(
|
||||||
|
instructions: TransactionInstruction[],
|
||||||
|
payer: PublicKey,
|
||||||
|
amount: number,
|
||||||
|
signers: Account[]
|
||||||
|
) {
|
||||||
|
const account = new Account();
|
||||||
|
instructions.push(
|
||||||
|
SystemProgram.createAccount({
|
||||||
|
fromPubkey: payer,
|
||||||
|
newAccountPubkey: account.publicKey,
|
||||||
|
lamports: amount,
|
||||||
|
space: LendingObligationLayout.span,
|
||||||
|
programId: LENDING_PROGRAM_ID,
|
||||||
|
})
|
||||||
|
);
|
||||||
|
|
||||||
|
signers.push(account);
|
||||||
|
|
||||||
|
return account.publicKey;
|
||||||
|
}
|
||||||
|
|
||||||
|
export function createUninitializedMint(
|
||||||
|
instructions: TransactionInstruction[],
|
||||||
|
payer: PublicKey,
|
||||||
|
amount: number,
|
||||||
|
signers: Account[]
|
||||||
|
) {
|
||||||
|
const account = new Account();
|
||||||
|
instructions.push(
|
||||||
|
SystemProgram.createAccount({
|
||||||
|
fromPubkey: payer,
|
||||||
|
newAccountPubkey: account.publicKey,
|
||||||
|
lamports: amount,
|
||||||
|
space: MintLayout.span,
|
||||||
|
programId: TOKEN_PROGRAM_ID,
|
||||||
|
})
|
||||||
|
);
|
||||||
|
|
||||||
|
signers.push(account);
|
||||||
|
|
||||||
|
return account.publicKey;
|
||||||
|
}
|
||||||
|
|
||||||
export function createUninitializedAccount(
|
export function createUninitializedAccount(
|
||||||
instructions: TransactionInstruction[],
|
instructions: TransactionInstruction[],
|
||||||
payer: PublicKey,
|
payer: PublicKey,
|
||||||
|
|
|
@ -12,6 +12,8 @@ import { LENDING_PROGRAM_ID, TOKEN_PROGRAM_ID } from "../constants/ids";
|
||||||
import {
|
import {
|
||||||
createTempMemoryAccount,
|
createTempMemoryAccount,
|
||||||
createUninitializedAccount,
|
createUninitializedAccount,
|
||||||
|
createUninitializedMint,
|
||||||
|
createUninitializedObligation,
|
||||||
ensureSplAccount,
|
ensureSplAccount,
|
||||||
findOrCreateAccountByMint,
|
findOrCreateAccountByMint,
|
||||||
} from "./account";
|
} from "./account";
|
||||||
|
@ -51,7 +53,7 @@ export const borrow = async (
|
||||||
AccountLayout.span
|
AccountLayout.span
|
||||||
);
|
);
|
||||||
|
|
||||||
const obligation = createUninitializedAccount(
|
const obligation = createUninitializedObligation(
|
||||||
instructions,
|
instructions,
|
||||||
wallet.publicKey,
|
wallet.publicKey,
|
||||||
await connection.getMinimumBalanceForRentExemption(
|
await connection.getMinimumBalanceForRentExemption(
|
||||||
|
@ -60,7 +62,7 @@ export const borrow = async (
|
||||||
signers
|
signers
|
||||||
);
|
);
|
||||||
|
|
||||||
const obligationMint = createUninitializedAccount(
|
const obligationMint = createUninitializedMint(
|
||||||
instructions,
|
instructions,
|
||||||
wallet.publicKey,
|
wallet.publicKey,
|
||||||
await connection.getMinimumBalanceForRentExemption(MintLayout.span),
|
await connection.getMinimumBalanceForRentExemption(MintLayout.span),
|
||||||
|
|
|
@ -22,7 +22,7 @@ import { LendingInstruction } from "./lending";
|
||||||
/// 6. `[writable]` Obligation - uninitialized
|
/// 6. `[writable]` Obligation - uninitialized
|
||||||
/// 7. `[writable]` Obligation token mint - uninitialized
|
/// 7. `[writable]` Obligation token mint - uninitialized
|
||||||
/// 8. `[writable]` Obligation token output - uninitialized
|
/// 8. `[writable]` Obligation token output - uninitialized
|
||||||
/// 9. `[]` Obligation token owner - uninitialized
|
/// 9. `[]` Obligation token owner
|
||||||
/// 10 `[]` Derived lending market authority ($authority).
|
/// 10 `[]` Derived lending market authority ($authority).
|
||||||
/// 11 `[]` Dex market
|
/// 11 `[]` Dex market
|
||||||
/// 12 `[]` Dex order book side // could be bid/ask
|
/// 12 `[]` Dex order book side // could be bid/ask
|
||||||
|
@ -78,16 +78,16 @@ export const borrowInstruction = (
|
||||||
{
|
{
|
||||||
pubkey: borrowReserveLiquiditySupply,
|
pubkey: borrowReserveLiquiditySupply,
|
||||||
isSigner: false,
|
isSigner: false,
|
||||||
isWritable: false,
|
isWritable: true,
|
||||||
},
|
},
|
||||||
{ pubkey: obligation, isSigner: false, isWritable: true },
|
{ pubkey: obligation, isSigner: false, isWritable: true },
|
||||||
{ pubkey: obligationMint, isSigner: false, isWritable: true },
|
{ pubkey: obligationMint, isSigner: false, isWritable: true },
|
||||||
{ pubkey: obligationTokenOutput, isSigner: false, isWritable: true },
|
{ pubkey: obligationTokenOutput, isSigner: false, isWritable: true },
|
||||||
{ pubkey: obligationTokenOwner, isSigner: false, isWritable: false },
|
{ pubkey: obligationTokenOwner, isSigner: false, isWritable: false },
|
||||||
{ pubkey: lendingMarketAuthority, isSigner: false, isWritable: true },
|
{ pubkey: lendingMarketAuthority, isSigner: false, isWritable: false },
|
||||||
{ pubkey: dexMarket, isSigner: false, isWritable: true },
|
{ pubkey: dexMarket, isSigner: false, isWritable: false },
|
||||||
{ pubkey: dexOrderBookSide, isSigner: false, isWritable: false },
|
{ pubkey: dexOrderBookSide, isSigner: false, isWritable: false },
|
||||||
{ pubkey: memory, isSigner: false, isWritable: true },
|
{ pubkey: memory, isSigner: false, isWritable: false },
|
||||||
{ pubkey: SYSVAR_CLOCK_PUBKEY, isSigner: false, isWritable: false },
|
{ pubkey: SYSVAR_CLOCK_PUBKEY, isSigner: false, isWritable: false },
|
||||||
{ pubkey: SYSVAR_RENT_PUBKEY, isSigner: false, isWritable: false },
|
{ pubkey: SYSVAR_RENT_PUBKEY, isSigner: false, isWritable: false },
|
||||||
{ pubkey: TOKEN_PROGRAM_ID, isSigner: false, isWritable: false },
|
{ pubkey: TOKEN_PROGRAM_ID, isSigner: false, isWritable: false },
|
||||||
|
|
Loading…
Reference in New Issue