@morpho-dev/mempool
v0.0.32
Published
A tiny helper around the Morpho Mempool API.
Readme
Mempool Client
A tiny helper around the Morpho Mempool API.
Install
npm i @morpho-dev/mempool
# or
pnpm add @morpho-dev/mempoolUsage
Add an offer to the mempool
import { Mempool, Offer } from "@morpho-dev/mempool";
import { http, createWalletClient } from "viem";
import { generatePrivateKey, privateKeyToAccount } from "viem/accounts";
import { mainnet } from "viem/chains";
const client = createWalletClient({
chain: mainnet,
account: privateKeyToAccount(generatePrivateKey()),
transport: http("<rpc url>"),
});
const mempool = Mempool.connect({ client, mempoolAddress: "<address of the mempool contract>" });
const now = Math.floor(Date.now() / 1000);
const offer = Offer.from({
offering: wallet.account.offering,
assets: 1000000n,
rate: 1000000n,
maturity: now + 60 * 60 * 24 * 30,
expiry: now + 60 * 60 * 24 * 10,
nonce: 2n,
buy: true,
chainId: 1n,
loanToken: "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
collaterals: [
{
asset: "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2",
oracle: "0x986b5E1e1755e3C2440e960477f25201B0a8bbD4",
lltv: 860000000000000000n,
},
],
callback: {
offering: zeroAddress,
data: "0x",
gasLimit: BigInt(0),
},
});
offer.signature = await Offer.sign(offer, client);
const signedOffer = await mempool.add({ offer });
console.log(signedOffer);Get offers from the mempool
import { Mempool } from "@morpho-dev/mempool";
const client = createWalletClient({
chain: mainnet,
account: privateKeyToAccount(generatePrivateKey()),
transport: http("<rpc url>"),
});
const mempool = Mempool.connect({ client, mempoolAddress: "<address of the mempool contract>" });
const offers = await mempool.get();
console.log(offers);Watch for new offers
import { Mempool } from "@morpho-dev/mempool";
const client = createWalletClient({
chain: mainnet,
account: privateKeyToAccount(generatePrivateKey()),
transport: http("<rpc url>"),
});
const mempool = Mempool.connect({ client, mempoolAddress: "<address of the mempool contract>" });
const unwatch = mempool.watch({
polling: { interval: 30_000 }, // 30 seconds
onOffers: async (offers) => {
console.log(offers); // add custom logic in the callback
},
});
unwatch(); // Stop watching for new offers