mirror of
https://github.com/alexgo-io/DefiLlama-Adapters.git
synced 2026-01-12 22:43:12 +08:00
Updated adapter to support Rain.fi v2 (#13634)
Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com>
This commit is contained in:
93
projects/rain/bank-idl.js
Normal file
93
projects/rain/bank-idl.js
Normal file
@@ -0,0 +1,93 @@
|
||||
module.exports = {
|
||||
"address": "rain2M5b9GeFCk792swkwUu51ZihHJb3SUQ8uHxSRJf",
|
||||
"metadata": {"name": "bank", "version": "0.1.0", "spec": "0.1.0", "description": "Created with Anchor"},
|
||||
"instructions": [],
|
||||
"accounts": [
|
||||
{"name": "Bank", "discriminator": [142, 49, 166, 242, 50, 66, 97, 188]},
|
||||
],
|
||||
"events": [],
|
||||
"errors": [],
|
||||
"types": [
|
||||
{
|
||||
"name": "Bank",
|
||||
"type": {
|
||||
"kind": "struct",
|
||||
"fields": [
|
||||
{"name": "owner", "type": "pubkey"},
|
||||
{"name": "mint", "type": "pubkey"},
|
||||
{"name": "vault", "type": "pubkey"},
|
||||
{"name": "authority", "type": "pubkey"},
|
||||
{"name": "bank_type", "type": {"defined": {"name": "BankType"}}},
|
||||
{"name": "total_liquidity", "type": "u64"},
|
||||
{"name": "available_liquidity", "type": "u64"},
|
||||
{"name": "delegated_liquidity", "type": "u64"},
|
||||
{"name": "cooldown_liquidity", "type": "u64"},
|
||||
{"name": "cooldown_period", "type": "u64"},
|
||||
{"name": "delegators", "type": {"array": [{"defined": {"name": "Delegator"}}, 8]}},
|
||||
{"name": "created_at", "type": "u64"},
|
||||
{"name": "deposited_at", "type": "u64"},
|
||||
{"name": "withdrawn_at", "type": "u64"},
|
||||
{"name": "borrowed_at", "type": "u64"},
|
||||
{"name": "repaid_at", "type": "u64"},
|
||||
{"name": "frozen_until", "type": "u64"},
|
||||
{"name": "reserved", "type": {"array": ["u8", 512]}}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "BankType",
|
||||
"type": {
|
||||
"kind": "enum",
|
||||
"variants": [
|
||||
{"name": "Personal", "fields": [{"defined": {"name": "PersonalBank"}}]},
|
||||
{"name": "Shared", "fields": [{"defined": {"name": "SharedBank"}}]}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "PersonalBank",
|
||||
"type": {
|
||||
"kind": "struct",
|
||||
"fields": [
|
||||
{"name": "reserved", "type": {"array": ["u8", 32]}},
|
||||
{"name": "reserved1", "type": {"array": ["u8", 32]}},
|
||||
{"name": "reserved2", "type": {"array": ["u8", 16]}}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "SharedBank",
|
||||
"type": {
|
||||
"kind": "struct",
|
||||
"fields": [
|
||||
{"name": "lp_mint", "type": "pubkey"},
|
||||
{"name": "lp_rate", "type": "u128"},
|
||||
{"name": "lp_supply", "type": "u64"},
|
||||
{"name": "_padding1", "type": {"array": ["u8", 8]}},
|
||||
{"name": "lp_decimals", "type": "u8"},
|
||||
{"name": "_padding2", "type": {"array": ["u8", 15]}}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Delegator",
|
||||
"type": {
|
||||
"kind": "struct",
|
||||
"fields": [{"name": "delegator_type", "type": {"defined": {"name": "DelegatorType"}}}, {"name": "delegated_amount", "type": "u64"}]
|
||||
}
|
||||
},
|
||||
{"name": "DelegatorType", "type": {"kind": "enum", "variants": [{"name": "Empty", "fields": [{"defined": {"name": "EmptyDelegator"}}]}]}},
|
||||
{
|
||||
"name": "EmptyDelegator",
|
||||
"type": {
|
||||
"kind": "struct",
|
||||
"fields": [
|
||||
{"name": "reserved", "type": {"array": ["u8", 32]}},
|
||||
{"name": "reserved1", "type": {"array": ["u8", 32]}},
|
||||
{"name": "reserved2", "type": {"array": ["u8", 32]}},
|
||||
{"name": "reserved3", "type": {"array": ["u8", 24]}}
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
74
projects/rain/defi-idl.js
Normal file
74
projects/rain/defi-idl.js
Normal file
@@ -0,0 +1,74 @@
|
||||
module.exports = {
|
||||
"address": "rDeFiHPjHZRLiz4iBzMw3zv6unZs4VwdU6qQcVd3NSK",
|
||||
"metadata": { "name": "defi_lending", "version": "0.1.0", "spec": "0.1.0", "description": "Created with Anchor" },
|
||||
"instructions": [],
|
||||
"accounts": [{ "name": "Loan", "discriminator": [20, 195, 70, 117, 165, 227, 182, 1] }],
|
||||
"events": [],
|
||||
"errors": [],
|
||||
"types": [
|
||||
{
|
||||
"name": "Loan",
|
||||
"type": {
|
||||
"kind": "struct",
|
||||
"fields": [
|
||||
{ "name": "kind", "type": { "defined": { "name": "LoanKind" } } },
|
||||
{ "name": "status", "type": { "defined": { "name": "LoanStatus" } } },
|
||||
{ "name": "is_custom", "type": "u8" },
|
||||
{ "name": "_padding1", "type": { "array": ["u8", 6] } },
|
||||
{ "name": "borrower", "type": "pubkey" },
|
||||
{ "name": "bank", "type": "pubkey" },
|
||||
{ "name": "pool", "type": "pubkey" },
|
||||
{ "name": "collateral", "type": "pubkey" },
|
||||
{ "name": "principal", "type": "pubkey" },
|
||||
{ "name": "referrer", "type": "pubkey" },
|
||||
{ "name": "interest", "type": "u64" },
|
||||
{ "name": "borrowed_amount", "type": "u64" },
|
||||
{ "name": "collateral_amount", "type": "u64" },
|
||||
{ "name": "duration", "type": "u32" },
|
||||
{ "name": "currency", "type": "u32" },
|
||||
{ "name": "liquidation", "type": "u16" },
|
||||
{ "name": "_padding2", "type": { "array": ["u8", 6] } },
|
||||
{ "name": "created_at", "type": "u64" },
|
||||
{ "name": "expired_at", "type": "u64" },
|
||||
{ "name": "repaid_at", "type": "u64" },
|
||||
{ "name": "liquidated_at", "type": "u64" },
|
||||
{ "name": "sold_amount", "type": "u64" },
|
||||
{ "name": "reserved", "type": { "array": ["u64", 9] } }
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "LoanKind",
|
||||
"type": {
|
||||
"kind": "enum",
|
||||
"variants": [
|
||||
{ "name": "Classic", "fields": [{ "defined": { "name": "ClassicLoan" } }] },
|
||||
{ "name": "MarginSwap", "fields": [{ "defined": { "name": "MarginSwapLoan" } }] },
|
||||
{ "name": "Request", "fields": [{ "defined": { "name": "RequestLoan" } }] },
|
||||
]
|
||||
}
|
||||
},
|
||||
{ "name": "ClassicLoan", "type": { "kind": "struct", "fields": [{ "name": "reserved", "type": { "array": ["u8", 64] } }] } },
|
||||
{
|
||||
"name": "MarginSwapLoan",
|
||||
"type": {
|
||||
"kind": "struct",
|
||||
"fields": [
|
||||
{ "name": "down_payment", "type": "u64" },
|
||||
{ "name": "reserved", "type": { "array": ["u8", 32] } },
|
||||
{ "name": "reserved1", "type": { "array": ["u8", 24] } }
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "RequestLoan",
|
||||
"type": {
|
||||
"kind": "struct",
|
||||
"fields": [
|
||||
{"name": "reserved", "type": {"array": ["u8", 64]}}
|
||||
]
|
||||
}
|
||||
},
|
||||
{ "name": "LoanStatus", "type": { "kind": "enum", "variants": [{ "name": "Ongoing" }, { "name": "Repaid" }, { "name": "Liquidated" }, { "name": "Sold" }] } }
|
||||
]
|
||||
}
|
||||
@@ -1,549 +0,0 @@
|
||||
|
||||
module.exports = {
|
||||
"version": "0.1.0",
|
||||
"name": "rain",
|
||||
"instructions": [],
|
||||
"accounts": [
|
||||
{
|
||||
"name": "loan",
|
||||
"type": {
|
||||
"kind": "struct",
|
||||
"fields": [
|
||||
{
|
||||
"name": "kind",
|
||||
"type": {
|
||||
"defined": "LoanKind"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "status",
|
||||
"type": {
|
||||
"defined": "LoanStatus"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "borrower",
|
||||
"type": "publicKey"
|
||||
},
|
||||
{
|
||||
"name": "lender",
|
||||
"type": "publicKey"
|
||||
},
|
||||
{
|
||||
"name": "pool",
|
||||
"type": "publicKey"
|
||||
},
|
||||
{
|
||||
"name": "mint",
|
||||
"type": "publicKey"
|
||||
},
|
||||
{
|
||||
"name": "currency",
|
||||
"type": "publicKey"
|
||||
},
|
||||
{
|
||||
"name": "isCustom",
|
||||
"type": "bool"
|
||||
},
|
||||
{
|
||||
"name": "isFrozen",
|
||||
"type": "bool"
|
||||
},
|
||||
{
|
||||
"name": "price",
|
||||
"type": "u64"
|
||||
},
|
||||
{
|
||||
"name": "interest",
|
||||
"type": "u64"
|
||||
},
|
||||
{
|
||||
"name": "amount",
|
||||
"type": "u64"
|
||||
},
|
||||
{
|
||||
"name": "duration",
|
||||
"type": "u64"
|
||||
},
|
||||
{
|
||||
"name": "collection",
|
||||
"type": "u32"
|
||||
},
|
||||
{
|
||||
"name": "liquidation",
|
||||
"type": "u16"
|
||||
},
|
||||
{
|
||||
"name": "marketplace",
|
||||
"type": {
|
||||
"defined": "Marketplace"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "sale",
|
||||
"type": {
|
||||
"defined": "Sale"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "createdAt",
|
||||
"type": "u64"
|
||||
},
|
||||
{
|
||||
"name": "expiredAt",
|
||||
"type": "u64"
|
||||
},
|
||||
{
|
||||
"name": "repaidAt",
|
||||
"type": "u64"
|
||||
},
|
||||
{
|
||||
"name": "soldAt",
|
||||
"type": "u64"
|
||||
},
|
||||
{
|
||||
"name": "liquidatedAt",
|
||||
"type": "u64"
|
||||
},
|
||||
{
|
||||
"name": "listing",
|
||||
"type": {
|
||||
"defined": "Listing"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "isCompressedLoan",
|
||||
"type": "bool"
|
||||
},
|
||||
{
|
||||
"name": "isDefi",
|
||||
"type": "bool"
|
||||
},
|
||||
{
|
||||
"name": "collateralAmount",
|
||||
"type": "u64"
|
||||
},
|
||||
{
|
||||
"name": "collateralDecimals",
|
||||
"type": "u8"
|
||||
},
|
||||
{
|
||||
"name": "padding",
|
||||
"type": {
|
||||
"array": [
|
||||
"u64",
|
||||
5
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "padding1",
|
||||
"type": "u32"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "pool",
|
||||
"type": {
|
||||
"kind": "struct",
|
||||
"fields": [
|
||||
{
|
||||
"name": "bump",
|
||||
"type": "u8"
|
||||
},
|
||||
{
|
||||
"name": "owner",
|
||||
"type": "publicKey"
|
||||
},
|
||||
{
|
||||
"name": "currency",
|
||||
"type": "publicKey"
|
||||
},
|
||||
{
|
||||
"name": "oraclePoolUsd",
|
||||
"type": "publicKey"
|
||||
},
|
||||
{
|
||||
"name": "oracleSolUsd",
|
||||
"type": "publicKey"
|
||||
},
|
||||
{
|
||||
"name": "status",
|
||||
"type": {
|
||||
"defined": "PoolStatus"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "isCompounded",
|
||||
"type": "bool"
|
||||
},
|
||||
{
|
||||
"name": "isShared",
|
||||
"type": "bool"
|
||||
},
|
||||
{
|
||||
"name": "totalAmount",
|
||||
"type": "u64"
|
||||
},
|
||||
{
|
||||
"name": "borrowedAmount",
|
||||
"type": "u64"
|
||||
},
|
||||
{
|
||||
"name": "availableAmount",
|
||||
"type": "u64"
|
||||
},
|
||||
{
|
||||
"name": "usableAmount",
|
||||
"type": "u64"
|
||||
},
|
||||
{
|
||||
"name": "loanCurve",
|
||||
"type": {
|
||||
"defined": "Curve"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "mortgageCurve",
|
||||
"type": {
|
||||
"defined": "Curve"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "isMortgageEnabled",
|
||||
"type": "bool"
|
||||
},
|
||||
{
|
||||
"name": "nftLocked",
|
||||
"type": "u64"
|
||||
},
|
||||
{
|
||||
"name": "totalLiquidations",
|
||||
"type": "u64"
|
||||
},
|
||||
{
|
||||
"name": "totalLoans",
|
||||
"type": "u64"
|
||||
},
|
||||
{
|
||||
"name": "totalMortgages",
|
||||
"type": "u64"
|
||||
},
|
||||
{
|
||||
"name": "totalInterest",
|
||||
"type": "u64"
|
||||
},
|
||||
{
|
||||
"name": "depositedAt",
|
||||
"type": "u64"
|
||||
},
|
||||
{
|
||||
"name": "createdAt",
|
||||
"type": "u64"
|
||||
},
|
||||
{
|
||||
"name": "updatedAt",
|
||||
"type": "u64"
|
||||
},
|
||||
{
|
||||
"name": "collectionsUpdatedAt",
|
||||
"type": "u64"
|
||||
},
|
||||
{
|
||||
"name": "lastLoanAt",
|
||||
"type": "u64"
|
||||
},
|
||||
{
|
||||
"name": "lastMortgageAt",
|
||||
"type": "u64"
|
||||
},
|
||||
{
|
||||
"name": "conditions",
|
||||
"type": {
|
||||
"defined": "PoolCondition"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "liquidation",
|
||||
"type": {
|
||||
"defined": "PoolLiquidation"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "whitelist",
|
||||
"type": "publicKey"
|
||||
},
|
||||
{
|
||||
"name": "padding",
|
||||
"type": {
|
||||
"array": [
|
||||
"u64",
|
||||
16
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "collections",
|
||||
"type": {
|
||||
"array": [
|
||||
{
|
||||
"defined": "PoolCollection"
|
||||
},
|
||||
50
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
],
|
||||
"types": [
|
||||
{
|
||||
"name": "LoanKind",
|
||||
"type": {
|
||||
"kind": "enum",
|
||||
"variants": [
|
||||
{
|
||||
"name": "Loan"
|
||||
},
|
||||
{
|
||||
"name": "Mortgage"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "LoanStatus",
|
||||
"type": {
|
||||
"kind": "enum",
|
||||
"variants": [
|
||||
{
|
||||
"name": "Ongoing"
|
||||
},
|
||||
{
|
||||
"name": "Repaid"
|
||||
},
|
||||
{
|
||||
"name": "Liquidated"
|
||||
},
|
||||
{
|
||||
"name": "Sold"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Curve",
|
||||
"type": {
|
||||
"kind": "struct",
|
||||
"fields": [
|
||||
{
|
||||
"name": "baseInterest",
|
||||
"type": "u16"
|
||||
},
|
||||
{
|
||||
"name": "interestRate",
|
||||
"type": "u16"
|
||||
},
|
||||
{
|
||||
"name": "curveRate",
|
||||
"type": "u16"
|
||||
},
|
||||
{
|
||||
"name": "curveRateDay",
|
||||
"type": "u16"
|
||||
},
|
||||
{
|
||||
"name": "maxDuration",
|
||||
"type": "u64"
|
||||
},
|
||||
{
|
||||
"name": "maxAmount",
|
||||
"type": "u64"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "PoolCollection",
|
||||
"type": {
|
||||
"kind": "struct",
|
||||
"fields": [
|
||||
{
|
||||
"name": "collection",
|
||||
"type": "u32"
|
||||
},
|
||||
{
|
||||
"name": "collectionLtv",
|
||||
"type": "u16"
|
||||
},
|
||||
{
|
||||
"name": "exposure",
|
||||
"type": "u16"
|
||||
},
|
||||
{
|
||||
"name": "amountUsed",
|
||||
"type": "u64"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "PoolCondition",
|
||||
"type": {
|
||||
"kind": "struct",
|
||||
"fields": [
|
||||
{
|
||||
"name": "isEnabled",
|
||||
"type": "bool"
|
||||
},
|
||||
{
|
||||
"name": "minAge",
|
||||
"type": "u64"
|
||||
},
|
||||
{
|
||||
"name": "minLoan",
|
||||
"type": "u64"
|
||||
},
|
||||
{
|
||||
"name": "minVolume",
|
||||
"type": "u64"
|
||||
},
|
||||
{
|
||||
"name": "liquidationThreshold",
|
||||
"type": "u16"
|
||||
},
|
||||
{
|
||||
"name": "padding1",
|
||||
"type": "u16"
|
||||
},
|
||||
{
|
||||
"name": "padding2",
|
||||
"type": "u16"
|
||||
},
|
||||
{
|
||||
"name": "padding3",
|
||||
"type": "u8"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "PoolLiquidation",
|
||||
"type": {
|
||||
"kind": "struct",
|
||||
"fields": [
|
||||
{
|
||||
"name": "loanLiquidation",
|
||||
"type": "u16"
|
||||
},
|
||||
{
|
||||
"name": "mortgageLiquidation",
|
||||
"type": "u16"
|
||||
},
|
||||
{
|
||||
"name": "isAutoSellEnabled",
|
||||
"type": "bool"
|
||||
},
|
||||
{
|
||||
"name": "percentageMaxLoss",
|
||||
"type": "u16"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "PoolStatus",
|
||||
"docs": [
|
||||
"Pool status enum"
|
||||
],
|
||||
"type": {
|
||||
"kind": "enum",
|
||||
"variants": [
|
||||
{
|
||||
"name": "Ready"
|
||||
},
|
||||
{
|
||||
"name": "Disabled"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Marketplace",
|
||||
"type": {
|
||||
"kind": "enum",
|
||||
"variants": [
|
||||
{
|
||||
"name": "None"
|
||||
},
|
||||
{
|
||||
"name": "Auctionhouse"
|
||||
},
|
||||
{
|
||||
"name": "Solanart"
|
||||
},
|
||||
{
|
||||
"name": "Hyperspace"
|
||||
},
|
||||
{
|
||||
"name": "Yaww"
|
||||
},
|
||||
{
|
||||
"name": "Hadeswap"
|
||||
},
|
||||
{
|
||||
"name": "Rain"
|
||||
},
|
||||
{
|
||||
"name": "TensorswapOrder"
|
||||
},
|
||||
{
|
||||
"name": "TensorswapListing"
|
||||
},
|
||||
{
|
||||
"name": "MagicEden"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Sale",
|
||||
"type": {
|
||||
"kind": "struct",
|
||||
"fields": [
|
||||
{
|
||||
"name": "isForSale",
|
||||
"type": "bool"
|
||||
},
|
||||
{
|
||||
"name": "salePrice",
|
||||
"type": "u64"
|
||||
},
|
||||
{
|
||||
"name": "currency",
|
||||
"type": "publicKey"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Listing",
|
||||
"type": {
|
||||
"kind": "struct",
|
||||
"fields": [
|
||||
{
|
||||
"name": "isListed",
|
||||
"type": "bool"
|
||||
},
|
||||
{
|
||||
"name": "price",
|
||||
"type": "u64"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
],
|
||||
"errors": []
|
||||
}
|
||||
@@ -1,43 +1,66 @@
|
||||
const { Program } = require("@project-serum/anchor");
|
||||
|
||||
const { Program } = require("@coral-xyz/anchor");
|
||||
const bs58 = require('bs58');
|
||||
const { getProvider } = require("../helper/solana");
|
||||
const idl = require('./idl')
|
||||
const bankIdl = require('./bank-idl');
|
||||
const defiIdl = require('./defi-idl');
|
||||
|
||||
async function tvl(api) {
|
||||
const provider = getProvider()
|
||||
const program = new Program(idl, 'RainEraPU5yDoJmTrHdYynK9739GkEfDsE4ffqce2BR', provider)
|
||||
const provider = getProvider();
|
||||
const bankProgram = new Program(bankIdl, provider);
|
||||
const defiProgram = new Program(defiIdl, provider);
|
||||
|
||||
const pools = await program.account.pool.all()
|
||||
const loans = await program.account.loan.all([
|
||||
// Get all banks
|
||||
const banks = await bankProgram.account.bank.all();
|
||||
|
||||
// Get all active defi loans
|
||||
const defiLoans = await defiProgram.account.loan.all([
|
||||
{
|
||||
memcmp: {
|
||||
offset: 294 + 8,
|
||||
bytes: bs58.encode(Buffer.from([1])), // tokens loans only
|
||||
},
|
||||
},
|
||||
{
|
||||
memcmp: {
|
||||
offset: 8 + 1,
|
||||
offset: 8 + 64 + 1,
|
||||
bytes: bs58.encode(Buffer.from([0])), // active loans only
|
||||
},
|
||||
},
|
||||
])
|
||||
]);
|
||||
|
||||
for (const loan of loans) {
|
||||
api.add(loan.account.mint.toString(), loan.account.collateralAmount)
|
||||
// Add bank available liquidity to TVL, availableLiquidity = totalLiquidity - borrowedLiquidity
|
||||
for (const bank of banks) {
|
||||
api.add(
|
||||
bank.account.mint.toString(),
|
||||
bank.account.availableLiquidity
|
||||
);
|
||||
}
|
||||
|
||||
for (const pool of pools)
|
||||
api.add(pool.account.currency.toString(), pool.account.availableAmount)
|
||||
// Add defi loan collateral to TVL
|
||||
for (const loan of defiLoans) {
|
||||
api.add(
|
||||
loan.account.collateral.toString(),
|
||||
loan.account.collateralAmount
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
async function borrowed(api) {
|
||||
const provider = getProvider()
|
||||
const program = new Program(idl, 'RainEraPU5yDoJmTrHdYynK9739GkEfDsE4ffqce2BR', provider)
|
||||
const pools = await program.account.pool.all()
|
||||
const provider = getProvider();
|
||||
const defiProgram = new Program(defiIdl, provider);
|
||||
|
||||
for (const pool of pools)
|
||||
api.add(pool.account.currency.toString(), pool.account.borrowedAmount)
|
||||
// Get all active defi loans
|
||||
const defiLoans = await defiProgram.account.loan.all([
|
||||
{
|
||||
memcmp: {
|
||||
offset: 8 + 64 + 1,
|
||||
bytes: bs58.encode(Buffer.from([0])), // active loans only
|
||||
},
|
||||
},
|
||||
]);
|
||||
|
||||
// Add defi loan collateral to TVL
|
||||
for (const loan of defiLoans) {
|
||||
api.add(
|
||||
loan.account.principal.toString(),
|
||||
loan.account.borrowedAmount
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
|
||||
@@ -32,7 +32,22 @@ function checkType(typeObj) {
|
||||
if (isAccountObjInTypeMap || !accountMap[typeObj.name])
|
||||
whitelistedTypeMap[typeObj.name] = typeObj
|
||||
|
||||
if (typeObj.type.kind === 'enum' && Array.isArray(typeObj.type.variants)) {
|
||||
typeObj.type.variants.forEach(v => {
|
||||
if (!v.fields) {
|
||||
const name = getDefinedName(v)
|
||||
if (name && typeMap[name]) checkType(typeMap[name])
|
||||
return;
|
||||
}
|
||||
v.fields.forEach(f => {
|
||||
const name = getDefinedName(f)
|
||||
if (name && typeMap[name]) checkType(typeMap[name])
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
if (typeObj.type.kind !== 'struct') return;
|
||||
|
||||
typeObj.type.fields.forEach(f => {
|
||||
const isVec = f.type?.vec?.defined?.name
|
||||
if (isVec) {
|
||||
@@ -49,6 +64,19 @@ function checkType(typeObj) {
|
||||
if (name && typeMap[name]) checkType(typeMap[name])
|
||||
})
|
||||
}
|
||||
if (typeof f.type === 'enum' && Array.isArray(f.type.variants)) {
|
||||
f.type.variants.forEach(v => {
|
||||
if (!v.fields) {
|
||||
const name = getDefinedName(v)
|
||||
if (name && typeMap[name]) checkType(typeMap[name])
|
||||
return;
|
||||
}
|
||||
v.fields.forEach(f => {
|
||||
const name = getDefinedName(f)
|
||||
if (name && typeMap[name]) checkType(typeMap[name])
|
||||
})
|
||||
})
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user