@x402x/client 2.3.0 → 2.3.1

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.
Files changed (2) hide show
  1. package/README.md +57 -35
  2. package/package.json +2 -2
package/README.md CHANGED
@@ -87,16 +87,17 @@ function PayButton() {
87
87
  const extendedWallet = wallet.extend(publicActions);
88
88
 
89
89
  // Uses default facilitator at https://facilitator.x402x.dev/
90
+ // CAIP-2 network identifiers: https://chainlist.org/?testnets=true
90
91
  const client = new x402xClient({
91
92
  wallet: extendedWallet,
92
- network: 'base-sepolia'
93
+ network: 'eip155:84532' // Base Sepolia testnet
93
94
  });
94
95
 
95
96
  // Convert USD amount to atomic units
96
- const atomicAmount = parseDefaultAssetAmount('1', 'base-sepolia'); // '1000000'
97
+ const atomicAmount = parseDefaultAssetAmount('1', 'eip155:84532'); // '1000000'
97
98
 
98
99
  const result = await client.execute({
99
- hook: TransferHook.getAddress('base-sepolia'),
100
+ hook: TransferHook.getAddress('eip155:84532'),
100
101
  hookData: TransferHook.encode(),
101
102
  amount: atomicAmount, // Must be atomic units
102
103
  payTo: '0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb1'
@@ -125,11 +126,12 @@ Use `parseDefaultAssetAmount()` from `@x402x/extensions` to convert USD amounts:
125
126
  import { parseDefaultAssetAmount, formatDefaultAssetAmount } from "@x402x/extensions";
126
127
 
127
128
  // Convert USD to atomic units
128
- const atomicAmount = parseDefaultAssetAmount("1", "base-sepolia"); // '1000000' (1 USDC)
129
- const largeAmount = parseDefaultAssetAmount("100", "base-sepolia"); // '100000000' (100 USDC)
129
+ // CAIP-2 format: eip155:<chainId> (e.g., eip155:84532 = Base Sepolia)
130
+ const atomicAmount = parseDefaultAssetAmount("1", "eip155:84532"); // '1000000' (1 USDC)
131
+ const largeAmount = parseDefaultAssetAmount("100", "eip155:84532"); // '100000000' (100 USDC)
130
132
 
131
133
  // Convert atomic units back to USD (for display)
132
- const displayAmount = formatDefaultAssetAmount("1000000", "base-sepolia"); // '1'
134
+ const displayAmount = formatDefaultAssetAmount("1000000", "eip155:84532"); // '1'
133
135
  ```
134
136
 
135
137
  ### Why Atomic Units?
@@ -145,10 +147,11 @@ const displayAmount = formatDefaultAssetAmount("1000000", "base-sepolia"); // '1
145
147
  import { x402xClient } from "@x402x/client";
146
148
  import { parseDefaultAssetAmount } from "@x402x/extensions";
147
149
 
148
- const client = new x402xClient({ wallet, network: "base-sepolia" });
150
+ // CAIP-2 network identifier for Base Sepolia testnet
151
+ const client = new x402xClient({ wallet, network: "eip155:84532" });
149
152
 
150
153
  // ✅ Correct: Convert first, then pass atomic units
151
- const atomicAmount = parseDefaultAssetAmount("5", "base-sepolia");
154
+ const atomicAmount = parseDefaultAssetAmount("5", "eip155:84532");
152
155
  await client.execute({ amount: atomicAmount, payTo: "0x..." });
153
156
 
154
157
  // ❌ Wrong: Don't pass USD amounts directly
@@ -180,15 +183,16 @@ class x402xClient {
180
183
  import { x402xClient } from "@x402x/client";
181
184
 
182
185
  // Uses default facilitator at https://facilitator.x402x.dev/
186
+ // CAIP-2 network identifier: eip155:84532 (Base Sepolia testnet)
183
187
  const client = new x402xClient({
184
188
  wallet: walletClient,
185
- network: "base-sepolia",
189
+ network: "eip155:84532",
186
190
  });
187
191
 
188
192
  // Or specify custom facilitator
189
193
  const client = new x402xClient({
190
194
  wallet: walletClient,
191
- network: "base-sepolia",
195
+ network: "eip155:84532",
192
196
  facilitatorUrl: "https://custom-facilitator.example.com",
193
197
  timeout: 30000, // optional
194
198
  confirmationTimeout: 60000, // optional
@@ -196,7 +200,7 @@ const client = new x402xClient({
196
200
 
197
201
  // Convert USD amount to atomic units
198
202
  import { parseDefaultAssetAmount } from "@x402x/extensions";
199
- const atomicAmount = parseDefaultAssetAmount("1", "base-sepolia"); // '1000000'
203
+ const atomicAmount = parseDefaultAssetAmount("1", "eip155:84532"); // '1000000'
200
204
 
201
205
  const result = await client.execute({
202
206
  hook: "0x...",
@@ -253,7 +257,8 @@ function PayButton() {
253
257
 
254
258
  const handlePay = async () => {
255
259
  // Convert USD amount to atomic units
256
- const atomicAmount = parseDefaultAssetAmount('1', 'base-sepolia'); // '1000000'
260
+ // CAIP-2 format: eip155:84532 (Base Sepolia testnet)
261
+ const atomicAmount = parseDefaultAssetAmount('1', 'eip155:84532'); // '1000000'
257
262
 
258
263
  await execute({
259
264
  hook: '0x...',
@@ -336,11 +341,12 @@ import { prepareSettlement } from "@x402x/client";
336
341
  import { parseDefaultAssetAmount } from "@x402x/extensions";
337
342
 
338
343
  // Convert USD amount to atomic units
339
- const atomicAmount = parseDefaultAssetAmount("1", "base-sepolia"); // '1000000'
344
+ // CAIP-2 network identifier: eip155:84532 (Base Sepolia testnet)
345
+ const atomicAmount = parseDefaultAssetAmount("1", "eip155:84532"); // '1000000'
340
346
 
341
347
  const settlement = await prepareSettlement({
342
348
  wallet: walletClient,
343
- network: "base-sepolia",
349
+ network: "eip155:84532",
344
350
  hook: "0x...",
345
351
  hookData: "0x...",
346
352
  amount: atomicAmount, // Must be atomic units
@@ -380,16 +386,17 @@ import { x402xClient } from "@x402x/client";
380
386
  import { TransferHook, parseDefaultAssetAmount } from "@x402x/extensions";
381
387
 
382
388
  // Uses default facilitator at https://facilitator.x402x.dev/
389
+ // CAIP-2 network identifier: eip155:84532 (Base Sepolia testnet)
383
390
  const client = new x402xClient({
384
391
  wallet: walletClient,
385
- network: "base-sepolia",
392
+ network: "eip155:84532",
386
393
  });
387
394
 
388
395
  // Convert USD amount to atomic units
389
- const atomicAmount = parseDefaultAssetAmount("1", "base-sepolia"); // '1000000'
396
+ const atomicAmount = parseDefaultAssetAmount("1", "eip155:84532"); // '1000000'
390
397
 
391
398
  const result = await client.execute({
392
- hook: TransferHook.getAddress("base-sepolia"),
399
+ hook: TransferHook.getAddress("eip155:84532"),
393
400
  hookData: TransferHook.encode(), // Simple transfer mode
394
401
  amount: atomicAmount, // Must be atomic units
395
402
  payTo: "0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb1",
@@ -406,15 +413,16 @@ TransferHook supports distributing funds to multiple recipients by percentage:
406
413
  import { x402xClient } from "@x402x/client";
407
414
  import { TransferHook, parseDefaultAssetAmount, type Split } from "@x402x/extensions";
408
415
 
416
+ // CAIP-2 network identifier: eip155:84532 (Base Sepolia testnet)
409
417
  const client = new x402xClient({
410
418
  wallet: walletClient,
411
- network: "base-sepolia",
419
+ network: "eip155:84532",
412
420
  });
413
421
 
414
422
  // Payroll example: Pay 3 employees with different shares
415
- const payrollAmount = parseDefaultAssetAmount("10", "base-sepolia"); // '10000000' (10 USDC)
423
+ const payrollAmount = parseDefaultAssetAmount("10", "eip155:84532"); // '10000000' (10 USDC)
416
424
  const result = await client.execute({
417
- hook: TransferHook.getAddress("base-sepolia"),
425
+ hook: TransferHook.getAddress("eip155:84532"),
418
426
  hookData: TransferHook.encode([
419
427
  { recipient: "0xEmployee1...", bips: 3000 }, // 30%
420
428
  { recipient: "0xEmployee2...", bips: 4000 }, // 40%
@@ -425,9 +433,9 @@ const result = await client.execute({
425
433
  });
426
434
 
427
435
  // Revenue split example: Platform takes 30%, creator gets 70%
428
- const revenueAmount = parseDefaultAssetAmount("100", "base-sepolia"); // '100000000' (100 USDC)
436
+ const revenueAmount = parseDefaultAssetAmount("100", "eip155:84532"); // '100000000' (100 USDC)
429
437
  const result2 = await client.execute({
430
- hook: TransferHook.getAddress("base-sepolia"),
438
+ hook: TransferHook.getAddress("eip155:84532"),
431
439
  hookData: TransferHook.encode([
432
440
  { recipient: "0xPlatform...", bips: 3000 }, // 30%
433
441
  ]),
@@ -457,10 +465,11 @@ function MintNFT() {
457
465
 
458
466
  const handleMint = async () => {
459
467
  // Convert USD amount to atomic units
460
- const atomicAmount = parseDefaultAssetAmount('5', 'base-sepolia'); // '5000000'
468
+ // CAIP-2 format: eip155:84532 (Base Sepolia testnet)
469
+ const atomicAmount = parseDefaultAssetAmount('5', 'eip155:84532'); // '5000000'
461
470
 
462
471
  const result = await execute({
463
- hook: NFTMintHook.getAddress('base-sepolia'),
472
+ hook: NFTMintHook.getAddress('eip155:84532'),
464
473
  hookData: NFTMintHook.encode({
465
474
  collection: '0x...',
466
475
  tokenId: 1
@@ -492,21 +501,22 @@ const hookData = TransferHook.encode([
492
501
  { recipient: "0xBob...", bips: 4000 }, // 40% to Bob
493
502
  ]);
494
503
 
504
+ // CAIP-2 network identifier: eip155:84532 (Base Sepolia testnet)
495
505
  const feeEstimate = await calculateFacilitatorFee(
496
506
  "https://facilitator.x402x.dev",
497
- "base-sepolia",
498
- TransferHook.getAddress("base-sepolia"),
507
+ "eip155:84532",
508
+ TransferHook.getAddress("eip155:84532"),
499
509
  hookData,
500
510
  );
501
511
 
502
512
  // 2. Convert USD amount to atomic units
503
- const atomicAmount = parseDefaultAssetAmount("10", "base-sepolia"); // '10000000'
513
+ const atomicAmount = parseDefaultAssetAmount("10", "eip155:84532"); // '10000000'
504
514
 
505
515
  // 3. Prepare settlement
506
516
  const settlement = await prepareSettlement({
507
517
  wallet: walletClient,
508
- network: "base-sepolia",
509
- hook: TransferHook.getAddress("base-sepolia"),
518
+ network: "eip155:84532",
519
+ hook: TransferHook.getAddress("eip155:84532"),
510
520
  hookData,
511
521
  amount: atomicAmount, // Must be atomic units
512
522
  payTo: "0xCharity...", // Receives 0% (full split)
@@ -533,7 +543,8 @@ export function usePayment() {
533
543
  const status = ref("idle");
534
544
  const error = ref(null);
535
545
 
536
- const pay = async (walletClient, usdAmount, recipient, network = "base-sepolia") => {
546
+ // Default to Base Sepolia testnet (CAIP-2 format)
547
+ const pay = async (walletClient, usdAmount, recipient, network = "eip155:84532") => {
537
548
  status.value = "processing";
538
549
  error.value = null;
539
550
 
@@ -622,10 +633,19 @@ import type {
622
633
 
623
634
  ## Supported Networks
624
635
 
625
- - Base Sepolia (testnet): `base-sepolia`
626
- - Base (mainnet): `base`
627
- - X-Layer (mainnet): `x-layer`
628
- - X-Layer Testnet: `x-layer-testnet`
636
+ x402x uses CAIP-2 network identifiers (format: `eip155:<chainId>`):
637
+
638
+ ### Mainnet
639
+ - **Base**: `eip155:8453`
640
+ - **X-Layer**: `eip155:196`
641
+ - **BSC**: `eip155:56`
642
+
643
+ ### Testnet
644
+ - **Base Sepolia**: `eip155:84532`
645
+ - **X-Layer Testnet**: `eip155:1952`
646
+ - **BSC Testnet**: `eip155:97`
647
+
648
+ **Reference**: See [CAIP-2](https://chainlist.org/?testnets=true) for a complete list of chain IDs.
629
649
 
630
650
  ---
631
651
 
@@ -650,6 +670,7 @@ function Component() {
650
670
  const { pay, status, error } = usePayment();
651
671
 
652
672
  const handlePay = () => {
673
+ // Old v1 format - deprecated
653
674
  pay("/api/transfer", "base-sepolia", { amount: "1000000" });
654
675
  };
655
676
  }
@@ -668,7 +689,8 @@ function Component() {
668
689
 
669
690
  const handlePay = async () => {
670
691
  // Convert USD amount to atomic units
671
- const atomicAmount = parseDefaultAssetAmount("1", "base-sepolia"); // '1000000'
692
+ // CAIP-2 format: eip155:84532 (Base Sepolia testnet)
693
+ const atomicAmount = parseDefaultAssetAmount("1", "eip155:84532"); // '1000000'
672
694
 
673
695
  await execute({
674
696
  hook: TransferHook.address,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@x402x/client",
3
- "version": "2.3.0",
3
+ "version": "2.3.1",
4
4
  "description": "Client SDK for x402x Serverless Mode - execute on-chain contracts directly via facilitator",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",
@@ -32,7 +32,7 @@
32
32
  "license": "Apache-2.0",
33
33
  "dependencies": {
34
34
  "viem": "2.40.3",
35
- "@x402x/extensions": "2.3.0"
35
+ "@x402x/extensions": "2.3.1"
36
36
  },
37
37
  "peerDependencies": {
38
38
  "react": "^18.0.0",