@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,36 @@
1
+ import { type AbstractSigner } from 'ethers';
2
+ import { BaseEvmClient } from './base-evm-client.js';
3
+ export interface SellerPoolsRewardsClientConfig {
4
+ rpcUrl: string;
5
+ fallbackRpcUrls?: string[];
6
+ contractAddress: string;
7
+ evmChainId?: number;
8
+ }
9
+ export interface DynamicStakerConfig {
10
+ minShareBps: number;
11
+ maxShareBps: number;
12
+ stakeShareTarget: bigint;
13
+ }
14
+ export declare class SellerPoolsRewardsClient extends BaseEvmClient {
15
+ constructor(config: SellerPoolsRewardsClientConfig);
16
+ pendingIndexedStakerReward(positionId: number): Promise<bigint>;
17
+ claimStakerRewards(signer: AbstractSigner, positionId: number, recipient: string): Promise<string>;
18
+ claimStakerRewardsBatch(signer: AbstractSigner, positionIds: number[], recipient: string): Promise<string>;
19
+ /** Compound indexed staker rewards into a fresh locked position (earns the restake weight bonus). */
20
+ restakeStakerRewards(signer: AbstractSigner, positionId: number, stakeEpochs: number): Promise<string>;
21
+ restakeStakerRewardsBatch(signer: AbstractSigner, positionIds: number[], stakeEpochs: number): Promise<string>;
22
+ stakerEpochBudget(epoch: number): Promise<bigint>;
23
+ poolEpochEmissions(epoch: number, agentId: number): Promise<{
24
+ settled: boolean;
25
+ amount: bigint;
26
+ }>;
27
+ dynamicStakerConfigAt(epoch: number): Promise<DynamicStakerConfig>;
28
+ paused(): Promise<boolean>;
29
+ positionClaimCursor(positionId: number): Promise<number>;
30
+ previewStakerReward(positionId: number): Promise<bigint>;
31
+ previewStakerRewards(positionIds: number[]): Promise<bigint[]>;
32
+ poolRewardIndexNextEpoch(agentId: number): Promise<number>;
33
+ initialIndexEpoch(): Promise<number>;
34
+ indexPoolRewards(signer: AbstractSigner, agentId: number, maxEpochs: number): Promise<string>;
35
+ }
36
+ //# sourceMappingURL=seller-pools-rewards-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"seller-pools-rewards-client.d.ts","sourceRoot":"","sources":["../../../src/payments/evm/seller-pools-rewards-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyB,KAAK,cAAc,EAAE,MAAM,QAAQ,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAGrD,MAAM,WAAW,8BAA8B;IAAG,MAAM,EAAE,MAAM,CAAC;IAAC,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,eAAe,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAAE;AA+B7I,MAAM,WAAW,mBAAmB;IAAG,WAAW,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,gBAAgB,EAAE,MAAM,CAAC;CAAE;AAE5G,qBAAa,wBAAyB,SAAQ,aAAa;gBAC7C,MAAM,EAAE,8BAA8B;IAClD,0BAA0B,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAC/D,kBAAkB,CAAC,MAAM,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAClG,uBAAuB,CAAC,MAAM,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAC1G,qGAAqG;IACrG,oBAAoB,CAAC,MAAM,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IACtG,yBAAyB,CAAC,MAAM,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,EAAE,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAC9G,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAC3C,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAIjG,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAIxE,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC;IACpB,mBAAmB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IACxD,mBAAmB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAIxD,oBAAoB,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAyD9D,wBAAwB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAG1D,iBAAiB,IAAI,OAAO,CAAC,MAAM,CAAC;IAG1C,gBAAgB,CAAC,MAAM,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAG9F"}
@@ -0,0 +1,126 @@
1
+ import { Contract, ZeroAddress } from 'ethers';
2
+ import { BaseEvmClient } from './base-evm-client.js';
3
+ import { previewPositionReward, REWARD_INDEX_SCALE } from '../reward-preview.js';
4
+ const ABI = [
5
+ 'function sellerPools() view returns (address)',
6
+ 'function usageAccounting() view returns (address)',
7
+ 'function positionClaimCursor(uint256 positionId) view returns (uint256)',
8
+ 'function poolRewardIndexNextEpoch(uint256 agentId) view returns (uint256)',
9
+ 'function initialIndexEpoch() view returns (uint256)',
10
+ 'function poolCumulativeRewardPerWeightAt(uint256 agentId, uint256 epoch) view returns (uint256)',
11
+ 'function poolCumulativeEpochRewardPerWeightAt(uint256 agentId, uint256 epoch) view returns (uint256)',
12
+ 'function poolEpochEmissions(uint256 epoch, uint256 agentId) view returns (bool, uint256)',
13
+ 'function stakerEpochBudget(uint256 epoch) view returns (uint256)',
14
+ 'function indexPoolRewards(uint256 agentId, uint256 maxEpochs) returns (uint256)',
15
+ 'function pendingIndexedStakerReward(uint256 positionId) external view returns (uint256)',
16
+ 'function claimStakerRewards(uint256 positionId, address recipient) external',
17
+ 'function claimStakerRewardsBatch(uint256[] positionIds, address recipient) external',
18
+ 'function restakeStakerRewards(uint256 positionId, uint256 stakeEpochs) external returns (uint256 newPositionId)',
19
+ 'function restakeStakerRewardsBatch(uint256[] positionIds, uint256 stakeEpochs) external returns (uint256[] newPositionIds)',
20
+ 'function dynamicStakerConfigAt(uint256 epoch) view returns (tuple(uint32 minShareBps, uint32 maxShareBps, uint256 stakeShareTarget))',
21
+ 'function paused() view returns (bool)',
22
+ ];
23
+ const POOLS_ABI = [
24
+ 'function positionPowerSegmentAt(uint256 positionId, uint256 epoch) view returns (uint256, uint256, uint256)',
25
+ 'function poolWeightAtEpoch(uint256 agentId, uint256 epoch) view returns (uint256)',
26
+ 'function currentEpoch() view returns (uint256)',
27
+ 'function positions(uint256 positionId) view returns (address, uint256, uint256, uint256, uint64, uint64, uint64, bool)',
28
+ ];
29
+ const ACCOUNTING_ABI = [
30
+ 'function weightedPoolPointsByEpoch(uint256 epoch, uint256 agentId) view returns (uint256)',
31
+ 'function totalWeightedPoolPointsByEpoch(uint256 epoch) view returns (uint256)',
32
+ ];
33
+ export class SellerPoolsRewardsClient extends BaseEvmClient {
34
+ constructor(config) { super(config.rpcUrl, config.contractAddress, config.fallbackRpcUrls, config.evmChainId); }
35
+ pendingIndexedStakerReward(positionId) { return new Contract(this._contractAddress, ABI, this._provider).getFunction('pendingIndexedStakerReward')(positionId); }
36
+ claimStakerRewards(signer, positionId, recipient) { return this._execWrite(signer, ABI, 'claimStakerRewards', positionId, recipient); }
37
+ claimStakerRewardsBatch(signer, positionIds, recipient) { return this._execWrite(signer, ABI, 'claimStakerRewardsBatch', positionIds, recipient); }
38
+ /** Compound indexed staker rewards into a fresh locked position (earns the restake weight bonus). */
39
+ restakeStakerRewards(signer, positionId, stakeEpochs) { return this._execWrite(signer, ABI, 'restakeStakerRewards', positionId, stakeEpochs); }
40
+ restakeStakerRewardsBatch(signer, positionIds, stakeEpochs) { return this._execWrite(signer, ABI, 'restakeStakerRewardsBatch', positionIds, stakeEpochs); }
41
+ stakerEpochBudget(epoch) { return new Contract(this._contractAddress, ABI, this._provider).getFunction('stakerEpochBudget')(epoch); }
42
+ async poolEpochEmissions(epoch, agentId) {
43
+ const [settled, amount] = await new Contract(this._contractAddress, ABI, this._provider).getFunction('poolEpochEmissions')(epoch, agentId);
44
+ return { settled, amount };
45
+ }
46
+ async dynamicStakerConfigAt(epoch) {
47
+ const result = await new Contract(this._contractAddress, ABI, this._provider).getFunction('dynamicStakerConfigAt')(epoch);
48
+ return { minShareBps: Number(result[0]), maxShareBps: Number(result[1]), stakeShareTarget: result[2] };
49
+ }
50
+ paused() { return new Contract(this._contractAddress, ABI, this._provider).getFunction('paused')(); }
51
+ async positionClaimCursor(positionId) { return Number(await new Contract(this._contractAddress, ABI, this._provider).getFunction('positionClaimCursor')(positionId)); }
52
+ async previewStakerReward(positionId) {
53
+ return (await this.previewStakerRewards([positionId]))[0];
54
+ }
55
+ async previewStakerRewards(positionIds) {
56
+ if (positionIds.length === 0)
57
+ return [];
58
+ const blockTag = await this.provider.getBlockNumber();
59
+ const reads = new Map();
60
+ const read = (contract, method, ...args) => {
61
+ const key = `${contract.target}:${method}:${args.join(',')}`;
62
+ let result = reads.get(key);
63
+ if (!result) {
64
+ result = contract.getFunction(method)(...args, { blockTag });
65
+ reads.set(key, result);
66
+ }
67
+ return result;
68
+ };
69
+ const rewards = new Contract(this.contractAddress, ABI, this.provider);
70
+ const poolAddress = await read(rewards, 'sellerPools');
71
+ const pools = new Contract(poolAddress, POOLS_ABI, this.provider);
72
+ const accounting = new Contract(await read(rewards, 'usageAccounting'), ACCOUNTING_ABI, this.provider);
73
+ const previewPosition = async (positionId) => {
74
+ const position = await read(pools, 'positions', positionId);
75
+ if (position[0] === ZeroAddress)
76
+ throw new Error(`Unknown position ${positionId}`);
77
+ return previewPositionReward({
78
+ id: positionId, owner: position[0], agentId: Number(position[1]), amount: position[2], weightAmount: position[3],
79
+ stakeStartEpoch: Number(position[4]), stakeEndEpoch: Number(position[5]), closedAtEpoch: Number(position[6]), withdrawn: position[7],
80
+ }, {
81
+ currentEpoch: async () => Number(await read(pools, 'currentEpoch')),
82
+ claimCursor: async (id) => Number(await read(rewards, 'positionClaimCursor', id)),
83
+ indexCursor: async (agentId) => Number(await read(rewards, 'poolRewardIndexNextEpoch', agentId) || await read(rewards, 'initialIndexEpoch')),
84
+ segment: async (id, epoch) => {
85
+ const [normalEnd, maxLockPower, nextChange] = await read(pools, 'positionPowerSegmentAt', id, epoch);
86
+ return { normalEnd, maxLockPower, nextChange };
87
+ },
88
+ cumulative: async (agentId, epoch) => ({
89
+ reward: await read(rewards, 'poolCumulativeRewardPerWeightAt', agentId, epoch),
90
+ epochReward: await read(rewards, 'poolCumulativeEpochRewardPerWeightAt', agentId, epoch),
91
+ }),
92
+ rewardPerWeight: async (agentId, epoch) => {
93
+ const weight = await read(pools, 'poolWeightAtEpoch', agentId, epoch);
94
+ if (weight === 0n)
95
+ return 0n;
96
+ const [settled, amount] = await read(rewards, 'poolEpochEmissions', epoch, agentId);
97
+ if (settled)
98
+ return amount * REWARD_INDEX_SCALE / weight;
99
+ const [points, total] = await Promise.all([
100
+ read(accounting, 'weightedPoolPointsByEpoch', epoch, agentId),
101
+ read(accounting, 'totalWeightedPoolPointsByEpoch', epoch),
102
+ ]);
103
+ if (points === 0n || total === 0n)
104
+ return 0n;
105
+ const budget = await read(rewards, 'stakerEpochBudget', epoch);
106
+ return (budget * points / total) * REWARD_INDEX_SCALE / weight;
107
+ },
108
+ });
109
+ };
110
+ const amounts = [];
111
+ for (let offset = 0; offset < positionIds.length; offset += 16) {
112
+ amounts.push(...await Promise.all(positionIds.slice(offset, offset + 16).map(previewPosition)));
113
+ }
114
+ return amounts;
115
+ }
116
+ async poolRewardIndexNextEpoch(agentId) {
117
+ return Number(await new Contract(this.contractAddress, ABI, this.provider).getFunction('poolRewardIndexNextEpoch')(agentId));
118
+ }
119
+ async initialIndexEpoch() {
120
+ return Number(await new Contract(this.contractAddress, ABI, this.provider).getFunction('initialIndexEpoch')());
121
+ }
122
+ indexPoolRewards(signer, agentId, maxEpochs) {
123
+ return this._execWrite(signer, ABI, 'indexPoolRewards', agentId, maxEpochs);
124
+ }
125
+ }
126
+ //# sourceMappingURL=seller-pools-rewards-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"seller-pools-rewards-client.js","sourceRoot":"","sources":["../../../src/payments/evm/seller-pools-rewards-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAuB,MAAM,QAAQ,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAGjF,MAAM,GAAG,GAAG;IACV,+CAA+C;IAC/C,mDAAmD;IACnD,yEAAyE;IACzE,2EAA2E;IAC3E,qDAAqD;IACrD,iGAAiG;IACjG,sGAAsG;IACtG,0FAA0F;IAC1F,kEAAkE;IAClE,iFAAiF;IACjF,yFAAyF;IACzF,6EAA6E;IAC7E,qFAAqF;IACrF,iHAAiH;IACjH,4HAA4H;IAC5H,sIAAsI;IACtI,uCAAuC;CAC/B,CAAC;AACX,MAAM,SAAS,GAAG;IAChB,6GAA6G;IAC7G,mFAAmF;IACnF,gDAAgD;IAChD,wHAAwH;CACzH,CAAC;AACF,MAAM,cAAc,GAAG;IACrB,2FAA2F;IAC3F,+EAA+E;CAChF,CAAC;AAIF,MAAM,OAAO,wBAAyB,SAAQ,aAAa;IACzD,YAAY,MAAsC,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,eAAe,EAAE,MAAM,CAAC,eAAe,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IAChJ,0BAA0B,CAAC,UAAkB,IAAqB,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,gBAAgB,EAAE,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,WAAW,CAAC,4BAA4B,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IAC1L,kBAAkB,CAAC,MAAsB,EAAE,UAAkB,EAAE,SAAiB,IAAqB,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,GAAG,EAAE,oBAAoB,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;IACxL,uBAAuB,CAAC,MAAsB,EAAE,WAAqB,EAAE,SAAiB,IAAqB,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,GAAG,EAAE,yBAAyB,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;IACtM,qGAAqG;IACrG,oBAAoB,CAAC,MAAsB,EAAE,UAAkB,EAAE,WAAmB,IAAqB,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,GAAG,EAAE,sBAAsB,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;IAChM,yBAAyB,CAAC,MAAsB,EAAE,WAAqB,EAAE,WAAmB,IAAqB,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,GAAG,EAAE,2BAA2B,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;IAC9M,iBAAiB,CAAC,KAAa,IAAqB,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,gBAAgB,EAAE,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,WAAW,CAAC,mBAAmB,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC9J,KAAK,CAAC,kBAAkB,CAAC,KAAa,EAAE,OAAe;QACrD,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,GAAG,MAAM,IAAI,QAAQ,CAAC,IAAI,CAAC,gBAAgB,EAAE,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,WAAW,CAAC,oBAAoB,CAAC,CAAC,KAAK,EAAE,OAAO,CAAsB,CAAC;QAChK,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;IAC7B,CAAC;IACD,KAAK,CAAC,qBAAqB,CAAC,KAAa;QACvC,MAAM,MAAM,GAAG,MAAM,IAAI,QAAQ,CAAC,IAAI,CAAC,gBAAgB,EAAE,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,WAAW,CAAC,uBAAuB,CAAC,CAAC,KAAK,CAAC,CAAC;QAC1H,OAAO,EAAE,WAAW,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;IACzG,CAAC;IACD,MAAM,KAAuB,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,gBAAgB,EAAE,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;IACvH,KAAK,CAAC,mBAAmB,CAAC,UAAkB,IAAqB,OAAO,MAAM,CAAC,MAAM,IAAI,QAAQ,CAAC,IAAI,CAAC,gBAAgB,EAAE,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,WAAW,CAAC,qBAAqB,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;IAChM,KAAK,CAAC,mBAAmB,CAAC,UAAkB;QAC1C,OAAO,CAAC,MAAM,IAAI,CAAC,oBAAoB,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAE,CAAC;IAC7D,CAAC;IAED,KAAK,CAAC,oBAAoB,CAAC,WAAqB;QAC9C,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QACxC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,cAAc,EAAE,CAAC;QACtD,MAAM,KAAK,GAAG,IAAI,GAAG,EAA4B,CAAC;QAClD,MAAM,IAAI,GAAG,CAAQ,QAAkB,EAAE,MAAc,EAAE,GAAG,IAAyB,EAAkB,EAAE;YACvG,MAAM,GAAG,GAAG,GAAG,QAAQ,CAAC,MAAM,IAAI,MAAM,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YAC7D,IAAI,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC5B,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,MAAM,GAAG,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,GAAG,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;gBAC7D,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,MAAO,CAAC,CAAC;YAC1B,CAAC;YACD,OAAO,MAAwB,CAAC;QAClC,CAAC,CAAC;QACF,MAAM,OAAO,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,eAAe,EAAE,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QACvE,MAAM,WAAW,GAAG,MAAM,IAAI,CAAS,OAAO,EAAE,aAAa,CAAC,CAAC;QAC/D,MAAM,KAAK,GAAG,IAAI,QAAQ,CAAC,WAAW,EAAE,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QAClE,MAAM,UAAU,GAAG,IAAI,QAAQ,CAAC,MAAM,IAAI,CAAS,OAAO,EAAE,iBAAiB,CAAC,EAAE,cAAc,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC/G,MAAM,eAAe,GAAG,KAAK,EAAE,UAAkB,EAAmB,EAAE;YACpE,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAoE,KAAK,EAAE,WAAW,EAAE,UAAU,CAAC,CAAC;YAC/H,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,WAAW;gBAAE,MAAM,IAAI,KAAK,CAAC,oBAAoB,UAAU,EAAE,CAAC,CAAC;YACnF,OAAO,qBAAqB,CAAC;gBAC3B,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC,CAAC;gBAChH,eAAe,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC;aACrI,EAAE;gBACD,YAAY,EAAE,KAAK,IAAI,EAAE,CAAC,MAAM,CAAC,MAAM,IAAI,CAAS,KAAK,EAAE,cAAc,CAAC,CAAC;gBAC3E,WAAW,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,IAAI,CAAS,OAAO,EAAE,qBAAqB,EAAE,EAAE,CAAC,CAAC;gBACzF,WAAW,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,IAAI,CAAS,OAAO,EAAE,0BAA0B,EAAE,OAAO,CAAC,IAAI,MAAM,IAAI,CAAS,OAAO,EAAE,mBAAmB,CAAC,CAAC;gBAC5J,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE;oBAC3B,MAAM,CAAC,SAAS,EAAE,YAAY,EAAE,UAAU,CAAC,GAAG,MAAM,IAAI,CAA2B,KAAK,EAAE,wBAAwB,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;oBAC/H,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,UAAU,EAAE,CAAC;gBACjD,CAAC;gBACD,UAAU,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;oBACrC,MAAM,EAAE,MAAM,IAAI,CAAS,OAAO,EAAE,iCAAiC,EAAE,OAAO,EAAE,KAAK,CAAC;oBACtF,WAAW,EAAE,MAAM,IAAI,CAAS,OAAO,EAAE,sCAAsC,EAAE,OAAO,EAAE,KAAK,CAAC;iBACjG,CAAC;gBACF,eAAe,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;oBACxC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAS,KAAK,EAAE,mBAAmB,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;oBAC9E,IAAI,MAAM,KAAK,EAAE;wBAAE,OAAO,EAAE,CAAC;oBAC7B,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,GAAG,MAAM,IAAI,CAAoB,OAAO,EAAE,oBAAoB,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;oBACvG,IAAI,OAAO;wBAAE,OAAO,MAAM,GAAG,kBAAkB,GAAG,MAAM,CAAC;oBACzD,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;wBACxC,IAAI,CAAS,UAAU,EAAE,2BAA2B,EAAE,KAAK,EAAE,OAAO,CAAC;wBACrE,IAAI,CAAS,UAAU,EAAE,gCAAgC,EAAE,KAAK,CAAC;qBAClE,CAAC,CAAC;oBACH,IAAI,MAAM,KAAK,EAAE,IAAI,KAAK,KAAK,EAAE;wBAAE,OAAO,EAAE,CAAC;oBAC7C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAS,OAAO,EAAE,mBAAmB,EAAE,KAAK,CAAC,CAAC;oBACvE,OAAO,CAAC,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC,GAAG,kBAAkB,GAAG,MAAM,CAAC;gBACjE,CAAC;aACF,CAAC,CAAC;QACL,CAAC,CAAC;QACF,MAAM,OAAO,GAAa,EAAE,CAAC;QAC7B,KAAK,IAAI,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,WAAW,CAAC,MAAM,EAAE,MAAM,IAAI,EAAE,EAAE,CAAC;YAC/D,OAAO,CAAC,IAAI,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QAClG,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,wBAAwB,CAAC,OAAe;QAC5C,OAAO,MAAM,CAAC,MAAM,IAAI,QAAQ,CAAC,IAAI,CAAC,eAAe,EAAE,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,0BAA0B,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IAC/H,CAAC;IACD,KAAK,CAAC,iBAAiB;QACrB,OAAO,MAAM,CAAC,MAAM,IAAI,QAAQ,CAAC,IAAI,CAAC,eAAe,EAAE,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAC;IACjH,CAAC;IACD,gBAAgB,CAAC,MAAsB,EAAE,OAAe,EAAE,SAAiB;QACzE,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,GAAG,EAAE,kBAAkB,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;IAC9E,CAAC;CACF"}
@@ -0,0 +1,28 @@
1
+ import { type AbstractSigner } from 'ethers';
2
+ import { BaseEvmClient } from './base-evm-client.js';
3
+ export interface SellerRegistryClientConfig {
4
+ rpcUrl: string;
5
+ fallbackRpcUrls?: string[];
6
+ contractAddress: string;
7
+ evmChainId?: number;
8
+ }
9
+ export declare class SellerRegistryClient extends BaseEvmClient {
10
+ constructor(config: SellerRegistryClientConfig);
11
+ private contract;
12
+ registerSeller(signer: AbstractSigner, agentId: number): Promise<string>;
13
+ getAgentId(seller: string): Promise<number>;
14
+ getStake(seller: string): Promise<bigint>;
15
+ isStakedAboveMin(seller: string): Promise<boolean>;
16
+ minSellerPoolStake(): Promise<bigint>;
17
+ legacyStakeEligibilityEnabled(): Promise<boolean>;
18
+ isRegisteredSeller(seller: string, agentId: number): Promise<boolean>;
19
+ getRegisteredAgentId(seller: string): Promise<number>;
20
+ registerSellerBinding(signer: AbstractSigner, agentId: number, confirmed?: (hash: string) => void | Promise<void>): Promise<boolean>;
21
+ agentSeller(agentId: number): Promise<string>;
22
+ sellerPools(): Promise<string>;
23
+ legacyStaking(): Promise<string>;
24
+ }
25
+ export declare class SellerRegistrationVerificationError extends Error {
26
+ constructor();
27
+ }
28
+ //# sourceMappingURL=seller-registry-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"seller-registry-client.d.ts","sourceRoot":"","sources":["../../../src/payments/evm/seller-registry-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,cAAc,EAAE,MAAM,QAAQ,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD,MAAM,WAAW,0BAA0B;IAAG,MAAM,EAAE,MAAM,CAAC;IAAC,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,eAAe,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAAE;AAczI,qBAAa,oBAAqB,SAAQ,aAAa;gBACzC,MAAM,EAAE,0BAA0B;IAC9C,OAAO,CAAC,QAAQ;IAChB,cAAc,CAAC,MAAM,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAClE,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IACjD,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IACzC,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAClD,kBAAkB,IAAI,OAAO,CAAC,MAAM,CAAC;IACrC,6BAA6B,IAAI,OAAO,CAAC,OAAO,CAAC;IAC3C,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAOrE,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAKrD,qBAAqB,CAAC,MAAM,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,GAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAY,GAAG,OAAO,CAAC,OAAO,CAAC;IAapJ,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAC7C,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC;IAC9B,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC;CACjC;AAED,qBAAa,mCAAoC,SAAQ,KAAK;;CAK7D"}
@@ -0,0 +1,60 @@
1
+ import { Contract } from 'ethers';
2
+ import { BaseEvmClient } from './base-evm-client.js';
3
+ const ABI = [
4
+ 'event SellerRegistered(address indexed seller, uint256 indexed agentId)',
5
+ 'function owner() external view returns (address)',
6
+ 'function sellerPools() external view returns (address)',
7
+ 'function legacyStaking() external view returns (address)',
8
+ 'function agentSeller(uint256 agentId) external view returns (address)',
9
+ 'function registerSeller(uint256 agentId) external',
10
+ 'function getAgentId(address seller) external view returns (uint256)',
11
+ 'function getStake(address seller) external view returns (uint256)',
12
+ 'function isStakedAboveMin(address seller) external view returns (bool)',
13
+ 'function minSellerPoolStake() external view returns (uint256)',
14
+ 'function legacyStakeEligibilityEnabled() external view returns (bool)',
15
+ ];
16
+ export class SellerRegistryClient extends BaseEvmClient {
17
+ constructor(config) { super(config.rpcUrl, config.contractAddress, config.fallbackRpcUrls, config.evmChainId); }
18
+ contract() { return new Contract(this._contractAddress, ABI, this._provider); }
19
+ registerSeller(signer, agentId) { return this._execWrite(signer, ABI, 'registerSeller', agentId); }
20
+ async getAgentId(seller) { return Number(await this.contract().getFunction('getAgentId')(seller)); }
21
+ getStake(seller) { return this.contract().getFunction('getStake')(seller); }
22
+ isStakedAboveMin(seller) { return this.contract().getFunction('isStakedAboveMin')(seller); }
23
+ minSellerPoolStake() { return this.contract().getFunction('minSellerPoolStake')(); }
24
+ legacyStakeEligibilityEnabled() { return this.contract().getFunction('legacyStakeEligibilityEnabled')(); }
25
+ async isRegisteredSeller(seller, agentId) {
26
+ if (!agentId)
27
+ return false;
28
+ const registry = this.contract();
29
+ const [resolvedId, boundSeller] = await Promise.all([this.getAgentId(seller), registry.getFunction('agentSeller')(agentId)]);
30
+ return resolvedId === agentId && boundSeller.toLowerCase() === seller.toLowerCase();
31
+ }
32
+ async getRegisteredAgentId(seller) {
33
+ const agentId = await this.getAgentId(seller);
34
+ return await this.isRegisteredSeller(seller, agentId) ? agentId : 0;
35
+ }
36
+ async registerSellerBinding(signer, agentId, confirmed = () => { }) {
37
+ const address = await signer.getAddress();
38
+ const boundAgentId = await this.getAgentId(address);
39
+ if (boundAgentId !== 0 && boundAgentId !== agentId) {
40
+ throw new Error(`Seller is already bound to agent ${boundAgentId}, not ${agentId}.`);
41
+ }
42
+ if (await this.isRegisteredSeller(address, agentId))
43
+ return false;
44
+ await confirmed(await this.registerSeller(signer, agentId));
45
+ if (!await this.isRegisteredSeller(address, agentId)) {
46
+ throw new SellerRegistrationVerificationError();
47
+ }
48
+ return true;
49
+ }
50
+ agentSeller(agentId) { return this.contract().getFunction('agentSeller')(agentId); }
51
+ sellerPools() { return this.contract().getFunction('sellerPools')(); }
52
+ legacyStaking() { return this.contract().getFunction('legacyStaking')(); }
53
+ }
54
+ export class SellerRegistrationVerificationError extends Error {
55
+ constructor() {
56
+ super('Registration could not be verified.');
57
+ this.name = 'SellerRegistrationVerificationError';
58
+ }
59
+ }
60
+ //# sourceMappingURL=seller-registry-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"seller-registry-client.js","sourceRoot":"","sources":["../../../src/payments/evm/seller-registry-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import { type AbstractSigner } from 'ethers';
2
+ import { BaseEvmClient } from './base-evm-client.js';
3
+ export interface SellerRewardsPoolClientConfig {
4
+ rpcUrl: string;
5
+ fallbackRpcUrls?: string[];
6
+ contractAddress: string;
7
+ evmChainId?: number;
8
+ }
9
+ /** Legacy locked seller rewards pool (`AntseedSellerRewardsPool`). Releases are gated by the M002 claim policy. */
10
+ export declare class SellerRewardsPoolClient extends BaseEvmClient {
11
+ constructor(config: SellerRewardsPoolClientConfig);
12
+ private contract;
13
+ lockedRewards(seller: string): Promise<bigint>;
14
+ totalLockedRewards(): Promise<bigint>;
15
+ sellerClaimPolicy(): Promise<string>;
16
+ /** Amount the configured policy would release now; zero when no policy is installed. */
17
+ claimable(seller: string): Promise<{
18
+ locked: bigint;
19
+ claimable: bigint;
20
+ policy: string;
21
+ }>;
22
+ claim(signer: AbstractSigner, recipient: string): Promise<string>;
23
+ }
24
+ //# sourceMappingURL=seller-rewards-pool-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"seller-rewards-pool-client.d.ts","sourceRoot":"","sources":["../../../src/payments/evm/seller-rewards-pool-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyB,KAAK,cAAc,EAAE,MAAM,QAAQ,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD,MAAM,WAAW,6BAA6B;IAAG,MAAM,EAAE,MAAM,CAAC;IAAC,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,eAAe,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAAE;AAW5I,mHAAmH;AACnH,qBAAa,uBAAwB,SAAQ,aAAa;gBAC5C,MAAM,EAAE,6BAA6B;IACjD,OAAO,CAAC,QAAQ;IAEhB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAC9C,kBAAkB,IAAI,OAAO,CAAC,MAAM,CAAC;IACrC,iBAAiB,IAAI,OAAO,CAAC,MAAM,CAAC;IACpC,wFAAwF;IAClF,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAM/F,KAAK,CAAC,MAAM,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAClE"}
@@ -0,0 +1,27 @@
1
+ import { Contract, ZeroAddress } from 'ethers';
2
+ import { BaseEvmClient } from './base-evm-client.js';
3
+ const ABI = [
4
+ 'function lockedRewards(address seller) external view returns (uint256)',
5
+ 'function totalLockedRewards() external view returns (uint256)',
6
+ 'function sellerClaimPolicy() external view returns (address)',
7
+ 'function claim(address recipient) external',
8
+ ];
9
+ const POLICY_ABI = ['function claimableSellerRewards(address seller, uint256 lockedAmount) external view returns (uint256)'];
10
+ /** Legacy locked seller rewards pool (`AntseedSellerRewardsPool`). Releases are gated by the M002 claim policy. */
11
+ export class SellerRewardsPoolClient extends BaseEvmClient {
12
+ constructor(config) { super(config.rpcUrl, config.contractAddress, config.fallbackRpcUrls, config.evmChainId); }
13
+ contract() { return new Contract(this._contractAddress, ABI, this._provider); }
14
+ lockedRewards(seller) { return this.contract().getFunction('lockedRewards')(seller); }
15
+ totalLockedRewards() { return this.contract().getFunction('totalLockedRewards')(); }
16
+ sellerClaimPolicy() { return this.contract().getFunction('sellerClaimPolicy')(); }
17
+ /** Amount the configured policy would release now; zero when no policy is installed. */
18
+ async claimable(seller) {
19
+ const [locked, policy] = await Promise.all([this.lockedRewards(seller), this.sellerClaimPolicy()]);
20
+ if (policy === ZeroAddress || locked === 0n)
21
+ return { locked, claimable: 0n, policy };
22
+ const allowed = await new Contract(policy, POLICY_ABI, this._provider).getFunction('claimableSellerRewards')(seller, locked);
23
+ return { locked, claimable: allowed > locked ? locked : allowed, policy };
24
+ }
25
+ claim(signer, recipient) { return this._execWrite(signer, ABI, 'claim', recipient); }
26
+ }
27
+ //# sourceMappingURL=seller-rewards-pool-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"seller-rewards-pool-client.js","sourceRoot":"","sources":["../../../src/payments/evm/seller-rewards-pool-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAuB,MAAM,QAAQ,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAIrD,MAAM,GAAG,GAAG;IACV,wEAAwE;IACxE,+DAA+D;IAC/D,8DAA8D;IAC9D,4CAA4C;CACpC,CAAC;AAEX,MAAM,UAAU,GAAG,CAAC,uGAAuG,CAAU,CAAC;AAEtI,mHAAmH;AACnH,MAAM,OAAO,uBAAwB,SAAQ,aAAa;IACxD,YAAY,MAAqC,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,eAAe,EAAE,MAAM,CAAC,eAAe,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IACvI,QAAQ,KAAe,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,gBAAgB,EAAE,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IAEjG,aAAa,CAAC,MAAc,IAAqB,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAC/G,kBAAkB,KAAsB,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC,WAAW,CAAC,oBAAoB,CAAC,EAAE,CAAC,CAAC,CAAC;IACrG,iBAAiB,KAAsB,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC,WAAW,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAC,CAAC;IACnG,wFAAwF;IACxF,KAAK,CAAC,SAAS,CAAC,MAAc;QAC5B,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC;QACnG,IAAI,MAAM,KAAK,WAAW,IAAI,MAAM,KAAK,EAAE;YAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC;QACtF,MAAM,OAAO,GAAG,MAAM,IAAI,QAAQ,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,WAAW,CAAC,wBAAwB,CAAC,CAAC,MAAM,EAAE,MAAM,CAAW,CAAC;QACvI,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC;IAC5E,CAAC;IACD,KAAK,CAAC,MAAsB,EAAE,SAAiB,IAAqB,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;CAC/H"}
@@ -0,0 +1,54 @@
1
+ import { type AbstractProvider } from 'ethers';
2
+ /**
3
+ * Reads every on-chain input of the buyer trust score for a batch of sellers
4
+ * in two Multicall3 round trips, regardless of batch size:
5
+ *
6
+ * round 1: usage.currentEpoch, and per seller
7
+ * registry.getAgentId, wash.isProvenWashTrader, wash.provenWashShareBps
8
+ * round 2: pools.totalPowerWeightAtEpoch, usage.totalPoolPointsByEpoch(last),
9
+ * and per seller channels.getAgentStats, pools.poolWeightAtEpoch,
10
+ * pools.poolActiveStakeAtEpoch, usage.sellerPointsByEpoch(last)
11
+ *
12
+ * Each round is chunked at 80 calls per `eth_call`. Contracts that are not
13
+ * configured (older chains without the recognized-usage stack) are skipped
14
+ * and their signals come back `undefined`.
15
+ */
16
+ export interface TrustSignalsAddresses {
17
+ /** `AntseedSellerRegistry` (or legacy `AntseedStaking`): `getAgentId`. */
18
+ sellerRegistry: string;
19
+ /** `AntseedChannels`: `getAgentStats`. */
20
+ channels: string;
21
+ /** `AntseedSellerPools`: pool power and active stake. */
22
+ sellerPools?: string;
23
+ /** `AntseedUsageAccounting`: epoch and recognized seller points. */
24
+ usageAccounting?: string;
25
+ /** `AntseedWashTradingRegistry`: proven wash-trader verdicts. */
26
+ washTradingRegistry?: string;
27
+ }
28
+ export interface TrustSignals {
29
+ agentId: number;
30
+ channelCount?: number;
31
+ ghostCount?: number;
32
+ totalVolumeUsdcMicros?: number;
33
+ lastSettledAtSec?: number;
34
+ usageEpoch?: number;
35
+ usageShareBps?: number;
36
+ usageLastEpochUsdcMicros?: number;
37
+ poolStakeAnts?: number;
38
+ poolPowerShareBps?: number;
39
+ washFlagged?: boolean;
40
+ washShareBps?: number;
41
+ }
42
+ export declare class TrustSignalsClient {
43
+ private readonly _provider;
44
+ private readonly _addresses;
45
+ private _multicallAvailable;
46
+ constructor(_provider: AbstractProvider, _addresses: TrustSignalsAddresses);
47
+ private _read;
48
+ /**
49
+ * Read trust signals for `sellers` (EVM addresses). Sellers without an agent
50
+ * id are omitted from the result.
51
+ */
52
+ read(sellers: readonly string[]): Promise<Map<string, TrustSignals>>;
53
+ }
54
+ //# sourceMappingURL=trust-signals-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trust-signals-client.d.ts","sourceRoot":"","sources":["../../../src/payments/evm/trust-signals-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,KAAK,gBAAgB,EAAE,MAAM,QAAQ,CAAC;AAG1D;;;;;;;;;;;;;GAaG;AAEH,MAAM,WAAW,qBAAqB;IACpC,0EAA0E;IAC1E,cAAc,EAAE,MAAM,CAAC;IACvB,0CAA0C;IAC1C,QAAQ,EAAE,MAAM,CAAC;IACjB,yDAAyD;IACzD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,oEAAoE;IACpE,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,iEAAiE;IACjE,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAiED,qBAAa,kBAAkB;IAI3B,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,UAAU;IAJ7B,OAAO,CAAC,mBAAmB,CAA+B;gBAGvC,SAAS,EAAE,gBAAgB,EAC3B,UAAU,EAAE,qBAAqB;YAGtC,KAAK;IAenB;;;OAGG;IACG,IAAI,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;CAwE3E"}
@@ -0,0 +1,162 @@
1
+ import { Interface } from 'ethers';
2
+ import { multicallRead, MULTICALL3_ADDRESS } from './multicall.js';
3
+ const REGISTRY_IFACE = new Interface(['function getAgentId(address seller) view returns (uint256)']);
4
+ const CHANNELS_IFACE = new Interface(['function getAgentStats(uint256 agentId) view returns (uint64 channelCount, uint64 ghostCount, uint256 totalVolumeUsdc, uint64 lastSettledAt)']);
5
+ const POOLS_IFACE = new Interface([
6
+ 'function poolWeightAtEpoch(uint256 agentId, uint256 epoch) view returns (uint256)',
7
+ 'function poolActiveStakeAtEpoch(uint256 agentId, uint256 epoch) view returns (uint256)',
8
+ 'function totalPowerWeightAtEpoch(uint256 epoch) view returns (uint256)',
9
+ ]);
10
+ const USAGE_IFACE = new Interface([
11
+ 'function currentEpoch() view returns (uint256)',
12
+ 'function sellerPointsByEpoch(uint256 epoch, address seller) view returns (uint256)',
13
+ 'function totalPoolPointsByEpoch(uint256 epoch) view returns (uint256)',
14
+ ]);
15
+ const WASH_IFACE = new Interface([
16
+ 'function isProvenWashTrader(address seller) view returns (bool)',
17
+ 'function provenWashShareBps(address seller) view returns (uint256)',
18
+ ]);
19
+ const ANTS_WEI = 10n ** 18n;
20
+ function toSafeNumber(value) {
21
+ if (typeof value !== 'bigint')
22
+ return undefined;
23
+ return value <= BigInt(Number.MAX_SAFE_INTEGER) ? Number(value) : Number.MAX_SAFE_INTEGER;
24
+ }
25
+ function shareBps(part, total) {
26
+ return total > 0n ? Number((part * 10000n) / total) : 0;
27
+ }
28
+ function weiToAnts(wei) {
29
+ return Number(wei / ANTS_WEI) + Number(wei % ANTS_WEI) / 1e18;
30
+ }
31
+ /**
32
+ * Collects the calls of one round and hands back a lookup for their results,
33
+ * so callers address results by the handle they got when queueing instead of
34
+ * by computed offsets.
35
+ */
36
+ class Round {
37
+ requests = [];
38
+ results = [];
39
+ add(target, iface, method, args = []) {
40
+ this.requests.push({ target, iface, method, args });
41
+ return this.requests.length - 1;
42
+ }
43
+ async run(read) {
44
+ this.results = this.requests.length > 0 ? await read(this.requests) : [];
45
+ }
46
+ /** First decoded return value of a call, or `undefined` when it failed or was not queued. */
47
+ value(handle) {
48
+ if (handle === undefined)
49
+ return undefined;
50
+ const result = this.results[handle];
51
+ return result && result.length > 0 ? result[0] : undefined;
52
+ }
53
+ /** All decoded return values of a call, or `undefined` when it failed. */
54
+ values(handle) {
55
+ return this.results[handle] ?? undefined;
56
+ }
57
+ }
58
+ export class TrustSignalsClient {
59
+ _provider;
60
+ _addresses;
61
+ _multicallAvailable;
62
+ constructor(_provider, _addresses) {
63
+ this._provider = _provider;
64
+ this._addresses = _addresses;
65
+ }
66
+ async _read(requests) {
67
+ // `multicallRead` probes for Multicall3 with `eth_getCode` on every call;
68
+ // remember the answer so a discovery cycle costs only the batched reads.
69
+ this._multicallAvailable ??= this._provider.getCode(MULTICALL3_ADDRESS).then((code) => code !== '0x').catch(() => false);
70
+ if (await this._multicallAvailable)
71
+ return multicallRead(this._provider, requests, { assumeDeployed: true });
72
+ return Promise.all(requests.map(async (request) => {
73
+ try {
74
+ const data = await this._provider.call({ to: request.target, data: request.iface.encodeFunctionData(request.method, request.args ?? []) });
75
+ return [...request.iface.decodeFunctionResult(request.method, data)];
76
+ }
77
+ catch {
78
+ return null;
79
+ }
80
+ }));
81
+ }
82
+ /**
83
+ * Read trust signals for `sellers` (EVM addresses). Sellers without an agent
84
+ * id are omitted from the result.
85
+ */
86
+ async read(sellers) {
87
+ const out = new Map();
88
+ if (sellers.length === 0)
89
+ return out;
90
+ const { sellerRegistry, channels, sellerPools, usageAccounting, washTradingRegistry } = this._addresses;
91
+ // Round 1: agent ids, wash verdicts, current epoch.
92
+ const round1 = new Round();
93
+ const epochCall = usageAccounting ? round1.add(usageAccounting, USAGE_IFACE, 'currentEpoch') : undefined;
94
+ const round1Calls = sellers.map((seller) => ({
95
+ seller,
96
+ agentId: round1.add(sellerRegistry, REGISTRY_IFACE, 'getAgentId', [seller]),
97
+ washFlagged: washTradingRegistry ? round1.add(washTradingRegistry, WASH_IFACE, 'isProvenWashTrader', [seller]) : undefined,
98
+ washShare: washTradingRegistry ? round1.add(washTradingRegistry, WASH_IFACE, 'provenWashShareBps', [seller]) : undefined,
99
+ }));
100
+ await round1.run((requests) => this._read(requests));
101
+ const epoch = toSafeNumber(round1.value(epochCall));
102
+ const agentIds = new Map();
103
+ for (const call of round1Calls) {
104
+ const agentId = toSafeNumber(round1.value(call.agentId));
105
+ if (!agentId || agentId <= 0)
106
+ continue;
107
+ agentIds.set(call.seller, agentId);
108
+ const signals = { agentId };
109
+ const flagged = round1.value(call.washFlagged);
110
+ if (typeof flagged === 'boolean')
111
+ signals.washFlagged = flagged;
112
+ const share = toSafeNumber(round1.value(call.washShare));
113
+ if (share !== undefined)
114
+ signals.washShareBps = share;
115
+ out.set(call.seller, signals);
116
+ }
117
+ if (agentIds.size === 0)
118
+ return out;
119
+ // Round 2: channel stats, pool power, last epoch's recognized usage.
120
+ const poolsEnabled = Boolean(sellerPools) && epoch !== undefined;
121
+ const usageEnabled = Boolean(usageAccounting) && epoch !== undefined;
122
+ const lastEpoch = epoch === undefined ? 0 : Math.max(0, epoch - 1);
123
+ const round2 = new Round();
124
+ const totalPowerCall = poolsEnabled ? round2.add(sellerPools, POOLS_IFACE, 'totalPowerWeightAtEpoch', [epoch]) : undefined;
125
+ const totalPointsCall = usageEnabled ? round2.add(usageAccounting, USAGE_IFACE, 'totalPoolPointsByEpoch', [lastEpoch]) : undefined;
126
+ const round2Calls = [...agentIds].map(([seller, agentId]) => ({
127
+ seller,
128
+ stats: round2.add(channels, CHANNELS_IFACE, 'getAgentStats', [agentId]),
129
+ power: poolsEnabled ? round2.add(sellerPools, POOLS_IFACE, 'poolWeightAtEpoch', [agentId, epoch]) : undefined,
130
+ stake: poolsEnabled ? round2.add(sellerPools, POOLS_IFACE, 'poolActiveStakeAtEpoch', [agentId, epoch]) : undefined,
131
+ points: usageEnabled ? round2.add(usageAccounting, USAGE_IFACE, 'sellerPointsByEpoch', [lastEpoch, seller]) : undefined,
132
+ }));
133
+ await round2.run((requests) => this._read(requests));
134
+ const totalPower = round2.value(totalPowerCall);
135
+ const totalPoints = round2.value(totalPointsCall);
136
+ for (const call of round2Calls) {
137
+ const signals = out.get(call.seller);
138
+ const stats = round2.values(call.stats);
139
+ if (stats && stats.length >= 4) {
140
+ signals.channelCount = toSafeNumber(stats[0]);
141
+ signals.ghostCount = toSafeNumber(stats[1]);
142
+ signals.totalVolumeUsdcMicros = toSafeNumber(stats[2]);
143
+ signals.lastSettledAtSec = toSafeNumber(stats[3]);
144
+ }
145
+ const power = round2.value(call.power);
146
+ if (typeof power === 'bigint' && typeof totalPower === 'bigint')
147
+ signals.poolPowerShareBps = shareBps(power, totalPower);
148
+ const stake = round2.value(call.stake);
149
+ if (typeof stake === 'bigint')
150
+ signals.poolStakeAnts = weiToAnts(stake);
151
+ const points = round2.value(call.points);
152
+ if (typeof points === 'bigint' && typeof totalPoints === 'bigint' && epoch !== undefined) {
153
+ signals.usageEpoch = epoch;
154
+ // Epoch 0 has no previous epoch to score.
155
+ signals.usageLastEpochUsdcMicros = epoch === 0 ? 0 : toSafeNumber(points);
156
+ signals.usageShareBps = epoch === 0 ? 0 : shareBps(points, totalPoints);
157
+ }
158
+ }
159
+ return out;
160
+ }
161
+ }
162
+ //# sourceMappingURL=trust-signals-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trust-signals-client.js","sourceRoot":"","sources":["../../../src/payments/evm/trust-signals-client.ts"],"names":[],"mappings":"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"}