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 { 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,

View File

@ -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),

View File

@ -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 },