Skip to content

Instantly share code, notes, and snippets.

@mbare0
mbare0 / run.js
Created September 30, 2025 15:46
Query balances at historical point
const EthDater = require("ethereum-block-by-date");
const ethers = require('ethers');
const TOKEN_ADDRESS = "..";
const MULTISIG_ADDRESS = "..";
const HISTORICAL_RPC = "..";
const ERC_20_ABI = [".."]'
const getBlockForTimestamp = async (timestamp, provider) => {
const dater = new EthDater(
export const wrapContract = async function wrapContract(contract, assets) {
//for more symbols in data feed it's more optimal to not specify asset list
const providedAssets = (assets && assets.length <= 5) ? assets : undefined;
return WrapperBuilder.wrap(contract).usingDataService(
{
dataServiceId: dataProviderId, //dataProviderId = 'redstone-arbitrum-prod' (DeltaPrime Arbitrum of DegenPrime) or 'redstone-avalanche-prod' (DeltaPrime Avalanche)
uniqueSignersCount: 3,
dataFeeds: providedAssets,
disablePayloadsDryRun: true
},
/**
* @notice Allows prime accounts to claim accumulated fees from an Aerodrome position.
* @param tokenId The ID of the Aerodrome NFT position for which fees should be collected.
*/
function collectFeesAerodrome(uint256 tokenId) external remainsSolvent nonReentrant onlyOwner {
(
,,
address token0Address,
address token1Address,
int24 tickSpacing,
@mbare0
mbare0 / gist:3b58314497b7648be65cb5763ad04403
Created January 17, 2025 12:50
Calculate TWAP from Uniswap V3 pools
function getTwap(
address pool,
uint32 secondsAgo
) external view returns (int24 twap) {
require(secondsAgo > 0, "Seconds must be > 0");
IUniswapV3Pool uniswapPool = IUniswapV3Pool(pool);
uint32;
secondsAgos[0] = secondsAgo;
@mbare0
mbare0 / gist:298a2c0dcd130dde555973f7b25e5d01
Created April 9, 2024 09:54
PendleTokensRequestHandlers DRAFT
import Decimal from "decimal.js";
import {
MulticallParsedResponse,
MulticallParsedResponses,
} from "../../../../../../types";
import PendleLpTokenAbi from "../../shared/abis/WombatLPToken.abi.json";
import { IEvmRequestHandlers } from "../../../../shared/IEvmRequestHandlers";
import { buildMulticallRequests } from "../utils/build-multicall-request";
import { extractValueFromMulticallResponse } from "../../../../shared/utils/extract-value-from-multicall-response";
import { getLastPriceOrFail } from "../../../../db/local-cache";
@mbare0
mbare0 / gist:8969eea8c2d11bb2c8751510e6ba9661
Created October 12, 2023 12:37
Bad debt from Platypus exploit
import {WrapperBuilder} from "@redstone-finance/evm-connector";
import config from "../../src/config";
import CACHE_LAYER_URLS from "../../common/redstone-cache-layer-urls.json";
const contractName = "SmartLoanGigaChadInterface";
const contractMethod = "getFullLoanStatus";
const jsonRPC = "https://nd-942-045-793.p2pify.com/8a3ab811da8703a863d7f2b93f65f3d0/ext/bc/C/rpc";
const ARTIFACT = require(`../../artifacts/contracts/interfaces/${contractName}.sol/${contractName}.json`);
const ethers = require("ethers");
const SLF_ARTIFACT = require(`../../artifacts/contracts/SmartLoansFactory.sol/SmartLoansFactory.json`);
const ethers = require("ethers");
const fs = require("fs");
const key = fs.readFileSync("./.secret").toString().trim();
let mnemonicWallet = new ethers.Wallet(key);
let provider = new ethers.providers.JsonRpcProvider(jsonRPC);
let wallet = mnemonicWallet.connect(provider);
@mbare0
mbare0 / fetch-health-at-block.js
Created May 8, 2023 19:51
Fetch historical health ratio
import {web3} from "hardhat";
const loanAddress = "0xB058DDDBcF513D7159cca9e7D776Ee0bF18E36E9";
const jsonRPC = "https://api.avax.network/ext/bc/C/rpc";
const ARTIFACT = require(`../../artifacts/contracts/interfaces/SmartLoanGigaChadInterface.sol/SmartLoanGigaChadInterface.json`);
const ethers = require("ethers");
const fs = require("fs");
const {WrapperBuilder} = require("@redstone-finance/evm-connector");
const {queryHistoricalFeeds} = require("./query-arweave");
@mbare0
mbare0 / loan-history.js
Created May 6, 2023 15:12
Calls with historical price data
const loanAddress = "0xB058DDDBcF513D7159cca9e7D776Ee0bF18E36E9";
const jsonRPC = "https://api.avax.network/ext/bc/C/rpc";
const ARTIFACT = require(`../../artifacts/contracts/interfaces/SmartLoanGigaChadInterface.sol/SmartLoanGigaChadInterface.json`);
const ethers = require("ethers");
const fs = require("fs");
const {WrapperBuilder} = require("@redstone-finance/evm-connector");
const {queryHistoricalFeeds} = require("./query-arweave");
import { SignedDataPackage } from "redstone-protocol";
@mbare0
mbare0 / SmartLoanGigaChadInterface.json
Last active March 9, 2023 15:42
Loan health ratio
{
"_format": "hh-sol-artifact-1",
"contractName": "SmartLoanGigaChadInterface",
"sourceName": "contracts/interfaces/SmartLoanGigaChadInterface.sol",
"abi": [
{
"anonymous": false,
"inputs": [
{
"indexed": true,