@piprail/sdk 1.1.0 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +35 -0
- package/README.md +23 -0
- package/dist/index.cjs +24 -0
- package/dist/index.d.cts +122 -4
- package/dist/index.d.ts +122 -4
- package/dist/index.js +24 -0
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,41 @@ All notable changes to `@piprail/sdk` are documented here. The format
|
|
|
4
4
|
follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/) and the
|
|
5
5
|
versions follow [Semantic Versioning](https://semver.org/).
|
|
6
6
|
|
|
7
|
+
## [1.2.0] — 2026-06-04
|
|
8
|
+
|
|
9
|
+
Two new EVM presets — **HyperEVM (Hyperliquid)** and **Monad** — bringing the built-in count to
|
|
10
|
+
**26 chains across 8 families (19 EVM)**. Both reuse the existing EVM driver: one row of
|
|
11
|
+
on-chain-verified data each, no new code path and no new peer dep. Fully backward-compatible.
|
|
12
|
+
|
|
13
|
+
### Added
|
|
14
|
+
- **HyperEVM (Hyperliquid), `chain: 'hyperevm'`, chainId 999** — native Circle USDC
|
|
15
|
+
(`0xb88339CB7199b77E23DB6E890353E22632Ba630f`, 6 dp; CCTP V2). The highest-activity EVM venue
|
|
16
|
+
of 2025–26 (perps DEX + on-chain agent vaults). Pay in USDC or native HYPE. HyperEVM's USDT is
|
|
17
|
+
USDT0 (LayerZero), not Tether-native, so it's omitted (pass it as a custom `{ address, decimals }`).
|
|
18
|
+
- **Monad, `chain: 'monad'`, chainId 143** — native Circle USDC
|
|
19
|
+
(`0x754704Bc059F8C67012fEd69BC8A327a5aafb603`, 6 dp; CCTP V2). The biggest new EVM L1 of 2025
|
|
20
|
+
(parallel EVM, ~10k TPS). Pay in USDC or native MON. USDT0 omitted, as above.
|
|
21
|
+
|
|
22
|
+
Both addresses were verified on-chain (live `eth_chainId` + `symbol()`/`decimals()`) before
|
|
23
|
+
shipping; `chain: 'hyperevm'` / `chain: 'monad'` work with no setup call.
|
|
24
|
+
|
|
25
|
+
## [1.1.1] — 2026-06-03
|
|
26
|
+
|
|
27
|
+
Docs + examples only — **no code change**; the API and every chain behave exactly as 1.1.0.
|
|
28
|
+
|
|
29
|
+
### Docs
|
|
30
|
+
- **"In the browser — no build, no npm" guide** in the README. `@piprail/sdk` is browser-clean
|
|
31
|
+
and runs from any npm-mirroring CDN (`esm.sh` / `jsDelivr`), so a plain HTML page can take or
|
|
32
|
+
make payments with no bundler — the CDN resolves `viem` and any lazily-imported chain lib.
|
|
33
|
+
Verified end-to-end (gate + client, Node + browser, plus a real on-chain payment made **from a
|
|
34
|
+
browser**). Includes the injected-wallet pattern and a loud "never ship a raw key in client-side
|
|
35
|
+
HTML" warning.
|
|
36
|
+
|
|
37
|
+
### Examples
|
|
38
|
+
- **New `examples/browser/`** — a single self-contained HTML file that loads the SDK from a CDN and
|
|
39
|
+
runs a live in-browser x402 demo (build a real `402` challenge, quote it), no build step. A hosted,
|
|
40
|
+
interactive version of the same demo is live at https://piprail.com/demo.
|
|
41
|
+
|
|
7
42
|
## [1.1.0] — 2026-06-03
|
|
8
43
|
|
|
9
44
|
Found by the live-test campaign: **native NEAR + native TRX are now payment assets** (native
|
package/README.md
CHANGED
|
@@ -160,6 +160,8 @@ Every token address below was verified on-chain (symbol + decimals) before shipp
|
|
|
160
160
|
| `'worldchain'` | World Chain | USDC |
|
|
161
161
|
| `'sei'` | Sei | USDC |
|
|
162
162
|
| `'injective'` | Injective | USDC, USDT |
|
|
163
|
+
| `'hyperevm'` | HyperEVM (Hyperliquid) | USDC |
|
|
164
|
+
| `'monad'` | Monad | USDC |
|
|
163
165
|
| `'solana'` | Solana | USDC, USDT |
|
|
164
166
|
| `'ton'` | TON | USDT |
|
|
165
167
|
| `'tron'` | Tron | USDT |
|
|
@@ -445,6 +447,27 @@ export async function handler(req: Request): Promise<Response> {
|
|
|
445
447
|
|
|
446
448
|
Reuse one gate per route — its in-memory replay guard stops a proof being spent twice. Running multiple instances? Pass your own `isUsed` / `markUsed` (e.g. Redis `SET NX`).
|
|
447
449
|
|
|
450
|
+
## In the browser — no build, no npm
|
|
451
|
+
|
|
452
|
+
The SDK is browser-clean (no Node-only globals in the protocol layer), so a plain HTML page can take **or** make payments straight from a CDN — every npm-mirroring CDN serves it automatically:
|
|
453
|
+
|
|
454
|
+
```html
|
|
455
|
+
<script type="module">
|
|
456
|
+
import { PipRailClient } from 'https://esm.sh/@piprail/sdk' // or jsDelivr: .../npm/@piprail/sdk@1/+esm
|
|
457
|
+
// In a browser, sign with the visitor's wallet — never a raw key (page source is public):
|
|
458
|
+
import { createWalletClient, custom } from 'https://esm.sh/viem'
|
|
459
|
+
const walletClient = createWalletClient({ transport: custom(window.ethereum) })
|
|
460
|
+
|
|
461
|
+
const client = new PipRailClient({ chain: 'base', wallet: { walletClient } })
|
|
462
|
+
const res = await client.fetch('https://api.example.com/paid') // 402 → wallet signs → 200
|
|
463
|
+
</script>
|
|
464
|
+
```
|
|
465
|
+
|
|
466
|
+
- **Which chains run in the browser.** EVM (viem) works out of the box; **Solana, Sui, and NEAR** load their libs from the CDN too (an [import map](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/script/type/importmap) pins each to a browser-ESM build — see [`examples/browser/`](../examples/browser)). A few chains' libraries (**TON, Tron, XRPL, Stellar**) don't ship a clean browser ESM build yet, so use those **server-side** — the identical one line, on Node/Bun/Deno/Workers. The lazy import means a pure-EVM page never downloads any of them.
|
|
467
|
+
- **The merchant gate runs anywhere.** `createPaymentGate` needs only a `payTo` address — no key — so building challenges and verifying proofs works in the browser too (the typical *deployment* is still a server, since a browser can't receive inbound HTTP to gate).
|
|
468
|
+
- **Both halves verified on Node and in a real browser**, against the published package. Runnable showcase: [`examples/browser/`](../examples/browser) — a single HTML file with a live, in-browser 402 demo; or try it hosted at [piprail.com/demo](https://piprail.com/demo).
|
|
469
|
+
- **Keys:** raw `{ privateKey }` wallets belong only in a **server's** environment. In a browser, use an injected `walletClient` as above.
|
|
470
|
+
|
|
448
471
|
## Architecture (under the hood)
|
|
449
472
|
|
|
450
473
|
Two layers, one contract. Worth knowing if you're extending the SDK or auditing it.
|
package/dist/index.cjs
CHANGED
|
@@ -82,6 +82,8 @@ var _viem = require('viem');
|
|
|
82
82
|
|
|
83
83
|
|
|
84
84
|
|
|
85
|
+
|
|
86
|
+
|
|
85
87
|
|
|
86
88
|
var _chains = require('viem/chains');
|
|
87
89
|
var CHAINS = {
|
|
@@ -210,6 +212,28 @@ var CHAINS = {
|
|
|
210
212
|
USDC: { address: "0xa00C59fF5a080D2b954d0c75e46E22a0c371235a", decimals: 6, symbol: "USDC" },
|
|
211
213
|
USDT: { address: "0x88f7F2b685F9692caf8c478f5BADF09eE9B1Cc13", decimals: 6, symbol: "USDT" }
|
|
212
214
|
}
|
|
215
|
+
},
|
|
216
|
+
// HyperEVM (Hyperliquid, chainId 999) — native Circle USDC, verified on-chain
|
|
217
|
+
// 2026-06-04 (eth_chainId 0x3e7; USDC symbol "USDC", decimals 6). HyperEVM's
|
|
218
|
+
// "USDT" is USDT0 (LayerZero/omnichain), not Circle/Tether-native, so it's
|
|
219
|
+
// intentionally omitted; pass it as a custom { address, decimals } if needed.
|
|
220
|
+
// The highest-activity EVM venue of 2025–26 (perps DEX + on-chain agent vaults).
|
|
221
|
+
hyperevm: {
|
|
222
|
+
chain: _chains.hyperEvm,
|
|
223
|
+
tokens: {
|
|
224
|
+
USDC: { address: "0xb88339CB7199b77E23DB6E890353E22632Ba630f", decimals: 6, symbol: "USDC" }
|
|
225
|
+
}
|
|
226
|
+
},
|
|
227
|
+
// Monad (chainId 143) — native Circle USDC, verified on-chain 2026-06-04
|
|
228
|
+
// (eth_chainId 0x8f; USDC symbol "USDC", decimals 6; CCTP V2). Monad's "USDT"
|
|
229
|
+
// is USDT0 (LayerZero/omnichain), not Circle/Tether-native, so it's
|
|
230
|
+
// intentionally omitted; pass it as a custom { address, decimals } if needed.
|
|
231
|
+
// The biggest new EVM L1 of 2025 (parallel EVM, ~10k TPS).
|
|
232
|
+
monad: {
|
|
233
|
+
chain: _chains.monad,
|
|
234
|
+
tokens: {
|
|
235
|
+
USDC: { address: "0x754704Bc059F8C67012fEd69BC8A327a5aafb603", decimals: 6, symbol: "USDC" }
|
|
236
|
+
}
|
|
213
237
|
}
|
|
214
238
|
};
|
|
215
239
|
function isViemChain(input) {
|
package/dist/index.d.cts
CHANGED
|
@@ -838,7 +838,7 @@ declare const CHAINS: {
|
|
|
838
838
|
gasPrice: bigint;
|
|
839
839
|
maxFeePerBlobGas?: undefined | undefined;
|
|
840
840
|
maxFeePerGas?: undefined | undefined;
|
|
841
|
-
maxPriorityFeePerGas
|
|
841
|
+
maxPriorityFeePerGas? /** Native coin metadata. Defaults to 18-decimal ETH. */: undefined | undefined;
|
|
842
842
|
isSystemTx?: undefined | undefined;
|
|
843
843
|
mint?: undefined | undefined;
|
|
844
844
|
sourceHash?: undefined | undefined;
|
|
@@ -1580,7 +1580,7 @@ declare const CHAINS: {
|
|
|
1580
1580
|
yParity: number;
|
|
1581
1581
|
accessList: viem.AccessList;
|
|
1582
1582
|
authorizationList?: undefined | undefined;
|
|
1583
|
-
blobVersionedHashes
|
|
1583
|
+
blobVersionedHashes?: undefined | undefined;
|
|
1584
1584
|
chainId: number;
|
|
1585
1585
|
type: "eip1559";
|
|
1586
1586
|
gasPrice?: undefined | undefined;
|
|
@@ -2982,7 +2982,7 @@ declare const CHAINS: {
|
|
|
2982
2982
|
} | {
|
|
2983
2983
|
blockHash: `0x${string}` | null;
|
|
2984
2984
|
blockNumber: bigint | null;
|
|
2985
|
-
blockTimestamp
|
|
2985
|
+
blockTimestamp?: bigint | undefined;
|
|
2986
2986
|
from: abitype.Address;
|
|
2987
2987
|
gas: bigint;
|
|
2988
2988
|
hash: viem.Hash;
|
|
@@ -3340,7 +3340,9 @@ declare const CHAINS: {
|
|
|
3340
3340
|
value: bigint;
|
|
3341
3341
|
yParity: number;
|
|
3342
3342
|
accessList: viem.AccessList;
|
|
3343
|
-
authorizationList
|
|
3343
|
+
authorizationList
|
|
3344
|
+
/** JSON-RPC endpoint. */
|
|
3345
|
+
? /** JSON-RPC endpoint. */: undefined | undefined;
|
|
3344
3346
|
blobVersionedHashes?: undefined | undefined;
|
|
3345
3347
|
chainId: number;
|
|
3346
3348
|
type: "eip2930";
|
|
@@ -3614,6 +3616,122 @@ declare const CHAINS: {
|
|
|
3614
3616
|
};
|
|
3615
3617
|
};
|
|
3616
3618
|
};
|
|
3619
|
+
hyperevm: {
|
|
3620
|
+
chain: {
|
|
3621
|
+
blockExplorers: {
|
|
3622
|
+
readonly default: {
|
|
3623
|
+
readonly name: "HyperEVMScan";
|
|
3624
|
+
readonly url: "https://hyperevmscan.io";
|
|
3625
|
+
};
|
|
3626
|
+
};
|
|
3627
|
+
blockTime?: number | undefined | undefined;
|
|
3628
|
+
contracts: {
|
|
3629
|
+
readonly multicall3: {
|
|
3630
|
+
readonly address: "0xcA11bde05977b3631167028862bE2a173976CA11";
|
|
3631
|
+
readonly blockCreated: 13051;
|
|
3632
|
+
};
|
|
3633
|
+
};
|
|
3634
|
+
ensTlds?: readonly string[] | undefined;
|
|
3635
|
+
id: 999;
|
|
3636
|
+
name: "HyperEVM";
|
|
3637
|
+
nativeCurrency: {
|
|
3638
|
+
readonly name: "HYPE";
|
|
3639
|
+
readonly symbol: "HYPE";
|
|
3640
|
+
readonly decimals: 18;
|
|
3641
|
+
};
|
|
3642
|
+
experimental_preconfirmationTime?: number | undefined | undefined;
|
|
3643
|
+
rpcUrls: {
|
|
3644
|
+
readonly default: {
|
|
3645
|
+
readonly http: readonly ["https://rpc.hyperliquid.xyz/evm"];
|
|
3646
|
+
};
|
|
3647
|
+
};
|
|
3648
|
+
sourceId?: number | undefined | undefined;
|
|
3649
|
+
testnet: false;
|
|
3650
|
+
custom?: Record<string, unknown> | undefined;
|
|
3651
|
+
extendSchema?: Record<string, unknown> | undefined;
|
|
3652
|
+
fees?: viem.ChainFees<undefined> | undefined;
|
|
3653
|
+
formatters?: undefined;
|
|
3654
|
+
prepareTransactionRequest?: ((args: viem.PrepareTransactionRequestParameters, options: {
|
|
3655
|
+
client: viem.Client;
|
|
3656
|
+
phase: "beforeFillTransaction" | "beforeFillParameters" | "afterFillParameters";
|
|
3657
|
+
}) => Promise<viem.PrepareTransactionRequestParameters>) | [fn: ((args: viem.PrepareTransactionRequestParameters, options: {
|
|
3658
|
+
client: viem.Client;
|
|
3659
|
+
phase: "beforeFillTransaction" | "beforeFillParameters" | "afterFillParameters";
|
|
3660
|
+
}) => Promise<viem.PrepareTransactionRequestParameters>) | undefined, options: {
|
|
3661
|
+
runAt: readonly ("beforeFillTransaction" | "beforeFillParameters" | "afterFillParameters")[];
|
|
3662
|
+
}] | undefined;
|
|
3663
|
+
serializers?: viem.ChainSerializers<undefined, viem.TransactionSerializable> | undefined;
|
|
3664
|
+
verifyHash?: ((client: viem.Client, parameters: viem.VerifyHashActionParameters) => Promise<viem.VerifyHashActionReturnType>) | undefined;
|
|
3665
|
+
};
|
|
3666
|
+
tokens: {
|
|
3667
|
+
USDC: {
|
|
3668
|
+
address: "0xb88339CB7199b77E23DB6E890353E22632Ba630f";
|
|
3669
|
+
decimals: number;
|
|
3670
|
+
symbol: string;
|
|
3671
|
+
};
|
|
3672
|
+
};
|
|
3673
|
+
};
|
|
3674
|
+
monad: {
|
|
3675
|
+
chain: {
|
|
3676
|
+
blockExplorers: {
|
|
3677
|
+
readonly default: {
|
|
3678
|
+
readonly name: "MonadVision";
|
|
3679
|
+
readonly url: "https://monadvision.com";
|
|
3680
|
+
};
|
|
3681
|
+
readonly monadscan: {
|
|
3682
|
+
readonly name: "Monadscan";
|
|
3683
|
+
readonly url: "https://monadscan.com";
|
|
3684
|
+
readonly apiUrl: "https://api.monadscan.com/api";
|
|
3685
|
+
};
|
|
3686
|
+
};
|
|
3687
|
+
blockTime: 400;
|
|
3688
|
+
contracts: {
|
|
3689
|
+
readonly multicall3: {
|
|
3690
|
+
readonly address: "0xcA11bde05977b3631167028862bE2a173976CA11";
|
|
3691
|
+
readonly blockCreated: 9248132;
|
|
3692
|
+
};
|
|
3693
|
+
};
|
|
3694
|
+
ensTlds?: readonly string[] | undefined;
|
|
3695
|
+
id: 143;
|
|
3696
|
+
name: "Monad";
|
|
3697
|
+
nativeCurrency: {
|
|
3698
|
+
readonly name: "Monad";
|
|
3699
|
+
readonly symbol: "MON";
|
|
3700
|
+
readonly decimals: 18;
|
|
3701
|
+
};
|
|
3702
|
+
experimental_preconfirmationTime?: number | undefined | undefined;
|
|
3703
|
+
rpcUrls: {
|
|
3704
|
+
readonly default: {
|
|
3705
|
+
readonly http: readonly ["https://rpc.monad.xyz", "https://rpc1.monad.xyz"];
|
|
3706
|
+
readonly webSocket: readonly ["wss://rpc.monad.xyz", "wss://rpc1.monad.xyz"];
|
|
3707
|
+
};
|
|
3708
|
+
};
|
|
3709
|
+
sourceId?: number | undefined | undefined;
|
|
3710
|
+
testnet: false;
|
|
3711
|
+
custom?: Record<string, unknown> | undefined;
|
|
3712
|
+
extendSchema?: Record<string, unknown> | undefined;
|
|
3713
|
+
fees?: viem.ChainFees<undefined> | undefined;
|
|
3714
|
+
formatters?: undefined;
|
|
3715
|
+
prepareTransactionRequest?: ((args: viem.PrepareTransactionRequestParameters, options: {
|
|
3716
|
+
client: viem.Client;
|
|
3717
|
+
phase: "beforeFillTransaction" | "beforeFillParameters" | "afterFillParameters";
|
|
3718
|
+
}) => Promise<viem.PrepareTransactionRequestParameters>) | [fn: ((args: viem.PrepareTransactionRequestParameters, options: {
|
|
3719
|
+
client: viem.Client;
|
|
3720
|
+
phase: "beforeFillTransaction" | "beforeFillParameters" | "afterFillParameters";
|
|
3721
|
+
}) => Promise<viem.PrepareTransactionRequestParameters>) | undefined, options: {
|
|
3722
|
+
runAt: readonly ("beforeFillTransaction" | "beforeFillParameters" | "afterFillParameters")[];
|
|
3723
|
+
}] | undefined;
|
|
3724
|
+
serializers?: viem.ChainSerializers<undefined, viem.TransactionSerializable> | undefined;
|
|
3725
|
+
verifyHash?: ((client: viem.Client, parameters: viem.VerifyHashActionParameters) => Promise<viem.VerifyHashActionReturnType>) | undefined;
|
|
3726
|
+
};
|
|
3727
|
+
tokens: {
|
|
3728
|
+
USDC: {
|
|
3729
|
+
address: "0x754704Bc059F8C67012fEd69BC8A327a5aafb603";
|
|
3730
|
+
decimals: number;
|
|
3731
|
+
symbol: string;
|
|
3732
|
+
};
|
|
3733
|
+
};
|
|
3734
|
+
};
|
|
3617
3735
|
};
|
|
3618
3736
|
/** A built-in EVM chain name. */
|
|
3619
3737
|
type ChainName = keyof typeof CHAINS;
|
package/dist/index.d.ts
CHANGED
|
@@ -838,7 +838,7 @@ declare const CHAINS: {
|
|
|
838
838
|
gasPrice: bigint;
|
|
839
839
|
maxFeePerBlobGas?: undefined | undefined;
|
|
840
840
|
maxFeePerGas?: undefined | undefined;
|
|
841
|
-
maxPriorityFeePerGas
|
|
841
|
+
maxPriorityFeePerGas? /** Native coin metadata. Defaults to 18-decimal ETH. */: undefined | undefined;
|
|
842
842
|
isSystemTx?: undefined | undefined;
|
|
843
843
|
mint?: undefined | undefined;
|
|
844
844
|
sourceHash?: undefined | undefined;
|
|
@@ -1580,7 +1580,7 @@ declare const CHAINS: {
|
|
|
1580
1580
|
yParity: number;
|
|
1581
1581
|
accessList: viem.AccessList;
|
|
1582
1582
|
authorizationList?: undefined | undefined;
|
|
1583
|
-
blobVersionedHashes
|
|
1583
|
+
blobVersionedHashes?: undefined | undefined;
|
|
1584
1584
|
chainId: number;
|
|
1585
1585
|
type: "eip1559";
|
|
1586
1586
|
gasPrice?: undefined | undefined;
|
|
@@ -2982,7 +2982,7 @@ declare const CHAINS: {
|
|
|
2982
2982
|
} | {
|
|
2983
2983
|
blockHash: `0x${string}` | null;
|
|
2984
2984
|
blockNumber: bigint | null;
|
|
2985
|
-
blockTimestamp
|
|
2985
|
+
blockTimestamp?: bigint | undefined;
|
|
2986
2986
|
from: abitype.Address;
|
|
2987
2987
|
gas: bigint;
|
|
2988
2988
|
hash: viem.Hash;
|
|
@@ -3340,7 +3340,9 @@ declare const CHAINS: {
|
|
|
3340
3340
|
value: bigint;
|
|
3341
3341
|
yParity: number;
|
|
3342
3342
|
accessList: viem.AccessList;
|
|
3343
|
-
authorizationList
|
|
3343
|
+
authorizationList
|
|
3344
|
+
/** JSON-RPC endpoint. */
|
|
3345
|
+
? /** JSON-RPC endpoint. */: undefined | undefined;
|
|
3344
3346
|
blobVersionedHashes?: undefined | undefined;
|
|
3345
3347
|
chainId: number;
|
|
3346
3348
|
type: "eip2930";
|
|
@@ -3614,6 +3616,122 @@ declare const CHAINS: {
|
|
|
3614
3616
|
};
|
|
3615
3617
|
};
|
|
3616
3618
|
};
|
|
3619
|
+
hyperevm: {
|
|
3620
|
+
chain: {
|
|
3621
|
+
blockExplorers: {
|
|
3622
|
+
readonly default: {
|
|
3623
|
+
readonly name: "HyperEVMScan";
|
|
3624
|
+
readonly url: "https://hyperevmscan.io";
|
|
3625
|
+
};
|
|
3626
|
+
};
|
|
3627
|
+
blockTime?: number | undefined | undefined;
|
|
3628
|
+
contracts: {
|
|
3629
|
+
readonly multicall3: {
|
|
3630
|
+
readonly address: "0xcA11bde05977b3631167028862bE2a173976CA11";
|
|
3631
|
+
readonly blockCreated: 13051;
|
|
3632
|
+
};
|
|
3633
|
+
};
|
|
3634
|
+
ensTlds?: readonly string[] | undefined;
|
|
3635
|
+
id: 999;
|
|
3636
|
+
name: "HyperEVM";
|
|
3637
|
+
nativeCurrency: {
|
|
3638
|
+
readonly name: "HYPE";
|
|
3639
|
+
readonly symbol: "HYPE";
|
|
3640
|
+
readonly decimals: 18;
|
|
3641
|
+
};
|
|
3642
|
+
experimental_preconfirmationTime?: number | undefined | undefined;
|
|
3643
|
+
rpcUrls: {
|
|
3644
|
+
readonly default: {
|
|
3645
|
+
readonly http: readonly ["https://rpc.hyperliquid.xyz/evm"];
|
|
3646
|
+
};
|
|
3647
|
+
};
|
|
3648
|
+
sourceId?: number | undefined | undefined;
|
|
3649
|
+
testnet: false;
|
|
3650
|
+
custom?: Record<string, unknown> | undefined;
|
|
3651
|
+
extendSchema?: Record<string, unknown> | undefined;
|
|
3652
|
+
fees?: viem.ChainFees<undefined> | undefined;
|
|
3653
|
+
formatters?: undefined;
|
|
3654
|
+
prepareTransactionRequest?: ((args: viem.PrepareTransactionRequestParameters, options: {
|
|
3655
|
+
client: viem.Client;
|
|
3656
|
+
phase: "beforeFillTransaction" | "beforeFillParameters" | "afterFillParameters";
|
|
3657
|
+
}) => Promise<viem.PrepareTransactionRequestParameters>) | [fn: ((args: viem.PrepareTransactionRequestParameters, options: {
|
|
3658
|
+
client: viem.Client;
|
|
3659
|
+
phase: "beforeFillTransaction" | "beforeFillParameters" | "afterFillParameters";
|
|
3660
|
+
}) => Promise<viem.PrepareTransactionRequestParameters>) | undefined, options: {
|
|
3661
|
+
runAt: readonly ("beforeFillTransaction" | "beforeFillParameters" | "afterFillParameters")[];
|
|
3662
|
+
}] | undefined;
|
|
3663
|
+
serializers?: viem.ChainSerializers<undefined, viem.TransactionSerializable> | undefined;
|
|
3664
|
+
verifyHash?: ((client: viem.Client, parameters: viem.VerifyHashActionParameters) => Promise<viem.VerifyHashActionReturnType>) | undefined;
|
|
3665
|
+
};
|
|
3666
|
+
tokens: {
|
|
3667
|
+
USDC: {
|
|
3668
|
+
address: "0xb88339CB7199b77E23DB6E890353E22632Ba630f";
|
|
3669
|
+
decimals: number;
|
|
3670
|
+
symbol: string;
|
|
3671
|
+
};
|
|
3672
|
+
};
|
|
3673
|
+
};
|
|
3674
|
+
monad: {
|
|
3675
|
+
chain: {
|
|
3676
|
+
blockExplorers: {
|
|
3677
|
+
readonly default: {
|
|
3678
|
+
readonly name: "MonadVision";
|
|
3679
|
+
readonly url: "https://monadvision.com";
|
|
3680
|
+
};
|
|
3681
|
+
readonly monadscan: {
|
|
3682
|
+
readonly name: "Monadscan";
|
|
3683
|
+
readonly url: "https://monadscan.com";
|
|
3684
|
+
readonly apiUrl: "https://api.monadscan.com/api";
|
|
3685
|
+
};
|
|
3686
|
+
};
|
|
3687
|
+
blockTime: 400;
|
|
3688
|
+
contracts: {
|
|
3689
|
+
readonly multicall3: {
|
|
3690
|
+
readonly address: "0xcA11bde05977b3631167028862bE2a173976CA11";
|
|
3691
|
+
readonly blockCreated: 9248132;
|
|
3692
|
+
};
|
|
3693
|
+
};
|
|
3694
|
+
ensTlds?: readonly string[] | undefined;
|
|
3695
|
+
id: 143;
|
|
3696
|
+
name: "Monad";
|
|
3697
|
+
nativeCurrency: {
|
|
3698
|
+
readonly name: "Monad";
|
|
3699
|
+
readonly symbol: "MON";
|
|
3700
|
+
readonly decimals: 18;
|
|
3701
|
+
};
|
|
3702
|
+
experimental_preconfirmationTime?: number | undefined | undefined;
|
|
3703
|
+
rpcUrls: {
|
|
3704
|
+
readonly default: {
|
|
3705
|
+
readonly http: readonly ["https://rpc.monad.xyz", "https://rpc1.monad.xyz"];
|
|
3706
|
+
readonly webSocket: readonly ["wss://rpc.monad.xyz", "wss://rpc1.monad.xyz"];
|
|
3707
|
+
};
|
|
3708
|
+
};
|
|
3709
|
+
sourceId?: number | undefined | undefined;
|
|
3710
|
+
testnet: false;
|
|
3711
|
+
custom?: Record<string, unknown> | undefined;
|
|
3712
|
+
extendSchema?: Record<string, unknown> | undefined;
|
|
3713
|
+
fees?: viem.ChainFees<undefined> | undefined;
|
|
3714
|
+
formatters?: undefined;
|
|
3715
|
+
prepareTransactionRequest?: ((args: viem.PrepareTransactionRequestParameters, options: {
|
|
3716
|
+
client: viem.Client;
|
|
3717
|
+
phase: "beforeFillTransaction" | "beforeFillParameters" | "afterFillParameters";
|
|
3718
|
+
}) => Promise<viem.PrepareTransactionRequestParameters>) | [fn: ((args: viem.PrepareTransactionRequestParameters, options: {
|
|
3719
|
+
client: viem.Client;
|
|
3720
|
+
phase: "beforeFillTransaction" | "beforeFillParameters" | "afterFillParameters";
|
|
3721
|
+
}) => Promise<viem.PrepareTransactionRequestParameters>) | undefined, options: {
|
|
3722
|
+
runAt: readonly ("beforeFillTransaction" | "beforeFillParameters" | "afterFillParameters")[];
|
|
3723
|
+
}] | undefined;
|
|
3724
|
+
serializers?: viem.ChainSerializers<undefined, viem.TransactionSerializable> | undefined;
|
|
3725
|
+
verifyHash?: ((client: viem.Client, parameters: viem.VerifyHashActionParameters) => Promise<viem.VerifyHashActionReturnType>) | undefined;
|
|
3726
|
+
};
|
|
3727
|
+
tokens: {
|
|
3728
|
+
USDC: {
|
|
3729
|
+
address: "0x754704Bc059F8C67012fEd69BC8A327a5aafb603";
|
|
3730
|
+
decimals: number;
|
|
3731
|
+
symbol: string;
|
|
3732
|
+
};
|
|
3733
|
+
};
|
|
3734
|
+
};
|
|
3617
3735
|
};
|
|
3618
3736
|
/** A built-in EVM chain name. */
|
|
3619
3737
|
type ChainName = keyof typeof CHAINS;
|
package/dist/index.js
CHANGED
|
@@ -71,10 +71,12 @@ import {
|
|
|
71
71
|
base,
|
|
72
72
|
bsc,
|
|
73
73
|
celo,
|
|
74
|
+
hyperEvm,
|
|
74
75
|
injective,
|
|
75
76
|
linea,
|
|
76
77
|
mainnet,
|
|
77
78
|
mantle,
|
|
79
|
+
monad,
|
|
78
80
|
optimism,
|
|
79
81
|
polygon,
|
|
80
82
|
scroll,
|
|
@@ -210,6 +212,28 @@ var CHAINS = {
|
|
|
210
212
|
USDC: { address: "0xa00C59fF5a080D2b954d0c75e46E22a0c371235a", decimals: 6, symbol: "USDC" },
|
|
211
213
|
USDT: { address: "0x88f7F2b685F9692caf8c478f5BADF09eE9B1Cc13", decimals: 6, symbol: "USDT" }
|
|
212
214
|
}
|
|
215
|
+
},
|
|
216
|
+
// HyperEVM (Hyperliquid, chainId 999) — native Circle USDC, verified on-chain
|
|
217
|
+
// 2026-06-04 (eth_chainId 0x3e7; USDC symbol "USDC", decimals 6). HyperEVM's
|
|
218
|
+
// "USDT" is USDT0 (LayerZero/omnichain), not Circle/Tether-native, so it's
|
|
219
|
+
// intentionally omitted; pass it as a custom { address, decimals } if needed.
|
|
220
|
+
// The highest-activity EVM venue of 2025–26 (perps DEX + on-chain agent vaults).
|
|
221
|
+
hyperevm: {
|
|
222
|
+
chain: hyperEvm,
|
|
223
|
+
tokens: {
|
|
224
|
+
USDC: { address: "0xb88339CB7199b77E23DB6E890353E22632Ba630f", decimals: 6, symbol: "USDC" }
|
|
225
|
+
}
|
|
226
|
+
},
|
|
227
|
+
// Monad (chainId 143) — native Circle USDC, verified on-chain 2026-06-04
|
|
228
|
+
// (eth_chainId 0x8f; USDC symbol "USDC", decimals 6; CCTP V2). Monad's "USDT"
|
|
229
|
+
// is USDT0 (LayerZero/omnichain), not Circle/Tether-native, so it's
|
|
230
|
+
// intentionally omitted; pass it as a custom { address, decimals } if needed.
|
|
231
|
+
// The biggest new EVM L1 of 2025 (parallel EVM, ~10k TPS).
|
|
232
|
+
monad: {
|
|
233
|
+
chain: monad,
|
|
234
|
+
tokens: {
|
|
235
|
+
USDC: { address: "0x754704Bc059F8C67012fEd69BC8A327a5aafb603", decimals: 6, symbol: "USDC" }
|
|
236
|
+
}
|
|
213
237
|
}
|
|
214
238
|
};
|
|
215
239
|
function isViemChain(input) {
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@piprail/sdk",
|
|
3
|
-
"version": "1.
|
|
4
|
-
"description": "Accept x402 crypto payments across
|
|
3
|
+
"version": "1.2.0",
|
|
4
|
+
"description": "Accept x402 crypto payments across 26 chains — every major EVM chain plus Solana, TON, Tron, NEAR, Sui, Stellar & XRPL — in a couple of lines. No backend, no database, no fee; payments settle straight to your wallet.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.cjs",
|
|
7
7
|
"module": "./dist/index.js",
|