Program ID
FL3X2pRsQ9zHENpZSKDRREtccwJuei8yg9fwDu9UN69Q
FL3X2pRsQ9zHENpZSKDRREtccwJuei8yg9fwDu9UN69Q
FL3X2pRsQ9zHENpZSKDRREtccwJuei8yg9fwDu9UN69Q
All information for a Lulo account is stored and routed through the UserAccount, which is a PDA that is derived from the owner's wallet address:
export function getFlexUserAccountAddress(owner: PublicKey, programId: PublicKey) {
return PublicKey.findProgramAddressSync(
[Buffer.from('flexlend'), owner.toBuffer()],
programId,
)[0]
}export function getFlexUserAccountAddress(owner: PublicKey, programId: PublicKey) {
return PublicKey.findProgramAddressSync(
[Buffer.from('flexlend'), owner.toBuffer()],
programId,
)[0]
}export function getFlexUserAccountAddress(owner: PublicKey, programId: PublicKey) {
return PublicKey.findProgramAddressSync(
[Buffer.from('flexlend'), owner.toBuffer()],
programId,
)[0]
}The Lulo userAccount has authority over the deposited funds in each integrated protocol. For Drift, and Kamino, the authority transfers over directly to the respective user accounts at those protocols.
For MarginFi, you can find the corresponding Lulo obligation accounts by parsing the userAccount using the IDL attached below.
#[account]
pub struct UserAccount {
pub bump: u8,
pub _padding: [u8; 7],
pub owner: Pubkey,
pub mfi_account: Pubkey,
pub _padding2: [u64; 32],
}#[account]
pub struct UserAccount {
pub bump: u8,
pub _padding: [u8; 7],
pub owner: Pubkey,
pub mfi_account: Pubkey,
pub _padding2: [u64; 32],
}#[account]
pub struct UserAccount {
pub bump: u8,
pub _padding: [u8; 7],
pub owner: Pubkey,
pub mfi_account: Pubkey,
pub _padding2: [u64; 32],
}