trickle-sdk
v0.1.0
Published
TypeScript SDK for Trickle — real-time payroll streaming on Celo (TrickleVault + StreamRegistry). Addresses, ABIs, and helpers for building MiniPay-native payroll dApps.
Maintainers
Readme
trickle-sdk
TypeScript SDK for Trickle — real-time payroll streaming on Celo. Employers deposit stablecoins (cUSD / USDC / USDT) into the on-chain TrickleVault and open per-second salary streams; employees withdraw accrued earnings anytime. MiniPay-native.
This package ships the Celo Mainnet addresses, fully-typed ABIs
(TrickleVault, StreamRegistry, ERC-20), and dependency-free helpers for
stream math — so you can build on Trickle with viem or
wagmi in a few lines.
Install
npm install trickle-sdk viemviem is a peer — bring your own (works with wagmi too).
What's inside
| Export | Purpose |
|---|---|
| TRICKLE_VAULT_ADDRESS, STREAM_REGISTRY_ADDRESS | Celo Mainnet contracts |
| TOKENS, CELO_CHAIN_ID, celoscan() | tokens, chain id, explorer links |
| TRICKLE_VAULT_ABI, STREAM_REGISTRY_ABI, ERC20_ABI | as const ABIs |
| ratePerSecToMonthly, monthlyToRatePerSec | quote salaries per month ↔ per second |
| accrued, runwayDays | live earnings + vault runway |
| formatAmount, parseAmount, shortenAddress, isAddress | formatting utils |
Read a payee's live earnings
import { createPublicClient, http } from "viem";
import { celo } from "viem/chains";
import {
TRICKLE_VAULT_ADDRESS,
TRICKLE_VAULT_ABI,
formatAmount,
ratePerSecToMonthly,
} from "trickle-sdk";
const client = createPublicClient({ chain: celo, transport: http() });
const streamIds = await client.readContract({
address: TRICKLE_VAULT_ADDRESS,
abi: TRICKLE_VAULT_ABI,
functionName: "getPayeeStreamIds",
args: ["0xPayee..."],
});
const stream = await client.readContract({
address: TRICKLE_VAULT_ADDRESS,
abi: TRICKLE_VAULT_ABI,
functionName: "getStream",
args: [streamIds[0]],
});
const monthly = ratePerSecToMonthly(stream.amountPerSec);
console.log(`${formatAmount(monthly, 18)} cUSD / month`);Read an on-chain payslip attestation
import {
STREAM_REGISTRY_ADDRESS,
STREAM_REGISTRY_ABI,
} from "trickle-sdk";
const employer = await client.readContract({
address: STREAM_REGISTRY_ADDRESS,
abi: STREAM_REGISTRY_ABI,
functionName: "getEmployerName",
args: ["0xPayer..."],
});
// → "Celo Labs" when the employer has stamped it on-chainContracts (Celo Mainnet · 42220)
| Contract | Address |
|---|---|
| TrickleVault | 0x8a3e…dc05 |
| StreamRegistry | 0x84D0…8d99 |
License
MIT
