Skip to main content

Events

All Aruvi state changes emit events. Arc has no reorgs, so an event you've seen is final - index with confidence at one confirmation.

Payments

event PaymentSent(
bytes32 indexed paymentId,
address indexed from,
address indexed to,
address token,
uint256 amount,
string memo
);

event PaymentRefunded(bytes32 indexed paymentId, uint256 amount);

PaymentSent fires for direct sends, multi-send items (one per recipient), request fulfillments, and subscription charges - one event type covers all money movement.

Requests

event RequestCreated(
bytes32 indexed requestId,
address indexed requester,
address token,
uint256 amount, // 0 = payer chooses
uint256 expiresAt, // 0 = never
string memo
);

event RequestFulfilled(bytes32 indexed requestId, bytes32 indexed paymentId, address indexed payer);
event RequestCancelled(bytes32 indexed requestId);

Subscriptions

event SubscriptionCreated(
bytes32 indexed subscriptionId,
address indexed subscriber,
address indexed recipient,
address token,
uint256 amount,
uint256 interval
);

event SubscriptionPaid(bytes32 indexed subscriptionId, bytes32 indexed paymentId);
event SubscriptionCancelled(bytes32 indexed subscriptionId);

Admin

event TokenSupportUpdated(address indexed token, bool supported);
event DefaultTokenChanged(address indexed previousToken, address indexed newToken);

Indexing example (viem)

import { parseAbiItem } from 'viem';

const logs = await client.getLogs({
address: GATEWAY_ADDRESS,
event: parseAbiItem(
'event PaymentSent(bytes32 indexed paymentId, address indexed from, address indexed to, address token, uint256 amount, string memo)'
),
args: { to: merchantAddress }, // all payments received by a merchant
fromBlock: deployBlock,
});
Amounts are in the events

Unlike Aruvi's original FHE version, amounts and memos now live directly in the logs - no extra eth_calls needed to build rich payment history.