Merge pull request #1 from jstarry/fix-borrow

fix: borrow instruction inputs
This commit is contained in:
Bartosz Lipinski 2020-11-21 08:41:52 -06:00 committed by GitHub
commit 8e761239ea
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 56 additions and 10 deletions

View File

@ -1,12 +1,12 @@
import { AccountLayout, Token } from "@solana/spl-token";
import { AccountLayout, MintLayout, Token } from "@solana/spl-token";
import {
Account,
PublicKey,
SystemProgram,
TransactionInstruction,
} from "@solana/web3.js";
import { TOKEN_PROGRAM_ID, WRAPPED_SOL_MINT } from "../constants/ids";
import { TokenAccount } from "../models";
import { LENDING_PROGRAM_ID, TOKEN_PROGRAM_ID, WRAPPED_SOL_MINT } from "../constants/ids";
import { LendingObligationLayout, TokenAccount } from "../models";
import { cache, TokenAccountParser } from "./../contexts/accounts";
export function ensureSplAccount(
@ -75,6 +75,50 @@ export function createTempMemoryAccount(
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(
instructions: TransactionInstruction[],
payer: PublicKey,

View File

@ -12,6 +12,8 @@ import { LENDING_PROGRAM_ID, TOKEN_PROGRAM_ID } from "../constants/ids";
import {
createTempMemoryAccount,
createUninitializedAccount,
createUninitializedMint,
createUninitializedObligation,
ensureSplAccount,
findOrCreateAccountByMint,
} from "./account";
@ -51,7 +53,7 @@ export const borrow = async (
AccountLayout.span
);
const obligation = createUninitializedAccount(
const obligation = createUninitializedObligation(
instructions,
wallet.publicKey,
await connection.getMinimumBalanceForRentExemption(
@ -60,7 +62,7 @@ export const borrow = async (
signers
);
const obligationMint = createUninitializedAccount(
const obligationMint = createUninitializedMint(
instructions,
wallet.publicKey,
await connection.getMinimumBalanceForRentExemption(MintLayout.span),

View File

@ -22,7 +22,7 @@ import { LendingInstruction } from "./lending";
/// 6. `[writable]` Obligation - uninitialized
/// 7. `[writable]` Obligation token mint - uninitialized
/// 8. `[writable]` Obligation token output - uninitialized
/// 9. `[]` Obligation token owner - uninitialized
/// 9. `[]` Obligation token owner
/// 10 `[]` Derived lending market authority ($authority).
/// 11 `[]` Dex market
/// 12 `[]` Dex order book side // could be bid/ask
@ -78,16 +78,16 @@ export const borrowInstruction = (
{
pubkey: borrowReserveLiquiditySupply,
isSigner: false,
isWritable: false,
isWritable: true,
},
{ pubkey: obligation, isSigner: false, isWritable: true },
{ pubkey: obligationMint, isSigner: false, isWritable: true },
{ pubkey: obligationTokenOutput, isSigner: false, isWritable: true },
{ pubkey: obligationTokenOwner, isSigner: false, isWritable: false },
{ pubkey: lendingMarketAuthority, isSigner: false, isWritable: true },
{ pubkey: dexMarket, isSigner: false, isWritable: true },
{ pubkey: lendingMarketAuthority, isSigner: false, isWritable: false },
{ pubkey: dexMarket, 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_RENT_PUBKEY, isSigner: false, isWritable: false },
{ pubkey: TOKEN_PROGRAM_ID, isSigner: false, isWritable: false },