@abbababa/sdk 0.1.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/README.md +90 -0
- package/dist/buyer.d.ts +78 -0
- package/dist/buyer.d.ts.map +1 -0
- package/dist/buyer.js +146 -0
- package/dist/buyer.js.map +1 -0
- package/dist/checkout.d.ts +8 -0
- package/dist/checkout.d.ts.map +1 -0
- package/dist/checkout.js +10 -0
- package/dist/checkout.js.map +1 -0
- package/dist/client.d.ts +21 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +103 -0
- package/dist/client.js.map +1 -0
- package/dist/errors.d.ts +22 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +43 -0
- package/dist/errors.js.map +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +16 -0
- package/dist/index.js.map +1 -0
- package/dist/register.d.ts +21 -0
- package/dist/register.d.ts.map +1 -0
- package/dist/register.js +37 -0
- package/dist/register.js.map +1 -0
- package/dist/seller.d.ts +20 -0
- package/dist/seller.d.ts.map +1 -0
- package/dist/seller.js +62 -0
- package/dist/seller.js.map +1 -0
- package/dist/services.d.ts +14 -0
- package/dist/services.d.ts.map +1 -0
- package/dist/services.js +39 -0
- package/dist/services.js.map +1 -0
- package/dist/transactions.d.ts +14 -0
- package/dist/transactions.d.ts.map +1 -0
- package/dist/transactions.js +35 -0
- package/dist/transactions.js.map +1 -0
- package/dist/types.d.ts +276 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +5 -0
- package/dist/types.js.map +1 -0
- package/dist/wallet/abi.d.ts +265 -0
- package/dist/wallet/abi.d.ts.map +1 -0
- package/dist/wallet/abi.js +181 -0
- package/dist/wallet/abi.js.map +1 -0
- package/dist/wallet/constants.d.ts +29 -0
- package/dist/wallet/constants.d.ts.map +1 -0
- package/dist/wallet/constants.js +81 -0
- package/dist/wallet/constants.js.map +1 -0
- package/dist/wallet/escrow.d.ts +45 -0
- package/dist/wallet/escrow.d.ts.map +1 -0
- package/dist/wallet/escrow.js +184 -0
- package/dist/wallet/escrow.js.map +1 -0
- package/dist/wallet/index.d.ts +6 -0
- package/dist/wallet/index.d.ts.map +1 -0
- package/dist/wallet/index.js +17 -0
- package/dist/wallet/index.js.map +1 -0
- package/dist/wallet/session-keys.d.ts +58 -0
- package/dist/wallet/session-keys.d.ts.map +1 -0
- package/dist/wallet/session-keys.js +313 -0
- package/dist/wallet/session-keys.js.map +1 -0
- package/dist/wallet/smart-account.d.ts +30 -0
- package/dist/wallet/smart-account.d.ts.map +1 -0
- package/dist/wallet/smart-account.js +126 -0
- package/dist/wallet/smart-account.js.map +1 -0
- package/dist/webhook.d.ts +15 -0
- package/dist/webhook.d.ts.map +1 -0
- package/dist/webhook.js +62 -0
- package/dist/webhook.js.map +1 -0
- package/package.json +71 -0
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
import { encodeFunctionData, keccak256, toBytes, createPublicClient, http, } from 'viem';
|
|
2
|
+
import { polygonAmoy, polygon, baseSepolia, base } from 'viem/chains';
|
|
3
|
+
import { SERVICE_ESCROW_V2_ABI, SERVICE_ESCROW_V3_ABI, ERC20_ABI } from './abi.js';
|
|
4
|
+
import { ESCROW_ADDRESSES, ESCROW_V2_ADDRESSES, USDC_ADDRESSES, POLYGON_AMOY_CHAIN_ID, POLYGON_MAINNET_CHAIN_ID, BASE_SEPOLIA_CHAIN_ID, BASE_MAINNET_CHAIN_ID, } from './constants.js';
|
|
5
|
+
const CHAINS = {
|
|
6
|
+
[POLYGON_AMOY_CHAIN_ID]: polygonAmoy,
|
|
7
|
+
[POLYGON_MAINNET_CHAIN_ID]: polygon,
|
|
8
|
+
[BASE_SEPOLIA_CHAIN_ID]: baseSepolia,
|
|
9
|
+
[BASE_MAINNET_CHAIN_ID]: base,
|
|
10
|
+
};
|
|
11
|
+
/**
|
|
12
|
+
* Client for interacting with the ServiceEscrow smart contracts.
|
|
13
|
+
* Supports V3 (multi-token) with automatic fallback to V2 (USDC only).
|
|
14
|
+
* Uses a ZeroDev Kernel account client for sending UserOperations.
|
|
15
|
+
*/
|
|
16
|
+
export class EscrowClient {
|
|
17
|
+
kernelClient;
|
|
18
|
+
chainId;
|
|
19
|
+
escrowAddress;
|
|
20
|
+
escrowVersion;
|
|
21
|
+
tokenAddress;
|
|
22
|
+
tokenDecimals;
|
|
23
|
+
constructor(kernelClient, token, chainId = BASE_SEPOLIA_CHAIN_ID) {
|
|
24
|
+
this.kernelClient = kernelClient;
|
|
25
|
+
this.chainId = chainId;
|
|
26
|
+
// Resolve token (default USDC for backward compat)
|
|
27
|
+
if (token) {
|
|
28
|
+
this.tokenAddress = token.address;
|
|
29
|
+
this.tokenDecimals = token.decimals;
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
const usdc = USDC_ADDRESSES[chainId];
|
|
33
|
+
if (!usdc)
|
|
34
|
+
throw new Error(`No USDC address for chain ${chainId}`);
|
|
35
|
+
this.tokenAddress = usdc;
|
|
36
|
+
this.tokenDecimals = 6;
|
|
37
|
+
}
|
|
38
|
+
// Try V3 first, fall back to V2
|
|
39
|
+
const v3 = ESCROW_ADDRESSES[chainId];
|
|
40
|
+
const v2 = ESCROW_V2_ADDRESSES[chainId];
|
|
41
|
+
if (v3) {
|
|
42
|
+
this.escrowAddress = v3;
|
|
43
|
+
this.escrowVersion = 3;
|
|
44
|
+
}
|
|
45
|
+
else if (v2) {
|
|
46
|
+
this.escrowAddress = v2;
|
|
47
|
+
this.escrowVersion = 2;
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
throw new Error(`No escrow contract for chain ${chainId}`);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Convert a platform transaction ID (CUID string) to a bytes32 escrow ID.
|
|
55
|
+
* Uses keccak256, matching the existing backend pattern in escrow.ts (ethers.id).
|
|
56
|
+
*/
|
|
57
|
+
static toEscrowId(transactionId) {
|
|
58
|
+
return keccak256(toBytes(transactionId));
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Approve the escrow contract to spend the settlement token on behalf of the smart account.
|
|
62
|
+
* Must be called before fundEscrow.
|
|
63
|
+
*/
|
|
64
|
+
async approveToken(amount) {
|
|
65
|
+
// Buyer fee is 1% (100 bps). Approve the total: amount + 1% fee
|
|
66
|
+
const buyerFee = (amount * 100n) / 10000n;
|
|
67
|
+
const totalApproval = amount + buyerFee;
|
|
68
|
+
const data = encodeFunctionData({
|
|
69
|
+
abi: ERC20_ABI,
|
|
70
|
+
functionName: 'approve',
|
|
71
|
+
args: [this.escrowAddress, totalApproval],
|
|
72
|
+
});
|
|
73
|
+
const txHash = await this.kernelClient.sendTransaction({
|
|
74
|
+
to: this.tokenAddress,
|
|
75
|
+
data,
|
|
76
|
+
});
|
|
77
|
+
return txHash;
|
|
78
|
+
}
|
|
79
|
+
/** @deprecated Use approveToken() instead. */
|
|
80
|
+
async approveUSDC(amount) {
|
|
81
|
+
return this.approveToken(amount);
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Fund an escrow. Calls createEscrow on the escrow contract.
|
|
85
|
+
* V3: passes token address as 4th argument.
|
|
86
|
+
* V2 fallback: USDC only (3 arguments).
|
|
87
|
+
* The contract will safeTransferFrom the token (amount + 1% buyer fee) from the caller.
|
|
88
|
+
*/
|
|
89
|
+
async fundEscrow(transactionId, sellerAddress, amount) {
|
|
90
|
+
const escrowId = EscrowClient.toEscrowId(transactionId);
|
|
91
|
+
let data;
|
|
92
|
+
if (this.escrowVersion === 3) {
|
|
93
|
+
data = encodeFunctionData({
|
|
94
|
+
abi: SERVICE_ESCROW_V3_ABI,
|
|
95
|
+
functionName: 'createEscrow',
|
|
96
|
+
args: [escrowId, sellerAddress, amount, this.tokenAddress],
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
data = encodeFunctionData({
|
|
101
|
+
abi: SERVICE_ESCROW_V2_ABI,
|
|
102
|
+
functionName: 'createEscrow',
|
|
103
|
+
args: [escrowId, sellerAddress, amount],
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
const txHash = await this.kernelClient.sendTransaction({
|
|
107
|
+
to: this.escrowAddress,
|
|
108
|
+
data,
|
|
109
|
+
});
|
|
110
|
+
return txHash;
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Release escrow funds to the seller.
|
|
114
|
+
* Callable by the buyer or an arbitrator.
|
|
115
|
+
*/
|
|
116
|
+
async releaseEscrow(transactionId) {
|
|
117
|
+
const escrowId = EscrowClient.toEscrowId(transactionId);
|
|
118
|
+
const abi = this.escrowVersion === 3 ? SERVICE_ESCROW_V3_ABI : SERVICE_ESCROW_V2_ABI;
|
|
119
|
+
const data = encodeFunctionData({
|
|
120
|
+
abi,
|
|
121
|
+
functionName: 'release',
|
|
122
|
+
args: [escrowId],
|
|
123
|
+
});
|
|
124
|
+
const txHash = await this.kernelClient.sendTransaction({
|
|
125
|
+
to: this.escrowAddress,
|
|
126
|
+
data,
|
|
127
|
+
});
|
|
128
|
+
return txHash;
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Read escrow details from the contract (view function, no gas needed).
|
|
132
|
+
*/
|
|
133
|
+
async getEscrow(transactionId) {
|
|
134
|
+
const escrowId = EscrowClient.toEscrowId(transactionId);
|
|
135
|
+
const viemChain = CHAINS[this.chainId] ?? polygonAmoy;
|
|
136
|
+
const publicClient = createPublicClient({
|
|
137
|
+
chain: viemChain,
|
|
138
|
+
transport: http(),
|
|
139
|
+
});
|
|
140
|
+
if (this.escrowVersion === 3) {
|
|
141
|
+
const result = await publicClient.readContract({
|
|
142
|
+
address: this.escrowAddress,
|
|
143
|
+
abi: SERVICE_ESCROW_V3_ABI,
|
|
144
|
+
functionName: 'getEscrow',
|
|
145
|
+
args: [escrowId],
|
|
146
|
+
});
|
|
147
|
+
const [token, buyer, seller, amount, buyerFee, status, createdAt, expiresAt] = result;
|
|
148
|
+
if (buyer === '0x0000000000000000000000000000000000000000') {
|
|
149
|
+
return null;
|
|
150
|
+
}
|
|
151
|
+
return {
|
|
152
|
+
token,
|
|
153
|
+
buyer,
|
|
154
|
+
seller,
|
|
155
|
+
amount,
|
|
156
|
+
buyerFee,
|
|
157
|
+
status,
|
|
158
|
+
createdAt: Number(createdAt),
|
|
159
|
+
expiresAt: Number(expiresAt),
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
// V2 fallback
|
|
163
|
+
const result = await publicClient.readContract({
|
|
164
|
+
address: this.escrowAddress,
|
|
165
|
+
abi: SERVICE_ESCROW_V2_ABI,
|
|
166
|
+
functionName: 'getEscrow',
|
|
167
|
+
args: [escrowId],
|
|
168
|
+
});
|
|
169
|
+
const [buyer, seller, amount, buyerFee, status, createdAt, expiresAt] = result;
|
|
170
|
+
if (buyer === '0x0000000000000000000000000000000000000000') {
|
|
171
|
+
return null;
|
|
172
|
+
}
|
|
173
|
+
return {
|
|
174
|
+
buyer,
|
|
175
|
+
seller,
|
|
176
|
+
amount,
|
|
177
|
+
buyerFee,
|
|
178
|
+
status,
|
|
179
|
+
createdAt: Number(createdAt),
|
|
180
|
+
expiresAt: Number(expiresAt),
|
|
181
|
+
};
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
//# sourceMappingURL=escrow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"escrow.js","sourceRoot":"","sources":["../../src/wallet/escrow.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { createSmartAccount, buildKernelClient } from './smart-account.js';
|
|
2
|
+
export { EscrowClient } from './escrow.js';
|
|
3
|
+
export { generateSessionKey, useSessionKey, revokeSessionKey, buildEscrowPolicies, } from './session-keys.js';
|
|
4
|
+
export { ESCROW_ADDRESSES, ESCROW_V2_ADDRESSES, TOKEN_REGISTRY, getToken, getTokensByTier, isTokenSupported, USDC_ADDRESSES, USDC_DECIMALS, POLYGON_AMOY_CHAIN_ID, POLYGON_MAINNET_CHAIN_ID, MIN_GAS_BALANCE, } from './constants.js';
|
|
5
|
+
export type { TokenInfo } from './constants.js';
|
|
6
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/wallet/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AAC1E,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,EACL,kBAAkB,EAClB,aAAa,EACb,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAEL,gBAAgB,EAEhB,mBAAmB,EAEnB,cAAc,EACd,QAAQ,EACR,eAAe,EACf,gBAAgB,EAEhB,cAAc,EACd,aAAa,EAEb,qBAAqB,EACrB,wBAAwB,EAExB,eAAe,GAChB,MAAM,gBAAgB,CAAA;AACvB,YAAY,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export { createSmartAccount, buildKernelClient } from './smart-account.js';
|
|
2
|
+
export { EscrowClient } from './escrow.js';
|
|
3
|
+
export { generateSessionKey, useSessionKey, revokeSessionKey, buildEscrowPolicies, } from './session-keys.js';
|
|
4
|
+
export {
|
|
5
|
+
// V3 multi-token escrow
|
|
6
|
+
ESCROW_ADDRESSES,
|
|
7
|
+
// V2 legacy (single-token USDC)
|
|
8
|
+
ESCROW_V2_ADDRESSES,
|
|
9
|
+
// Token registry
|
|
10
|
+
TOKEN_REGISTRY, getToken, getTokensByTier, isTokenSupported,
|
|
11
|
+
// Legacy compat (deprecated)
|
|
12
|
+
USDC_ADDRESSES, USDC_DECIMALS,
|
|
13
|
+
// Chain IDs
|
|
14
|
+
POLYGON_AMOY_CHAIN_ID, POLYGON_MAINNET_CHAIN_ID,
|
|
15
|
+
// Gas
|
|
16
|
+
MIN_GAS_BALANCE, } from './constants.js';
|
|
17
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/wallet/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AAC1E,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,EACL,kBAAkB,EAClB,aAAa,EACb,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,mBAAmB,CAAA;AAC1B,OAAO;AACL,wBAAwB;AACxB,gBAAgB;AAChB,gCAAgC;AAChC,mBAAmB;AACnB,iBAAiB;AACjB,cAAc,EACd,QAAQ,EACR,eAAe,EACf,gBAAgB;AAChB,6BAA6B;AAC7B,cAAc,EACd,aAAa;AACb,YAAY;AACZ,qBAAqB,EACrB,wBAAwB;AACxB,MAAM;AACN,eAAe,GAChB,MAAM,gBAAgB,CAAA"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import type { SessionKeyConfig, SessionKeyResult, UseSessionKeyConfig, RevokeSessionKeyConfig, SmartAccountResult } from '../types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Build escrow-scoped policies for a session key.
|
|
4
|
+
*
|
|
5
|
+
* Creates a CallPolicy restricted to escrow operations:
|
|
6
|
+
* 1. ERC20.approve for each allowed token (spender must equal escrow contract)
|
|
7
|
+
* 2. Escrow.createEscrow (V3 with token param, or V2 fallback)
|
|
8
|
+
* 3. Escrow.release
|
|
9
|
+
*
|
|
10
|
+
* Plus a TimestampPolicy for time-bound expiration.
|
|
11
|
+
*
|
|
12
|
+
* @param config.tokens - Token symbols to allow (default: all tokens in registry for chain)
|
|
13
|
+
*
|
|
14
|
+
* Requires @zerodev/permissions as a peer dependency.
|
|
15
|
+
*/
|
|
16
|
+
export declare function buildEscrowPolicies(config: {
|
|
17
|
+
chainId?: number;
|
|
18
|
+
validitySeconds?: number;
|
|
19
|
+
tokens?: string[];
|
|
20
|
+
}): Promise<unknown[]>;
|
|
21
|
+
/**
|
|
22
|
+
* Generate a scoped session key for an agent (owner operation).
|
|
23
|
+
*
|
|
24
|
+
* The owner calls this with their private key. A random session key is generated,
|
|
25
|
+
* scoped to escrow operations via CallPolicy + TimestampPolicy, and serialized
|
|
26
|
+
* into a single string that can be passed to the agent.
|
|
27
|
+
*
|
|
28
|
+
* Requires peer dependencies:
|
|
29
|
+
* - @zerodev/sdk
|
|
30
|
+
* - @zerodev/ecdsa-validator
|
|
31
|
+
* - @zerodev/permissions
|
|
32
|
+
*/
|
|
33
|
+
export declare function generateSessionKey(config: SessionKeyConfig): Promise<SessionKeyResult>;
|
|
34
|
+
/**
|
|
35
|
+
* Use a serialized session key to get a working kernel client (agent operation).
|
|
36
|
+
*
|
|
37
|
+
* The agent calls this with the serialized string received from the owner.
|
|
38
|
+
* No owner private key is needed — the session key was embedded during serialization.
|
|
39
|
+
* The resulting kernel client can only perform actions allowed by the session's policies.
|
|
40
|
+
*
|
|
41
|
+
* Requires peer dependencies:
|
|
42
|
+
* - @zerodev/sdk
|
|
43
|
+
* - @zerodev/permissions
|
|
44
|
+
*/
|
|
45
|
+
export declare function useSessionKey(config: UseSessionKeyConfig): Promise<SmartAccountResult>;
|
|
46
|
+
/**
|
|
47
|
+
* Revoke a session key on-chain (owner operation).
|
|
48
|
+
*
|
|
49
|
+
* The owner calls this with their private key and the serialized session key
|
|
50
|
+
* to reconstruct and uninstall the permission plugin from the Kernel account.
|
|
51
|
+
*
|
|
52
|
+
* Requires peer dependencies:
|
|
53
|
+
* - @zerodev/sdk
|
|
54
|
+
* - @zerodev/ecdsa-validator
|
|
55
|
+
* - @zerodev/permissions
|
|
56
|
+
*/
|
|
57
|
+
export declare function revokeSessionKey(config: RevokeSessionKeyConfig): Promise<string>;
|
|
58
|
+
//# sourceMappingURL=session-keys.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-keys.d.ts","sourceRoot":"","sources":["../../src/wallet/session-keys.ts"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EACV,gBAAgB,EAChB,gBAAgB,EAChB,mBAAmB,EACnB,sBAAsB,EACtB,kBAAkB,EAEnB,MAAM,aAAa,CAAA;AASpB;;;;;;;;;;;;;GAaG;AACH,wBAAsB,mBAAmB,CAAC,MAAM,EAAE;IAChD,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;CAClB,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CA6FrB;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,gBAAgB,GACvB,OAAO,CAAC,gBAAgB,CAAC,CA2F3B;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,aAAa,CACjC,MAAM,EAAE,mBAAmB,GAC1B,OAAO,CAAC,kBAAkB,CAAC,CA0D7B;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,sBAAsB,GAC7B,OAAO,CAAC,MAAM,CAAC,CAgFjB"}
|
|
@@ -0,0 +1,313 @@
|
|
|
1
|
+
import { createPublicClient, http, } from 'viem';
|
|
2
|
+
import { polygonAmoy, polygon } from 'viem/chains';
|
|
3
|
+
import { SERVICE_ESCROW_V2_ABI, SERVICE_ESCROW_V3_ABI, ERC20_ABI } from './abi.js';
|
|
4
|
+
import { ESCROW_ADDRESSES, ESCROW_V2_ADDRESSES, USDC_ADDRESSES, POLYGON_AMOY_CHAIN_ID, ZERODEV_BUNDLER_URL, ZERODEV_PAYMASTER_URL, MIN_GAS_BALANCE, TOKEN_REGISTRY, } from './constants.js';
|
|
5
|
+
import { buildKernelClient } from './smart-account.js';
|
|
6
|
+
const CHAINS = {
|
|
7
|
+
polygon,
|
|
8
|
+
polygonAmoy,
|
|
9
|
+
};
|
|
10
|
+
const DEFAULT_VALIDITY_SECONDS = 86400; // 24 hours
|
|
11
|
+
/**
|
|
12
|
+
* Build escrow-scoped policies for a session key.
|
|
13
|
+
*
|
|
14
|
+
* Creates a CallPolicy restricted to escrow operations:
|
|
15
|
+
* 1. ERC20.approve for each allowed token (spender must equal escrow contract)
|
|
16
|
+
* 2. Escrow.createEscrow (V3 with token param, or V2 fallback)
|
|
17
|
+
* 3. Escrow.release
|
|
18
|
+
*
|
|
19
|
+
* Plus a TimestampPolicy for time-bound expiration.
|
|
20
|
+
*
|
|
21
|
+
* @param config.tokens - Token symbols to allow (default: all tokens in registry for chain)
|
|
22
|
+
*
|
|
23
|
+
* Requires @zerodev/permissions as a peer dependency.
|
|
24
|
+
*/
|
|
25
|
+
export async function buildEscrowPolicies(config) {
|
|
26
|
+
const chainId = config.chainId ?? POLYGON_AMOY_CHAIN_ID;
|
|
27
|
+
const validitySeconds = config.validitySeconds ?? DEFAULT_VALIDITY_SECONDS;
|
|
28
|
+
const { toCallPolicy, CallPolicyVersion, ParamCondition } = await import('@zerodev/permissions/policies');
|
|
29
|
+
const { toTimestampPolicy } = await import('@zerodev/permissions/policies');
|
|
30
|
+
// Resolve escrow contract (V3 preferred, V2 fallback)
|
|
31
|
+
const v3Address = ESCROW_ADDRESSES[chainId];
|
|
32
|
+
const v2Address = ESCROW_V2_ADDRESSES[chainId];
|
|
33
|
+
const escrowAddress = v3Address ?? v2Address;
|
|
34
|
+
if (!escrowAddress)
|
|
35
|
+
throw new Error(`No escrow contract for chain ${chainId}`);
|
|
36
|
+
const isV3 = !!v3Address;
|
|
37
|
+
// Resolve tokens to allow
|
|
38
|
+
const registry = TOKEN_REGISTRY[chainId] ?? {};
|
|
39
|
+
const tokenSymbols = config.tokens ?? Object.keys(registry);
|
|
40
|
+
const tokenAddresses = [];
|
|
41
|
+
for (const symbol of tokenSymbols) {
|
|
42
|
+
const info = registry[symbol];
|
|
43
|
+
if (info)
|
|
44
|
+
tokenAddresses.push(info.address);
|
|
45
|
+
}
|
|
46
|
+
// Fallback: if no tokens resolved, use USDC
|
|
47
|
+
if (tokenAddresses.length === 0) {
|
|
48
|
+
const usdc = USDC_ADDRESSES[chainId];
|
|
49
|
+
if (usdc)
|
|
50
|
+
tokenAddresses.push(usdc);
|
|
51
|
+
}
|
|
52
|
+
if (tokenAddresses.length === 0) {
|
|
53
|
+
throw new Error(`No token addresses for chain ${chainId}`);
|
|
54
|
+
}
|
|
55
|
+
// Build permissions: one approve entry per token + escrow operations
|
|
56
|
+
const permissions = [];
|
|
57
|
+
for (const tokenAddr of tokenAddresses) {
|
|
58
|
+
permissions.push({
|
|
59
|
+
target: tokenAddr,
|
|
60
|
+
abi: ERC20_ABI,
|
|
61
|
+
functionName: 'approve',
|
|
62
|
+
args: [
|
|
63
|
+
{
|
|
64
|
+
condition: ParamCondition.EQUAL,
|
|
65
|
+
value: escrowAddress,
|
|
66
|
+
},
|
|
67
|
+
null, // amount — no restriction
|
|
68
|
+
],
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
if (isV3) {
|
|
72
|
+
permissions.push({
|
|
73
|
+
target: escrowAddress,
|
|
74
|
+
abi: SERVICE_ESCROW_V3_ABI,
|
|
75
|
+
functionName: 'createEscrow',
|
|
76
|
+
args: [null, null, null, null], // escrowId, seller, amount, token
|
|
77
|
+
});
|
|
78
|
+
permissions.push({
|
|
79
|
+
target: escrowAddress,
|
|
80
|
+
abi: SERVICE_ESCROW_V3_ABI,
|
|
81
|
+
functionName: 'release',
|
|
82
|
+
args: [null],
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
permissions.push({
|
|
87
|
+
target: escrowAddress,
|
|
88
|
+
abi: SERVICE_ESCROW_V2_ABI,
|
|
89
|
+
functionName: 'createEscrow',
|
|
90
|
+
args: [null, null, null], // escrowId, seller, amount
|
|
91
|
+
});
|
|
92
|
+
permissions.push({
|
|
93
|
+
target: escrowAddress,
|
|
94
|
+
abi: SERVICE_ESCROW_V2_ABI,
|
|
95
|
+
functionName: 'release',
|
|
96
|
+
args: [null],
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
const callPolicy = toCallPolicy({
|
|
100
|
+
policyVersion: CallPolicyVersion.V0_0_4,
|
|
101
|
+
permissions,
|
|
102
|
+
});
|
|
103
|
+
const validUntil = Math.floor(Date.now() / 1000) + validitySeconds;
|
|
104
|
+
const timestampPolicy = toTimestampPolicy({
|
|
105
|
+
validUntil,
|
|
106
|
+
});
|
|
107
|
+
return [callPolicy, timestampPolicy];
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Generate a scoped session key for an agent (owner operation).
|
|
111
|
+
*
|
|
112
|
+
* The owner calls this with their private key. A random session key is generated,
|
|
113
|
+
* scoped to escrow operations via CallPolicy + TimestampPolicy, and serialized
|
|
114
|
+
* into a single string that can be passed to the agent.
|
|
115
|
+
*
|
|
116
|
+
* Requires peer dependencies:
|
|
117
|
+
* - @zerodev/sdk
|
|
118
|
+
* - @zerodev/ecdsa-validator
|
|
119
|
+
* - @zerodev/permissions
|
|
120
|
+
*/
|
|
121
|
+
export async function generateSessionKey(config) {
|
|
122
|
+
// Dynamic imports — optional peer dependencies
|
|
123
|
+
const sdk = await import('@zerodev/sdk');
|
|
124
|
+
const { signerToEcdsaValidator } = await import('@zerodev/ecdsa-validator');
|
|
125
|
+
const { generatePrivateKey, privateKeyToAccount } = await import('viem/accounts');
|
|
126
|
+
const { toPermissionValidator, serializePermissionAccount } = await import('@zerodev/permissions');
|
|
127
|
+
const { toEmptyECDSASigner } = await import('@zerodev/permissions/signers');
|
|
128
|
+
const { createKernelAccount, createZeroDevPaymasterClient, constants, } = sdk;
|
|
129
|
+
const chain = CHAINS[config.chain ?? 'polygonAmoy'];
|
|
130
|
+
if (!chain)
|
|
131
|
+
throw new Error(`Unsupported chain: ${config.chain}`);
|
|
132
|
+
const entryPoint = constants.getEntryPoint('0.7');
|
|
133
|
+
const kernelVersion = constants.KERNEL_V3_1;
|
|
134
|
+
const bundlerUrl = `${ZERODEV_BUNDLER_URL}/${config.zeroDevProjectId}`;
|
|
135
|
+
const paymasterUrl = `${ZERODEV_PAYMASTER_URL}/${config.zeroDevProjectId}`;
|
|
136
|
+
// 1. Public client for chain reads
|
|
137
|
+
const publicClient = createPublicClient({
|
|
138
|
+
chain,
|
|
139
|
+
transport: http(),
|
|
140
|
+
});
|
|
141
|
+
// 2. Create the owner's EOA signer
|
|
142
|
+
const ownerSigner = privateKeyToAccount(config.ownerPrivateKey);
|
|
143
|
+
// 3. Create owner's ECDSA validator (sudo)
|
|
144
|
+
const ecdsaValidator = await signerToEcdsaValidator(publicClient, {
|
|
145
|
+
signer: ownerSigner,
|
|
146
|
+
entryPoint,
|
|
147
|
+
kernelVersion,
|
|
148
|
+
});
|
|
149
|
+
// 4. Generate a random session key
|
|
150
|
+
const sessionPrivateKey = generatePrivateKey();
|
|
151
|
+
const sessionKeyAccount = privateKeyToAccount(sessionPrivateKey);
|
|
152
|
+
// 5. Create an empty ECDSA signer from the session key's address
|
|
153
|
+
// (the owner doesn't need the session private key to authorize it)
|
|
154
|
+
const emptySessionSigner = toEmptyECDSASigner(sessionKeyAccount.address);
|
|
155
|
+
// 6. Build policies (escrow-scoped by default, or custom)
|
|
156
|
+
const chainId = chain.id;
|
|
157
|
+
const policies = config.customPolicies
|
|
158
|
+
? config.customPolicies
|
|
159
|
+
: await buildEscrowPolicies({
|
|
160
|
+
chainId,
|
|
161
|
+
validitySeconds: config.validitySeconds ?? DEFAULT_VALIDITY_SECONDS,
|
|
162
|
+
});
|
|
163
|
+
// 7. Create permission validator (regular plugin)
|
|
164
|
+
const permissionPlugin = await toPermissionValidator(publicClient, {
|
|
165
|
+
signer: emptySessionSigner,
|
|
166
|
+
policies: policies,
|
|
167
|
+
entryPoint,
|
|
168
|
+
kernelVersion,
|
|
169
|
+
});
|
|
170
|
+
// 8. Create kernel account with sudo (owner) + regular (session key)
|
|
171
|
+
const kernelAccount = await createKernelAccount(publicClient, {
|
|
172
|
+
plugins: {
|
|
173
|
+
sudo: ecdsaValidator,
|
|
174
|
+
regular: permissionPlugin,
|
|
175
|
+
},
|
|
176
|
+
entryPoint,
|
|
177
|
+
kernelVersion,
|
|
178
|
+
});
|
|
179
|
+
// 9. Serialize the account with the session private key embedded
|
|
180
|
+
const serialized = await serializePermissionAccount(kernelAccount, sessionPrivateKey);
|
|
181
|
+
return {
|
|
182
|
+
serializedSessionKey: serialized,
|
|
183
|
+
sessionKeyAddress: sessionKeyAccount.address,
|
|
184
|
+
smartAccountAddress: kernelAccount.address,
|
|
185
|
+
};
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Use a serialized session key to get a working kernel client (agent operation).
|
|
189
|
+
*
|
|
190
|
+
* The agent calls this with the serialized string received from the owner.
|
|
191
|
+
* No owner private key is needed — the session key was embedded during serialization.
|
|
192
|
+
* The resulting kernel client can only perform actions allowed by the session's policies.
|
|
193
|
+
*
|
|
194
|
+
* Requires peer dependencies:
|
|
195
|
+
* - @zerodev/sdk
|
|
196
|
+
* - @zerodev/permissions
|
|
197
|
+
*/
|
|
198
|
+
export async function useSessionKey(config) {
|
|
199
|
+
const sdk = await import('@zerodev/sdk');
|
|
200
|
+
const { deserializePermissionAccount } = await import('@zerodev/permissions');
|
|
201
|
+
const { constants } = sdk;
|
|
202
|
+
const chain = CHAINS[config.chain ?? 'polygonAmoy'];
|
|
203
|
+
if (!chain)
|
|
204
|
+
throw new Error(`Unsupported chain: ${config.chain}`);
|
|
205
|
+
const entryPoint = constants.getEntryPoint('0.7');
|
|
206
|
+
const kernelVersion = constants.KERNEL_V3_1;
|
|
207
|
+
const bundlerUrl = `${ZERODEV_BUNDLER_URL}/${config.zeroDevProjectId}`;
|
|
208
|
+
const paymasterUrl = `${ZERODEV_PAYMASTER_URL}/${config.zeroDevProjectId}`;
|
|
209
|
+
// 1. Public client
|
|
210
|
+
const publicClient = createPublicClient({
|
|
211
|
+
chain,
|
|
212
|
+
transport: http(),
|
|
213
|
+
});
|
|
214
|
+
// 2. Deserialize the session key account
|
|
215
|
+
// The session private key + policies are embedded in the serialized string
|
|
216
|
+
const sessionKeyAccount = await deserializePermissionAccount(publicClient, entryPoint, kernelVersion, config.serializedSessionKey);
|
|
217
|
+
// 3. Resolve gas strategy
|
|
218
|
+
const strategy = config.gasStrategy ?? 'auto';
|
|
219
|
+
let resolvedStrategy;
|
|
220
|
+
if (strategy === 'auto') {
|
|
221
|
+
const balance = await publicClient.getBalance({
|
|
222
|
+
address: sessionKeyAccount.address,
|
|
223
|
+
});
|
|
224
|
+
resolvedStrategy = balance >= MIN_GAS_BALANCE ? 'self-funded' : 'erc20';
|
|
225
|
+
}
|
|
226
|
+
else {
|
|
227
|
+
resolvedStrategy = strategy;
|
|
228
|
+
}
|
|
229
|
+
// 4. Create kernel client with resolved gas strategy
|
|
230
|
+
const kernelClient = await buildKernelClient({
|
|
231
|
+
account: sessionKeyAccount,
|
|
232
|
+
chain,
|
|
233
|
+
bundlerUrl,
|
|
234
|
+
paymasterUrl,
|
|
235
|
+
gasStrategy: resolvedStrategy,
|
|
236
|
+
});
|
|
237
|
+
return {
|
|
238
|
+
address: sessionKeyAccount.address,
|
|
239
|
+
kernelClient,
|
|
240
|
+
gasStrategy: resolvedStrategy,
|
|
241
|
+
};
|
|
242
|
+
}
|
|
243
|
+
/**
|
|
244
|
+
* Revoke a session key on-chain (owner operation).
|
|
245
|
+
*
|
|
246
|
+
* The owner calls this with their private key and the serialized session key
|
|
247
|
+
* to reconstruct and uninstall the permission plugin from the Kernel account.
|
|
248
|
+
*
|
|
249
|
+
* Requires peer dependencies:
|
|
250
|
+
* - @zerodev/sdk
|
|
251
|
+
* - @zerodev/ecdsa-validator
|
|
252
|
+
* - @zerodev/permissions
|
|
253
|
+
*/
|
|
254
|
+
export async function revokeSessionKey(config) {
|
|
255
|
+
const sdk = await import('@zerodev/sdk');
|
|
256
|
+
const { signerToEcdsaValidator } = await import('@zerodev/ecdsa-validator');
|
|
257
|
+
const { privateKeyToAccount } = await import('viem/accounts');
|
|
258
|
+
const { deserializePermissionAccount } = await import('@zerodev/permissions');
|
|
259
|
+
const { createKernelAccount, constants, } = sdk;
|
|
260
|
+
const chain = CHAINS[config.chain ?? 'polygonAmoy'];
|
|
261
|
+
if (!chain)
|
|
262
|
+
throw new Error(`Unsupported chain: ${config.chain}`);
|
|
263
|
+
const entryPoint = constants.getEntryPoint('0.7');
|
|
264
|
+
const kernelVersion = constants.KERNEL_V3_1;
|
|
265
|
+
const bundlerUrl = `${ZERODEV_BUNDLER_URL}/${config.zeroDevProjectId}`;
|
|
266
|
+
const paymasterUrl = `${ZERODEV_PAYMASTER_URL}/${config.zeroDevProjectId}`;
|
|
267
|
+
// 1. Public client
|
|
268
|
+
const publicClient = createPublicClient({
|
|
269
|
+
chain,
|
|
270
|
+
transport: http(),
|
|
271
|
+
});
|
|
272
|
+
// 2. Reconstruct the owner's sudo validator
|
|
273
|
+
const ownerSigner = privateKeyToAccount(config.ownerPrivateKey);
|
|
274
|
+
const ecdsaValidator = await signerToEcdsaValidator(publicClient, {
|
|
275
|
+
signer: ownerSigner,
|
|
276
|
+
entryPoint,
|
|
277
|
+
kernelVersion,
|
|
278
|
+
});
|
|
279
|
+
// 3. Deserialize the session key to get the permission plugin
|
|
280
|
+
const sessionKeyAccount = await deserializePermissionAccount(publicClient, entryPoint, kernelVersion, config.serializedSessionKey);
|
|
281
|
+
// 4. Create the sudo kernel account (owner has full control)
|
|
282
|
+
const sudoAccount = await createKernelAccount(publicClient, {
|
|
283
|
+
plugins: { sudo: ecdsaValidator },
|
|
284
|
+
entryPoint,
|
|
285
|
+
kernelVersion,
|
|
286
|
+
});
|
|
287
|
+
// 5. Resolve gas strategy
|
|
288
|
+
const strategy = config.gasStrategy ?? 'auto';
|
|
289
|
+
let resolvedStrategy;
|
|
290
|
+
if (strategy === 'auto') {
|
|
291
|
+
const balance = await publicClient.getBalance({
|
|
292
|
+
address: sudoAccount.address,
|
|
293
|
+
});
|
|
294
|
+
resolvedStrategy = balance >= MIN_GAS_BALANCE ? 'self-funded' : 'erc20';
|
|
295
|
+
}
|
|
296
|
+
else {
|
|
297
|
+
resolvedStrategy = strategy;
|
|
298
|
+
}
|
|
299
|
+
// 6. Create sudo kernel client with resolved gas strategy
|
|
300
|
+
const sudoClient = await buildKernelClient({
|
|
301
|
+
account: sudoAccount,
|
|
302
|
+
chain,
|
|
303
|
+
bundlerUrl,
|
|
304
|
+
paymasterUrl,
|
|
305
|
+
gasStrategy: resolvedStrategy,
|
|
306
|
+
});
|
|
307
|
+
// 7. Uninstall the permission plugin
|
|
308
|
+
const userOpHash = await sudoClient.uninstallPlugin({
|
|
309
|
+
plugin: sessionKeyAccount,
|
|
310
|
+
});
|
|
311
|
+
return userOpHash;
|
|
312
|
+
}
|
|
313
|
+
//# sourceMappingURL=session-keys.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-keys.js","sourceRoot":"","sources":["../../src/wallet/session-keys.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { type Chain } from 'viem';
|
|
2
|
+
import type { SmartAccountConfig, SmartAccountResult } from '../types.js';
|
|
3
|
+
/**
|
|
4
|
+
* Build a kernel account client with the appropriate gas strategy.
|
|
5
|
+
*
|
|
6
|
+
* Shared by createSmartAccount() and session-keys.ts to avoid duplicating
|
|
7
|
+
* paymaster configuration logic.
|
|
8
|
+
*/
|
|
9
|
+
export declare function buildKernelClient(opts: {
|
|
10
|
+
account: unknown;
|
|
11
|
+
chain: Chain;
|
|
12
|
+
bundlerUrl: string;
|
|
13
|
+
paymasterUrl: string;
|
|
14
|
+
gasStrategy: 'self-funded' | 'erc20';
|
|
15
|
+
}): Promise<unknown>;
|
|
16
|
+
/**
|
|
17
|
+
* Create a ZeroDev Kernel smart account (ERC-7579).
|
|
18
|
+
*
|
|
19
|
+
* Gas strategy:
|
|
20
|
+
* - 'self-funded': Agent pays gas with native POL.
|
|
21
|
+
* - 'erc20': Agent pays gas in USDC via ZeroDev's ERC-20 paymaster.
|
|
22
|
+
* - 'auto' (default): Checks POL balance — uses self-funded if >= 0.01 POL,
|
|
23
|
+
* otherwise falls back to ERC-20 paymaster.
|
|
24
|
+
*
|
|
25
|
+
* Requires peer dependencies:
|
|
26
|
+
* - @zerodev/sdk
|
|
27
|
+
* - @zerodev/ecdsa-validator
|
|
28
|
+
*/
|
|
29
|
+
export declare function createSmartAccount(config: SmartAccountConfig): Promise<SmartAccountResult>;
|
|
30
|
+
//# sourceMappingURL=smart-account.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"smart-account.d.ts","sourceRoot":"","sources":["../../src/wallet/smart-account.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,KAAK,EACX,MAAM,MAAM,CAAA;AAEb,OAAO,KAAK,EAAE,kBAAkB,EAAE,kBAAkB,EAAe,MAAM,aAAa,CAAA;AAsCtF;;;;;GAKG;AACH,wBAAsB,iBAAiB,CAAC,IAAI,EAAE;IAC5C,OAAO,EAAE,OAAO,CAAA;IAChB,KAAK,EAAE,KAAK,CAAA;IACZ,UAAU,EAAE,MAAM,CAAA;IAClB,YAAY,EAAE,MAAM,CAAA;IACpB,WAAW,EAAE,aAAa,GAAG,OAAO,CAAA;CACrC,GAAG,OAAO,CAAC,OAAO,CAAC,CAqCnB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,kBAAkB,GACzB,OAAO,CAAC,kBAAkB,CAAC,CAkE7B"}
|