Monitor a request
Track a request's lifecycle through events or a synchronous getRequest call.
Last updated
import { createPublicClient, http, parseAbiItem } from "viem";
import { mainnet } from "viem/chains";
const SHARES = "0x...";
const client = createPublicClient({ chain: mainnet, transport: http() });
const logs = await client.getLogs({
address: SHARES,
event: parseAbiItem(
"event SubscriptionRequest(address indexed investor, uint256 requestId, address indexed receiver, address indexed subscriptionAsset, uint256 assetsAmount, uint256 sharesAmount, uint64 timestamp, uint64 cancelableFrom, uint64 expiryAt)"
),
args: { investor: "0xYourAddress" },
fromBlock: "earliest",
});
for (const log of logs) console.log("requestId:", log.args.requestId);import { ethers } from "ethers";
const SHARES = "0x...";
const abi = [
"event SubscriptionRequest(address indexed investor, uint256 requestId, address indexed receiver, address indexed subscriptionAsset, uint256 assetsAmount, uint256 sharesAmount, uint64 timestamp, uint64 cancelableFrom, uint64 expiryAt)",
];
const provider = new ethers.JsonRpcProvider("https://eth.llamarpc.com");
const shares = new ethers.Contract(SHARES, abi, provider);
const filter = shares.filters.SubscriptionRequest("0xYourAddress");
const events = await shares.queryFilter(filter);
for (const e of events) console.log("requestId:", e.args.requestId.toString());from web3 import Web3
SHARES = "0x..."
abi = [{
"name": "SubscriptionRequest", "type": "event", "anonymous": False,
"inputs": [
{"name": "investor", "type": "address", "indexed": True},
{"name": "requestId", "type": "uint256", "indexed": False},
{"name": "receiver", "type": "address", "indexed": True},
{"name": "subscriptionAsset", "type": "address", "indexed": True},
{"name": "assetsAmount", "type": "uint256", "indexed": False},
{"name": "sharesAmount", "type": "uint256", "indexed": False},
{"name": "timestamp", "type": "uint64", "indexed": False},
{"name": "cancelableFrom", "type": "uint64", "indexed": False},
{"name": "expiryAt", "type": "uint64", "indexed": False},
],
}]
w3 = Web3(Web3.HTTPProvider("https://eth.llamarpc.com"))
shares = w3.eth.contract(address=SHARES, abi=abi)
logs = shares.events.SubscriptionRequest().get_logs(
from_block=0, argument_filters={"investor": "0xYourAddress"})
for log in logs:
print("requestId:", log["args"]["requestId"])function getRequest(uint256 id) external view returns (UserRequest memory);
struct UserRequest {
RequestType requestType; // 0 = SUBSCRIPTION, 1 = REDEMPTION
RequestStatus requestStatus; // 0 = PENDING, 1 = PROCESSED, 2 = REJECTED, 3 = CANCELLED
address asset;
uint256 assetAmount; // subscription: deposited assets; redemption: minAssetsOut
uint256 sharesAmount; // subscription: minSharesOut; redemption: shares redeemed
address investor;
address receiver;
uint64 timestamp;
uint64 expiryAt;
}import { createPublicClient, http, parseAbi } from "viem";
import { mainnet } from "viem/chains";
const SHARES = "0x...";
const abi = parseAbi([
"function getRequest(uint256 id) view returns ((uint8 requestType, uint8 requestStatus, address asset, uint256 assetAmount, uint256 sharesAmount, address investor, address receiver, uint64 timestamp, uint64 expiryAt))",
]);
const client = createPublicClient({ chain: mainnet, transport: http() });
const req = await client.readContract({ address: SHARES, abi, functionName: "getRequest", args: [42n] });
// req.requestStatus === 0 => still PENDINGimport { ethers } from "ethers";
const SHARES = "0x...";
const abi = [
"function getRequest(uint256 id) view returns (tuple(uint8 requestType, uint8 requestStatus, address asset, uint256 assetAmount, uint256 sharesAmount, address investor, address receiver, uint64 timestamp, uint64 expiryAt))",
];
const provider = new ethers.JsonRpcProvider("https://eth.llamarpc.com");
const shares = new ethers.Contract(SHARES, abi, provider);
const req = await shares.getRequest(42n);
console.log("status:", req.requestStatus); // 0 = PENDINGfrom web3 import Web3
SHARES = "0x..."
abi = [{
"name": "getRequest", "type": "function", "stateMutability": "view",
"inputs": [{"name": "id", "type": "uint256"}],
"outputs": [{"type": "tuple", "components": [
{"name": "requestType", "type": "uint8"},
{"name": "requestStatus", "type": "uint8"},
{"name": "asset", "type": "address"},
{"name": "assetAmount", "type": "uint256"},
{"name": "sharesAmount", "type": "uint256"},
{"name": "investor", "type": "address"},
{"name": "receiver", "type": "address"},
{"name": "timestamp", "type": "uint64"},
{"name": "expiryAt", "type": "uint64"},
]}],
}]
w3 = Web3(Web3.HTTPProvider("https://eth.llamarpc.com"))
shares = w3.eth.contract(address=SHARES, abi=abi)
req = shares.functions.getRequest(42).call()
print("status:", req[1]) # 0 = PENDING