Bytes & event signatures
Protobuf JSON represents bytes as base64 and 64-bit integers as decimal strings. The examples use the accepted protobuf field names in snake_case; ProtoJSON also accepts their lowerCamelCase equivalents. Native protobuf clients supply raw address and topic bytes.
1const address = '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48';2Buffer.from(address.slice(2), 'hex').toString('base64');3// oLhpkcYhizbB0Z1KLp6wzjYG60g=
event_signatures takes the full Keccak-256 hash of the canonical event declaration, without parameter names or indexed keywords. It is a 32-byte log topic, not a 4-byte function selector.
1// topic[0] as hex20xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef3// The same 32 bytes in ProtoJSON43fJSrRviyJtpwrBo/DeNqpUrp/FjxKEWKPVaTfUjs+8=
Ethereum addresses & Uniswap Swap signatures
1Ethereum USDC: 0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb482Ethereum USDT: 0xdac17f958d2ee523a2206206994597c13d831ec734V2: Swap(address,uint256,uint256,uint256,uint256,address)50xd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d82267V3: Swap(address,address,int256,int256,uint160,uint128,int24)80xc42079f94a6350d7e6235f29174924f928cc2ac818eb64fed8004e115fbcca67910V4: Swap(bytes32,address,int128,int128,uint160,uint128,int24,uint24)110x40e9cecb9f5f1f1c5b9c97dec2917b7ee92e57ba5563708daca94dd84ad7112f
Signature-only matching includes contracts with compatible events. Transfer also matches ERC-721 events; a Swap signature does not establish an official Uniswap deployment. Add known emitter addresses when contract identity matters. Filter indexed sender/recipient topics locally; LogFilter only supports the emitter and topic[0].