pyusd-payments-sdk
v0.0.3
Published
Utilities for interacting with Arx HaLo–secured wallets from the browser. The SDK wraps the [`@arx-research/libhalo`](https://github.com/arx-research/libhalo) web API to perform PYUSD transfers.
Readme
pyusd-payments-sdk
Utilities for interacting with Arx HaLo–secured wallets from the browser. The SDK wraps the @arx-research/libhalo web API to perform PYUSD transfers.
Installation
npm install pyusd-payments-sdkQuick Start
import { HaloClient } from "pyusd-payments-sdk";
const client = new HaloClient({
rpcUrl: "https://ethereum-sepolia-rpc.publicnode.com",
network: "testnet", // or "mainnet", "arbitrum", "arbitrum-testnet"
recipient: "0xRecipientAddressHere",
});
// listen for status updates from the HaLo chip
const onStatusChange = (state) => console.log("HaLo status:", state);
async function run() {
const senderAddress = await client.getWalletAddress({ onStatusChange });
console.log("HaLo wallet address:", senderAddress);
const balance = await client.getPyusdBalance(senderAddress);
console.log(`PYUSD balance: ${balance}`);
const signedTx = await client.makePayment(senderAddress, {
amount: "5.0", // PYUSD amount in human-readable units
onStatusChange,
});
const broadcast = await client.broadcastTransaction(signedTx);
console.log("Broadcast hash:", broadcast.hash);
}
run().catch(console.error);Initialization
rpcUrl: HTTPS JSON-RPC endpoint for the target network.network:"mainnet","testnet","arbitrum", or"arbitrum-testnet"; determines which PYUSD contract is used.recipient: destination address for payments;makePaymentalways targets this account.
Reading the HaLo Wallet Address
const address = await client.getWalletAddress({ onStatusChange });onStatusChange(optional) receives status transitions (prompt,reading,success,error).
Checking PYUSD Balance
const balance = await client.getPyusdBalance(address);Returns the formatted PYUSD balance in human-readable units (defaults to 6 decimals if the contract call fails).
Making a PYUSD Payment
const signedTx = await client.makePayment(address, {
amount: "10.5", // PYUSD amount
onStatusChange,
});
const broadcast = await client.broadcastTransaction(signedTx);amount: string/number/bigint in PYUSD units (e.g.,"10"for 10 PYUSD).- Optionally override gas parameters with
transactionOverrides. - After signing, use
signedTx.serializedorbroadcastTransactionto submit the payload.
