@antseed/node 0.2.117 → 0.2.119

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (162) hide show
  1. package/README.md +30 -0
  2. package/dist/discovery/display-name.d.ts +8 -0
  3. package/dist/discovery/display-name.d.ts.map +1 -0
  4. package/dist/discovery/display-name.js +17 -0
  5. package/dist/discovery/display-name.js.map +1 -0
  6. package/dist/discovery/domain-verification.d.ts.map +1 -1
  7. package/dist/discovery/domain-verification.js +2 -1
  8. package/dist/discovery/domain-verification.js.map +1 -1
  9. package/dist/discovery/github-verification.d.ts.map +1 -1
  10. package/dist/discovery/github-verification.js +5 -1
  11. package/dist/discovery/github-verification.js.map +1 -1
  12. package/dist/discovery/index.d.ts +1 -0
  13. package/dist/discovery/index.d.ts.map +1 -1
  14. package/dist/discovery/index.js +1 -0
  15. package/dist/discovery/index.js.map +1 -1
  16. package/dist/discovery/service-catalog.d.ts +2 -1
  17. package/dist/discovery/service-catalog.d.ts.map +1 -1
  18. package/dist/discovery/service-catalog.js +2 -0
  19. package/dist/discovery/service-catalog.js.map +1 -1
  20. package/dist/discovery/verifier-capabilities.d.ts +9 -0
  21. package/dist/discovery/verifier-capabilities.d.ts.map +1 -0
  22. package/dist/discovery/verifier-capabilities.js +35 -0
  23. package/dist/discovery/verifier-capabilities.js.map +1 -0
  24. package/dist/index.d.ts +20 -2
  25. package/dist/index.d.ts.map +1 -1
  26. package/dist/index.js +19 -1
  27. package/dist/index.js.map +1 -1
  28. package/dist/node.d.ts +17 -3
  29. package/dist/node.d.ts.map +1 -1
  30. package/dist/node.js +117 -82
  31. package/dist/node.js.map +1 -1
  32. package/dist/p2p/identity.js +1 -1
  33. package/dist/p2p/identity.js.map +1 -1
  34. package/dist/payments/chain-config.d.ts +53 -0
  35. package/dist/payments/chain-config.d.ts.map +1 -1
  36. package/dist/payments/chain-config.js +43 -23
  37. package/dist/payments/chain-config.js.map +1 -1
  38. package/dist/payments/contract-stack.d.ts +53 -0
  39. package/dist/payments/contract-stack.d.ts.map +1 -0
  40. package/dist/payments/contract-stack.js +97 -0
  41. package/dist/payments/contract-stack.js.map +1 -0
  42. package/dist/payments/evm/ants-token-client.d.ts +7 -0
  43. package/dist/payments/evm/ants-token-client.d.ts.map +1 -1
  44. package/dist/payments/evm/ants-token-client.js +37 -1
  45. package/dist/payments/evm/ants-token-client.js.map +1 -1
  46. package/dist/payments/evm/emissions-client.d.ts +3 -0
  47. package/dist/payments/evm/emissions-client.d.ts.map +1 -1
  48. package/dist/payments/evm/emissions-client.js +13 -0
  49. package/dist/payments/evm/emissions-client.js.map +1 -1
  50. package/dist/payments/evm/emissions-gate-client.d.ts +51 -0
  51. package/dist/payments/evm/emissions-gate-client.d.ts.map +1 -0
  52. package/dist/payments/evm/emissions-gate-client.js +55 -0
  53. package/dist/payments/evm/emissions-gate-client.js.map +1 -0
  54. package/dist/payments/evm/multicall.d.ts +22 -0
  55. package/dist/payments/evm/multicall.d.ts.map +1 -0
  56. package/dist/payments/evm/multicall.js +73 -0
  57. package/dist/payments/evm/multicall.js.map +1 -0
  58. package/dist/payments/evm/points-policy-registry-client.d.ts +21 -0
  59. package/dist/payments/evm/points-policy-registry-client.d.ts.map +1 -0
  60. package/dist/payments/evm/points-policy-registry-client.js +34 -0
  61. package/dist/payments/evm/points-policy-registry-client.js.map +1 -0
  62. package/dist/payments/evm/position-init-client.d.ts +18 -0
  63. package/dist/payments/evm/position-init-client.d.ts.map +1 -0
  64. package/dist/payments/evm/position-init-client.js +19 -0
  65. package/dist/payments/evm/position-init-client.js.map +1 -0
  66. package/dist/payments/evm/registry-client.d.ts +17 -0
  67. package/dist/payments/evm/registry-client.d.ts.map +1 -0
  68. package/dist/payments/evm/registry-client.js +24 -0
  69. package/dist/payments/evm/registry-client.js.map +1 -0
  70. package/dist/payments/evm/seller-pools-client.d.ts +95 -0
  71. package/dist/payments/evm/seller-pools-client.d.ts.map +1 -0
  72. package/dist/payments/evm/seller-pools-client.js +193 -0
  73. package/dist/payments/evm/seller-pools-client.js.map +1 -0
  74. package/dist/payments/evm/seller-pools-rewards-client.d.ts +36 -0
  75. package/dist/payments/evm/seller-pools-rewards-client.d.ts.map +1 -0
  76. package/dist/payments/evm/seller-pools-rewards-client.js +126 -0
  77. package/dist/payments/evm/seller-pools-rewards-client.js.map +1 -0
  78. package/dist/payments/evm/seller-registry-client.d.ts +28 -0
  79. package/dist/payments/evm/seller-registry-client.d.ts.map +1 -0
  80. package/dist/payments/evm/seller-registry-client.js +60 -0
  81. package/dist/payments/evm/seller-registry-client.js.map +1 -0
  82. package/dist/payments/evm/seller-rewards-pool-client.d.ts +24 -0
  83. package/dist/payments/evm/seller-rewards-pool-client.d.ts.map +1 -0
  84. package/dist/payments/evm/seller-rewards-pool-client.js +27 -0
  85. package/dist/payments/evm/seller-rewards-pool-client.js.map +1 -0
  86. package/dist/payments/evm/trust-signals-client.d.ts +54 -0
  87. package/dist/payments/evm/trust-signals-client.d.ts.map +1 -0
  88. package/dist/payments/evm/trust-signals-client.js +162 -0
  89. package/dist/payments/evm/trust-signals-client.js.map +1 -0
  90. package/dist/payments/evm/usage-accounting-client.d.ts +49 -0
  91. package/dist/payments/evm/usage-accounting-client.d.ts.map +1 -0
  92. package/dist/payments/evm/usage-accounting-client.js +82 -0
  93. package/dist/payments/evm/usage-accounting-client.js.map +1 -0
  94. package/dist/payments/evm/usage-rewards-client.d.ts +43 -0
  95. package/dist/payments/evm/usage-rewards-client.d.ts.map +1 -0
  96. package/dist/payments/evm/usage-rewards-client.js +62 -0
  97. package/dist/payments/evm/usage-rewards-client.js.map +1 -0
  98. package/dist/payments/evm/wash-trading-registry-client.d.ts +105 -0
  99. package/dist/payments/evm/wash-trading-registry-client.d.ts.map +1 -0
  100. package/dist/payments/evm/wash-trading-registry-client.js +170 -0
  101. package/dist/payments/evm/wash-trading-registry-client.js.map +1 -0
  102. package/dist/payments/generated-contract-addresses.d.ts +59 -0
  103. package/dist/payments/generated-contract-addresses.d.ts.map +1 -0
  104. package/dist/payments/generated-contract-addresses.js +60 -0
  105. package/dist/payments/generated-contract-addresses.js.map +1 -0
  106. package/dist/payments/index.d.ts +28 -0
  107. package/dist/payments/index.d.ts.map +1 -1
  108. package/dist/payments/index.js +14 -0
  109. package/dist/payments/index.js.map +1 -1
  110. package/dist/payments/reward-claims.d.ts +28 -0
  111. package/dist/payments/reward-claims.d.ts.map +1 -0
  112. package/dist/payments/reward-claims.js +67 -0
  113. package/dist/payments/reward-claims.js.map +1 -0
  114. package/dist/payments/reward-preview.d.ts +19 -0
  115. package/dist/payments/reward-preview.d.ts.map +1 -0
  116. package/dist/payments/reward-preview.js +36 -0
  117. package/dist/payments/reward-preview.js.map +1 -0
  118. package/dist/payments/seller-payment-manager.d.ts +9 -0
  119. package/dist/payments/seller-payment-manager.d.ts.map +1 -1
  120. package/dist/payments/seller-payment-manager.js +45 -0
  121. package/dist/payments/seller-payment-manager.js.map +1 -1
  122. package/dist/reputation/identity-history.d.ts +75 -0
  123. package/dist/reputation/identity-history.d.ts.map +1 -0
  124. package/dist/reputation/identity-history.js +258 -0
  125. package/dist/reputation/identity-history.js.map +1 -0
  126. package/dist/reputation/model-reputation.d.ts +3 -2
  127. package/dist/reputation/model-reputation.d.ts.map +1 -1
  128. package/dist/reputation/model-reputation.js +2 -9
  129. package/dist/reputation/model-reputation.js.map +1 -1
  130. package/dist/reputation/public-json.d.ts +9 -0
  131. package/dist/reputation/public-json.d.ts.map +1 -0
  132. package/dist/reputation/public-json.js +98 -0
  133. package/dist/reputation/public-json.js.map +1 -0
  134. package/dist/reputation/sybil-risk.d.ts +35 -0
  135. package/dist/reputation/sybil-risk.d.ts.map +1 -0
  136. package/dist/reputation/sybil-risk.js +136 -0
  137. package/dist/reputation/sybil-risk.js.map +1 -0
  138. package/dist/reputation/trust-score.d.ts +83 -0
  139. package/dist/reputation/trust-score.d.ts.map +1 -0
  140. package/dist/reputation/trust-score.js +91 -0
  141. package/dist/reputation/trust-score.js.map +1 -0
  142. package/dist/routing/default-router.d.ts +0 -1
  143. package/dist/routing/default-router.d.ts.map +1 -1
  144. package/dist/routing/default-router.js +2 -12
  145. package/dist/routing/default-router.js.map +1 -1
  146. package/dist/routing/model-route-ranking.d.ts +0 -1
  147. package/dist/routing/model-route-ranking.d.ts.map +1 -1
  148. package/dist/routing/model-route-ranking.js.map +1 -1
  149. package/dist/seller-request-handler.d.ts.map +1 -1
  150. package/dist/seller-request-handler.js +12 -0
  151. package/dist/seller-request-handler.js.map +1 -1
  152. package/dist/types/peer.d.ts +27 -18
  153. package/dist/types/peer.d.ts.map +1 -1
  154. package/dist/verification/tee-status.d.ts +35 -0
  155. package/dist/verification/tee-status.d.ts.map +1 -0
  156. package/dist/verification/tee-status.js +21 -0
  157. package/dist/verification/tee-status.js.map +1 -0
  158. package/package.json +14 -6
  159. package/dist/reputation/on-chain-reputation.d.ts +0 -84
  160. package/dist/reputation/on-chain-reputation.d.ts.map +0 -1
  161. package/dist/reputation/on-chain-reputation.js +0 -290
  162. package/dist/reputation/on-chain-reputation.js.map +0 -1
@@ -0,0 +1,49 @@
1
+ import { type AbstractSigner } from 'ethers';
2
+ import { BaseEvmClient } from './base-evm-client.js';
3
+ export interface UsageAccountingClientConfig {
4
+ rpcUrl: string;
5
+ fallbackRpcUrls?: string[];
6
+ contractAddress: string;
7
+ evmChainId?: number;
8
+ }
9
+ export interface UsagePoints {
10
+ points: bigint;
11
+ weightedPoints: bigint;
12
+ }
13
+ export interface UsageTotals {
14
+ buyers: UsagePoints;
15
+ sellers: UsagePoints;
16
+ }
17
+ export declare class UsageAccountingClient extends BaseEvmClient {
18
+ constructor(config: UsageAccountingClientConfig);
19
+ private contract;
20
+ currentEpoch(): Promise<number>;
21
+ firstRewardedEpoch(): Promise<number>;
22
+ pendingEmissions(account: string, epochs: number[]): Promise<{
23
+ seller: bigint;
24
+ buyer: bigint;
25
+ }>;
26
+ claimSellerEmissions(signer: AbstractSigner, epochs: number[]): Promise<string>;
27
+ sellerPointsByEpoch(epoch: number, seller: string): Promise<bigint>;
28
+ buyerPointsByEpoch(epoch: number, buyer: string): Promise<bigint>;
29
+ sellerAgentIdByEpoch(epoch: number, seller: string): Promise<number>;
30
+ totalUsage(): Promise<UsageTotals>;
31
+ epochUsage(epoch: number): Promise<UsageTotals>;
32
+ buyerUsageTotal(buyer: string): Promise<UsagePoints>;
33
+ buyerEpochUsage(epoch: number, buyer: string): Promise<UsagePoints>;
34
+ agentEpochUsage(epoch: number, agentId: number): Promise<UsagePoints>;
35
+ totalBuyerPointsByEpoch(epoch: number): Promise<bigint>;
36
+ totalSellerPointsByEpoch(epoch: number): Promise<bigint>;
37
+ totalPoolPointsByEpoch(epoch: number): Promise<bigint>;
38
+ totalWeightedPoolPointsByEpoch(epoch: number): Promise<bigint>;
39
+ totalWeightedBuyerPointsByEpoch(epoch: number): Promise<bigint>;
40
+ agentPoolPointsByEpoch(epoch: number, agentId: number): Promise<bigint>;
41
+ weightedPoolPointsByEpoch(epoch: number, agentId: number): Promise<bigint>;
42
+ weightedBuyerPointsByEpoch(epoch: number, buyer: string): Promise<bigint>;
43
+ pointsPolicy(): Promise<string>;
44
+ poolWeightPolicy(): Promise<string>;
45
+ minimumAccountedPoolPower(): Promise<bigint>;
46
+ sellerPools(): Promise<string>;
47
+ usageRewards(): Promise<string>;
48
+ }
49
+ //# sourceMappingURL=usage-accounting-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usage-accounting-client.d.ts","sourceRoot":"","sources":["../../../src/payments/evm/usage-accounting-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,cAAc,EAAE,MAAM,QAAQ,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD,MAAM,WAAW,2BAA2B;IAC1C,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,WAAW;IAAG,MAAM,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAC;CAAE;AACxE,MAAM,WAAW,WAAW;IAAG,MAAM,EAAE,WAAW,CAAC;IAAC,OAAO,EAAE,WAAW,CAAC;CAAE;AAmC3E,qBAAa,qBAAsB,SAAQ,aAAa;gBAC1C,MAAM,EAAE,2BAA2B;IAG/C,OAAO,CAAC,QAAQ;IAEV,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC;IAC/B,kBAAkB,IAAI,OAAO,CAAC,MAAM,CAAC;IACrC,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAIrG,oBAAoB,CAAC,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IAG/E,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAGnE,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAG3D,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAGpE,UAAU,IAAI,OAAO,CAAC,WAAW,CAAC;IAIlC,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAI/C,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IACpD,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IACnE,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAC3E,uBAAuB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IACvD,wBAAwB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IACxD,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IACtD,8BAA8B,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAC9D,+BAA+B,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAC/D,sBAAsB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IACvE,yBAAyB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAC1E,0BAA0B,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IACzE,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC;IAC/B,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC;IACnC,yBAAyB,IAAI,OAAO,CAAC,MAAM,CAAC;IAC5C,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC;IAC9B,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC;CAChC"}
@@ -0,0 +1,82 @@
1
+ import { Contract } from 'ethers';
2
+ import { BaseEvmClient } from './base-evm-client.js';
3
+ const USAGE_ACCOUNTING_ABI = [
4
+ 'function currentEpoch() external view returns (uint256)',
5
+ 'function firstRewardedEpoch() external view returns (uint256)',
6
+ 'function pendingEmissions(address account, uint256[] epochs) external view returns (uint256 seller, uint256 buyer)',
7
+ 'function claimSellerEmissions(uint256[] epochs) external',
8
+ 'function sellerPointsByEpoch(uint256 epoch, address seller) external view returns (uint256)',
9
+ 'function buyerPointsByEpoch(uint256 epoch, address buyer) external view returns (uint256)',
10
+ 'function sellerAgentIdByEpoch(uint256 epoch, address seller) external view returns (uint256)',
11
+ 'function totalUsage() external view returns (tuple(tuple(uint256 points, uint256 weightedPoints) buyers, tuple(uint256 points, uint256 weightedPoints) sellers))',
12
+ 'function epochUsage(uint256 epoch) external view returns (tuple(tuple(uint256 points, uint256 weightedPoints) buyers, tuple(uint256 points, uint256 weightedPoints) sellers))',
13
+ 'function buyerUsageTotal(address buyer) external view returns (tuple(uint256 points, uint256 weightedPoints))',
14
+ 'function buyerEpochUsage(uint256 epoch, address buyer) external view returns (tuple(uint256 points, uint256 weightedPoints))',
15
+ 'function agentEpochUsage(uint256 epoch, uint256 agentId) external view returns (tuple(uint256 points, uint256 weightedPoints))',
16
+ 'function totalBuyerPointsByEpoch(uint256 epoch) external view returns (uint256)',
17
+ 'function totalSellerPointsByEpoch(uint256 epoch) external view returns (uint256)',
18
+ 'function totalPoolPointsByEpoch(uint256 epoch) external view returns (uint256)',
19
+ 'function totalWeightedPoolPointsByEpoch(uint256 epoch) external view returns (uint256)',
20
+ 'function totalWeightedBuyerPointsByEpoch(uint256 epoch) external view returns (uint256)',
21
+ 'function agentPoolPointsByEpoch(uint256 epoch, uint256 agentId) external view returns (uint256)',
22
+ 'function weightedPoolPointsByEpoch(uint256 epoch, uint256 agentId) external view returns (uint256)',
23
+ 'function weightedBuyerPointsByEpoch(uint256 epoch, address buyer) external view returns (uint256)',
24
+ 'function pointsPolicy() external view returns (address)',
25
+ 'function poolWeightPolicy() external view returns (address)',
26
+ 'function minimumAccountedPoolPower() external view returns (uint256)',
27
+ 'function sellerPools() external view returns (address)',
28
+ 'function usageRewards() external view returns (address)',
29
+ ];
30
+ function toPoints(result) {
31
+ const tuple = result;
32
+ return { points: tuple[0], weightedPoints: tuple[1] };
33
+ }
34
+ export class UsageAccountingClient extends BaseEvmClient {
35
+ constructor(config) {
36
+ super(config.rpcUrl, config.contractAddress, config.fallbackRpcUrls, config.evmChainId);
37
+ }
38
+ contract() { return new Contract(this._contractAddress, USAGE_ACCOUNTING_ABI, this._provider); }
39
+ async currentEpoch() { return Number(await this.contract().getFunction('currentEpoch')()); }
40
+ async firstRewardedEpoch() { return Number(await this.contract().getFunction('firstRewardedEpoch')()); }
41
+ async pendingEmissions(account, epochs) {
42
+ const [seller, buyer] = await this.contract().getFunction('pendingEmissions')(account, epochs);
43
+ return { seller, buyer };
44
+ }
45
+ claimSellerEmissions(signer, epochs) {
46
+ return this._execWrite(signer, USAGE_ACCOUNTING_ABI, 'claimSellerEmissions', epochs);
47
+ }
48
+ sellerPointsByEpoch(epoch, seller) {
49
+ return this.contract().getFunction('sellerPointsByEpoch')(epoch, seller);
50
+ }
51
+ buyerPointsByEpoch(epoch, buyer) {
52
+ return this.contract().getFunction('buyerPointsByEpoch')(epoch, buyer);
53
+ }
54
+ async sellerAgentIdByEpoch(epoch, seller) {
55
+ return Number(await this.contract().getFunction('sellerAgentIdByEpoch')(epoch, seller));
56
+ }
57
+ async totalUsage() {
58
+ const result = await this.contract().getFunction('totalUsage')();
59
+ return { buyers: toPoints(result[0]), sellers: toPoints(result[1]) };
60
+ }
61
+ async epochUsage(epoch) {
62
+ const result = await this.contract().getFunction('epochUsage')(epoch);
63
+ return { buyers: toPoints(result[0]), sellers: toPoints(result[1]) };
64
+ }
65
+ async buyerUsageTotal(buyer) { return toPoints(await this.contract().getFunction('buyerUsageTotal')(buyer)); }
66
+ async buyerEpochUsage(epoch, buyer) { return toPoints(await this.contract().getFunction('buyerEpochUsage')(epoch, buyer)); }
67
+ async agentEpochUsage(epoch, agentId) { return toPoints(await this.contract().getFunction('agentEpochUsage')(epoch, agentId)); }
68
+ totalBuyerPointsByEpoch(epoch) { return this.contract().getFunction('totalBuyerPointsByEpoch')(epoch); }
69
+ totalSellerPointsByEpoch(epoch) { return this.contract().getFunction('totalSellerPointsByEpoch')(epoch); }
70
+ totalPoolPointsByEpoch(epoch) { return this.contract().getFunction('totalPoolPointsByEpoch')(epoch); }
71
+ totalWeightedPoolPointsByEpoch(epoch) { return this.contract().getFunction('totalWeightedPoolPointsByEpoch')(epoch); }
72
+ totalWeightedBuyerPointsByEpoch(epoch) { return this.contract().getFunction('totalWeightedBuyerPointsByEpoch')(epoch); }
73
+ agentPoolPointsByEpoch(epoch, agentId) { return this.contract().getFunction('agentPoolPointsByEpoch')(epoch, agentId); }
74
+ weightedPoolPointsByEpoch(epoch, agentId) { return this.contract().getFunction('weightedPoolPointsByEpoch(uint256,uint256)')(epoch, agentId); }
75
+ weightedBuyerPointsByEpoch(epoch, buyer) { return this.contract().getFunction('weightedBuyerPointsByEpoch')(epoch, buyer); }
76
+ pointsPolicy() { return this.contract().getFunction('pointsPolicy')(); }
77
+ poolWeightPolicy() { return this.contract().getFunction('poolWeightPolicy')(); }
78
+ minimumAccountedPoolPower() { return this.contract().getFunction('minimumAccountedPoolPower')(); }
79
+ sellerPools() { return this.contract().getFunction('sellerPools')(); }
80
+ usageRewards() { return this.contract().getFunction('usageRewards')(); }
81
+ }
82
+ //# sourceMappingURL=usage-accounting-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usage-accounting-client.js","sourceRoot":"","sources":["../../../src/payments/evm/usage-accounting-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAuB,MAAM,QAAQ,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAYrD,MAAM,oBAAoB,GAAG;IAC3B,yDAAyD;IACzD,+DAA+D;IAC/D,oHAAoH;IACpH,0DAA0D;IAC1D,6FAA6F;IAC7F,2FAA2F;IAC3F,8FAA8F;IAC9F,kKAAkK;IAClK,+KAA+K;IAC/K,+GAA+G;IAC/G,8HAA8H;IAC9H,gIAAgI;IAChI,iFAAiF;IACjF,kFAAkF;IAClF,gFAAgF;IAChF,wFAAwF;IACxF,yFAAyF;IACzF,iGAAiG;IACjG,oGAAoG;IACpG,mGAAmG;IACnG,yDAAyD;IACzD,6DAA6D;IAC7D,sEAAsE;IACtE,wDAAwD;IACxD,yDAAyD;CACjD,CAAC;AAEX,SAAS,QAAQ,CAAC,MAAmD;IACnE,MAAM,KAAK,GAAG,MAAqC,CAAC;IACpD,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;AACxD,CAAC;AAED,MAAM,OAAO,qBAAsB,SAAQ,aAAa;IACtD,YAAY,MAAmC;QAC7C,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,eAAe,EAAE,MAAM,CAAC,eAAe,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;IAC1F,CAAC;IACO,QAAQ,KAAe,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,gBAAgB,EAAE,oBAAoB,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IAElH,KAAK,CAAC,YAAY,KAAsB,OAAO,MAAM,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC,WAAW,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC7G,KAAK,CAAC,kBAAkB,KAAsB,OAAO,MAAM,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC,WAAW,CAAC,oBAAoB,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACzH,KAAK,CAAC,gBAAgB,CAAC,OAAe,EAAE,MAAgB;QACtD,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC,WAAW,CAAC,kBAAkB,CAAC,CAAC,OAAO,EAAE,MAAM,CAAqB,CAAC;QACnH,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;IAC3B,CAAC;IACD,oBAAoB,CAAC,MAAsB,EAAE,MAAgB;QAC3D,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,MAAM,CAAC,CAAC;IACvF,CAAC;IACD,mBAAmB,CAAC,KAAa,EAAE,MAAc;QAC/C,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC,WAAW,CAAC,qBAAqB,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAC3E,CAAC;IACD,kBAAkB,CAAC,KAAa,EAAE,KAAa;QAC7C,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC,WAAW,CAAC,oBAAoB,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IACzE,CAAC;IACD,KAAK,CAAC,oBAAoB,CAAC,KAAa,EAAE,MAAc;QACtD,OAAO,MAAM,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC,WAAW,CAAC,sBAAsB,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;IAC1F,CAAC;IACD,KAAK,CAAC,UAAU;QACd,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC,WAAW,CAAC,YAAY,CAAC,EAAE,CAAC;QACjE,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACvE,CAAC;IACD,KAAK,CAAC,UAAU,CAAC,KAAa;QAC5B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,CAAC;QACtE,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACvE,CAAC;IACD,KAAK,CAAC,eAAe,CAAC,KAAa,IAA0B,OAAO,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5I,KAAK,CAAC,eAAe,CAAC,KAAa,EAAE,KAAa,IAA0B,OAAO,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAClK,KAAK,CAAC,eAAe,CAAC,KAAa,EAAE,OAAe,IAA0B,OAAO,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IACtK,uBAAuB,CAAC,KAAa,IAAqB,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC,WAAW,CAAC,yBAAyB,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACjI,wBAAwB,CAAC,KAAa,IAAqB,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC,WAAW,CAAC,0BAA0B,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACnI,sBAAsB,CAAC,KAAa,IAAqB,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC,WAAW,CAAC,wBAAwB,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC/H,8BAA8B,CAAC,KAAa,IAAqB,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC,WAAW,CAAC,gCAAgC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC/I,+BAA+B,CAAC,KAAa,IAAqB,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC,WAAW,CAAC,iCAAiC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACjJ,sBAAsB,CAAC,KAAa,EAAE,OAAe,IAAqB,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC,WAAW,CAAC,wBAAwB,CAAC,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IACzJ,yBAAyB,CAAC,KAAa,EAAE,OAAe,IAAqB,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC,WAAW,CAAC,4CAA4C,CAAC,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IAChL,0BAA0B,CAAC,KAAa,EAAE,KAAa,IAAqB,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC,WAAW,CAAC,4BAA4B,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;IAC7J,YAAY,KAAsB,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC,WAAW,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,CAAC;IACzF,gBAAgB,KAAsB,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC,WAAW,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC,CAAC;IACjG,yBAAyB,KAAsB,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC,WAAW,CAAC,2BAA2B,CAAC,EAAE,CAAC,CAAC,CAAC;IACnH,WAAW,KAAsB,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC,WAAW,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,CAAC;IACvF,YAAY,KAAsB,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC,WAAW,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,CAAC;CAC1F"}
@@ -0,0 +1,43 @@
1
+ import { type AbstractSigner } from 'ethers';
2
+ import { BaseEvmClient } from './base-evm-client.js';
3
+ export interface UsageRewardsClientConfig {
4
+ rpcUrl: string;
5
+ fallbackRpcUrls?: string[];
6
+ contractAddress: string;
7
+ evmChainId?: number;
8
+ }
9
+ export interface DynamicUsageConfig {
10
+ buyerMinShareBps: number;
11
+ buyerMaxShareBps: number;
12
+ sellerMinShareBps: number;
13
+ sellerMaxShareBps: number;
14
+ volumeShareTarget: bigint;
15
+ }
16
+ export declare class UsageRewardsClient extends BaseEvmClient {
17
+ constructor(config: UsageRewardsClientConfig);
18
+ private contract;
19
+ pendingAgentReward(agentId: number, epoch: number): Promise<bigint>;
20
+ pendingBuyerReward(buyer: string, epoch: number): Promise<bigint>;
21
+ agentEpochClaimed(agentId: number, epoch: number): Promise<boolean>;
22
+ buyerEpochClaimed(buyer: string, epoch: number): Promise<boolean>;
23
+ claimAgentReward(signer: AbstractSigner, agentId: number, epoch: number): Promise<string>;
24
+ claimBuyerReward(signer: AbstractSigner, buyer: string, epoch: number): Promise<string>;
25
+ /** Claim an agent's usage reward straight into a new locked pool position (agent owner only). */
26
+ stakeAgentReward(signer: AbstractSigner, agentId: number, epoch: number, stakeEpochs: number): Promise<string>;
27
+ /** Claim a buyer's usage reward straight into a new locked pool position (deposits operator only). */
28
+ stakeBuyerReward(signer: AbstractSigner, buyer: string, epoch: number, stakeAgentId: number, stakeEpochs: number): Promise<string>;
29
+ rewardRecipient(agentId: number): Promise<string>;
30
+ buyerEpochBudget(epoch: number): Promise<bigint>;
31
+ sellerEpochBudget(epoch: number): Promise<bigint>;
32
+ usageEpochBudgets(epoch: number): Promise<{
33
+ buyer: bigint;
34
+ seller: bigint;
35
+ }>;
36
+ allocatedEpochBudget(epoch: number): Promise<bigint>;
37
+ dynamicUsageConfigAt(epoch: number): Promise<DynamicUsageConfig>;
38
+ operatorSource(): Promise<string>;
39
+ claimForwarder(): Promise<string>;
40
+ paused(): Promise<boolean>;
41
+ maxRewardShareBps(): Promise<number>;
42
+ }
43
+ //# sourceMappingURL=usage-rewards-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usage-rewards-client.d.ts","sourceRoot":"","sources":["../../../src/payments/evm/usage-rewards-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,cAAc,EAAE,MAAM,QAAQ,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD,MAAM,WAAW,wBAAwB;IACvC,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,kBAAkB;IACjC,gBAAgB,EAAE,MAAM,CAAC;IACzB,gBAAgB,EAAE,MAAM,CAAC;IACzB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAuBD,qBAAa,kBAAmB,SAAQ,aAAa;gBACvC,MAAM,EAAE,wBAAwB;IAG5C,OAAO,CAAC,QAAQ;IAEhB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IACnE,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IACjE,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IACnE,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IACjE,gBAAgB,CAAC,MAAM,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IACzF,gBAAgB,CAAC,MAAM,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IACvF,iGAAiG;IACjG,gBAAgB,CAAC,MAAM,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAG9G,sGAAsG;IACtG,gBAAgB,CAAC,MAAM,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAGlI,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IACjD,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAChD,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAC3C,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAIlF,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAC9C,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAOtE,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC;IACjC,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC;IACjC,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC;IACpB,iBAAiB,IAAI,OAAO,CAAC,MAAM,CAAC;CAC3C"}
@@ -0,0 +1,62 @@
1
+ import { Contract } from 'ethers';
2
+ import { BaseEvmClient } from './base-evm-client.js';
3
+ const USAGE_REWARDS_ABI = [
4
+ 'function pendingAgentReward(uint256 agentId, uint256 epoch) external view returns (uint256)',
5
+ 'function pendingBuyerReward(address buyer, uint256 epoch) external view returns (uint256)',
6
+ 'function agentEpochClaimed(uint256 agentId, uint256 epoch) external view returns (bool)',
7
+ 'function buyerEpochClaimed(address buyer, uint256 epoch) external view returns (bool)',
8
+ 'function claimAgentReward(uint256 agentId, uint256 epoch) external',
9
+ 'function claimBuyerReward(address buyer, uint256 epoch) external',
10
+ 'function stakeAgentReward(uint256 agentId, uint256 epoch, uint256 stakeEpochs) external returns (uint256 newPositionId)',
11
+ 'function stakeBuyerReward(address buyer, uint256 epoch, uint256 stakeAgentId, uint256 stakeEpochs) external returns (uint256 newPositionId)',
12
+ 'function rewardRecipient(uint256 agentId) external view returns (address)',
13
+ 'function buyerEpochBudget(uint256 epoch) external view returns (uint256)',
14
+ 'function sellerEpochBudget(uint256 epoch) external view returns (uint256)',
15
+ 'function usageEpochBudgets(uint256 epoch) external view returns (uint256 buyerBudget, uint256 sellerBudget)',
16
+ 'function allocatedEpochBudget(uint256 epoch) external view returns (uint256)',
17
+ 'function dynamicUsageConfigAt(uint256 epoch) external view returns (tuple(uint32 buyerMinShareBps, uint32 buyerMaxShareBps, uint32 sellerMinShareBps, uint32 sellerMaxShareBps, uint256 volumeShareTarget))',
18
+ 'function operatorSource() external view returns (address)',
19
+ 'function claimForwarder() external view returns (address)',
20
+ 'function paused() external view returns (bool)',
21
+ 'function MAX_REWARD_SHARE_BPS() external view returns (uint256)',
22
+ ];
23
+ export class UsageRewardsClient extends BaseEvmClient {
24
+ constructor(config) {
25
+ super(config.rpcUrl, config.contractAddress, config.fallbackRpcUrls, config.evmChainId);
26
+ }
27
+ contract() { return new Contract(this._contractAddress, USAGE_REWARDS_ABI, this._provider); }
28
+ pendingAgentReward(agentId, epoch) { return this.contract().getFunction('pendingAgentReward')(agentId, epoch); }
29
+ pendingBuyerReward(buyer, epoch) { return this.contract().getFunction('pendingBuyerReward')(buyer, epoch); }
30
+ agentEpochClaimed(agentId, epoch) { return this.contract().getFunction('agentEpochClaimed')(agentId, epoch); }
31
+ buyerEpochClaimed(buyer, epoch) { return this.contract().getFunction('buyerEpochClaimed')(buyer, epoch); }
32
+ claimAgentReward(signer, agentId, epoch) { return this._execWrite(signer, USAGE_REWARDS_ABI, 'claimAgentReward', agentId, epoch); }
33
+ claimBuyerReward(signer, buyer, epoch) { return this._execWrite(signer, USAGE_REWARDS_ABI, 'claimBuyerReward', buyer, epoch); }
34
+ /** Claim an agent's usage reward straight into a new locked pool position (agent owner only). */
35
+ stakeAgentReward(signer, agentId, epoch, stakeEpochs) {
36
+ return this._execWrite(signer, USAGE_REWARDS_ABI, 'stakeAgentReward', agentId, epoch, stakeEpochs);
37
+ }
38
+ /** Claim a buyer's usage reward straight into a new locked pool position (deposits operator only). */
39
+ stakeBuyerReward(signer, buyer, epoch, stakeAgentId, stakeEpochs) {
40
+ return this._execWrite(signer, USAGE_REWARDS_ABI, 'stakeBuyerReward', buyer, epoch, stakeAgentId, stakeEpochs);
41
+ }
42
+ rewardRecipient(agentId) { return this.contract().getFunction('rewardRecipient')(agentId); }
43
+ buyerEpochBudget(epoch) { return this.contract().getFunction('buyerEpochBudget')(epoch); }
44
+ sellerEpochBudget(epoch) { return this.contract().getFunction('sellerEpochBudget')(epoch); }
45
+ async usageEpochBudgets(epoch) {
46
+ const [buyer, seller] = await this.contract().getFunction('usageEpochBudgets')(epoch);
47
+ return { buyer, seller };
48
+ }
49
+ allocatedEpochBudget(epoch) { return this.contract().getFunction('allocatedEpochBudget')(epoch); }
50
+ async dynamicUsageConfigAt(epoch) {
51
+ const result = await this.contract().getFunction('dynamicUsageConfigAt')(epoch);
52
+ return {
53
+ buyerMinShareBps: Number(result[0]), buyerMaxShareBps: Number(result[1]),
54
+ sellerMinShareBps: Number(result[2]), sellerMaxShareBps: Number(result[3]), volumeShareTarget: result[4],
55
+ };
56
+ }
57
+ operatorSource() { return this.contract().getFunction('operatorSource')(); }
58
+ claimForwarder() { return this.contract().getFunction('claimForwarder')(); }
59
+ paused() { return this.contract().getFunction('paused')(); }
60
+ async maxRewardShareBps() { return Number(await this.contract().getFunction('MAX_REWARD_SHARE_BPS')()); }
61
+ }
62
+ //# sourceMappingURL=usage-rewards-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usage-rewards-client.js","sourceRoot":"","sources":["../../../src/payments/evm/usage-rewards-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,105 @@
1
+ import { type AbstractSigner } from 'ethers';
2
+ import { BaseEvmClient } from './base-evm-client.js';
3
+ export interface WashTradingRegistryClientConfig {
4
+ rpcUrl: string;
5
+ fallbackRpcUrls?: string[];
6
+ contractAddress: string;
7
+ evmChainId?: number;
8
+ }
9
+ export interface WashTradingSellerStatus {
10
+ seller: string;
11
+ provenWashVolume: bigint;
12
+ totalSellerVolume: bigint;
13
+ provenWashShareBps: number;
14
+ evidenceDigest: string;
15
+ isProvenWashTrader: boolean;
16
+ thresholdBps: number;
17
+ }
18
+ export interface WashTradingProofStatus {
19
+ proofId: string;
20
+ staged: boolean;
21
+ finalized: boolean;
22
+ authenticatedBlockReferenceCount: number;
23
+ authenticatedBlockChunkCount: number;
24
+ }
25
+ export interface WashTradingRegistryConfig {
26
+ verifierHash: string;
27
+ sellerProgramVKey: string;
28
+ periodStartBlock: number;
29
+ periodEndBlock: number;
30
+ thresholdBps: number;
31
+ blockhashStore: string;
32
+ verifier: string;
33
+ }
34
+ export interface BlockReference {
35
+ number: number;
36
+ blockHash: string;
37
+ }
38
+ /** Chunk from a loop-proof `antseed-wash-trading-seller-proof` artifact. */
39
+ export interface BlockAuthenticationChunk {
40
+ index: number;
41
+ references: BlockReference[];
42
+ proof: string[];
43
+ }
44
+ /**
45
+ * Seller proof artifact produced by the loop-proof host
46
+ * (`kind: antseed-wash-trading-seller-proof`, `proofArchitecture: direct-seller-v1`).
47
+ */
48
+ export interface SellerProofArtifact {
49
+ version: number;
50
+ kind: string;
51
+ proofArchitecture?: string;
52
+ chainId?: number;
53
+ seller: string;
54
+ publicValues: string;
55
+ proofBytes: string;
56
+ evidenceDigest?: string;
57
+ blockReferenceCount: number;
58
+ blockAuthenticationRoot?: string;
59
+ blockAuthenticationChunkSize: number;
60
+ blockAuthenticationChunkCount: number;
61
+ blockAuthenticationChunks: BlockAuthenticationChunk[];
62
+ }
63
+ export type SellerProofSubmissionStep = {
64
+ kind: 'stage';
65
+ proofId: string;
66
+ hash?: string;
67
+ skipped: boolean;
68
+ } | {
69
+ kind: 'authenticate';
70
+ proofId: string;
71
+ chunkIndex: number;
72
+ chunkCount: number;
73
+ hash?: string;
74
+ skipped: boolean;
75
+ } | {
76
+ kind: 'finalize';
77
+ proofId: string;
78
+ hash?: string;
79
+ skipped: boolean;
80
+ };
81
+ export declare function sellerProofId(publicValues: string): string;
82
+ /** Structural validation of a loop-proof seller artifact before any transaction is sent. */
83
+ export declare function validateSellerProofArtifact(artifact: unknown): SellerProofArtifact;
84
+ export declare class WashTradingRegistryClient extends BaseEvmClient {
85
+ constructor(config: WashTradingRegistryClientConfig);
86
+ private contract;
87
+ registryConfig(): Promise<WashTradingRegistryConfig>;
88
+ sellerStatus(seller: string): Promise<WashTradingSellerStatus>;
89
+ isProvenWashTrader(seller: string): Promise<boolean>;
90
+ proofStatus(proofId: string): Promise<WashTradingProofStatus>;
91
+ proofBlockChunkAuthenticated(proofId: string, chunkIndex: number): Promise<boolean>;
92
+ stageSellerProof(signer: AbstractSigner, publicValues: string, proofBytes: string): Promise<string>;
93
+ authenticateBlockReferences(signer: AbstractSigner, proofId: string, chunk: BlockAuthenticationChunk): Promise<string>;
94
+ finalizeSellerProof(signer: AbstractSigner, proofId: string): Promise<string>;
95
+ /**
96
+ * Stage, authenticate every committed chunk, and finalize a seller proof.
97
+ * Resumable: steps already recorded on chain are skipped, so an interrupted
98
+ * submission can be re-run with the same artifact.
99
+ */
100
+ submitSellerProof(signer: AbstractSigner, artifact: SellerProofArtifact, onStep?: (step: SellerProofSubmissionStep) => void | Promise<void>): Promise<{
101
+ proofId: string;
102
+ finalized: boolean;
103
+ }>;
104
+ }
105
+ //# sourceMappingURL=wash-trading-registry-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wash-trading-registry-client.d.ts","sourceRoot":"","sources":["../../../src/payments/evm/wash-trading-registry-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,170 @@
1
+ import { Contract, keccak256 } from 'ethers';
2
+ import { BaseEvmClient } from './base-evm-client.js';
3
+ const ABI = [
4
+ 'function stageSellerProof(bytes publicValues, bytes proofBytes) external returns (bytes32 proofId)',
5
+ 'function authenticateBlockReferences(bytes32 proofId, uint32 chunkIndex, tuple(uint64 number, bytes32 blockHash)[] references, bytes32[] proof) external',
6
+ 'function finalizeSellerProof(bytes32 proofId) external',
7
+ 'function verifier() external view returns (address)',
8
+ 'function verifierHash() external view returns (bytes32)',
9
+ 'function blockhashStore() external view returns (address)',
10
+ 'function sellerProgramVKey() external view returns (bytes32)',
11
+ 'function periodStartBlock() external view returns (uint64)',
12
+ 'function periodEndBlock() external view returns (uint64)',
13
+ 'function WASH_TRADING_THRESHOLD_BPS() external view returns (uint256)',
14
+ 'function proofStaged(bytes32 proofId) external view returns (bool)',
15
+ 'function proofFinalized(bytes32 proofId) external view returns (bool)',
16
+ 'function proofAuthenticatedBlockReferenceCount(bytes32 proofId) external view returns (uint32)',
17
+ 'function proofAuthenticatedBlockChunkCount(bytes32 proofId) external view returns (uint32)',
18
+ 'function proofBlockChunkAuthenticated(bytes32 proofId, uint32 chunkIndex) external view returns (bool)',
19
+ 'function provenWashVolume(address seller) external view returns (uint128)',
20
+ 'function totalSellerVolume(address seller) external view returns (uint128)',
21
+ 'function provenWashShareBps(address seller) external view returns (uint256)',
22
+ 'function sellerEvidenceDigest(address seller) external view returns (bytes32)',
23
+ 'function isProvenWashTrader(address seller) external view returns (bool)',
24
+ ];
25
+ const BYTES32 = /^0x[0-9a-f]{64}$/i;
26
+ const HEX = /^0x(?:[0-9a-f]{2})*$/i;
27
+ export function sellerProofId(publicValues) {
28
+ return keccak256(publicValues);
29
+ }
30
+ /** Structural validation of a loop-proof seller artifact before any transaction is sent. */
31
+ export function validateSellerProofArtifact(artifact) {
32
+ const value = artifact;
33
+ if (!value || typeof value !== 'object')
34
+ throw new Error('Seller proof artifact must be a JSON object.');
35
+ if (value.kind !== 'antseed-wash-trading-seller-proof')
36
+ throw new Error(`Unexpected artifact kind '${String(value.kind)}'; expected antseed-wash-trading-seller-proof.`);
37
+ if (value.proofArchitecture !== undefined && value.proofArchitecture !== 'direct-seller-v1') {
38
+ throw new Error(`Unsupported proof architecture '${String(value.proofArchitecture)}'; the registry accepts direct-seller-v1.`);
39
+ }
40
+ if (typeof value.publicValues !== 'string' || !HEX.test(value.publicValues) || value.publicValues.length <= 2)
41
+ throw new Error('Artifact publicValues must be hex bytes.');
42
+ if (typeof value.proofBytes !== 'string' || !HEX.test(value.proofBytes) || value.proofBytes.length <= 2)
43
+ throw new Error('Artifact proofBytes must be hex bytes.');
44
+ if (typeof value.seller !== 'string' || !/^0x[0-9a-f]{40}$/i.test(value.seller))
45
+ throw new Error('Artifact seller must be an address.');
46
+ const chunkSize = Number(value.blockAuthenticationChunkSize);
47
+ const chunkCount = Number(value.blockAuthenticationChunkCount);
48
+ const referenceCount = Number(value.blockReferenceCount);
49
+ if (!Number.isSafeInteger(chunkSize) || chunkSize <= 0)
50
+ throw new Error('Artifact blockAuthenticationChunkSize must be positive.');
51
+ if (!Number.isSafeInteger(chunkCount) || chunkCount <= 0)
52
+ throw new Error('Artifact blockAuthenticationChunkCount must be positive.');
53
+ const chunks = value.blockAuthenticationChunks;
54
+ if (!Array.isArray(chunks) || chunks.length !== chunkCount)
55
+ throw new Error(`Artifact has ${Array.isArray(chunks) ? chunks.length : 0} chunks but declares ${chunkCount}.`);
56
+ let previous = 0;
57
+ let total = 0;
58
+ const normalized = chunks.map((chunk, index) => {
59
+ if (!chunk || chunk.index !== index)
60
+ throw new Error(`Chunk ${index} is missing or out of order.`);
61
+ if (!Array.isArray(chunk.references) || chunk.references.length === 0 || chunk.references.length > chunkSize)
62
+ throw new Error(`Chunk ${index} has an invalid reference count.`);
63
+ if (index < chunkCount - 1 && chunk.references.length !== chunkSize)
64
+ throw new Error(`Chunk ${index} must hold exactly ${chunkSize} references.`);
65
+ if (!Array.isArray(chunk.proof) || chunk.proof.some((node) => typeof node !== 'string' || !BYTES32.test(node)))
66
+ throw new Error(`Chunk ${index} has an invalid Merkle proof.`);
67
+ const references = chunk.references.map((reference) => {
68
+ const number = Number(reference.number);
69
+ if (!Number.isSafeInteger(number) || number <= previous)
70
+ throw new Error(`Chunk ${index} block references must be strictly increasing.`);
71
+ if (typeof reference.blockHash !== 'string' || !BYTES32.test(reference.blockHash))
72
+ throw new Error(`Chunk ${index} has an invalid block hash.`);
73
+ previous = number;
74
+ return { number, blockHash: reference.blockHash.toLowerCase() };
75
+ });
76
+ total += references.length;
77
+ return { index, references, proof: chunk.proof.map((node) => node.toLowerCase()) };
78
+ });
79
+ if (total !== referenceCount)
80
+ throw new Error(`Artifact chunks hold ${total} references but declare ${referenceCount}.`);
81
+ return {
82
+ version: Number(value.version), kind: value.kind, proofArchitecture: value.proofArchitecture, chainId: value.chainId,
83
+ seller: value.seller, publicValues: value.publicValues, proofBytes: value.proofBytes, evidenceDigest: value.evidenceDigest,
84
+ blockReferenceCount: referenceCount, blockAuthenticationRoot: value.blockAuthenticationRoot,
85
+ blockAuthenticationChunkSize: chunkSize, blockAuthenticationChunkCount: chunkCount, blockAuthenticationChunks: normalized,
86
+ };
87
+ }
88
+ export class WashTradingRegistryClient extends BaseEvmClient {
89
+ constructor(config) { super(config.rpcUrl, config.contractAddress, config.fallbackRpcUrls, config.evmChainId); }
90
+ contract() { return new Contract(this._contractAddress, ABI, this._provider); }
91
+ async registryConfig() {
92
+ const contract = this.contract();
93
+ const [verifier, verifierHash, blockhashStore, sellerProgramVKey, periodStartBlock, periodEndBlock, thresholdBps] = await Promise.all([
94
+ contract.getFunction('verifier')(), contract.getFunction('verifierHash')(), contract.getFunction('blockhashStore')(),
95
+ contract.getFunction('sellerProgramVKey')(), contract.getFunction('periodStartBlock')(), contract.getFunction('periodEndBlock')(),
96
+ contract.getFunction('WASH_TRADING_THRESHOLD_BPS')(),
97
+ ]);
98
+ return {
99
+ verifier, verifierHash, blockhashStore, sellerProgramVKey,
100
+ periodStartBlock: Number(periodStartBlock), periodEndBlock: Number(periodEndBlock), thresholdBps: Number(thresholdBps),
101
+ };
102
+ }
103
+ async sellerStatus(seller) {
104
+ const contract = this.contract();
105
+ const [provenWashVolume, totalSellerVolume, provenWashShareBps, evidenceDigest, isProvenWashTrader, thresholdBps] = await Promise.all([
106
+ contract.getFunction('provenWashVolume')(seller), contract.getFunction('totalSellerVolume')(seller),
107
+ contract.getFunction('provenWashShareBps')(seller), contract.getFunction('sellerEvidenceDigest')(seller),
108
+ contract.getFunction('isProvenWashTrader')(seller), contract.getFunction('WASH_TRADING_THRESHOLD_BPS')(),
109
+ ]);
110
+ return {
111
+ seller, provenWashVolume, totalSellerVolume, provenWashShareBps: Number(provenWashShareBps), evidenceDigest,
112
+ isProvenWashTrader, thresholdBps: Number(thresholdBps),
113
+ };
114
+ }
115
+ isProvenWashTrader(seller) { return this.contract().getFunction('isProvenWashTrader')(seller); }
116
+ async proofStatus(proofId) {
117
+ const contract = this.contract();
118
+ const [staged, finalized, references, chunks] = await Promise.all([
119
+ contract.getFunction('proofStaged')(proofId), contract.getFunction('proofFinalized')(proofId),
120
+ contract.getFunction('proofAuthenticatedBlockReferenceCount')(proofId), contract.getFunction('proofAuthenticatedBlockChunkCount')(proofId),
121
+ ]);
122
+ return { proofId, staged, finalized, authenticatedBlockReferenceCount: Number(references), authenticatedBlockChunkCount: Number(chunks) };
123
+ }
124
+ proofBlockChunkAuthenticated(proofId, chunkIndex) {
125
+ return this.contract().getFunction('proofBlockChunkAuthenticated')(proofId, chunkIndex);
126
+ }
127
+ stageSellerProof(signer, publicValues, proofBytes) {
128
+ return this._execWrite(signer, ABI, 'stageSellerProof', publicValues, proofBytes);
129
+ }
130
+ authenticateBlockReferences(signer, proofId, chunk) {
131
+ const references = chunk.references.map((reference) => ({ number: reference.number, blockHash: reference.blockHash }));
132
+ return this._execWrite(signer, ABI, 'authenticateBlockReferences', proofId, chunk.index, references, chunk.proof);
133
+ }
134
+ finalizeSellerProof(signer, proofId) {
135
+ return this._execWrite(signer, ABI, 'finalizeSellerProof', proofId);
136
+ }
137
+ /**
138
+ * Stage, authenticate every committed chunk, and finalize a seller proof.
139
+ * Resumable: steps already recorded on chain are skipped, so an interrupted
140
+ * submission can be re-run with the same artifact.
141
+ */
142
+ async submitSellerProof(signer, artifact, onStep = () => { }) {
143
+ const proofId = sellerProofId(artifact.publicValues);
144
+ const status = await this.proofStatus(proofId);
145
+ if (status.finalized) {
146
+ await onStep({ kind: 'finalize', proofId, skipped: true });
147
+ return { proofId, finalized: true };
148
+ }
149
+ if (status.staged) {
150
+ await onStep({ kind: 'stage', proofId, skipped: true });
151
+ }
152
+ else {
153
+ const hash = await this.stageSellerProof(signer, artifact.publicValues, artifact.proofBytes);
154
+ await onStep({ kind: 'stage', proofId, hash, skipped: false });
155
+ }
156
+ const chunkCount = artifact.blockAuthenticationChunkCount;
157
+ for (const chunk of artifact.blockAuthenticationChunks) {
158
+ if (await this.proofBlockChunkAuthenticated(proofId, chunk.index)) {
159
+ await onStep({ kind: 'authenticate', proofId, chunkIndex: chunk.index, chunkCount, skipped: true });
160
+ continue;
161
+ }
162
+ const hash = await this.authenticateBlockReferences(signer, proofId, chunk);
163
+ await onStep({ kind: 'authenticate', proofId, chunkIndex: chunk.index, chunkCount, hash, skipped: false });
164
+ }
165
+ const hash = await this.finalizeSellerProof(signer, proofId);
166
+ await onStep({ kind: 'finalize', proofId, hash, skipped: false });
167
+ return { proofId, finalized: true };
168
+ }
169
+ }
170
+ //# sourceMappingURL=wash-trading-registry-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wash-trading-registry-client.js","sourceRoot":"","sources":["../../../src/payments/evm/wash-trading-registry-client.ts"],"names":[],"mappings":"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"}