FAQ
BigInt Serialization
Using native BigInt with JSON.stringify will raise a TypeError as
BigInt values are not serializable. Read more.
There are two techniques to mitigate this:
Lossless serialization
Lossless serialization means that BigInt will be converted to a format that can be deserialized later (e.g. 69420n → "#bigint.69420"). The trade-off is that these values are not human-readable and are not intended to be displayed to the user.
Lossless serialization can be achieved with wagmi's serialize & deserialize
import { serialize, deserialize } from 'wagmi'
const serialized = serialize({ value: 69420n })
// '{"value":"#bigint.69420"}'
const deserialized = deserialize(serialized)
// { value: 69420n }Lossy serialization
Lossy serialization means that the BigInt will be converted to a normal display string (e.g. 69420n → "69420").
The trade-off is that you will not be able to deserialize the BigInt with JSON.parse as it can not distinguish between a normal string and a BigInt.
This method can be achieved by modifying JSON.stringify to include a BigInt replacer:
const replacer = (key, value) =>
typeof value === 'bigint' ? value.toString() : value
JSON.stringify({ value: 69420n }, replacer)
// '{"value":"69420"}'