replaceBigInts
Replaces all instances of BigInt in an object with a new value, specified by a replacer function.
Usage
This example simply converts BigInt values to a string.
import { replaceBigInts } from "@ponder/utils";
 
const obj = { a: 100n, b: [-12n, 3_000_000_000n] };
 
const result = replaceBigInts(obj, (v) => String(v));
//    ?^ { a: '100', b: [ '-12', '3000000000' ] }Usage in Ponder
Here are a few common scenarios where you might want to replace BigInt values in a Ponder app.
json columns
The json column type does not support BigInt values. Use replaceBigInts to prepare objects containing BigInt values for insertion.
import { userOperations } from "ponder:schema";
import { ponder } from "ponder:registry";
import { replaceBigInts } from "@ponder/utils";
import { toHex } from "viem";
 
ponder.on("EntryPoint:UserOp", async ({ event, context }) => {
  await context.db.insert(userOperations).values({
    id: event.log.id,
    receipt: replaceBigInts(event.transactionReceipt, toHex),
  });
});To maintain type safety for column values, use the ReplaceBigInts helper type in the column $type annotation.
import { onchainTable } from "ponder";
import type { ReplaceBigInts } from "@ponder/utils";
import type { TransactionReceipt, Hex } from "viem";
 
export const userOperations = onchainTable("user_operations", (t) => ({
  id: t.text().primaryKey(),
  receipt: t.json<ReplaceBigInts<TransactionReceipt, Hex>>(),
}));HTTP responses
The GraphQL API automatically serializes BigInt values to strings before returning them in HTTP responses. In API functions, you need to handle this serialization process manually.
import { accounts } from "ponder:schema";
import { ponder } from "ponder:registry";
import { replaceBigInts } from "@ponder/utils";
import { numberToHex } from "viem";
 
ponder.get("/whale-balances", async (c) => {
  const rows = await c.db
    .select({
      address: accounts.address,
      ethBalance: accounts.ethBalance,
      dogeBalance: accounts.dogeBalance,
    })
    .from(accounts)
    .where(eq(accounts.address, address));
 
  const result = replaceBigInts(rows, (v) => numberToHex(v));
 
  return c.json(result);
});Replacer functions
Here are three common ways to replace BigInt values.
| Encoding | Replacer type | Replacer function | 
|---|---|---|
| Hex |  `0x${string}`  | numberToHex | 
| String | string | String | 
| Lossless string |  `#bigint.${string}`  |  (x) => `#bigint.${String(x)}`  | 
See the Wagmi FAQ for more information on BigInt serialization.
Parameters
value
- Type: any
The scalar, array, or object containing BigInt values to be replaced.
replacer
- Type: (value: bigint) => JSONSerializable
A custom replacer function that will be called for each BigInt value.
Returns
value
The scalar, array, or object with all BigInt values replaced.