@agirails/sdk 2.5.3 → 2.5.5
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/dist/ACTPClient.d.ts +18 -0
- package/dist/ACTPClient.d.ts.map +1 -1
- package/dist/ACTPClient.js +72 -23
- package/dist/ACTPClient.js.map +1 -1
- package/dist/adapters/BasicAdapter.d.ts +15 -0
- package/dist/adapters/BasicAdapter.d.ts.map +1 -1
- package/dist/adapters/BasicAdapter.js +33 -4
- package/dist/adapters/BasicAdapter.js.map +1 -1
- package/dist/adapters/StandardAdapter.d.ts +20 -3
- package/dist/adapters/StandardAdapter.d.ts.map +1 -1
- package/dist/adapters/StandardAdapter.js +90 -12
- package/dist/adapters/StandardAdapter.js.map +1 -1
- package/dist/cli/commands/publish.js +16 -4
- package/dist/cli/commands/publish.js.map +1 -1
- package/dist/cli/commands/register.js +16 -4
- package/dist/cli/commands/register.js.map +1 -1
- package/dist/cli/commands/tx.js +31 -3
- package/dist/cli/commands/tx.js.map +1 -1
- package/dist/config/networks.d.ts +10 -2
- package/dist/config/networks.d.ts.map +1 -1
- package/dist/config/networks.js +31 -22
- package/dist/config/networks.js.map +1 -1
- package/dist/level0/request.d.ts.map +1 -1
- package/dist/level0/request.js +2 -1
- package/dist/level0/request.js.map +1 -1
- package/dist/runtime/BlockchainRuntime.d.ts.map +1 -1
- package/dist/runtime/BlockchainRuntime.js +11 -5
- package/dist/runtime/BlockchainRuntime.js.map +1 -1
- package/dist/utils/IPFSClient.d.ts +3 -1
- package/dist/utils/IPFSClient.d.ts.map +1 -1
- package/dist/utils/IPFSClient.js +27 -7
- package/dist/utils/IPFSClient.js.map +1 -1
- package/dist/wallet/AutoWalletProvider.d.ts +11 -1
- package/dist/wallet/AutoWalletProvider.d.ts.map +1 -1
- package/dist/wallet/AutoWalletProvider.js +84 -19
- package/dist/wallet/AutoWalletProvider.js.map +1 -1
- package/dist/wallet/IWalletProvider.d.ts +34 -0
- package/dist/wallet/IWalletProvider.d.ts.map +1 -1
- package/dist/wallet/SmartWalletRouter.d.ts +128 -0
- package/dist/wallet/SmartWalletRouter.d.ts.map +1 -0
- package/dist/wallet/SmartWalletRouter.js +248 -0
- package/dist/wallet/SmartWalletRouter.js.map +1 -0
- package/dist/wallet/aa/DualNonceManager.d.ts +26 -1
- package/dist/wallet/aa/DualNonceManager.d.ts.map +1 -1
- package/dist/wallet/aa/DualNonceManager.js +140 -6
- package/dist/wallet/aa/DualNonceManager.js.map +1 -1
- package/package.json +3 -6
- package/src/ACTPClient.ts +0 -1579
- package/src/abi/ACTPKernel.json +0 -1356
- package/src/abi/AgentRegistry.json +0 -915
- package/src/abi/ERC20.json +0 -40
- package/src/abi/EscrowVault.json +0 -134
- package/src/abi/IdentityRegistry.json +0 -316
- package/src/adapters/AdapterRegistry.ts +0 -173
- package/src/adapters/AdapterRouter.ts +0 -416
- package/src/adapters/BaseAdapter.ts +0 -498
- package/src/adapters/BasicAdapter.ts +0 -514
- package/src/adapters/IAdapter.ts +0 -292
- package/src/adapters/StandardAdapter.ts +0 -555
- package/src/adapters/X402Adapter.ts +0 -731
- package/src/adapters/index.ts +0 -60
- package/src/builders/DeliveryProofBuilder.ts +0 -327
- package/src/builders/QuoteBuilder.ts +0 -483
- package/src/builders/index.ts +0 -17
- package/src/cli/commands/balance.ts +0 -110
- package/src/cli/commands/batch.ts +0 -487
- package/src/cli/commands/config.ts +0 -231
- package/src/cli/commands/deploy-check.ts +0 -364
- package/src/cli/commands/deploy-env.ts +0 -120
- package/src/cli/commands/diff.ts +0 -141
- package/src/cli/commands/init.ts +0 -469
- package/src/cli/commands/mint.ts +0 -116
- package/src/cli/commands/pay.ts +0 -113
- package/src/cli/commands/publish.ts +0 -475
- package/src/cli/commands/pull.ts +0 -124
- package/src/cli/commands/register.ts +0 -247
- package/src/cli/commands/simulate.ts +0 -345
- package/src/cli/commands/time.ts +0 -302
- package/src/cli/commands/tx.ts +0 -448
- package/src/cli/commands/watch.ts +0 -211
- package/src/cli/index.ts +0 -134
- package/src/cli/utils/client.ts +0 -252
- package/src/cli/utils/config.ts +0 -389
- package/src/cli/utils/output.ts +0 -465
- package/src/cli/utils/wallet.ts +0 -109
- package/src/config/agirailsmd.ts +0 -262
- package/src/config/networks.ts +0 -275
- package/src/config/pendingPublish.ts +0 -237
- package/src/config/publishPipeline.ts +0 -359
- package/src/config/syncOperations.ts +0 -279
- package/src/erc8004/ERC8004Bridge.ts +0 -462
- package/src/erc8004/ReputationReporter.ts +0 -468
- package/src/erc8004/index.ts +0 -61
- package/src/errors/index.ts +0 -427
- package/src/index.ts +0 -364
- package/src/level0/Provider.ts +0 -117
- package/src/level0/ServiceDirectory.ts +0 -131
- package/src/level0/index.ts +0 -10
- package/src/level0/provide.ts +0 -132
- package/src/level0/request.ts +0 -432
- package/src/level1/Agent.ts +0 -1426
- package/src/level1/index.ts +0 -10
- package/src/level1/pricing/PriceCalculator.ts +0 -255
- package/src/level1/pricing/PricingStrategy.ts +0 -198
- package/src/level1/types/Job.ts +0 -179
- package/src/level1/types/Options.ts +0 -291
- package/src/level1/types/index.ts +0 -8
- package/src/protocol/ACTPKernel.ts +0 -808
- package/src/protocol/AgentRegistry.ts +0 -559
- package/src/protocol/DIDManager.ts +0 -629
- package/src/protocol/DIDResolver.ts +0 -554
- package/src/protocol/EASHelper.ts +0 -378
- package/src/protocol/EscrowVault.ts +0 -255
- package/src/protocol/EventMonitor.ts +0 -204
- package/src/protocol/MessageSigner.ts +0 -510
- package/src/protocol/ProofGenerator.ts +0 -339
- package/src/protocol/QuoteBuilder.ts +0 -15
- package/src/registry/AgentRegistryClient.ts +0 -202
- package/src/runtime/BlockchainRuntime.ts +0 -1015
- package/src/runtime/IACTPRuntime.ts +0 -306
- package/src/runtime/MockRuntime.ts +0 -1298
- package/src/runtime/MockStateManager.ts +0 -577
- package/src/runtime/index.ts +0 -25
- package/src/runtime/types/MockState.ts +0 -237
- package/src/storage/ArchiveBundleBuilder.ts +0 -561
- package/src/storage/ArweaveClient.ts +0 -946
- package/src/storage/FilebaseClient.ts +0 -790
- package/src/storage/index.ts +0 -96
- package/src/storage/types.ts +0 -348
- package/src/types/adapter.ts +0 -310
- package/src/types/agent.ts +0 -79
- package/src/types/did.ts +0 -223
- package/src/types/eip712.ts +0 -175
- package/src/types/erc8004.ts +0 -293
- package/src/types/escrow.ts +0 -27
- package/src/types/index.ts +0 -17
- package/src/types/message.ts +0 -145
- package/src/types/state.ts +0 -87
- package/src/types/transaction.ts +0 -69
- package/src/types/x402.ts +0 -251
- package/src/utils/ErrorRecoveryGuide.ts +0 -676
- package/src/utils/Helpers.ts +0 -688
- package/src/utils/IPFSClient.ts +0 -368
- package/src/utils/Logger.ts +0 -484
- package/src/utils/NonceManager.ts +0 -591
- package/src/utils/RateLimiter.ts +0 -534
- package/src/utils/ReceivedNonceTracker.ts +0 -567
- package/src/utils/SDKLifecycle.ts +0 -416
- package/src/utils/SecureNonce.ts +0 -78
- package/src/utils/Semaphore.ts +0 -276
- package/src/utils/UsedAttestationTracker.ts +0 -385
- package/src/utils/canonicalJson.ts +0 -38
- package/src/utils/circuitBreaker.ts +0 -324
- package/src/utils/computeTypeHash.ts +0 -48
- package/src/utils/fsSafe.ts +0 -80
- package/src/utils/index.ts +0 -80
- package/src/utils/retry.ts +0 -364
- package/src/utils/security.ts +0 -418
- package/src/utils/validation.ts +0 -540
- package/src/wallet/AutoWalletProvider.ts +0 -299
- package/src/wallet/EOAWalletProvider.ts +0 -69
- package/src/wallet/IWalletProvider.ts +0 -135
- package/src/wallet/aa/BundlerClient.ts +0 -274
- package/src/wallet/aa/DualNonceManager.ts +0 -173
- package/src/wallet/aa/PaymasterClient.ts +0 -174
- package/src/wallet/aa/TransactionBatcher.ts +0 -353
- package/src/wallet/aa/UserOpBuilder.ts +0 -246
- package/src/wallet/aa/constants.ts +0 -60
- package/src/wallet/keystore.ts +0 -240
|
@@ -45,7 +45,7 @@ class AutoWalletProvider {
|
|
|
45
45
|
backupUrl: config.paymaster.backupUrl,
|
|
46
46
|
chainId: config.chainId,
|
|
47
47
|
});
|
|
48
|
-
this.nonceManager = new DualNonceManager_1.DualNonceManager(config.provider, smartWalletAddress, config.actpKernelAddress);
|
|
48
|
+
this.nonceManager = new DualNonceManager_1.DualNonceManager(config.provider, smartWalletAddress, config.actpKernelAddress, config.actpKernelDeploymentBlock);
|
|
49
49
|
}
|
|
50
50
|
/**
|
|
51
51
|
* Factory method — computes counterfactual address and checks deployment.
|
|
@@ -118,24 +118,89 @@ class AutoWalletProvider {
|
|
|
118
118
|
*/
|
|
119
119
|
async payACTPBatched(params, prependCalls) {
|
|
120
120
|
return this.nonceManager.enqueue(async ({ entryPointNonce, actpNonce }) => {
|
|
121
|
-
const
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
121
|
+
const MAX_NONCE_BUMPS = 12;
|
|
122
|
+
let candidateNonce = actpNonce;
|
|
123
|
+
for (let i = 0; i <= MAX_NONCE_BUMPS; i++) {
|
|
124
|
+
const batch = (0, TransactionBatcher_1.buildACTPPayBatch)({
|
|
125
|
+
...params,
|
|
126
|
+
actpNonce: candidateNonce,
|
|
127
|
+
});
|
|
128
|
+
// Combine activation calls (if any) with payment calls
|
|
129
|
+
const allCalls = prependCalls && prependCalls.length > 0
|
|
130
|
+
? [...prependCalls, ...batch.calls]
|
|
131
|
+
: batch.calls;
|
|
132
|
+
try {
|
|
133
|
+
const receipt = await this.submitUserOp(allCalls, entryPointNonce);
|
|
134
|
+
if (!receipt.success) {
|
|
135
|
+
const failed = {
|
|
136
|
+
result: {
|
|
137
|
+
txId: batch.txId,
|
|
138
|
+
hash: receipt.hash,
|
|
139
|
+
success: false,
|
|
140
|
+
},
|
|
141
|
+
success: false,
|
|
142
|
+
};
|
|
143
|
+
return failed;
|
|
144
|
+
}
|
|
145
|
+
// Keep local nonce cache aligned with the nonce that actually succeeded.
|
|
146
|
+
this.nonceManager.setCachedActpNonce(candidateNonce + 1n);
|
|
147
|
+
const succeeded = {
|
|
148
|
+
result: {
|
|
149
|
+
txId: batch.txId,
|
|
150
|
+
hash: receipt.hash,
|
|
151
|
+
success: receipt.success,
|
|
152
|
+
},
|
|
153
|
+
success: receipt.success,
|
|
154
|
+
};
|
|
155
|
+
return succeeded;
|
|
156
|
+
}
|
|
157
|
+
catch (error) {
|
|
158
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
159
|
+
// Bundlers may return either plain revert text or ABI-encoded revert data.
|
|
160
|
+
const nonceCollision = /Escrow ID already used/i.test(message)
|
|
161
|
+
|| /457363726f7720494420616c72656164792075736564/i.test(message);
|
|
162
|
+
if (!nonceCollision || i === MAX_NONCE_BUMPS) {
|
|
163
|
+
throw error;
|
|
164
|
+
}
|
|
165
|
+
candidateNonce += 1n;
|
|
166
|
+
Logger_1.sdkLogger.warn('ACTP nonce collision detected during batched pay; retrying with incremented nonce', {
|
|
167
|
+
nextActpNonce: candidateNonce.toString(),
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
throw new Error('Unable to submit batched ACTP payment after nonce retries');
|
|
172
|
+
}, false // payACTPBatched controls ACTP nonce cache explicitly
|
|
173
|
+
);
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Create an ACTP transaction via Smart Wallet (without escrow linking).
|
|
177
|
+
*
|
|
178
|
+
* Encodes just ACTPKernel.createTransaction() as a single-call UserOp.
|
|
179
|
+
* Pre-computes the txId using the same keccak256 formula as the contract.
|
|
180
|
+
* Manages ACTP nonce inside the mutex queue for concurrent safety.
|
|
181
|
+
*/
|
|
182
|
+
async createACTPTransaction(params) {
|
|
183
|
+
const kernelIface = new ethers_1.ethers.Interface([
|
|
184
|
+
'function createTransaction(address provider, address requester, uint256 amount, uint256 deadline, uint256 disputeWindow, bytes32 serviceHash, uint256 agentId)',
|
|
185
|
+
]);
|
|
186
|
+
return this.nonceManager.enqueue(async ({ entryPointNonce, actpNonce }) => {
|
|
187
|
+
const txId = (0, TransactionBatcher_1.computeTransactionId)(params.requester, params.provider, params.amount, params.serviceHash, actpNonce);
|
|
188
|
+
const createTxData = kernelIface.encodeFunctionData('createTransaction', [
|
|
189
|
+
params.provider,
|
|
190
|
+
params.requester,
|
|
191
|
+
BigInt(params.amount),
|
|
192
|
+
params.deadline,
|
|
193
|
+
params.disputeWindow,
|
|
194
|
+
params.serviceHash,
|
|
195
|
+
BigInt(params.agentId || '0'),
|
|
196
|
+
]);
|
|
197
|
+
const calls = [
|
|
198
|
+
{ target: params.contracts.actpKernel, value: 0n, data: createTxData },
|
|
199
|
+
];
|
|
200
|
+
const receipt = await this.submitUserOp(calls, entryPointNonce);
|
|
201
|
+
const result = { txId, receipt };
|
|
202
|
+
return { result, success: receipt.success };
|
|
203
|
+
}, true // createTransaction increments ACTP nonce
|
|
139
204
|
);
|
|
140
205
|
}
|
|
141
206
|
// ==========================================================================
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AutoWalletProvider.js","sourceRoot":"","sources":["../../src/wallet/AutoWalletProvider.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;GAcG;;;AAEH,mCAAgC;
|
|
1
|
+
{"version":3,"file":"AutoWalletProvider.js","sourceRoot":"","sources":["../../src/wallet/AutoWalletProvider.ts"],"names":[],"mappings":"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"}
|
|
@@ -58,6 +58,30 @@ export interface BatchedPayResult {
|
|
|
58
58
|
/** Whether the UserOp succeeded */
|
|
59
59
|
success: boolean;
|
|
60
60
|
}
|
|
61
|
+
/**
|
|
62
|
+
* Parameters for creating an ACTP transaction via Smart Wallet (without escrow).
|
|
63
|
+
*/
|
|
64
|
+
export interface CreateACTPTransactionParams {
|
|
65
|
+
provider: string;
|
|
66
|
+
requester: string;
|
|
67
|
+
amount: string;
|
|
68
|
+
deadline: number;
|
|
69
|
+
disputeWindow: number;
|
|
70
|
+
serviceHash: string;
|
|
71
|
+
agentId: string;
|
|
72
|
+
contracts: {
|
|
73
|
+
actpKernel: string;
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Result of creating an ACTP transaction via Smart Wallet.
|
|
78
|
+
*/
|
|
79
|
+
export interface CreateACTPTransactionResult {
|
|
80
|
+
/** Pre-computed ACTP transaction ID (bytes32) */
|
|
81
|
+
txId: string;
|
|
82
|
+
/** Transaction receipt */
|
|
83
|
+
receipt: TransactionReceipt;
|
|
84
|
+
}
|
|
61
85
|
/**
|
|
62
86
|
* Parameters for batched ACTP payment.
|
|
63
87
|
*/
|
|
@@ -113,5 +137,15 @@ export interface IWalletProvider {
|
|
|
113
137
|
* @returns undefined if batched payments are not supported.
|
|
114
138
|
*/
|
|
115
139
|
payACTPBatched?(params: BatchedPayParams, prependCalls?: import('./aa/constants').SmartWalletCall[]): Promise<BatchedPayResult>;
|
|
140
|
+
/**
|
|
141
|
+
* Create an ACTP transaction via Smart Wallet (without escrow linking).
|
|
142
|
+
*
|
|
143
|
+
* Only available on AA wallets (supportsBatching: true).
|
|
144
|
+
* Handles ACTP nonce management internally via the DualNonceManager mutex.
|
|
145
|
+
*
|
|
146
|
+
* @param params - Transaction creation parameters
|
|
147
|
+
* @returns Pre-computed txId and transaction receipt
|
|
148
|
+
*/
|
|
149
|
+
createACTPTransaction?(params: CreateACTPTransactionParams): Promise<CreateACTPTransactionResult>;
|
|
116
150
|
}
|
|
117
151
|
//# sourceMappingURL=IWalletProvider.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IWalletProvider.d.ts","sourceRoot":"","sources":["../../src/wallet/IWalletProvider.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IACjC,4CAA4C;IAC5C,EAAE,EAAE,MAAM,CAAC;IACX,iCAAiC;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,0DAA0D;IAC1D,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,iDAAiD;IACjD,IAAI,EAAE,MAAM,CAAC;IACb,wCAAwC;IACxC,OAAO,EAAE,OAAO,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,KAAK,CAAC;AAExC;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,qDAAqD;IACrD,OAAO,EAAE,MAAM,CAAC;IAChB,kBAAkB;IAClB,IAAI,EAAE,UAAU,CAAC;IACjB,4EAA4E;IAC5E,gBAAgB,EAAE,OAAO,CAAC;IAC1B,0DAA0D;IAC1D,YAAY,EAAE,OAAO,CAAC;IACtB,eAAe;IACf,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,iDAAiD;IACjD,IAAI,EAAE,MAAM,CAAC;IACb,uCAAuC;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,mCAAmC;IACnC,OAAO,EAAE,OAAO,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE;QACT,IAAI,EAAE,MAAM,CAAC;QACb,UAAU,EAAE,MAAM,CAAC;QACnB,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;CACH;AAMD;;;;;GAKG;AACH,MAAM,WAAW,eAAe;IAC9B;;;OAGG;IACH,UAAU,IAAI,MAAM,CAAC;IAErB;;OAEG;IACH,eAAe,CAAC,EAAE,EAAE,kBAAkB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAErE;;;;;OAKG;IACH,oBAAoB,CAAC,GAAG,EAAE,kBAAkB,EAAE,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAE7E;;OAEG;IACH,aAAa,IAAI,UAAU,CAAC;IAE5B;;;;;;;;;OASG;IACH,cAAc,CAAC,CAAC,MAAM,EAAE,gBAAgB,EAAE,YAAY,CAAC,EAAE,OAAO,gBAAgB,EAAE,eAAe,EAAE,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"IWalletProvider.d.ts","sourceRoot":"","sources":["../../src/wallet/IWalletProvider.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IACjC,4CAA4C;IAC5C,EAAE,EAAE,MAAM,CAAC;IACX,iCAAiC;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,0DAA0D;IAC1D,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,iDAAiD;IACjD,IAAI,EAAE,MAAM,CAAC;IACb,wCAAwC;IACxC,OAAO,EAAE,OAAO,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,KAAK,CAAC;AAExC;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,qDAAqD;IACrD,OAAO,EAAE,MAAM,CAAC;IAChB,kBAAkB;IAClB,IAAI,EAAE,UAAU,CAAC;IACjB,4EAA4E;IAC5E,gBAAgB,EAAE,OAAO,CAAC;IAC1B,0DAA0D;IAC1D,YAAY,EAAE,OAAO,CAAC;IACtB,eAAe;IACf,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,iDAAiD;IACjD,IAAI,EAAE,MAAM,CAAC;IACb,uCAAuC;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,mCAAmC;IACnC,OAAO,EAAE,OAAO,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE;QACT,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,2BAA2B;IAC1C,iDAAiD;IACjD,IAAI,EAAE,MAAM,CAAC;IACb,0BAA0B;IAC1B,OAAO,EAAE,kBAAkB,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE;QACT,IAAI,EAAE,MAAM,CAAC;QACb,UAAU,EAAE,MAAM,CAAC;QACnB,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;CACH;AAMD;;;;;GAKG;AACH,MAAM,WAAW,eAAe;IAC9B;;;OAGG;IACH,UAAU,IAAI,MAAM,CAAC;IAErB;;OAEG;IACH,eAAe,CAAC,EAAE,EAAE,kBAAkB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAErE;;;;;OAKG;IACH,oBAAoB,CAAC,GAAG,EAAE,kBAAkB,EAAE,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAE7E;;OAEG;IACH,aAAa,IAAI,UAAU,CAAC;IAE5B;;;;;;;;;OASG;IACH,cAAc,CAAC,CAAC,MAAM,EAAE,gBAAgB,EAAE,YAAY,CAAC,EAAE,OAAO,gBAAgB,EAAE,eAAe,EAAE,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAEhI;;;;;;;;OAQG;IACH,qBAAqB,CAAC,CAAC,MAAM,EAAE,2BAA2B,GAAG,OAAO,CAAC,2BAA2B,CAAC,CAAC;CACnG"}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SmartWalletRouter - Shared utility for routing state transitions through Smart Wallet.
|
|
3
|
+
*
|
|
4
|
+
* Centralizes the logic for encoding ACTPKernel contract calls as TransactionRequests,
|
|
5
|
+
* validating release preconditions, and verifying attestations. Used by BasicAdapter,
|
|
6
|
+
* StandardAdapter, and ACTPClient to avoid code triplication.
|
|
7
|
+
*
|
|
8
|
+
* @module wallet/SmartWalletRouter
|
|
9
|
+
*/
|
|
10
|
+
import { IWalletProvider, TransactionRequest, TransactionReceipt } from './IWalletProvider';
|
|
11
|
+
import { IACTPRuntime } from '../runtime/IACTPRuntime';
|
|
12
|
+
import { EASHelper } from '../protocol/EASHelper';
|
|
13
|
+
import type { MockTransaction } from '../runtime/types/MockState';
|
|
14
|
+
/**
|
|
15
|
+
* Contract addresses needed for encoding Smart Wallet calls.
|
|
16
|
+
*/
|
|
17
|
+
export interface SmartWalletContractAddresses {
|
|
18
|
+
usdc: string;
|
|
19
|
+
actpKernel: string;
|
|
20
|
+
escrowVault: string;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* SmartWalletRouter centralizes Smart Wallet routing logic.
|
|
24
|
+
*
|
|
25
|
+
* When a wallet provider with batched support is available (ERC-4337 Smart Wallet),
|
|
26
|
+
* state transitions must be sent as UserOps through the wallet provider so that
|
|
27
|
+
* msg.sender equals the Smart Wallet address (not the EOA signer).
|
|
28
|
+
*/
|
|
29
|
+
export declare class SmartWalletRouter {
|
|
30
|
+
private readonly walletProvider;
|
|
31
|
+
private readonly contractAddresses;
|
|
32
|
+
private readonly runtime;
|
|
33
|
+
private readonly easHelper?;
|
|
34
|
+
constructor(walletProvider: IWalletProvider, contractAddresses: SmartWalletContractAddresses, runtime: IACTPRuntime, easHelper?: EASHelper | undefined);
|
|
35
|
+
/**
|
|
36
|
+
* Check if state transitions should route through the wallet provider.
|
|
37
|
+
* True when walletProvider supports batching (i.e., is a Smart Wallet).
|
|
38
|
+
*/
|
|
39
|
+
shouldRoute(): boolean;
|
|
40
|
+
/**
|
|
41
|
+
* Encode a transitionState call as a TransactionRequest.
|
|
42
|
+
*/
|
|
43
|
+
encodeTransitionStateTx(txId: string, stateValue: number, proof?: string): TransactionRequest;
|
|
44
|
+
/**
|
|
45
|
+
* Encode a SETTLED state transition as a TransactionRequest.
|
|
46
|
+
* Mirrors BlockchainRuntime.releaseEscrow() secure settlement flow.
|
|
47
|
+
*/
|
|
48
|
+
encodeSettleTx(txId: string): TransactionRequest;
|
|
49
|
+
/**
|
|
50
|
+
* Send a state transition through the wallet provider and check the receipt.
|
|
51
|
+
*
|
|
52
|
+
* @param txId - Transaction ID
|
|
53
|
+
* @param stateValue - Target state value (from TransactionStateValue enum)
|
|
54
|
+
* @param proof - Optional proof data
|
|
55
|
+
* @param label - Human-readable label for error messages (e.g., "startWork", "deliver")
|
|
56
|
+
* @returns Transaction receipt
|
|
57
|
+
*/
|
|
58
|
+
sendTransition(txId: string, stateValue: number, proof?: string, label?: string): Promise<TransactionReceipt>;
|
|
59
|
+
/**
|
|
60
|
+
* Send a SETTLED transition through the wallet provider.
|
|
61
|
+
*
|
|
62
|
+
* @param txId - Transaction ID
|
|
63
|
+
* @returns Transaction receipt
|
|
64
|
+
*/
|
|
65
|
+
sendSettle(txId: string): Promise<TransactionReceipt>;
|
|
66
|
+
/**
|
|
67
|
+
* Send a linkEscrow call through the wallet provider as a batched UserOp.
|
|
68
|
+
*
|
|
69
|
+
* Encodes USDC.approve(escrowVault, amount) + ACTPKernel.linkEscrow(txId, escrowVault, txId)
|
|
70
|
+
* and submits them as a single atomic batch.
|
|
71
|
+
*
|
|
72
|
+
* @param txId - Transaction ID (bytes32)
|
|
73
|
+
* @param amount - Amount in USDC wei (string)
|
|
74
|
+
* @param usdcAddress - USDC contract address
|
|
75
|
+
* @returns Transaction receipt
|
|
76
|
+
*/
|
|
77
|
+
sendLinkEscrow(txId: string, amount: string, usdcAddress: string): Promise<TransactionReceipt>;
|
|
78
|
+
/**
|
|
79
|
+
* Validate release preconditions (state + dispute window).
|
|
80
|
+
*
|
|
81
|
+
* Handles both mock mode (disputeWindow = duration in seconds) and
|
|
82
|
+
* blockchain mode (disputeWindow = absolute timestamp). Uses a heuristic:
|
|
83
|
+
* values > 1 billion are absolute timestamps, smaller values are durations.
|
|
84
|
+
*
|
|
85
|
+
* @param txOrId - Transaction object or transaction ID to fetch
|
|
86
|
+
* @returns The validated transaction object (avoids double-fetch)
|
|
87
|
+
*/
|
|
88
|
+
validateReleasePreconditions(txOrId: string | MockTransaction): Promise<MockTransaction>;
|
|
89
|
+
/**
|
|
90
|
+
* Verify/require attestation for wallet-routed release calls.
|
|
91
|
+
*
|
|
92
|
+
* Includes txId cross-check to prevent attestation replay attacks:
|
|
93
|
+
* ensures the provided attestation belongs to the transaction being released.
|
|
94
|
+
*
|
|
95
|
+
* @param txId - Transaction ID being released
|
|
96
|
+
* @param attestationUID - Optional attestation UID
|
|
97
|
+
*/
|
|
98
|
+
verifyReleaseAttestation(txId: string, attestationUID?: string): Promise<void>;
|
|
99
|
+
/**
|
|
100
|
+
* Extract txId from escrowId, handling legacy format.
|
|
101
|
+
*
|
|
102
|
+
* @param escrowId - Escrow ID (may be txId or legacy "escrow-{txId}-{timestamp}" format)
|
|
103
|
+
* @returns The txId
|
|
104
|
+
*/
|
|
105
|
+
static extractTxId(escrowId: string): string;
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Compute the absolute end-time of the dispute window.
|
|
109
|
+
*
|
|
110
|
+
* Handles both representations transparently:
|
|
111
|
+
* - **Mock mode**: `disputeWindow` is a duration in seconds → `completedAt + disputeWindow`
|
|
112
|
+
* - **Blockchain mode**: `disputeWindow` is an absolute timestamp from on-chain → used as-is
|
|
113
|
+
*
|
|
114
|
+
* Heuristic: values > 1 billion are absolute timestamps (post-2001 epoch).
|
|
115
|
+
* Dispute window durations max at 30 days (~2.6M seconds). No overlap.
|
|
116
|
+
*
|
|
117
|
+
* @param completedAt - Delivery timestamp (0 in blockchain V1, real value in mock/V2)
|
|
118
|
+
* @param disputeWindow - Duration in seconds (mock) or absolute timestamp (blockchain)
|
|
119
|
+
* @returns Absolute timestamp when dispute window ends
|
|
120
|
+
*/
|
|
121
|
+
export declare function computeDisputeWindowEnds(completedAt: number, disputeWindow: number): number;
|
|
122
|
+
/**
|
|
123
|
+
* Factory function to create a SmartWalletRouter if wallet provider supports batching.
|
|
124
|
+
*
|
|
125
|
+
* @returns SmartWalletRouter instance if Smart Wallet is available, undefined otherwise
|
|
126
|
+
*/
|
|
127
|
+
export declare function createSmartWalletRouter(walletProvider?: IWalletProvider, contractAddresses?: SmartWalletContractAddresses, runtime?: IACTPRuntime, easHelper?: EASHelper): SmartWalletRouter | undefined;
|
|
128
|
+
//# sourceMappingURL=SmartWalletRouter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SmartWalletRouter.d.ts","sourceRoot":"","sources":["../../src/wallet/SmartWalletRouter.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAC5F,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAElD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAuBlE;;GAEG;AACH,MAAM,WAAW,4BAA4B;IAC3C,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;GAMG;AACH,qBAAa,iBAAiB;IAE1B,OAAO,CAAC,QAAQ,CAAC,cAAc;IAC/B,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAClC,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC;gBAHV,cAAc,EAAE,eAAe,EAC/B,iBAAiB,EAAE,4BAA4B,EAC/C,OAAO,EAAE,YAAY,EACrB,SAAS,CAAC,uBAAW;IAGxC;;;OAGG;IACH,WAAW,IAAI,OAAO;IAItB;;OAEG;IACH,uBAAuB,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,GAAE,MAAa,GAAG,kBAAkB;IAOnG;;;OAGG;IACH,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,kBAAkB;IAIhD;;;;;;;;OAQG;IACG,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,GAAE,MAAa,EAAE,KAAK,GAAE,MAA0B,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAS5I;;;;;OAKG;IACG,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAS3D;;;;;;;;;;OAUG;IACG,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC;IA0BpG;;;;;;;;;OASG;IACG,4BAA4B,CAAC,MAAM,EAAE,MAAM,GAAG,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC;IA2C9F;;;;;;;;OAQG;IACG,wBAAwB,CAAC,IAAI,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA2BpF;;;;;OAKG;IACH,MAAM,CAAC,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;CAI7C;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,wBAAwB,CAAC,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,MAAM,CAO3F;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CACrC,cAAc,CAAC,EAAE,eAAe,EAChC,iBAAiB,CAAC,EAAE,4BAA4B,EAChD,OAAO,CAAC,EAAE,YAAY,EACtB,SAAS,CAAC,EAAE,SAAS,GACpB,iBAAiB,GAAG,SAAS,CAK/B"}
|
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* SmartWalletRouter - Shared utility for routing state transitions through Smart Wallet.
|
|
4
|
+
*
|
|
5
|
+
* Centralizes the logic for encoding ACTPKernel contract calls as TransactionRequests,
|
|
6
|
+
* validating release preconditions, and verifying attestations. Used by BasicAdapter,
|
|
7
|
+
* StandardAdapter, and ACTPClient to avoid code triplication.
|
|
8
|
+
*
|
|
9
|
+
* @module wallet/SmartWalletRouter
|
|
10
|
+
*/
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.createSmartWalletRouter = exports.computeDisputeWindowEnds = exports.SmartWalletRouter = void 0;
|
|
13
|
+
const ethers_1 = require("ethers");
|
|
14
|
+
const MockState_1 = require("../runtime/types/MockState");
|
|
15
|
+
/**
|
|
16
|
+
* Pre-compiled ABI interface for ACTPKernel.transitionState().
|
|
17
|
+
* Module-level constant to avoid re-instantiation on every call.
|
|
18
|
+
*/
|
|
19
|
+
const ACTP_KERNEL_IFACE = new ethers_1.ethers.Interface([
|
|
20
|
+
'function transitionState(bytes32 transactionId, uint8 newState, bytes proof)',
|
|
21
|
+
'function linkEscrow(bytes32 txId, address escrowVault, bytes32 escrowId)',
|
|
22
|
+
]);
|
|
23
|
+
const ERC20_IFACE = new ethers_1.ethers.Interface([
|
|
24
|
+
'function approve(address spender, uint256 amount)',
|
|
25
|
+
]);
|
|
26
|
+
/**
|
|
27
|
+
* Threshold to distinguish absolute timestamps from durations.
|
|
28
|
+
* Dispute window durations max at 30 days (~2.6M seconds).
|
|
29
|
+
* Absolute timestamps (post-2001) are > 1 billion.
|
|
30
|
+
* There's no overlap between these ranges.
|
|
31
|
+
*/
|
|
32
|
+
const ABSOLUTE_TIMESTAMP_THRESHOLD = 1000000000;
|
|
33
|
+
/**
|
|
34
|
+
* SmartWalletRouter centralizes Smart Wallet routing logic.
|
|
35
|
+
*
|
|
36
|
+
* When a wallet provider with batched support is available (ERC-4337 Smart Wallet),
|
|
37
|
+
* state transitions must be sent as UserOps through the wallet provider so that
|
|
38
|
+
* msg.sender equals the Smart Wallet address (not the EOA signer).
|
|
39
|
+
*/
|
|
40
|
+
class SmartWalletRouter {
|
|
41
|
+
constructor(walletProvider, contractAddresses, runtime, easHelper) {
|
|
42
|
+
this.walletProvider = walletProvider;
|
|
43
|
+
this.contractAddresses = contractAddresses;
|
|
44
|
+
this.runtime = runtime;
|
|
45
|
+
this.easHelper = easHelper;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Check if state transitions should route through the wallet provider.
|
|
49
|
+
* True when walletProvider supports batching (i.e., is a Smart Wallet).
|
|
50
|
+
*/
|
|
51
|
+
shouldRoute() {
|
|
52
|
+
return !!this.walletProvider.payACTPBatched;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Encode a transitionState call as a TransactionRequest.
|
|
56
|
+
*/
|
|
57
|
+
encodeTransitionStateTx(txId, stateValue, proof = '0x') {
|
|
58
|
+
return {
|
|
59
|
+
to: this.contractAddresses.actpKernel,
|
|
60
|
+
data: ACTP_KERNEL_IFACE.encodeFunctionData('transitionState', [txId, stateValue, proof]),
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Encode a SETTLED state transition as a TransactionRequest.
|
|
65
|
+
* Mirrors BlockchainRuntime.releaseEscrow() secure settlement flow.
|
|
66
|
+
*/
|
|
67
|
+
encodeSettleTx(txId) {
|
|
68
|
+
return this.encodeTransitionStateTx(txId, MockState_1.TransactionStateValue.SETTLED, '0x');
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Send a state transition through the wallet provider and check the receipt.
|
|
72
|
+
*
|
|
73
|
+
* @param txId - Transaction ID
|
|
74
|
+
* @param stateValue - Target state value (from TransactionStateValue enum)
|
|
75
|
+
* @param proof - Optional proof data
|
|
76
|
+
* @param label - Human-readable label for error messages (e.g., "startWork", "deliver")
|
|
77
|
+
* @returns Transaction receipt
|
|
78
|
+
*/
|
|
79
|
+
async sendTransition(txId, stateValue, proof = '0x', label = 'transitionState') {
|
|
80
|
+
const tx = this.encodeTransitionStateTx(txId, stateValue, proof);
|
|
81
|
+
const receipt = await this.walletProvider.sendTransaction(tx);
|
|
82
|
+
if (!receipt.success) {
|
|
83
|
+
throw new Error(`${label} UserOp failed: ${receipt.hash}`);
|
|
84
|
+
}
|
|
85
|
+
return receipt;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Send a SETTLED transition through the wallet provider.
|
|
89
|
+
*
|
|
90
|
+
* @param txId - Transaction ID
|
|
91
|
+
* @returns Transaction receipt
|
|
92
|
+
*/
|
|
93
|
+
async sendSettle(txId) {
|
|
94
|
+
const tx = this.encodeSettleTx(txId);
|
|
95
|
+
const receipt = await this.walletProvider.sendTransaction(tx);
|
|
96
|
+
if (!receipt.success) {
|
|
97
|
+
throw new Error(`release UserOp failed: ${receipt.hash}`);
|
|
98
|
+
}
|
|
99
|
+
return receipt;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Send a linkEscrow call through the wallet provider as a batched UserOp.
|
|
103
|
+
*
|
|
104
|
+
* Encodes USDC.approve(escrowVault, amount) + ACTPKernel.linkEscrow(txId, escrowVault, txId)
|
|
105
|
+
* and submits them as a single atomic batch.
|
|
106
|
+
*
|
|
107
|
+
* @param txId - Transaction ID (bytes32)
|
|
108
|
+
* @param amount - Amount in USDC wei (string)
|
|
109
|
+
* @param usdcAddress - USDC contract address
|
|
110
|
+
* @returns Transaction receipt
|
|
111
|
+
*/
|
|
112
|
+
async sendLinkEscrow(txId, amount, usdcAddress) {
|
|
113
|
+
const amountBn = BigInt(amount);
|
|
114
|
+
const approveData = ERC20_IFACE.encodeFunctionData('approve', [
|
|
115
|
+
this.contractAddresses.escrowVault,
|
|
116
|
+
amountBn,
|
|
117
|
+
]);
|
|
118
|
+
const linkEscrowData = ACTP_KERNEL_IFACE.encodeFunctionData('linkEscrow', [
|
|
119
|
+
txId,
|
|
120
|
+
this.contractAddresses.escrowVault,
|
|
121
|
+
txId, // escrowId = txId (ACTP standard)
|
|
122
|
+
]);
|
|
123
|
+
const txs = [
|
|
124
|
+
{ to: usdcAddress, data: approveData },
|
|
125
|
+
{ to: this.contractAddresses.actpKernel, data: linkEscrowData },
|
|
126
|
+
];
|
|
127
|
+
const receipt = await this.walletProvider.sendBatchTransaction(txs);
|
|
128
|
+
if (!receipt.success) {
|
|
129
|
+
throw new Error(`linkEscrow UserOp failed: ${receipt.hash}`);
|
|
130
|
+
}
|
|
131
|
+
return receipt;
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Validate release preconditions (state + dispute window).
|
|
135
|
+
*
|
|
136
|
+
* Handles both mock mode (disputeWindow = duration in seconds) and
|
|
137
|
+
* blockchain mode (disputeWindow = absolute timestamp). Uses a heuristic:
|
|
138
|
+
* values > 1 billion are absolute timestamps, smaller values are durations.
|
|
139
|
+
*
|
|
140
|
+
* @param txOrId - Transaction object or transaction ID to fetch
|
|
141
|
+
* @returns The validated transaction object (avoids double-fetch)
|
|
142
|
+
*/
|
|
143
|
+
async validateReleasePreconditions(txOrId) {
|
|
144
|
+
const tx = typeof txOrId === 'string'
|
|
145
|
+
? await this.runtime.getTransaction(txOrId)
|
|
146
|
+
: txOrId;
|
|
147
|
+
const txId = typeof txOrId === 'string' ? txOrId : txOrId.id;
|
|
148
|
+
if (!tx) {
|
|
149
|
+
throw new Error(`Transaction ${txId} not found`);
|
|
150
|
+
}
|
|
151
|
+
if (tx.state !== 'DELIVERED') {
|
|
152
|
+
throw new Error(`Cannot release escrow: transaction ${txId} is in state ${tx.state}, expected DELIVERED.`);
|
|
153
|
+
}
|
|
154
|
+
// Dispute window check.
|
|
155
|
+
// Requester is allowed to approve early release before dispute window end.
|
|
156
|
+
// Mock mode: completedAt = delivery timestamp, disputeWindow = duration in seconds.
|
|
157
|
+
// Blockchain mode: completedAt = 0 (V1), disputeWindow = absolute timestamp from chain.
|
|
158
|
+
// Heuristic: if disputeWindow > 1 billion, it's an absolute timestamp (post-2001).
|
|
159
|
+
if (tx.completedAt !== null && tx.completedAt !== undefined) {
|
|
160
|
+
const disputeWindowEnds = computeDisputeWindowEnds(tx.completedAt, tx.disputeWindow);
|
|
161
|
+
const now = this.runtime.time.now();
|
|
162
|
+
if (now < disputeWindowEnds) {
|
|
163
|
+
const caller = this.walletProvider.getAddress().toLowerCase();
|
|
164
|
+
const requester = tx.requester.toLowerCase();
|
|
165
|
+
const isRequester = caller === requester;
|
|
166
|
+
if (!isRequester) {
|
|
167
|
+
const remaining = disputeWindowEnds - now;
|
|
168
|
+
throw new Error(`Cannot release escrow: dispute window still active for transaction ${txId}. ` +
|
|
169
|
+
`Window expires in ${remaining} seconds.`);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
return tx;
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Verify/require attestation for wallet-routed release calls.
|
|
177
|
+
*
|
|
178
|
+
* Includes txId cross-check to prevent attestation replay attacks:
|
|
179
|
+
* ensures the provided attestation belongs to the transaction being released.
|
|
180
|
+
*
|
|
181
|
+
* @param txId - Transaction ID being released
|
|
182
|
+
* @param attestationUID - Optional attestation UID
|
|
183
|
+
*/
|
|
184
|
+
async verifyReleaseAttestation(txId, attestationUID) {
|
|
185
|
+
const runtimeAny = this.runtime;
|
|
186
|
+
const runtimeSupportsAttestationFlag = typeof runtimeAny?.isAttestationRequired === 'function';
|
|
187
|
+
const attestationRequired = runtimeSupportsAttestationFlag
|
|
188
|
+
? Boolean(runtimeAny.isAttestationRequired())
|
|
189
|
+
: Boolean(this.easHelper);
|
|
190
|
+
if (attestationRequired && !attestationUID) {
|
|
191
|
+
throw new Error('Attestation verification is REQUIRED for escrow release. ' +
|
|
192
|
+
'Provide attestationUID when using Smart Wallet release.');
|
|
193
|
+
}
|
|
194
|
+
if (attestationRequired && !this.easHelper) {
|
|
195
|
+
throw new Error('Attestation verification is required but EAS helper is not initialized.');
|
|
196
|
+
}
|
|
197
|
+
if (attestationUID && this.easHelper) {
|
|
198
|
+
await this.easHelper.verifyAndRecordForRelease(txId, attestationUID);
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Extract txId from escrowId, handling legacy format.
|
|
203
|
+
*
|
|
204
|
+
* @param escrowId - Escrow ID (may be txId or legacy "escrow-{txId}-{timestamp}" format)
|
|
205
|
+
* @returns The txId
|
|
206
|
+
*/
|
|
207
|
+
static extractTxId(escrowId) {
|
|
208
|
+
const legacyMatch = escrowId.match(/^escrow-(.+)-\d+$/);
|
|
209
|
+
return legacyMatch ? legacyMatch[1] : escrowId;
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
exports.SmartWalletRouter = SmartWalletRouter;
|
|
213
|
+
/**
|
|
214
|
+
* Compute the absolute end-time of the dispute window.
|
|
215
|
+
*
|
|
216
|
+
* Handles both representations transparently:
|
|
217
|
+
* - **Mock mode**: `disputeWindow` is a duration in seconds → `completedAt + disputeWindow`
|
|
218
|
+
* - **Blockchain mode**: `disputeWindow` is an absolute timestamp from on-chain → used as-is
|
|
219
|
+
*
|
|
220
|
+
* Heuristic: values > 1 billion are absolute timestamps (post-2001 epoch).
|
|
221
|
+
* Dispute window durations max at 30 days (~2.6M seconds). No overlap.
|
|
222
|
+
*
|
|
223
|
+
* @param completedAt - Delivery timestamp (0 in blockchain V1, real value in mock/V2)
|
|
224
|
+
* @param disputeWindow - Duration in seconds (mock) or absolute timestamp (blockchain)
|
|
225
|
+
* @returns Absolute timestamp when dispute window ends
|
|
226
|
+
*/
|
|
227
|
+
function computeDisputeWindowEnds(completedAt, disputeWindow) {
|
|
228
|
+
if (disputeWindow > ABSOLUTE_TIMESTAMP_THRESHOLD) {
|
|
229
|
+
// Blockchain mode: disputeWindow IS the absolute end timestamp
|
|
230
|
+
return disputeWindow;
|
|
231
|
+
}
|
|
232
|
+
// Mock mode: disputeWindow is a duration relative to completedAt
|
|
233
|
+
return completedAt + disputeWindow;
|
|
234
|
+
}
|
|
235
|
+
exports.computeDisputeWindowEnds = computeDisputeWindowEnds;
|
|
236
|
+
/**
|
|
237
|
+
* Factory function to create a SmartWalletRouter if wallet provider supports batching.
|
|
238
|
+
*
|
|
239
|
+
* @returns SmartWalletRouter instance if Smart Wallet is available, undefined otherwise
|
|
240
|
+
*/
|
|
241
|
+
function createSmartWalletRouter(walletProvider, contractAddresses, runtime, easHelper) {
|
|
242
|
+
if (walletProvider?.payACTPBatched && contractAddresses && runtime) {
|
|
243
|
+
return new SmartWalletRouter(walletProvider, contractAddresses, runtime, easHelper);
|
|
244
|
+
}
|
|
245
|
+
return undefined;
|
|
246
|
+
}
|
|
247
|
+
exports.createSmartWalletRouter = createSmartWalletRouter;
|
|
248
|
+
//# sourceMappingURL=SmartWalletRouter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SmartWalletRouter.js","sourceRoot":"","sources":["../../src/wallet/SmartWalletRouter.ts"],"names":[],"mappings":"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"}
|
|
@@ -20,7 +20,11 @@ export declare class DualNonceManager {
|
|
|
20
20
|
private readonly mutex;
|
|
21
21
|
/** Locally cached ACTP nonce — undefined means "re-read from chain" */
|
|
22
22
|
private cachedActpNonce;
|
|
23
|
-
|
|
23
|
+
/** Cached deployment block for ACTPKernel address */
|
|
24
|
+
private cachedKernelDeploymentBlock;
|
|
25
|
+
/** Whether the cached deployment block hint has been validated against the chain */
|
|
26
|
+
private deploymentBlockValidated;
|
|
27
|
+
constructor(provider: ethers.JsonRpcProvider, senderAddress: string, actpKernelAddress: string, knownDeploymentBlock?: number);
|
|
24
28
|
/**
|
|
25
29
|
* Execute a callback while holding the nonce mutex.
|
|
26
30
|
*
|
|
@@ -52,5 +56,26 @@ export declare class DualNonceManager {
|
|
|
52
56
|
* Invalidate cached ACTP nonce (forces re-read on next operation).
|
|
53
57
|
*/
|
|
54
58
|
invalidateCache(): void;
|
|
59
|
+
/**
|
|
60
|
+
* Override cached ACTP nonce.
|
|
61
|
+
*
|
|
62
|
+
* Used when caller deterministically advances nonce (e.g. retrying batched
|
|
63
|
+
* creation after "Escrow ID already used" simulation failures).
|
|
64
|
+
*/
|
|
65
|
+
setCachedActpNonce(nonce: bigint): void;
|
|
66
|
+
/**
|
|
67
|
+
* Find contract deployment block using binary search on getCode().
|
|
68
|
+
*
|
|
69
|
+
* If a knownDeploymentBlock was provided at construction, it is validated
|
|
70
|
+
* once by checking getCode() at that block. On mismatch the cache is
|
|
71
|
+
* discarded and the full binary search runs as fallback.
|
|
72
|
+
*/
|
|
73
|
+
private findContractDeploymentBlock;
|
|
74
|
+
/**
|
|
75
|
+
* Count TransactionCreated logs for requester in chunks.
|
|
76
|
+
*
|
|
77
|
+
* Chunking avoids RPC range limits on providers that reject very large log windows.
|
|
78
|
+
*/
|
|
79
|
+
private countRequesterTransactionCreatedEvents;
|
|
55
80
|
}
|
|
56
81
|
//# sourceMappingURL=DualNonceManager.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DualNonceManager.d.ts","sourceRoot":"","sources":["../../../src/wallet/aa/DualNonceManager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"DualNonceManager.d.ts","sourceRoot":"","sources":["../../../src/wallet/aa/DualNonceManager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAsDhC,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAyB;IAClD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IACvC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAS;IAC3C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAe;IAErC,uEAAuE;IACvE,OAAO,CAAC,eAAe,CAAqB;IAC5C,qDAAqD;IACrD,OAAO,CAAC,2BAA2B,CAAqB;IACxD,oFAAoF;IACpF,OAAO,CAAC,wBAAwB,CAAS;gBAGvC,QAAQ,EAAE,MAAM,CAAC,eAAe,EAChC,aAAa,EAAE,MAAM,EACrB,iBAAiB,EAAE,MAAM,EACzB,oBAAoB,CAAC,EAAE,MAAM;IAU/B;;;;;;;;OAQG;IACG,OAAO,CAAC,CAAC,EACb,EAAE,EAAE,CAAC,MAAM,EAAE;QAAE,eAAe,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,KAAK,OAAO,CAAC;QACtE,MAAM,EAAE,CAAC,CAAC;QACV,OAAO,EAAE,OAAO,CAAC;KAClB,CAAC,EACF,mBAAmB,GAAE,OAAc,GAClC,OAAO,CAAC,CAAC,CAAC;IA+Bb;;;OAGG;YACW,mBAAmB;IASjC;;;;OAIG;YACW,aAAa;IAgD3B;;OAEG;IACH,eAAe,IAAI,IAAI;IAIvB;;;;;OAKG;IACH,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAIvC;;;;;;OAMG;YACW,2BAA2B;IA2DzC;;;;OAIG;YACW,sCAAsC;CA0CrD"}
|