@antseed/node 0.2.116 → 0.2.118

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 (97) hide show
  1. package/README.md +30 -0
  2. package/dist/index.d.ts +15 -1
  3. package/dist/index.d.ts.map +1 -1
  4. package/dist/index.js +14 -0
  5. package/dist/index.js.map +1 -1
  6. package/dist/node.d.ts +2 -0
  7. package/dist/node.d.ts.map +1 -1
  8. package/dist/node.js +3 -0
  9. package/dist/node.js.map +1 -1
  10. package/dist/payments/chain-config.d.ts +53 -0
  11. package/dist/payments/chain-config.d.ts.map +1 -1
  12. package/dist/payments/chain-config.js +43 -23
  13. package/dist/payments/chain-config.js.map +1 -1
  14. package/dist/payments/contract-stack.d.ts +53 -0
  15. package/dist/payments/contract-stack.d.ts.map +1 -0
  16. package/dist/payments/contract-stack.js +97 -0
  17. package/dist/payments/contract-stack.js.map +1 -0
  18. package/dist/payments/evm/ants-token-client.d.ts +7 -0
  19. package/dist/payments/evm/ants-token-client.d.ts.map +1 -1
  20. package/dist/payments/evm/ants-token-client.js +37 -1
  21. package/dist/payments/evm/ants-token-client.js.map +1 -1
  22. package/dist/payments/evm/emissions-client.d.ts +3 -0
  23. package/dist/payments/evm/emissions-client.d.ts.map +1 -1
  24. package/dist/payments/evm/emissions-client.js +13 -0
  25. package/dist/payments/evm/emissions-client.js.map +1 -1
  26. package/dist/payments/evm/emissions-gate-client.d.ts +51 -0
  27. package/dist/payments/evm/emissions-gate-client.d.ts.map +1 -0
  28. package/dist/payments/evm/emissions-gate-client.js +55 -0
  29. package/dist/payments/evm/emissions-gate-client.js.map +1 -0
  30. package/dist/payments/evm/multicall.d.ts +21 -0
  31. package/dist/payments/evm/multicall.d.ts.map +1 -0
  32. package/dist/payments/evm/multicall.js +73 -0
  33. package/dist/payments/evm/multicall.js.map +1 -0
  34. package/dist/payments/evm/points-policy-registry-client.d.ts +21 -0
  35. package/dist/payments/evm/points-policy-registry-client.d.ts.map +1 -0
  36. package/dist/payments/evm/points-policy-registry-client.js +34 -0
  37. package/dist/payments/evm/points-policy-registry-client.js.map +1 -0
  38. package/dist/payments/evm/position-init-client.d.ts +18 -0
  39. package/dist/payments/evm/position-init-client.d.ts.map +1 -0
  40. package/dist/payments/evm/position-init-client.js +19 -0
  41. package/dist/payments/evm/position-init-client.js.map +1 -0
  42. package/dist/payments/evm/registry-client.d.ts +17 -0
  43. package/dist/payments/evm/registry-client.d.ts.map +1 -0
  44. package/dist/payments/evm/registry-client.js +24 -0
  45. package/dist/payments/evm/registry-client.js.map +1 -0
  46. package/dist/payments/evm/seller-pools-client.d.ts +95 -0
  47. package/dist/payments/evm/seller-pools-client.d.ts.map +1 -0
  48. package/dist/payments/evm/seller-pools-client.js +193 -0
  49. package/dist/payments/evm/seller-pools-client.js.map +1 -0
  50. package/dist/payments/evm/seller-pools-rewards-client.d.ts +36 -0
  51. package/dist/payments/evm/seller-pools-rewards-client.d.ts.map +1 -0
  52. package/dist/payments/evm/seller-pools-rewards-client.js +126 -0
  53. package/dist/payments/evm/seller-pools-rewards-client.js.map +1 -0
  54. package/dist/payments/evm/seller-registry-client.d.ts +28 -0
  55. package/dist/payments/evm/seller-registry-client.d.ts.map +1 -0
  56. package/dist/payments/evm/seller-registry-client.js +60 -0
  57. package/dist/payments/evm/seller-registry-client.js.map +1 -0
  58. package/dist/payments/evm/seller-rewards-pool-client.d.ts +24 -0
  59. package/dist/payments/evm/seller-rewards-pool-client.d.ts.map +1 -0
  60. package/dist/payments/evm/seller-rewards-pool-client.js +27 -0
  61. package/dist/payments/evm/seller-rewards-pool-client.js.map +1 -0
  62. package/dist/payments/evm/usage-accounting-client.d.ts +49 -0
  63. package/dist/payments/evm/usage-accounting-client.d.ts.map +1 -0
  64. package/dist/payments/evm/usage-accounting-client.js +82 -0
  65. package/dist/payments/evm/usage-accounting-client.js.map +1 -0
  66. package/dist/payments/evm/usage-rewards-client.d.ts +43 -0
  67. package/dist/payments/evm/usage-rewards-client.d.ts.map +1 -0
  68. package/dist/payments/evm/usage-rewards-client.js +62 -0
  69. package/dist/payments/evm/usage-rewards-client.js.map +1 -0
  70. package/dist/payments/evm/wash-trading-registry-client.d.ts +105 -0
  71. package/dist/payments/evm/wash-trading-registry-client.d.ts.map +1 -0
  72. package/dist/payments/evm/wash-trading-registry-client.js +170 -0
  73. package/dist/payments/evm/wash-trading-registry-client.js.map +1 -0
  74. package/dist/payments/generated-contract-addresses.d.ts +49 -0
  75. package/dist/payments/generated-contract-addresses.d.ts.map +1 -0
  76. package/dist/payments/generated-contract-addresses.js +50 -0
  77. package/dist/payments/generated-contract-addresses.js.map +1 -0
  78. package/dist/payments/index.d.ts +28 -0
  79. package/dist/payments/index.d.ts.map +1 -1
  80. package/dist/payments/index.js +14 -0
  81. package/dist/payments/index.js.map +1 -1
  82. package/dist/payments/reward-claims.d.ts +28 -0
  83. package/dist/payments/reward-claims.d.ts.map +1 -0
  84. package/dist/payments/reward-claims.js +67 -0
  85. package/dist/payments/reward-claims.js.map +1 -0
  86. package/dist/payments/reward-preview.d.ts +19 -0
  87. package/dist/payments/reward-preview.d.ts.map +1 -0
  88. package/dist/payments/reward-preview.js +36 -0
  89. package/dist/payments/reward-preview.js.map +1 -0
  90. package/dist/payments/seller-payment-manager.d.ts +9 -0
  91. package/dist/payments/seller-payment-manager.d.ts.map +1 -1
  92. package/dist/payments/seller-payment-manager.js +45 -0
  93. package/dist/payments/seller-payment-manager.js.map +1 -1
  94. package/dist/seller-request-handler.d.ts.map +1 -1
  95. package/dist/seller-request-handler.js +12 -0
  96. package/dist/seller-request-handler.js.map +1 -1
  97. package/package.json +4 -4
@@ -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":"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"}
@@ -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,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":"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"}
@@ -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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"}