@agirails/sdk 2.0.0 → 2.0.1-beta
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 +108 -116
- package/dist/ACTPClient.d.ts +33 -456
- package/dist/ACTPClient.d.ts.map +1 -1
- package/dist/ACTPClient.js +93 -477
- package/dist/ACTPClient.js.map +1 -1
- package/dist/abi/EscrowVault.json +38 -106
- package/dist/builders/DeliveryProofBuilder.d.ts +1 -60
- package/dist/builders/DeliveryProofBuilder.d.ts.map +1 -1
- package/dist/builders/DeliveryProofBuilder.js +5 -81
- package/dist/builders/DeliveryProofBuilder.js.map +1 -1
- package/dist/builders/QuoteBuilder.d.ts +0 -101
- package/dist/builders/QuoteBuilder.d.ts.map +1 -1
- package/dist/builders/QuoteBuilder.js +3 -120
- package/dist/builders/QuoteBuilder.js.map +1 -1
- package/dist/builders/index.d.ts +0 -4
- package/dist/builders/index.d.ts.map +1 -1
- package/dist/builders/index.js +0 -4
- package/dist/builders/index.js.map +1 -1
- package/dist/config/networks.d.ts +0 -28
- package/dist/config/networks.d.ts.map +1 -1
- package/dist/config/networks.js +12 -60
- package/dist/config/networks.js.map +1 -1
- package/dist/errors/index.d.ts +2 -165
- package/dist/errors/index.d.ts.map +1 -1
- package/dist/errors/index.js +2 -260
- package/dist/errors/index.js.map +1 -1
- package/dist/index.d.ts +13 -61
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +36 -141
- package/dist/index.js.map +1 -1
- package/dist/protocol/ACTPKernel.d.ts +2 -229
- package/dist/protocol/ACTPKernel.d.ts.map +1 -1
- package/dist/protocol/ACTPKernel.js +33 -367
- package/dist/protocol/ACTPKernel.js.map +1 -1
- package/dist/protocol/EASHelper.d.ts +2 -57
- package/dist/protocol/EASHelper.d.ts.map +1 -1
- package/dist/protocol/EASHelper.js +37 -230
- package/dist/protocol/EASHelper.js.map +1 -1
- package/dist/protocol/EscrowVault.d.ts +2 -93
- package/dist/protocol/EscrowVault.d.ts.map +1 -1
- package/dist/protocol/EscrowVault.js +33 -122
- package/dist/protocol/EscrowVault.js.map +1 -1
- package/dist/protocol/EventMonitor.d.ts +1 -45
- package/dist/protocol/EventMonitor.d.ts.map +1 -1
- package/dist/protocol/EventMonitor.js +8 -64
- package/dist/protocol/EventMonitor.js.map +1 -1
- package/dist/protocol/MessageSigner.d.ts +2 -116
- package/dist/protocol/MessageSigner.d.ts.map +1 -1
- package/dist/protocol/MessageSigner.js +9 -215
- package/dist/protocol/MessageSigner.js.map +1 -1
- package/dist/protocol/ProofGenerator.d.ts +0 -93
- package/dist/protocol/ProofGenerator.d.ts.map +1 -1
- package/dist/protocol/ProofGenerator.js +9 -194
- package/dist/protocol/ProofGenerator.js.map +1 -1
- package/dist/protocol/QuoteBuilder.d.ts +0 -8
- package/dist/protocol/QuoteBuilder.d.ts.map +1 -1
- package/dist/protocol/QuoteBuilder.js +0 -8
- package/dist/protocol/QuoteBuilder.js.map +1 -1
- package/dist/types/eip712.d.ts +0 -34
- package/dist/types/eip712.d.ts.map +1 -1
- package/dist/types/eip712.js +5 -31
- package/dist/types/eip712.js.map +1 -1
- package/dist/types/escrow.d.ts +10 -17
- package/dist/types/escrow.d.ts.map +1 -1
- package/dist/types/index.d.ts +0 -5
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +0 -8
- package/dist/types/index.js.map +1 -1
- package/dist/types/message.d.ts +0 -32
- package/dist/types/message.d.ts.map +1 -1
- package/dist/types/message.js +0 -4
- package/dist/types/message.js.map +1 -1
- package/dist/types/state.d.ts +0 -28
- package/dist/types/state.d.ts.map +1 -1
- package/dist/types/state.js +6 -37
- package/dist/types/state.js.map +1 -1
- package/dist/types/transaction.d.ts +0 -17
- package/dist/types/transaction.d.ts.map +1 -1
- package/dist/utils/IPFSClient.d.ts +0 -113
- package/dist/utils/IPFSClient.d.ts.map +1 -1
- package/dist/utils/IPFSClient.js +7 -128
- package/dist/utils/IPFSClient.js.map +1 -1
- package/dist/utils/NonceManager.d.ts +1 -234
- package/dist/utils/NonceManager.d.ts.map +1 -1
- package/dist/utils/NonceManager.js +7 -372
- package/dist/utils/NonceManager.js.map +1 -1
- package/dist/utils/ReceivedNonceTracker.d.ts +0 -175
- package/dist/utils/ReceivedNonceTracker.d.ts.map +1 -1
- package/dist/utils/ReceivedNonceTracker.js +5 -261
- package/dist/utils/ReceivedNonceTracker.js.map +1 -1
- package/dist/utils/canonicalJson.d.ts +0 -22
- package/dist/utils/canonicalJson.d.ts.map +1 -1
- package/dist/utils/canonicalJson.js +3 -26
- package/dist/utils/canonicalJson.js.map +1 -1
- package/dist/utils/computeTypeHash.d.ts +0 -14
- package/dist/utils/computeTypeHash.d.ts.map +1 -1
- package/dist/utils/computeTypeHash.js +2 -19
- package/dist/utils/computeTypeHash.js.map +1 -1
- package/dist/utils/validation.d.ts +0 -40
- package/dist/utils/validation.d.ts.map +1 -1
- package/dist/utils/validation.js +7 -184
- package/dist/utils/validation.js.map +1 -1
- package/package.json +37 -54
- package/src/ACTPClient.ts +178 -692
- package/src/__tests__/ProofGenerator.test.ts +124 -0
- package/src/__tests__/QuoteBuilder.test.ts +516 -0
- package/src/__tests__/StateMachine.test.ts +82 -0
- package/src/__tests__/builders/DeliveryProofBuilder.test.ts +581 -0
- package/src/__tests__/integration/ACTPClient.test.ts +263 -0
- package/src/__tests__/integration.test.ts +289 -0
- package/src/__tests__/protocol/EASHelper.test.ts +472 -0
- package/src/__tests__/protocol/EventMonitor.test.ts +382 -0
- package/src/__tests__/security/ACTPKernel.security.test.ts +1167 -0
- package/src/__tests__/security/EscrowVault.security.test.ts +570 -0
- package/src/__tests__/security/MessageSigner.security.test.ts +286 -0
- package/src/__tests__/security/NonceReplay.security.test.ts +501 -0
- package/src/__tests__/security/validation.security.test.ts +376 -0
- package/src/__tests__/utils/IPFSClient.test.ts +262 -0
- package/src/__tests__/utils/NonceManager.test.ts +205 -0
- package/src/__tests__/utils/canonicalJson.test.ts +153 -0
- package/src/abi/EscrowVault.json +38 -106
- package/src/builders/DeliveryProofBuilder.ts +2 -3
- package/src/config/networks.ts +9 -32
- package/src/errors/index.ts +1 -298
- package/src/index.ts +71 -207
- package/src/protocol/ACTPKernel.ts +23 -175
- package/src/protocol/EASHelper.ts +46 -230
- package/src/protocol/EscrowVault.ts +50 -68
- package/src/protocol/EventMonitor.ts +15 -44
- package/src/protocol/MessageSigner.ts +13 -193
- package/src/protocol/ProofGenerator.ts +4 -223
- package/src/types/escrow.ts +11 -12
- package/src/types/index.ts +1 -5
- package/src/types/state.ts +3 -12
- package/src/types/transaction.ts +1 -4
- package/src/utils/IPFSClient.ts +5 -122
- package/src/utils/NonceManager.ts +8 -305
- package/src/utils/ReceivedNonceTracker.ts +0 -170
- package/src/utils/validation.ts +0 -164
- package/LICENSE +0 -190
- package/bin/actp +0 -10
- package/dist/abi/AgentRegistry.json +0 -782
- package/dist/abi/IdentityRegistry.json +0 -316
- package/dist/adapters/BaseAdapter.d.ts +0 -231
- package/dist/adapters/BaseAdapter.d.ts.map +0 -1
- package/dist/adapters/BaseAdapter.js +0 -393
- package/dist/adapters/BaseAdapter.js.map +0 -1
- package/dist/adapters/BeginnerAdapter.d.ts +0 -152
- package/dist/adapters/BeginnerAdapter.d.ts.map +0 -1
- package/dist/adapters/BeginnerAdapter.js +0 -168
- package/dist/adapters/BeginnerAdapter.js.map +0 -1
- package/dist/adapters/IntermediateAdapter.d.ts +0 -211
- package/dist/adapters/IntermediateAdapter.d.ts.map +0 -1
- package/dist/adapters/IntermediateAdapter.js +0 -260
- package/dist/adapters/IntermediateAdapter.js.map +0 -1
- package/dist/adapters/index.d.ts +0 -15
- package/dist/adapters/index.d.ts.map +0 -1
- package/dist/adapters/index.js +0 -26
- package/dist/adapters/index.js.map +0 -1
- package/dist/cli/commands/balance.d.ts +0 -13
- package/dist/cli/commands/balance.d.ts.map +0 -1
- package/dist/cli/commands/balance.js +0 -89
- package/dist/cli/commands/balance.js.map +0 -1
- package/dist/cli/commands/batch.d.ts +0 -24
- package/dist/cli/commands/batch.d.ts.map +0 -1
- package/dist/cli/commands/batch.js +0 -424
- package/dist/cli/commands/batch.js.map +0 -1
- package/dist/cli/commands/config.d.ts +0 -13
- package/dist/cli/commands/config.d.ts.map +0 -1
- package/dist/cli/commands/config.js +0 -192
- package/dist/cli/commands/config.js.map +0 -1
- package/dist/cli/commands/init.d.ts +0 -19
- package/dist/cli/commands/init.d.ts.map +0 -1
- package/dist/cli/commands/init.js +0 -143
- package/dist/cli/commands/init.js.map +0 -1
- package/dist/cli/commands/mint.d.ts +0 -13
- package/dist/cli/commands/mint.d.ts.map +0 -1
- package/dist/cli/commands/mint.js +0 -91
- package/dist/cli/commands/mint.js.map +0 -1
- package/dist/cli/commands/pay.d.ts +0 -18
- package/dist/cli/commands/pay.d.ts.map +0 -1
- package/dist/cli/commands/pay.js +0 -87
- package/dist/cli/commands/pay.js.map +0 -1
- package/dist/cli/commands/simulate.d.ts +0 -32
- package/dist/cli/commands/simulate.d.ts.map +0 -1
- package/dist/cli/commands/simulate.js +0 -290
- package/dist/cli/commands/simulate.js.map +0 -1
- package/dist/cli/commands/time.d.ts +0 -29
- package/dist/cli/commands/time.d.ts.map +0 -1
- package/dist/cli/commands/time.js +0 -252
- package/dist/cli/commands/time.js.map +0 -1
- package/dist/cli/commands/tx.d.ts +0 -16
- package/dist/cli/commands/tx.d.ts.map +0 -1
- package/dist/cli/commands/tx.js +0 -379
- package/dist/cli/commands/tx.js.map +0 -1
- package/dist/cli/commands/watch.d.ts +0 -20
- package/dist/cli/commands/watch.d.ts.map +0 -1
- package/dist/cli/commands/watch.js +0 -160
- package/dist/cli/commands/watch.js.map +0 -1
- package/dist/cli/index.d.ts +0 -17
- package/dist/cli/index.d.ts.map +0 -1
- package/dist/cli/index.js +0 -104
- package/dist/cli/index.js.map +0 -1
- package/dist/cli/utils/client.d.ts +0 -70
- package/dist/cli/utils/client.d.ts.map +0 -1
- package/dist/cli/utils/client.js +0 -240
- package/dist/cli/utils/client.js.map +0 -1
- package/dist/cli/utils/config.d.ts +0 -91
- package/dist/cli/utils/config.d.ts.map +0 -1
- package/dist/cli/utils/config.js +0 -240
- package/dist/cli/utils/config.js.map +0 -1
- package/dist/cli/utils/output.d.ts +0 -174
- package/dist/cli/utils/output.d.ts.map +0 -1
- package/dist/cli/utils/output.js +0 -380
- package/dist/cli/utils/output.js.map +0 -1
- package/dist/level0/Provider.d.ts +0 -106
- package/dist/level0/Provider.d.ts.map +0 -1
- package/dist/level0/Provider.js +0 -10
- package/dist/level0/Provider.js.map +0 -1
- package/dist/level0/ServiceDirectory.d.ts +0 -74
- package/dist/level0/ServiceDirectory.d.ts.map +0 -1
- package/dist/level0/ServiceDirectory.js +0 -122
- package/dist/level0/ServiceDirectory.js.map +0 -1
- package/dist/level0/index.d.ts +0 -10
- package/dist/level0/index.d.ts.map +0 -1
- package/dist/level0/index.js +0 -15
- package/dist/level0/index.js.map +0 -1
- package/dist/level0/provide.d.ts +0 -51
- package/dist/level0/provide.d.ts.map +0 -1
- package/dist/level0/provide.js +0 -113
- package/dist/level0/provide.js.map +0 -1
- package/dist/level0/request.d.ts +0 -53
- package/dist/level0/request.d.ts.map +0 -1
- package/dist/level0/request.js +0 -462
- package/dist/level0/request.js.map +0 -1
- package/dist/level1/Agent.d.ts +0 -472
- package/dist/level1/Agent.d.ts.map +0 -1
- package/dist/level1/Agent.js +0 -1091
- package/dist/level1/Agent.js.map +0 -1
- package/dist/level1/index.d.ts +0 -10
- package/dist/level1/index.d.ts.map +0 -1
- package/dist/level1/index.js +0 -30
- package/dist/level1/index.js.map +0 -1
- package/dist/level1/pricing/PriceCalculator.d.ts +0 -62
- package/dist/level1/pricing/PriceCalculator.d.ts.map +0 -1
- package/dist/level1/pricing/PriceCalculator.js +0 -237
- package/dist/level1/pricing/PriceCalculator.js.map +0 -1
- package/dist/level1/pricing/PricingStrategy.d.ts +0 -179
- package/dist/level1/pricing/PricingStrategy.d.ts.map +0 -1
- package/dist/level1/pricing/PricingStrategy.js +0 -11
- package/dist/level1/pricing/PricingStrategy.js.map +0 -1
- package/dist/level1/types/Job.d.ts +0 -166
- package/dist/level1/types/Job.d.ts.map +0 -1
- package/dist/level1/types/Job.js +0 -11
- package/dist/level1/types/Job.js.map +0 -1
- package/dist/level1/types/Options.d.ts +0 -258
- package/dist/level1/types/Options.d.ts.map +0 -1
- package/dist/level1/types/Options.js +0 -8
- package/dist/level1/types/Options.js.map +0 -1
- package/dist/level1/types/index.d.ts +0 -8
- package/dist/level1/types/index.d.ts.map +0 -1
- package/dist/level1/types/index.js +0 -8
- package/dist/level1/types/index.js.map +0 -1
- package/dist/protocol/AgentRegistry.d.ts +0 -177
- package/dist/protocol/AgentRegistry.d.ts.map +0 -1
- package/dist/protocol/AgentRegistry.js +0 -449
- package/dist/protocol/AgentRegistry.js.map +0 -1
- package/dist/protocol/DIDManager.d.ts +0 -289
- package/dist/protocol/DIDManager.d.ts.map +0 -1
- package/dist/protocol/DIDManager.js +0 -481
- package/dist/protocol/DIDManager.js.map +0 -1
- package/dist/protocol/DIDResolver.d.ts +0 -236
- package/dist/protocol/DIDResolver.d.ts.map +0 -1
- package/dist/protocol/DIDResolver.js +0 -495
- package/dist/protocol/DIDResolver.js.map +0 -1
- package/dist/runtime/BlockchainRuntime.d.ts +0 -360
- package/dist/runtime/BlockchainRuntime.d.ts.map +0 -1
- package/dist/runtime/BlockchainRuntime.js +0 -767
- package/dist/runtime/BlockchainRuntime.js.map +0 -1
- package/dist/runtime/IACTPRuntime.d.ts +0 -271
- package/dist/runtime/IACTPRuntime.d.ts.map +0 -1
- package/dist/runtime/IACTPRuntime.js +0 -15
- package/dist/runtime/IACTPRuntime.js.map +0 -1
- package/dist/runtime/MockRuntime.d.ts +0 -445
- package/dist/runtime/MockRuntime.d.ts.map +0 -1
- package/dist/runtime/MockRuntime.js +0 -1065
- package/dist/runtime/MockRuntime.js.map +0 -1
- package/dist/runtime/MockStateManager.d.ts +0 -233
- package/dist/runtime/MockStateManager.d.ts.map +0 -1
- package/dist/runtime/MockStateManager.js +0 -533
- package/dist/runtime/MockStateManager.js.map +0 -1
- package/dist/runtime/index.d.ts +0 -14
- package/dist/runtime/index.d.ts.map +0 -1
- package/dist/runtime/index.js +0 -42
- package/dist/runtime/index.js.map +0 -1
- package/dist/runtime/types/MockState.d.ts +0 -167
- package/dist/runtime/types/MockState.d.ts.map +0 -1
- package/dist/runtime/types/MockState.js +0 -43
- package/dist/runtime/types/MockState.js.map +0 -1
- package/dist/types/agent.d.ts +0 -76
- package/dist/types/agent.d.ts.map +0 -1
- package/dist/types/agent.js +0 -8
- package/dist/types/agent.js.map +0 -1
- package/dist/types/did.d.ts +0 -192
- package/dist/types/did.d.ts.map +0 -1
- package/dist/types/did.js +0 -38
- package/dist/types/did.js.map +0 -1
- package/dist/utils/ErrorRecoveryGuide.d.ts +0 -125
- package/dist/utils/ErrorRecoveryGuide.d.ts.map +0 -1
- package/dist/utils/ErrorRecoveryGuide.js +0 -579
- package/dist/utils/ErrorRecoveryGuide.js.map +0 -1
- package/dist/utils/Helpers.d.ts +0 -453
- package/dist/utils/Helpers.d.ts.map +0 -1
- package/dist/utils/Helpers.js +0 -623
- package/dist/utils/Helpers.js.map +0 -1
- package/dist/utils/Logger.d.ts +0 -195
- package/dist/utils/Logger.d.ts.map +0 -1
- package/dist/utils/Logger.js +0 -382
- package/dist/utils/Logger.js.map +0 -1
- package/dist/utils/RateLimiter.d.ts +0 -253
- package/dist/utils/RateLimiter.d.ts.map +0 -1
- package/dist/utils/RateLimiter.js +0 -424
- package/dist/utils/RateLimiter.js.map +0 -1
- package/dist/utils/SDKLifecycle.d.ts +0 -156
- package/dist/utils/SDKLifecycle.d.ts.map +0 -1
- package/dist/utils/SDKLifecycle.js +0 -347
- package/dist/utils/SDKLifecycle.js.map +0 -1
- package/dist/utils/SecureNonce.d.ts +0 -57
- package/dist/utils/SecureNonce.d.ts.map +0 -1
- package/dist/utils/SecureNonce.js +0 -80
- package/dist/utils/SecureNonce.js.map +0 -1
- package/dist/utils/Semaphore.d.ts +0 -123
- package/dist/utils/Semaphore.d.ts.map +0 -1
- package/dist/utils/Semaphore.js +0 -247
- package/dist/utils/Semaphore.js.map +0 -1
- package/dist/utils/UsedAttestationTracker.d.ts +0 -167
- package/dist/utils/UsedAttestationTracker.d.ts.map +0 -1
- package/dist/utils/UsedAttestationTracker.js +0 -309
- package/dist/utils/UsedAttestationTracker.js.map +0 -1
- package/dist/utils/fsSafe.d.ts +0 -14
- package/dist/utils/fsSafe.d.ts.map +0 -1
- package/dist/utils/fsSafe.js +0 -89
- package/dist/utils/fsSafe.js.map +0 -1
- package/dist/utils/index.d.ts +0 -15
- package/dist/utils/index.d.ts.map +0 -1
- package/dist/utils/index.js +0 -51
- package/dist/utils/index.js.map +0 -1
- package/dist/utils/security.d.ts +0 -147
- package/dist/utils/security.d.ts.map +0 -1
- package/dist/utils/security.js +0 -391
- package/dist/utils/security.js.map +0 -1
- package/src/abi/AgentRegistry.json +0 -782
- package/src/abi/IdentityRegistry.json +0 -316
- package/src/adapters/BaseAdapter.ts +0 -473
- package/src/adapters/BeginnerAdapter.ts +0 -232
- package/src/adapters/IntermediateAdapter.ts +0 -316
- package/src/adapters/index.ts +0 -25
- 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/init.ts +0 -161
- package/src/cli/commands/mint.ts +0 -116
- package/src/cli/commands/pay.ts +0 -113
- package/src/cli/commands/simulate.ts +0 -345
- package/src/cli/commands/time.ts +0 -303
- package/src/cli/commands/tx.ts +0 -448
- package/src/cli/commands/watch.ts +0 -211
- package/src/cli/index.ts +0 -116
- package/src/cli/utils/client.ts +0 -249
- package/src/cli/utils/config.ts +0 -282
- package/src/cli/utils/output.ts +0 -465
- 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 -131
- package/src/level0/request.ts +0 -494
- package/src/level1/Agent.ts +0 -1432
- 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/AgentRegistry.ts +0 -559
- package/src/protocol/DIDManager.ts +0 -629
- package/src/protocol/DIDResolver.ts +0 -554
- package/src/runtime/BlockchainRuntime.ts +0 -993
- package/src/runtime/IACTPRuntime.ts +0 -284
- package/src/runtime/MockRuntime.ts +0 -1244
- package/src/runtime/MockStateManager.ts +0 -576
- package/src/runtime/index.ts +0 -25
- package/src/runtime/types/MockState.ts +0 -227
- package/src/types/agent.ts +0 -79
- package/src/types/did.ts +0 -223
- package/src/utils/ErrorRecoveryGuide.ts +0 -675
- package/src/utils/Helpers.ts +0 -688
- package/src/utils/Logger.ts +0 -484
- package/src/utils/RateLimiter.ts +0 -534
- 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 -387
- package/src/utils/fsSafe.ts +0 -75
- package/src/utils/index.ts +0 -80
- package/src/utils/security.ts +0 -418
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tests for Nonce Manager
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import {
|
|
6
|
+
InMemoryNonceManager,
|
|
7
|
+
DIDScopedNonceManager,
|
|
8
|
+
createNonceManager
|
|
9
|
+
} from '../../utils/NonceManager';
|
|
10
|
+
|
|
11
|
+
describe('InMemoryNonceManager', () => {
|
|
12
|
+
let manager: InMemoryNonceManager;
|
|
13
|
+
|
|
14
|
+
beforeEach(() => {
|
|
15
|
+
manager = new InMemoryNonceManager();
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
describe('getNextNonce', () => {
|
|
19
|
+
it('should return 1 for first nonce', () => {
|
|
20
|
+
expect(manager.getNextNonce('agirails.delivery.v1')).toBe(1);
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
it('should increment for multiple calls', () => {
|
|
24
|
+
expect(manager.getNextNonce('agirails.delivery.v1')).toBe(1);
|
|
25
|
+
manager.recordNonce('agirails.delivery.v1', 1);
|
|
26
|
+
expect(manager.getNextNonce('agirails.delivery.v1')).toBe(2);
|
|
27
|
+
manager.recordNonce('agirails.delivery.v1', 2);
|
|
28
|
+
expect(manager.getNextNonce('agirails.delivery.v1')).toBe(3);
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
it('should track nonces separately per message type', () => {
|
|
32
|
+
manager.recordNonce('agirails.delivery.v1', 5);
|
|
33
|
+
manager.recordNonce('agirails.quote.v1', 10);
|
|
34
|
+
|
|
35
|
+
expect(manager.getNextNonce('agirails.delivery.v1')).toBe(6);
|
|
36
|
+
expect(manager.getNextNonce('agirails.quote.v1')).toBe(11);
|
|
37
|
+
});
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
describe('recordNonce', () => {
|
|
41
|
+
it('should update current nonce', () => {
|
|
42
|
+
manager.recordNonce('agirails.delivery.v1', 5);
|
|
43
|
+
expect(manager.getCurrentNonce('agirails.delivery.v1')).toBe(5);
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
it('should throw if nonce is not strictly increasing', () => {
|
|
47
|
+
manager.recordNonce('agirails.delivery.v1', 5);
|
|
48
|
+
|
|
49
|
+
expect(() => manager.recordNonce('agirails.delivery.v1', 5))
|
|
50
|
+
.toThrow('Nonce must be strictly increasing');
|
|
51
|
+
|
|
52
|
+
expect(() => manager.recordNonce('agirails.delivery.v1', 3))
|
|
53
|
+
.toThrow('Nonce must be strictly increasing');
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
it('should allow gaps in nonces', () => {
|
|
57
|
+
manager.recordNonce('agirails.delivery.v1', 1);
|
|
58
|
+
manager.recordNonce('agirails.delivery.v1', 10);
|
|
59
|
+
|
|
60
|
+
expect(manager.getCurrentNonce('agirails.delivery.v1')).toBe(10);
|
|
61
|
+
});
|
|
62
|
+
});
|
|
63
|
+
|
|
64
|
+
describe('getCurrentNonce', () => {
|
|
65
|
+
it('should return 0 for unused message type', () => {
|
|
66
|
+
expect(manager.getCurrentNonce('agirails.unknown.v1')).toBe(0);
|
|
67
|
+
});
|
|
68
|
+
|
|
69
|
+
it('should return last recorded nonce', () => {
|
|
70
|
+
manager.recordNonce('agirails.delivery.v1', 42);
|
|
71
|
+
expect(manager.getCurrentNonce('agirails.delivery.v1')).toBe(42);
|
|
72
|
+
});
|
|
73
|
+
});
|
|
74
|
+
|
|
75
|
+
describe('resetNonce', () => {
|
|
76
|
+
it('should reset nonce to 0', () => {
|
|
77
|
+
manager.recordNonce('agirails.delivery.v1', 10);
|
|
78
|
+
manager.resetNonce('agirails.delivery.v1');
|
|
79
|
+
|
|
80
|
+
expect(manager.getCurrentNonce('agirails.delivery.v1')).toBe(0);
|
|
81
|
+
expect(manager.getNextNonce('agirails.delivery.v1')).toBe(1);
|
|
82
|
+
});
|
|
83
|
+
});
|
|
84
|
+
|
|
85
|
+
describe('getAllNonces', () => {
|
|
86
|
+
it('should return all nonces as object', () => {
|
|
87
|
+
manager.recordNonce('agirails.delivery.v1', 5);
|
|
88
|
+
manager.recordNonce('agirails.quote.v1', 10);
|
|
89
|
+
|
|
90
|
+
const nonces = manager.getAllNonces();
|
|
91
|
+
|
|
92
|
+
expect(nonces).toEqual({
|
|
93
|
+
'agirails.delivery.v1': 5,
|
|
94
|
+
'agirails.quote.v1': 10
|
|
95
|
+
});
|
|
96
|
+
});
|
|
97
|
+
|
|
98
|
+
it('should be empty for new manager', () => {
|
|
99
|
+
expect(manager.getAllNonces()).toEqual({});
|
|
100
|
+
});
|
|
101
|
+
});
|
|
102
|
+
|
|
103
|
+
describe('constructor with initialNonces', () => {
|
|
104
|
+
it('should initialize with provided nonces', () => {
|
|
105
|
+
const manager = new InMemoryNonceManager({
|
|
106
|
+
'agirails.delivery.v1': 100,
|
|
107
|
+
'agirails.quote.v1': 200
|
|
108
|
+
});
|
|
109
|
+
|
|
110
|
+
expect(manager.getCurrentNonce('agirails.delivery.v1')).toBe(100);
|
|
111
|
+
expect(manager.getCurrentNonce('agirails.quote.v1')).toBe(200);
|
|
112
|
+
});
|
|
113
|
+
});
|
|
114
|
+
});
|
|
115
|
+
|
|
116
|
+
describe('DIDScopedNonceManager', () => {
|
|
117
|
+
const did1 = 'did:ethr:84532:0x1111111111111111111111111111111111111111';
|
|
118
|
+
const did2 = 'did:ethr:84532:0x2222222222222222222222222222222222222222';
|
|
119
|
+
|
|
120
|
+
let manager: DIDScopedNonceManager;
|
|
121
|
+
|
|
122
|
+
beforeEach(() => {
|
|
123
|
+
manager = new DIDScopedNonceManager(did1);
|
|
124
|
+
});
|
|
125
|
+
|
|
126
|
+
describe('DID scoping', () => {
|
|
127
|
+
it('should track nonces per DID', () => {
|
|
128
|
+
manager.recordNonceForDID(did1, 'agirails.delivery.v1', 5);
|
|
129
|
+
manager.recordNonceForDID(did2, 'agirails.delivery.v1', 10);
|
|
130
|
+
|
|
131
|
+
expect(manager.getNextNonceForDID(did1, 'agirails.delivery.v1')).toBe(6);
|
|
132
|
+
expect(manager.getNextNonceForDID(did2, 'agirails.delivery.v1')).toBe(11);
|
|
133
|
+
});
|
|
134
|
+
|
|
135
|
+
it('should use current DID for simple methods', () => {
|
|
136
|
+
manager.recordNonce('agirails.delivery.v1', 5);
|
|
137
|
+
|
|
138
|
+
expect(manager.getCurrentNonce('agirails.delivery.v1')).toBe(5);
|
|
139
|
+
expect(manager.getNextNonce('agirails.delivery.v1')).toBe(6);
|
|
140
|
+
});
|
|
141
|
+
|
|
142
|
+
it('should allow switching DID context', () => {
|
|
143
|
+
manager.recordNonce('agirails.delivery.v1', 5);
|
|
144
|
+
|
|
145
|
+
manager.switchDID(did2);
|
|
146
|
+
expect(manager.getCurrentNonce('agirails.delivery.v1')).toBe(0);
|
|
147
|
+
|
|
148
|
+
manager.recordNonce('agirails.delivery.v1', 10);
|
|
149
|
+
|
|
150
|
+
manager.switchDID(did1);
|
|
151
|
+
expect(manager.getCurrentNonce('agirails.delivery.v1')).toBe(5);
|
|
152
|
+
});
|
|
153
|
+
});
|
|
154
|
+
|
|
155
|
+
describe('getAllNonces', () => {
|
|
156
|
+
it('should return nested structure', () => {
|
|
157
|
+
manager.recordNonceForDID(did1, 'agirails.delivery.v1', 5);
|
|
158
|
+
manager.recordNonceForDID(did1, 'agirails.quote.v1', 3);
|
|
159
|
+
manager.recordNonceForDID(did2, 'agirails.delivery.v1', 10);
|
|
160
|
+
|
|
161
|
+
const nonces = manager.getAllNonces();
|
|
162
|
+
|
|
163
|
+
expect(nonces).toEqual({
|
|
164
|
+
[did1]: {
|
|
165
|
+
'agirails.delivery.v1': 5,
|
|
166
|
+
'agirails.quote.v1': 3
|
|
167
|
+
},
|
|
168
|
+
[did2]: {
|
|
169
|
+
'agirails.delivery.v1': 10
|
|
170
|
+
}
|
|
171
|
+
});
|
|
172
|
+
});
|
|
173
|
+
});
|
|
174
|
+
|
|
175
|
+
describe('constructor with initialNonces', () => {
|
|
176
|
+
it('should initialize DID with provided nonces', () => {
|
|
177
|
+
const manager = new DIDScopedNonceManager(did1, {
|
|
178
|
+
'agirails.delivery.v1': 100
|
|
179
|
+
});
|
|
180
|
+
|
|
181
|
+
expect(manager.getCurrentNonce('agirails.delivery.v1')).toBe(100);
|
|
182
|
+
expect(manager.getNextNonce('agirails.delivery.v1')).toBe(101);
|
|
183
|
+
});
|
|
184
|
+
});
|
|
185
|
+
});
|
|
186
|
+
|
|
187
|
+
describe('createNonceManager factory', () => {
|
|
188
|
+
it('should create InMemoryNonceManager when no DID provided', () => {
|
|
189
|
+
const manager = createNonceManager();
|
|
190
|
+
expect(manager).toBeInstanceOf(InMemoryNonceManager);
|
|
191
|
+
});
|
|
192
|
+
|
|
193
|
+
it('should create DIDScopedNonceManager when DID provided', () => {
|
|
194
|
+
const manager = createNonceManager('did:ethr:84532:0x...');
|
|
195
|
+
expect(manager).toBeInstanceOf(DIDScopedNonceManager);
|
|
196
|
+
});
|
|
197
|
+
|
|
198
|
+
it('should pass initialNonces to manager', () => {
|
|
199
|
+
const manager = createNonceManager(undefined, {
|
|
200
|
+
'agirails.delivery.v1': 50
|
|
201
|
+
});
|
|
202
|
+
|
|
203
|
+
expect(manager.getCurrentNonce('agirails.delivery.v1')).toBe(50);
|
|
204
|
+
});
|
|
205
|
+
});
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tests for Canonical JSON Utilities (AIP-4 §3.6)
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import { canonicalJsonStringify, computeCanonicalHash, computeResultHash } from '../../utils/canonicalJson';
|
|
6
|
+
import { keccak256, toUtf8Bytes } from 'ethers';
|
|
7
|
+
|
|
8
|
+
describe('Canonical JSON Utilities', () => {
|
|
9
|
+
describe('canonicalJsonStringify', () => {
|
|
10
|
+
it('should sort object keys alphabetically', () => {
|
|
11
|
+
const obj = { z: 1, a: 2, m: 3 };
|
|
12
|
+
const result = canonicalJsonStringify(obj);
|
|
13
|
+
expect(result).toBe('{"a":2,"m":3,"z":1}');
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
it('should handle nested objects', () => {
|
|
17
|
+
const obj = {
|
|
18
|
+
b: { y: 1, x: 2 },
|
|
19
|
+
a: { z: 3, w: 4 }
|
|
20
|
+
};
|
|
21
|
+
const result = canonicalJsonStringify(obj);
|
|
22
|
+
expect(result).toBe('{"a":{"w":4,"z":3},"b":{"x":2,"y":1}}');
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
it('should handle arrays', () => {
|
|
26
|
+
const obj = { items: [3, 1, 2], name: 'test' };
|
|
27
|
+
const result = canonicalJsonStringify(obj);
|
|
28
|
+
expect(result).toBe('{"items":[3,1,2],"name":"test"}');
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
it('should produce deterministic output', () => {
|
|
32
|
+
const obj1 = { a: 1, b: 2, c: 3 };
|
|
33
|
+
const obj2 = { c: 3, b: 2, a: 1 };
|
|
34
|
+
|
|
35
|
+
expect(canonicalJsonStringify(obj1)).toBe(canonicalJsonStringify(obj2));
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
it('should handle special characters', () => {
|
|
39
|
+
const obj = { text: 'hello "world"', emoji: '🎉' };
|
|
40
|
+
const result = canonicalJsonStringify(obj);
|
|
41
|
+
expect(result).toContain('hello \\"world\\"');
|
|
42
|
+
expect(result).toContain('🎉');
|
|
43
|
+
});
|
|
44
|
+
|
|
45
|
+
it('should handle null and boolean values', () => {
|
|
46
|
+
const obj = { isTrue: true, isFalse: false, nothing: null };
|
|
47
|
+
const result = canonicalJsonStringify(obj);
|
|
48
|
+
expect(result).toBe('{"isFalse":false,"isTrue":true,"nothing":null}');
|
|
49
|
+
});
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
describe('computeCanonicalHash', () => {
|
|
53
|
+
it('should compute keccak256 hash of canonical JSON', () => {
|
|
54
|
+
const obj = { a: 1, b: 2 };
|
|
55
|
+
const hash = computeCanonicalHash(obj);
|
|
56
|
+
|
|
57
|
+
// Hash should be 0x-prefixed, 66 chars (0x + 64 hex)
|
|
58
|
+
expect(hash).toMatch(/^0x[a-f0-9]{64}$/);
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
it('should produce same hash for semantically equal objects', () => {
|
|
62
|
+
const obj1 = { a: 1, b: 2, c: 3 };
|
|
63
|
+
const obj2 = { c: 3, b: 2, a: 1 }; // Different order
|
|
64
|
+
|
|
65
|
+
const hash1 = computeCanonicalHash(obj1);
|
|
66
|
+
const hash2 = computeCanonicalHash(obj2);
|
|
67
|
+
|
|
68
|
+
expect(hash1).toBe(hash2);
|
|
69
|
+
});
|
|
70
|
+
|
|
71
|
+
it('should produce different hashes for different objects', () => {
|
|
72
|
+
const obj1 = { a: 1, b: 2 };
|
|
73
|
+
const obj2 = { a: 1, b: 3 };
|
|
74
|
+
|
|
75
|
+
const hash1 = computeCanonicalHash(obj1);
|
|
76
|
+
const hash2 = computeCanonicalHash(obj2);
|
|
77
|
+
|
|
78
|
+
expect(hash1).not.toBe(hash2);
|
|
79
|
+
});
|
|
80
|
+
});
|
|
81
|
+
|
|
82
|
+
describe('computeResultHash', () => {
|
|
83
|
+
it('should alias computeCanonicalHash', () => {
|
|
84
|
+
const obj = { txId: '0xabc', result: 'test' };
|
|
85
|
+
|
|
86
|
+
const hash1 = computeResultHash(obj);
|
|
87
|
+
const hash2 = computeCanonicalHash(obj);
|
|
88
|
+
|
|
89
|
+
expect(hash1).toBe(hash2);
|
|
90
|
+
});
|
|
91
|
+
});
|
|
92
|
+
|
|
93
|
+
describe('AIP-4 Test Vector (§10.1)', () => {
|
|
94
|
+
it('should match AIP-4 canonical JSON test vector', () => {
|
|
95
|
+
const input = {
|
|
96
|
+
txId: '0x7d87c3b8e23a5c9d1f4e6b2a8c5d9e3f1a7b4c6d8e2f5a3b9c1d7e4f6a8b2c5d',
|
|
97
|
+
serviceType: 'ocr',
|
|
98
|
+
result: { text: 'test', confidence: 1.0 },
|
|
99
|
+
createdAt: 1700000000,
|
|
100
|
+
provider: 'did:ethr:0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb'
|
|
101
|
+
};
|
|
102
|
+
|
|
103
|
+
const canonical = canonicalJsonStringify(input);
|
|
104
|
+
|
|
105
|
+
// Expected output from AIP-4 §10.1
|
|
106
|
+
const expected = '{"createdAt":1700000000,"provider":"did:ethr:0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb","result":{"confidence":1,"text":"test"},"serviceType":"ocr","txId":"0x7d87c3b8e23a5c9d1f4e6b2a8c5d9e3f1a7b4c6d8e2f5a3b9c1d7e4f6a8b2c5d"}';
|
|
107
|
+
|
|
108
|
+
expect(canonical).toBe(expected);
|
|
109
|
+
});
|
|
110
|
+
|
|
111
|
+
it('should compute correct hash for test vector', () => {
|
|
112
|
+
const input = {
|
|
113
|
+
txId: '0x7d87c3b8e23a5c9d1f4e6b2a8c5d9e3f1a7b4c6d8e2f5a3b9c1d7e4f6a8b2c5d',
|
|
114
|
+
serviceType: 'ocr',
|
|
115
|
+
result: { text: 'test', confidence: 1.0 },
|
|
116
|
+
createdAt: 1700000000,
|
|
117
|
+
provider: 'did:ethr:0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb'
|
|
118
|
+
};
|
|
119
|
+
|
|
120
|
+
const hash = computeResultHash(input);
|
|
121
|
+
|
|
122
|
+
// Compute expected hash manually
|
|
123
|
+
const canonical = '{"createdAt":1700000000,"provider":"did:ethr:0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb","result":{"confidence":1,"text":"test"},"serviceType":"ocr","txId":"0x7d87c3b8e23a5c9d1f4e6b2a8c5d9e3f1a7b4c6d8e2f5a3b9c1d7e4f6a8b2c5d"}';
|
|
124
|
+
const expectedHash = keccak256(toUtf8Bytes(canonical));
|
|
125
|
+
|
|
126
|
+
expect(hash).toBe(expectedHash);
|
|
127
|
+
});
|
|
128
|
+
});
|
|
129
|
+
|
|
130
|
+
describe('Cross-language compatibility', () => {
|
|
131
|
+
it('should handle numbers without decimals', () => {
|
|
132
|
+
const obj = { value: 1.0 };
|
|
133
|
+
const result = canonicalJsonStringify(obj);
|
|
134
|
+
|
|
135
|
+
// JavaScript serializes 1.0 as 1 (no decimal)
|
|
136
|
+
expect(result).toBe('{"value":1}');
|
|
137
|
+
});
|
|
138
|
+
|
|
139
|
+
it('should handle large numbers', () => {
|
|
140
|
+
const obj = { timestamp: 1700000000, amount: 1000000000000 };
|
|
141
|
+
const result = canonicalJsonStringify(obj);
|
|
142
|
+
|
|
143
|
+
expect(result).toBe('{"amount":1000000000000,"timestamp":1700000000}');
|
|
144
|
+
});
|
|
145
|
+
|
|
146
|
+
it('should handle unicode strings', () => {
|
|
147
|
+
const obj = { text: 'Hello 世界 🌍' };
|
|
148
|
+
const result = canonicalJsonStringify(obj);
|
|
149
|
+
|
|
150
|
+
expect(result).toContain('Hello 世界 🌍');
|
|
151
|
+
});
|
|
152
|
+
});
|
|
153
|
+
});
|
package/src/abi/EscrowVault.json
CHANGED
|
@@ -1,133 +1,65 @@
|
|
|
1
1
|
[
|
|
2
2
|
{
|
|
3
|
-
"type": "constructor",
|
|
4
3
|
"inputs": [
|
|
5
|
-
{
|
|
6
|
-
{
|
|
4
|
+
{"name": "kernel", "type": "address"},
|
|
5
|
+
{"name": "txId", "type": "bytes32"},
|
|
6
|
+
{"name": "token", "type": "address"},
|
|
7
|
+
{"name": "amount", "type": "uint256"},
|
|
8
|
+
{"name": "beneficiary", "type": "address"}
|
|
7
9
|
],
|
|
8
|
-
"
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
"type": "function"
|
|
12
|
-
"name": "token",
|
|
13
|
-
"inputs": [],
|
|
14
|
-
"outputs": [{ "name": "", "type": "address", "internalType": "address" }],
|
|
15
|
-
"stateMutability": "view"
|
|
16
|
-
},
|
|
17
|
-
{
|
|
18
|
-
"type": "function",
|
|
19
|
-
"name": "kernel",
|
|
20
|
-
"inputs": [],
|
|
21
|
-
"outputs": [{ "name": "", "type": "address", "internalType": "address" }],
|
|
22
|
-
"stateMutability": "view"
|
|
23
|
-
},
|
|
24
|
-
{
|
|
25
|
-
"type": "function",
|
|
26
|
-
"name": "escrows",
|
|
27
|
-
"inputs": [{ "name": "", "type": "bytes32", "internalType": "bytes32" }],
|
|
28
|
-
"outputs": [
|
|
29
|
-
{ "name": "requester", "type": "address", "internalType": "address" },
|
|
30
|
-
{ "name": "provider", "type": "address", "internalType": "address" },
|
|
31
|
-
{ "name": "amount", "type": "uint256", "internalType": "uint256" },
|
|
32
|
-
{ "name": "releasedAmount", "type": "uint256", "internalType": "uint256" },
|
|
33
|
-
{ "name": "active", "type": "bool", "internalType": "bool" }
|
|
34
|
-
],
|
|
35
|
-
"stateMutability": "view"
|
|
10
|
+
"name": "createEscrow",
|
|
11
|
+
"outputs": [{"name": "escrowId", "type": "bytes32"}],
|
|
12
|
+
"stateMutability": "nonpayable",
|
|
13
|
+
"type": "function"
|
|
36
14
|
},
|
|
37
15
|
{
|
|
38
|
-
"type": "function",
|
|
39
|
-
"name": "createEscrow",
|
|
40
16
|
"inputs": [
|
|
41
|
-
{
|
|
42
|
-
{
|
|
43
|
-
{
|
|
44
|
-
{ "name": "amount", "type": "uint256", "internalType": "uint256" }
|
|
17
|
+
{"name": "escrowId", "type": "bytes32"},
|
|
18
|
+
{"name": "recipients", "type": "address[]"},
|
|
19
|
+
{"name": "amounts", "type": "uint256[]"}
|
|
45
20
|
],
|
|
21
|
+
"name": "disburse",
|
|
46
22
|
"outputs": [],
|
|
47
|
-
"stateMutability": "nonpayable"
|
|
23
|
+
"stateMutability": "nonpayable",
|
|
24
|
+
"type": "function"
|
|
48
25
|
},
|
|
49
26
|
{
|
|
50
|
-
"type": "function",
|
|
51
|
-
"name": "verifyEscrow",
|
|
52
27
|
"inputs": [
|
|
53
|
-
{
|
|
54
|
-
{ "name": "requester", "type": "address", "internalType": "address" },
|
|
55
|
-
{ "name": "provider", "type": "address", "internalType": "address" },
|
|
56
|
-
{ "name": "amount", "type": "uint256", "internalType": "uint256" }
|
|
28
|
+
{"name": "escrowId", "type": "bytes32"}
|
|
57
29
|
],
|
|
30
|
+
"name": "escrows",
|
|
58
31
|
"outputs": [
|
|
59
|
-
{
|
|
60
|
-
{
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
"type": "function",
|
|
66
|
-
"name": "payoutToProvider",
|
|
67
|
-
"inputs": [
|
|
68
|
-
{ "name": "escrowId", "type": "bytes32", "internalType": "bytes32" },
|
|
69
|
-
{ "name": "amount", "type": "uint256", "internalType": "uint256" }
|
|
32
|
+
{"name": "kernel", "type": "address"},
|
|
33
|
+
{"name": "txId", "type": "bytes32"},
|
|
34
|
+
{"name": "token", "type": "address"},
|
|
35
|
+
{"name": "amount", "type": "uint256"},
|
|
36
|
+
{"name": "beneficiary", "type": "address"},
|
|
37
|
+
{"name": "released", "type": "bool"}
|
|
70
38
|
],
|
|
71
|
-
"
|
|
72
|
-
"
|
|
39
|
+
"stateMutability": "view",
|
|
40
|
+
"type": "function"
|
|
73
41
|
},
|
|
74
42
|
{
|
|
75
|
-
"
|
|
76
|
-
"name": "refundToRequester",
|
|
77
|
-
"inputs": [
|
|
78
|
-
{ "name": "escrowId", "type": "bytes32", "internalType": "bytes32" },
|
|
79
|
-
{ "name": "amount", "type": "uint256", "internalType": "uint256" }
|
|
80
|
-
],
|
|
81
|
-
"outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }],
|
|
82
|
-
"stateMutability": "nonpayable"
|
|
83
|
-
},
|
|
84
|
-
{
|
|
85
|
-
"type": "function",
|
|
86
|
-
"name": "payout",
|
|
43
|
+
"anonymous": false,
|
|
87
44
|
"inputs": [
|
|
88
|
-
{
|
|
89
|
-
{
|
|
90
|
-
{
|
|
45
|
+
{"indexed": true, "name": "escrowId", "type": "bytes32"},
|
|
46
|
+
{"indexed": true, "name": "kernel", "type": "address"},
|
|
47
|
+
{"indexed": true, "name": "txId", "type": "bytes32"},
|
|
48
|
+
{"indexed": false, "name": "token", "type": "address"},
|
|
49
|
+
{"indexed": false, "name": "amount", "type": "uint256"}
|
|
91
50
|
],
|
|
92
|
-
"outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }],
|
|
93
|
-
"stateMutability": "nonpayable"
|
|
94
|
-
},
|
|
95
|
-
{
|
|
96
|
-
"type": "function",
|
|
97
|
-
"name": "remaining",
|
|
98
|
-
"inputs": [{ "name": "escrowId", "type": "bytes32", "internalType": "bytes32" }],
|
|
99
|
-
"outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }],
|
|
100
|
-
"stateMutability": "view"
|
|
101
|
-
},
|
|
102
|
-
{
|
|
103
|
-
"type": "event",
|
|
104
51
|
"name": "EscrowCreated",
|
|
105
|
-
"
|
|
106
|
-
"inputs": [
|
|
107
|
-
{ "name": "escrowId", "type": "bytes32", "indexed": true, "internalType": "bytes32" },
|
|
108
|
-
{ "name": "requester", "type": "address", "indexed": true, "internalType": "address" },
|
|
109
|
-
{ "name": "provider", "type": "address", "indexed": true, "internalType": "address" },
|
|
110
|
-
{ "name": "amount", "type": "uint256", "indexed": false, "internalType": "uint256" }
|
|
111
|
-
]
|
|
112
|
-
},
|
|
113
|
-
{
|
|
114
|
-
"type": "event",
|
|
115
|
-
"name": "EscrowPayout",
|
|
116
|
-
"anonymous": false,
|
|
117
|
-
"inputs": [
|
|
118
|
-
{ "name": "escrowId", "type": "bytes32", "indexed": true, "internalType": "bytes32" },
|
|
119
|
-
{ "name": "recipient", "type": "address", "indexed": true, "internalType": "address" },
|
|
120
|
-
{ "name": "amount", "type": "uint256", "indexed": false, "internalType": "uint256" }
|
|
121
|
-
]
|
|
52
|
+
"type": "event"
|
|
122
53
|
},
|
|
123
54
|
{
|
|
124
|
-
"type": "event",
|
|
125
|
-
"name": "EscrowCompleted",
|
|
126
55
|
"anonymous": false,
|
|
127
56
|
"inputs": [
|
|
128
|
-
{
|
|
129
|
-
{
|
|
130
|
-
|
|
57
|
+
{"indexed": true, "name": "escrowId", "type": "bytes32"},
|
|
58
|
+
{"indexed": false, "name": "recipients", "type": "address[]"},
|
|
59
|
+
{"indexed": false, "name": "amounts", "type": "uint256[]"}
|
|
60
|
+
],
|
|
61
|
+
"name": "EscrowReleased",
|
|
62
|
+
"type": "event"
|
|
131
63
|
}
|
|
132
64
|
]
|
|
133
65
|
|
|
@@ -19,10 +19,9 @@ import { AIP4DeliveryProofTypes, AIP4DeliveryProofData, EIP712Domain } from '../
|
|
|
19
19
|
|
|
20
20
|
/**
|
|
21
21
|
* AGIRAILS Delivery Schema UID (Base Sepolia)
|
|
22
|
-
*
|
|
23
|
-
* Schema: bytes32 txId, string resultCID, bytes32 resultHash, uint256 deliveredAt
|
|
22
|
+
* TODO: Update after schema deployment
|
|
24
23
|
*/
|
|
25
|
-
export const AGIRAILS_DELIVERY_SCHEMA_UID = '
|
|
24
|
+
export const AGIRAILS_DELIVERY_SCHEMA_UID = '0x0000000000000000000000000000000000000000000000000000000000000000'; // PENDING
|
|
26
25
|
|
|
27
26
|
/**
|
|
28
27
|
* Delivery proof build parameters
|
package/src/config/networks.ts
CHANGED
|
@@ -1,20 +1,5 @@
|
|
|
1
1
|
import { ethers } from 'ethers';
|
|
2
2
|
|
|
3
|
-
// ============================================================================
|
|
4
|
-
// SECURITY FIX (C-7): RPC URL Configuration
|
|
5
|
-
// ============================================================================
|
|
6
|
-
// Environment variables take priority over hardcoded defaults.
|
|
7
|
-
// This prevents accidental API key leakage if developers modify this file.
|
|
8
|
-
// Public RPC endpoints are used as fallbacks for ease of use.
|
|
9
|
-
//
|
|
10
|
-
// Set these environment variables to use your own RPC provider:
|
|
11
|
-
// BASE_SEPOLIA_RPC - Custom RPC for Base Sepolia testnet
|
|
12
|
-
// BASE_MAINNET_RPC - Custom RPC for Base Mainnet
|
|
13
|
-
// ============================================================================
|
|
14
|
-
|
|
15
|
-
const BASE_SEPOLIA_RPC_URL = process.env.BASE_SEPOLIA_RPC || 'https://sepolia.base.org';
|
|
16
|
-
const BASE_MAINNET_RPC_URL = process.env.BASE_MAINNET_RPC || 'https://mainnet.base.org';
|
|
17
|
-
|
|
18
3
|
/**
|
|
19
4
|
* Network configuration
|
|
20
5
|
*/
|
|
@@ -29,7 +14,6 @@ export interface NetworkConfig {
|
|
|
29
14
|
usdc: string;
|
|
30
15
|
eas: string; // EAS contract address
|
|
31
16
|
easSchemaRegistry: string; // EAS SchemaRegistry contract
|
|
32
|
-
agentRegistry?: string; // AIP-7 Agent Registry (optional until deployed)
|
|
33
17
|
};
|
|
34
18
|
eas: {
|
|
35
19
|
deliverySchemaUID: string; // AIP-4 delivery proof schema
|
|
@@ -46,18 +30,16 @@ export interface NetworkConfig {
|
|
|
46
30
|
export const BASE_SEPOLIA: NetworkConfig = {
|
|
47
31
|
name: 'Base Sepolia',
|
|
48
32
|
chainId: 84532,
|
|
49
|
-
rpcUrl:
|
|
33
|
+
rpcUrl: 'https://sepolia.base.org',
|
|
50
34
|
blockExplorer: 'https://sepolia.basescan.org',
|
|
51
35
|
contracts: {
|
|
52
|
-
// Redeployed 2025-
|
|
53
|
-
actpKernel: '
|
|
54
|
-
escrowVault: '
|
|
36
|
+
// Redeployed 2025-11-25 by Arha (fixed auto-transition in linkEscrow, optimizer-runs 200)
|
|
37
|
+
actpKernel: '0x6aDB650e185b0ee77981AC5279271f0Fa6CFe7ba',
|
|
38
|
+
escrowVault: '0x921edE340770db5DB6059B5B866be987d1b7311F',
|
|
55
39
|
usdc: '0x444b4e1A65949AB2ac75979D5d0166Eb7A248Ccb', // MockUSDC
|
|
56
40
|
// EAS contracts (Base native deployment)
|
|
57
41
|
eas: '0x4200000000000000000000000000000000000021',
|
|
58
|
-
easSchemaRegistry: '0x4200000000000000000000000000000000000020'
|
|
59
|
-
// AIP-7 Agent Registry (deployed 2025-12-11)
|
|
60
|
-
agentRegistry: '0xFed6914Aa70c0a53E9c7Cc4d2Ae159e4748fb09D'
|
|
42
|
+
easSchemaRegistry: '0x4200000000000000000000000000000000000020'
|
|
61
43
|
},
|
|
62
44
|
eas: {
|
|
63
45
|
// Deployed 2025-11-23 - AIP-4 delivery proof schema
|
|
@@ -71,18 +53,14 @@ export const BASE_SEPOLIA: NetworkConfig = {
|
|
|
71
53
|
|
|
72
54
|
/**
|
|
73
55
|
* Base Mainnet Configuration
|
|
74
|
-
*
|
|
75
|
-
* WARNING: Mainnet contracts are NOT YET DEPLOYED.
|
|
76
|
-
* Using 'base-mainnet' will throw an error until contracts are deployed.
|
|
77
|
-
* Use 'base-sepolia' for testnet development.
|
|
78
56
|
*/
|
|
79
57
|
export const BASE_MAINNET: NetworkConfig = {
|
|
80
58
|
name: 'Base Mainnet',
|
|
81
59
|
chainId: 8453,
|
|
82
|
-
rpcUrl:
|
|
60
|
+
rpcUrl: 'https://mainnet.base.org',
|
|
83
61
|
blockExplorer: 'https://basescan.org',
|
|
84
62
|
contracts: {
|
|
85
|
-
//
|
|
63
|
+
// TODO: Update after mainnet deployment
|
|
86
64
|
actpKernel: '0x0000000000000000000000000000000000000000',
|
|
87
65
|
escrowVault: '0x0000000000000000000000000000000000000000',
|
|
88
66
|
usdc: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913', // Official USDC on Base
|
|
@@ -91,7 +69,7 @@ export const BASE_MAINNET: NetworkConfig = {
|
|
|
91
69
|
easSchemaRegistry: '0x4200000000000000000000000000000000000020'
|
|
92
70
|
},
|
|
93
71
|
eas: {
|
|
94
|
-
//
|
|
72
|
+
// TODO: Deploy delivery schema to mainnet
|
|
95
73
|
deliverySchemaUID: '0x0000000000000000000000000000000000000000000000000000000000000000'
|
|
96
74
|
},
|
|
97
75
|
gasSettings: {
|
|
@@ -133,8 +111,7 @@ export function getNetwork(network: string): NetworkConfig {
|
|
|
133
111
|
escrowVault: config.contracts.escrowVault,
|
|
134
112
|
usdc: config.contracts.usdc,
|
|
135
113
|
eas: config.contracts.eas,
|
|
136
|
-
easSchemaRegistry: config.contracts.easSchemaRegistry
|
|
137
|
-
agentRegistry: config.contracts.agentRegistry
|
|
114
|
+
easSchemaRegistry: config.contracts.easSchemaRegistry
|
|
138
115
|
},
|
|
139
116
|
eas: {
|
|
140
117
|
deliverySchemaUID: config.eas.deliverySchemaUID
|