aruvi-arc
v2.0.4
Published
Aruvi Payment SDK - Accept instant USDC payments on Arc, Circle's L1 for stablecoin finance
Maintainers
Readme
aruvi-arc
Accept instant USDC payments on Arc - Circle's L1 for stablecoin finance - with a few lines of code. Sub-second settlement, ~$0.01 fees paid in USDC, no chargebacks.
npm install aruvi-arcQuick start (vanilla JS)
<script src="https://cdn.jsdelivr.net/npm/aruvi-arc@latest/dist/aruvi-arc.min.js"></script>
<div id="pay-button"></div>
<script>
Aruvi.init({
merchantAddress: '0xYourWallet',
environment: 'testnet', // Arc Testnet (default)
});
Aruvi.button('#pay-button', {
amount: '25.00',
description: 'Premium Plan',
reference: 'order-1042',
onSuccess: (result) => console.log('Paid!', result.paymentId),
onError: (error) => console.error(error.message),
});
</script>React / Next.js
import { AruviProvider, AruviButton } from 'aruvi-arc/react';
import 'aruvi-arc/styles.css';
<AruviProvider config={{ merchantAddress: '0xYourWallet', environment: 'testnet' }}>
<AruviButton
payment={{ amount: '25.00', description: 'Premium Plan' }}
onSuccess={(result) => console.log(result.paymentId)}
/>
</AruviProvider>Ships as a Client Component ('use client'), so it works in the Next.js App Router with no SSR setup. React 17+ (tested on 18 and 19).
Accept euros (EURC)
Add currency: 'EURC' to any checkout, button, or payment link to settle in euros instead of USDC. Both are native stablecoins on Arc; omit it and it defaults to USDC.
Aruvi.button('#pay-button', { amount: '20.00', currency: 'EURC', description: 'Abonnement Pro' });Checkout modes
modal(default) - checkout opens in an iframe overlayredirect- full-page checkout; returns tosuccessUrlwithpaymentId,txHash,status=success
aruvi.checkout({
amount: '99.00',
mode: 'redirect',
successUrl: 'https://yourshop.com/thanks',
cancelUrl: 'https://yourshop.com/cart',
});Server-side verification
Zero-dependency (plain fetch + JSON-RPC) - runs in Node, Deno, Bun, and edge runtimes. On Arc, amounts are public and finality is deterministic, so verification is instant and includes the exact amount:
import { verifyPayment, verifyPaymentByTxHash } from 'aruvi-arc';
const result = await verifyPayment({
paymentId: '0x…',
merchantAddress: '0xYourWallet',
expectedAmount: '25.00',
environment: 'testnet', // gateway defaults to Aruvi's verified deployment
});
if (result.verified) {
// recipient ✓ amount ✓ not refunded ✓ - fulfil the order
}The gateway address is resolved automatically per environment. To reference it yourself, import CONTRACTS from aruvi-arc (CONTRACTS.testnet.PaymentGateway), or pass an explicit gatewayAddress to override.
Payment links
const url = aruvi.createPaymentLink({ amount: '10.00', description: 'Coffee ☕' });Network
| | |
|---|---|
| Chain | Arc Testnet (5042002) |
| RPC | https://rpc.testnet.arc.network |
| Gateway | 0x4A275BfeCA9cd4864737098148c1E628954D3025 |
| USDC | 0x3600000000000000000000000000000000000000 |
| EURC | 0x89B50855Aa3bE2F677cD6303Cec089B5F319D72a |
| Faucet | https://faucet.circle.com |
| Explorer | https://testnet.arcscan.app |
Documentation
Full guides and API reference: https://aruvi-on-arc-documentation.vercel.app
License
BSD-3-Clause
