@antseed/node 0.2.117 → 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.
- package/README.md +30 -0
- package/dist/index.d.ts +14 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +13 -0
- package/dist/index.js.map +1 -1
- package/dist/node.d.ts +2 -0
- package/dist/node.d.ts.map +1 -1
- package/dist/node.js +3 -0
- package/dist/node.js.map +1 -1
- package/dist/payments/chain-config.d.ts +53 -0
- package/dist/payments/chain-config.d.ts.map +1 -1
- package/dist/payments/chain-config.js +43 -23
- package/dist/payments/chain-config.js.map +1 -1
- package/dist/payments/contract-stack.d.ts +53 -0
- package/dist/payments/contract-stack.d.ts.map +1 -0
- package/dist/payments/contract-stack.js +97 -0
- package/dist/payments/contract-stack.js.map +1 -0
- package/dist/payments/evm/ants-token-client.d.ts +7 -0
- package/dist/payments/evm/ants-token-client.d.ts.map +1 -1
- package/dist/payments/evm/ants-token-client.js +37 -1
- package/dist/payments/evm/ants-token-client.js.map +1 -1
- package/dist/payments/evm/emissions-client.d.ts +3 -0
- package/dist/payments/evm/emissions-client.d.ts.map +1 -1
- package/dist/payments/evm/emissions-client.js +13 -0
- package/dist/payments/evm/emissions-client.js.map +1 -1
- package/dist/payments/evm/emissions-gate-client.d.ts +51 -0
- package/dist/payments/evm/emissions-gate-client.d.ts.map +1 -0
- package/dist/payments/evm/emissions-gate-client.js +55 -0
- package/dist/payments/evm/emissions-gate-client.js.map +1 -0
- package/dist/payments/evm/multicall.d.ts +21 -0
- package/dist/payments/evm/multicall.d.ts.map +1 -0
- package/dist/payments/evm/multicall.js +73 -0
- package/dist/payments/evm/multicall.js.map +1 -0
- package/dist/payments/evm/points-policy-registry-client.d.ts +21 -0
- package/dist/payments/evm/points-policy-registry-client.d.ts.map +1 -0
- package/dist/payments/evm/points-policy-registry-client.js +34 -0
- package/dist/payments/evm/points-policy-registry-client.js.map +1 -0
- package/dist/payments/evm/position-init-client.d.ts +18 -0
- package/dist/payments/evm/position-init-client.d.ts.map +1 -0
- package/dist/payments/evm/position-init-client.js +19 -0
- package/dist/payments/evm/position-init-client.js.map +1 -0
- package/dist/payments/evm/registry-client.d.ts +17 -0
- package/dist/payments/evm/registry-client.d.ts.map +1 -0
- package/dist/payments/evm/registry-client.js +24 -0
- package/dist/payments/evm/registry-client.js.map +1 -0
- package/dist/payments/evm/seller-pools-client.d.ts +95 -0
- package/dist/payments/evm/seller-pools-client.d.ts.map +1 -0
- package/dist/payments/evm/seller-pools-client.js +193 -0
- package/dist/payments/evm/seller-pools-client.js.map +1 -0
- package/dist/payments/evm/seller-pools-rewards-client.d.ts +36 -0
- package/dist/payments/evm/seller-pools-rewards-client.d.ts.map +1 -0
- package/dist/payments/evm/seller-pools-rewards-client.js +126 -0
- package/dist/payments/evm/seller-pools-rewards-client.js.map +1 -0
- package/dist/payments/evm/seller-registry-client.d.ts +28 -0
- package/dist/payments/evm/seller-registry-client.d.ts.map +1 -0
- package/dist/payments/evm/seller-registry-client.js +60 -0
- package/dist/payments/evm/seller-registry-client.js.map +1 -0
- package/dist/payments/evm/seller-rewards-pool-client.d.ts +24 -0
- package/dist/payments/evm/seller-rewards-pool-client.d.ts.map +1 -0
- package/dist/payments/evm/seller-rewards-pool-client.js +27 -0
- package/dist/payments/evm/seller-rewards-pool-client.js.map +1 -0
- package/dist/payments/evm/usage-accounting-client.d.ts +49 -0
- package/dist/payments/evm/usage-accounting-client.d.ts.map +1 -0
- package/dist/payments/evm/usage-accounting-client.js +82 -0
- package/dist/payments/evm/usage-accounting-client.js.map +1 -0
- package/dist/payments/evm/usage-rewards-client.d.ts +43 -0
- package/dist/payments/evm/usage-rewards-client.d.ts.map +1 -0
- package/dist/payments/evm/usage-rewards-client.js +62 -0
- package/dist/payments/evm/usage-rewards-client.js.map +1 -0
- package/dist/payments/evm/wash-trading-registry-client.d.ts +105 -0
- package/dist/payments/evm/wash-trading-registry-client.d.ts.map +1 -0
- package/dist/payments/evm/wash-trading-registry-client.js +170 -0
- package/dist/payments/evm/wash-trading-registry-client.js.map +1 -0
- package/dist/payments/generated-contract-addresses.d.ts +49 -0
- package/dist/payments/generated-contract-addresses.d.ts.map +1 -0
- package/dist/payments/generated-contract-addresses.js +50 -0
- package/dist/payments/generated-contract-addresses.js.map +1 -0
- package/dist/payments/index.d.ts +28 -0
- package/dist/payments/index.d.ts.map +1 -1
- package/dist/payments/index.js +14 -0
- package/dist/payments/index.js.map +1 -1
- package/dist/payments/reward-claims.d.ts +28 -0
- package/dist/payments/reward-claims.d.ts.map +1 -0
- package/dist/payments/reward-claims.js +67 -0
- package/dist/payments/reward-claims.js.map +1 -0
- package/dist/payments/reward-preview.d.ts +19 -0
- package/dist/payments/reward-preview.d.ts.map +1 -0
- package/dist/payments/reward-preview.js +36 -0
- package/dist/payments/reward-preview.js.map +1 -0
- package/dist/payments/seller-payment-manager.d.ts +9 -0
- package/dist/payments/seller-payment-manager.d.ts.map +1 -1
- package/dist/payments/seller-payment-manager.js +45 -0
- package/dist/payments/seller-payment-manager.js.map +1 -1
- package/dist/seller-request-handler.d.ts.map +1 -1
- package/dist/seller-request-handler.js +12 -0
- package/dist/seller-request-handler.js.map +1 -1
- package/package.json +3 -3
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { BaseEvmClient } from './base-evm-client.js';
|
|
2
|
+
export interface EmissionsGateClientConfig {
|
|
3
|
+
rpcUrl: string;
|
|
4
|
+
fallbackRpcUrls?: string[];
|
|
5
|
+
contractAddress: string;
|
|
6
|
+
evmChainId?: number;
|
|
7
|
+
}
|
|
8
|
+
export interface GateMinter {
|
|
9
|
+
controller: string;
|
|
10
|
+
shareBps: number;
|
|
11
|
+
editable: boolean;
|
|
12
|
+
}
|
|
13
|
+
/** Gate minter ids are `keccak256(id string)`. These are the M001 buckets. */
|
|
14
|
+
export declare const GATE_MINTERS: readonly [{
|
|
15
|
+
readonly name: "seller-pools";
|
|
16
|
+
readonly id: "antseed.emissions.seller-pools.v1";
|
|
17
|
+
}, {
|
|
18
|
+
readonly name: "usage";
|
|
19
|
+
readonly id: "antseed.emissions.usage.v1";
|
|
20
|
+
}, {
|
|
21
|
+
readonly name: "team";
|
|
22
|
+
readonly id: "antseed.emissions.team.v1";
|
|
23
|
+
}, {
|
|
24
|
+
readonly name: "reserve";
|
|
25
|
+
readonly id: "antseed.emissions.reserve.v1";
|
|
26
|
+
}, {
|
|
27
|
+
readonly name: "verification";
|
|
28
|
+
readonly id: "antseed.emissions.verification.v1";
|
|
29
|
+
}];
|
|
30
|
+
export declare function gateMinterId(id: string): string;
|
|
31
|
+
export declare class EmissionsGateClient extends BaseEvmClient {
|
|
32
|
+
constructor(config: EmissionsGateClientConfig);
|
|
33
|
+
private contract;
|
|
34
|
+
currentEpoch(): Promise<number>;
|
|
35
|
+
effectiveEpoch(): Promise<number>;
|
|
36
|
+
currentEmissionRate(): Promise<bigint>;
|
|
37
|
+
epochDuration(): Promise<number>;
|
|
38
|
+
genesis(): Promise<number>;
|
|
39
|
+
halvingInterval(): Promise<number>;
|
|
40
|
+
initialEmission(): Promise<bigint>;
|
|
41
|
+
shareDenominator(): Promise<number>;
|
|
42
|
+
getEpochEmission(epoch: number): Promise<bigint>;
|
|
43
|
+
cumulativeEmissionThrough(epochExclusive: number): Promise<bigint>;
|
|
44
|
+
minter(minterId: string): Promise<GateMinter>;
|
|
45
|
+
minterEpochBudget(minterId: string, epoch: number): Promise<bigint>;
|
|
46
|
+
controllerEpochBudget(controller: string, epoch: number): Promise<bigint>;
|
|
47
|
+
emissionsReserve(): Promise<string>;
|
|
48
|
+
legacyEscrow(): Promise<string>;
|
|
49
|
+
owner(): Promise<string>;
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=emissions-gate-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"emissions-gate-client.d.ts","sourceRoot":"","sources":["../../../src/payments/evm/emissions-gate-client.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD,MAAM,WAAW,yBAAyB;IAAG,MAAM,EAAE,MAAM,CAAC;IAAC,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,eAAe,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAAE;AAExI,MAAM,WAAW,UAAU;IAAG,UAAU,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAC;CAAE;AAExF,8EAA8E;AAC9E,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;EAMf,CAAC;AAEX,wBAAgB,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAE/C;AAqBD,qBAAa,mBAAoB,SAAQ,aAAa;gBACxC,MAAM,EAAE,yBAAyB;IAC7C,OAAO,CAAC,QAAQ;IAEV,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC;IAC/B,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC;IACvC,mBAAmB,IAAI,OAAO,CAAC,MAAM,CAAC;IAChC,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC;IAChC,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC;IAC1B,eAAe,IAAI,OAAO,CAAC,MAAM,CAAC;IACxC,eAAe,IAAI,OAAO,CAAC,MAAM,CAAC;IAC5B,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC;IACzC,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAChD,yBAAyB,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAC5D,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAInD,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IACnE,qBAAqB,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IACzE,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC;IACnC,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC;IAC/B,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC;CACzB"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { Contract, keccak256, toUtf8Bytes } from 'ethers';
|
|
2
|
+
import { BaseEvmClient } from './base-evm-client.js';
|
|
3
|
+
/** Gate minter ids are `keccak256(id string)`. These are the M001 buckets. */
|
|
4
|
+
export const GATE_MINTERS = [
|
|
5
|
+
{ name: 'seller-pools', id: 'antseed.emissions.seller-pools.v1' },
|
|
6
|
+
{ name: 'usage', id: 'antseed.emissions.usage.v1' },
|
|
7
|
+
{ name: 'team', id: 'antseed.emissions.team.v1' },
|
|
8
|
+
{ name: 'reserve', id: 'antseed.emissions.reserve.v1' },
|
|
9
|
+
{ name: 'verification', id: 'antseed.emissions.verification.v1' },
|
|
10
|
+
];
|
|
11
|
+
export function gateMinterId(id) {
|
|
12
|
+
return keccak256(toUtf8Bytes(id));
|
|
13
|
+
}
|
|
14
|
+
const ABI = [
|
|
15
|
+
'function currentEpoch() external view returns (uint256)',
|
|
16
|
+
'function effectiveEpoch() external view returns (uint256)',
|
|
17
|
+
'function currentEmissionRate() external view returns (uint256)',
|
|
18
|
+
'function epochDuration() external view returns (uint256)',
|
|
19
|
+
'function genesis() external view returns (uint256)',
|
|
20
|
+
'function HALVING_INTERVAL() external view returns (uint256)',
|
|
21
|
+
'function INITIAL_EMISSION() external view returns (uint256)',
|
|
22
|
+
'function SHARE_DENOMINATOR() external view returns (uint256)',
|
|
23
|
+
'function getEpochEmission(uint256 epoch) external view returns (uint256)',
|
|
24
|
+
'function cumulativeEmissionThrough(uint256 epochExclusive) external view returns (uint256)',
|
|
25
|
+
'function minters(bytes32 minterId) external view returns (address controller, uint32 shareBps, bool editable)',
|
|
26
|
+
'function minterEpochBudget(bytes32 minterId, uint256 epoch) external view returns (uint256)',
|
|
27
|
+
'function controllerEpochBudget(address controller, uint256 epoch) external view returns (uint256)',
|
|
28
|
+
'function emissionsReserve() external view returns (address)',
|
|
29
|
+
'function legacyEscrow() external view returns (address)',
|
|
30
|
+
'function owner() external view returns (address)',
|
|
31
|
+
];
|
|
32
|
+
export class EmissionsGateClient extends BaseEvmClient {
|
|
33
|
+
constructor(config) { super(config.rpcUrl, config.contractAddress, config.fallbackRpcUrls, config.evmChainId); }
|
|
34
|
+
contract() { return new Contract(this._contractAddress, ABI, this._provider); }
|
|
35
|
+
async currentEpoch() { return Number(await this.contract().getFunction('currentEpoch')()); }
|
|
36
|
+
async effectiveEpoch() { return Number(await this.contract().getFunction('effectiveEpoch')()); }
|
|
37
|
+
currentEmissionRate() { return this.contract().getFunction('currentEmissionRate')(); }
|
|
38
|
+
async epochDuration() { return Number(await this.contract().getFunction('epochDuration')()); }
|
|
39
|
+
async genesis() { return Number(await this.contract().getFunction('genesis')()); }
|
|
40
|
+
async halvingInterval() { return Number(await this.contract().getFunction('HALVING_INTERVAL')()); }
|
|
41
|
+
initialEmission() { return this.contract().getFunction('INITIAL_EMISSION')(); }
|
|
42
|
+
async shareDenominator() { return Number(await this.contract().getFunction('SHARE_DENOMINATOR')()); }
|
|
43
|
+
getEpochEmission(epoch) { return this.contract().getFunction('getEpochEmission')(epoch); }
|
|
44
|
+
cumulativeEmissionThrough(epochExclusive) { return this.contract().getFunction('cumulativeEmissionThrough')(epochExclusive); }
|
|
45
|
+
async minter(minterId) {
|
|
46
|
+
const [controller, shareBps, editable] = await this.contract().getFunction('minters')(minterId);
|
|
47
|
+
return { controller, shareBps: Number(shareBps), editable };
|
|
48
|
+
}
|
|
49
|
+
minterEpochBudget(minterId, epoch) { return this.contract().getFunction('minterEpochBudget')(minterId, epoch); }
|
|
50
|
+
controllerEpochBudget(controller, epoch) { return this.contract().getFunction('controllerEpochBudget')(controller, epoch); }
|
|
51
|
+
emissionsReserve() { return this.contract().getFunction('emissionsReserve')(); }
|
|
52
|
+
legacyEscrow() { return this.contract().getFunction('legacyEscrow')(); }
|
|
53
|
+
owner() { return this.contract().getFunction('owner')(); }
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=emissions-gate-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"emissions-gate-client.js","sourceRoot":"","sources":["../../../src/payments/evm/emissions-gate-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { Interface, type AbstractProvider } from 'ethers';
|
|
2
|
+
/** Canonical Multicall3 deployment (same address on Base, Base Sepolia, and most EVM chains). */
|
|
3
|
+
export declare const MULTICALL3_ADDRESS = "0xcA11bde05977b3631167028862bE2a173976CA11";
|
|
4
|
+
export interface MulticallRequest {
|
|
5
|
+
target: string;
|
|
6
|
+
iface: Interface;
|
|
7
|
+
method: string;
|
|
8
|
+
args?: unknown[];
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Batch many read calls into a few `eth_call`s via Multicall3 (`allowFailure`
|
|
12
|
+
* per call: a reverting read yields `null` instead of failing the batch).
|
|
13
|
+
* Falls back to individual calls when the chain has no Multicall3.
|
|
14
|
+
*/
|
|
15
|
+
export declare function multicallRead(provider: AbstractProvider, requests: MulticallRequest[], options?: {
|
|
16
|
+
chunkSize?: number;
|
|
17
|
+
concurrency?: number;
|
|
18
|
+
address?: string;
|
|
19
|
+
blockTag?: number | string;
|
|
20
|
+
}): Promise<Array<unknown[] | null>>;
|
|
21
|
+
//# sourceMappingURL=multicall.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"multicall.d.ts","sourceRoot":"","sources":["../../../src/payments/evm/multicall.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,SAAS,EAAE,KAAK,gBAAgB,EAAE,MAAM,QAAQ,CAAC;AAEpE,iGAAiG;AACjG,eAAO,MAAM,kBAAkB,+CAA+C,CAAC;AAM/E,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,SAAS,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC;CAClB;AAED;;;;GAIG;AACH,wBAAsB,aAAa,CACjC,QAAQ,EAAE,gBAAgB,EAC1B,QAAQ,EAAE,gBAAgB,EAAE,EAC5B,OAAO,GAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;CAAO,GACvG,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC,CAoDlC"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { Contract } from 'ethers';
|
|
2
|
+
/** Canonical Multicall3 deployment (same address on Base, Base Sepolia, and most EVM chains). */
|
|
3
|
+
export const MULTICALL3_ADDRESS = '0xcA11bde05977b3631167028862bE2a173976CA11';
|
|
4
|
+
const MULTICALL3_ABI = [
|
|
5
|
+
'function aggregate3(tuple(address target, bool allowFailure, bytes callData)[] calls) payable returns (tuple(bool success, bytes returnData)[] returnData)',
|
|
6
|
+
];
|
|
7
|
+
/**
|
|
8
|
+
* Batch many read calls into a few `eth_call`s via Multicall3 (`allowFailure`
|
|
9
|
+
* per call: a reverting read yields `null` instead of failing the batch).
|
|
10
|
+
* Falls back to individual calls when the chain has no Multicall3.
|
|
11
|
+
*/
|
|
12
|
+
export async function multicallRead(provider, requests, options = {}) {
|
|
13
|
+
if (requests.length === 0)
|
|
14
|
+
return [];
|
|
15
|
+
const chunkSize = options.chunkSize ?? 80;
|
|
16
|
+
const concurrency = Math.max(1, options.concurrency ?? 4);
|
|
17
|
+
const multicall = new Contract(options.address ?? MULTICALL3_ADDRESS, MULTICALL3_ABI, provider);
|
|
18
|
+
const results = new Array(requests.length).fill(null);
|
|
19
|
+
const code = await provider.getCode(options.address ?? MULTICALL3_ADDRESS).catch(() => '0x');
|
|
20
|
+
if (code === '0x') {
|
|
21
|
+
await Promise.all(requests.map(async (request, index) => {
|
|
22
|
+
try {
|
|
23
|
+
const data = await provider.call({ to: request.target, data: request.iface.encodeFunctionData(request.method, request.args ?? []), ...(options.blockTag !== undefined ? { blockTag: options.blockTag } : {}) });
|
|
24
|
+
results[index] = [...request.iface.decodeFunctionResult(request.method, data)];
|
|
25
|
+
}
|
|
26
|
+
catch {
|
|
27
|
+
results[index] = null;
|
|
28
|
+
}
|
|
29
|
+
}));
|
|
30
|
+
return results;
|
|
31
|
+
}
|
|
32
|
+
const overrides = options.blockTag !== undefined ? { blockTag: options.blockTag } : {};
|
|
33
|
+
// A chunk that fails as a whole (RPC timeout, gas cap) is split and retried;
|
|
34
|
+
// a single call that still fails yields null like a reverting read.
|
|
35
|
+
const run = async (offset, size) => {
|
|
36
|
+
const chunk = requests.slice(offset, offset + size);
|
|
37
|
+
if (chunk.length === 0)
|
|
38
|
+
return;
|
|
39
|
+
const calls = chunk.map((request) => ({ target: request.target, allowFailure: true, callData: request.iface.encodeFunctionData(request.method, request.args ?? []) }));
|
|
40
|
+
let returned;
|
|
41
|
+
try {
|
|
42
|
+
returned = await multicall.getFunction('aggregate3').staticCall(calls, overrides);
|
|
43
|
+
}
|
|
44
|
+
catch (error) {
|
|
45
|
+
if (chunk.length === 1)
|
|
46
|
+
return;
|
|
47
|
+
const half = Math.ceil(chunk.length / 2);
|
|
48
|
+
await run(offset, half);
|
|
49
|
+
await run(offset + half, chunk.length - half);
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
returned.forEach((entry, index) => {
|
|
53
|
+
const request = chunk[index];
|
|
54
|
+
if (!entry.success || entry.returnData === '0x')
|
|
55
|
+
return;
|
|
56
|
+
try {
|
|
57
|
+
results[offset + index] = [...request.iface.decodeFunctionResult(request.method, entry.returnData)];
|
|
58
|
+
}
|
|
59
|
+
catch {
|
|
60
|
+
results[offset + index] = null;
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
};
|
|
64
|
+
// Chunks run a few at a time: sequential batches made a 3,000-read view
|
|
65
|
+
// take ~13 s through a public RPC, while a full fan-out trips rate limits.
|
|
66
|
+
const offsets = Array.from({ length: Math.ceil(requests.length / chunkSize) }, (_, index) => index * chunkSize);
|
|
67
|
+
await Promise.all(Array.from({ length: Math.min(concurrency, offsets.length) }, async () => {
|
|
68
|
+
for (let next = offsets.shift(); next !== undefined; next = offsets.shift())
|
|
69
|
+
await run(next, chunkSize);
|
|
70
|
+
}));
|
|
71
|
+
return results;
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=multicall.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"multicall.js","sourceRoot":"","sources":["../../../src/payments/evm/multicall.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAoC,MAAM,QAAQ,CAAC;AAEpE,iGAAiG;AACjG,MAAM,CAAC,MAAM,kBAAkB,GAAG,4CAA4C,CAAC;AAE/E,MAAM,cAAc,GAAG;IACrB,4JAA4J;CACpJ,CAAC;AASX;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,QAA0B,EAC1B,QAA4B,EAC5B,UAAsG,EAAE;IAExG,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACrC,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,EAAE,CAAC;IAC1C,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,WAAW,IAAI,CAAC,CAAC,CAAC;IAC1D,MAAM,SAAS,GAAG,IAAI,QAAQ,CAAC,OAAO,CAAC,OAAO,IAAI,kBAAkB,EAAE,cAAc,EAAE,QAAQ,CAAC,CAAC;IAChG,MAAM,OAAO,GAA4B,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC/E,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,IAAI,kBAAkB,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;IAC7F,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;QAClB,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;YACtD,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,kBAAkB,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;gBAChN,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,oBAAoB,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;YACjF,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;YACxB,CAAC;QACH,CAAC,CAAC,CAAC,CAAC;QACJ,OAAO,OAAO,CAAC;IACjB,CAAC;IACD,MAAM,SAAS,GAAG,OAAO,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACvF,6EAA6E;IAC7E,oEAAoE;IACpE,MAAM,GAAG,GAAG,KAAK,EAAE,MAAc,EAAE,IAAY,EAAiB,EAAE;QAChE,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC;QACpD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAC/B,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC,KAAK,CAAC,kBAAkB,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACvK,IAAI,QAAyD,CAAC;QAC9D,IAAI,CAAC;YACH,QAAQ,GAAG,MAAM,SAAS,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC,UAAU,CAAC,KAAK,EAAE,SAAS,CAAoD,CAAC;QACvI,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO;YAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YACzC,MAAM,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YACxB,MAAM,GAAG,CAAC,MAAM,GAAG,IAAI,EAAE,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;YAC9C,OAAO;QACT,CAAC;QACD,QAAQ,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YAChC,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAE,CAAC;YAC9B,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,UAAU,KAAK,IAAI;gBAAE,OAAO;YACxD,IAAI,CAAC;gBACH,OAAO,CAAC,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,oBAAoB,CAAC,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;YACtG,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,CAAC,MAAM,GAAG,KAAK,CAAC,GAAG,IAAI,CAAC;YACjC,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;IACF,wEAAwE;IACxE,2EAA2E;IAC3E,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,SAAS,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,GAAG,SAAS,CAAC,CAAC;IAChH,MAAM,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,IAAI,EAAE;QACzF,KAAK,IAAI,IAAI,GAAG,OAAO,CAAC,KAAK,EAAE,EAAE,IAAI,KAAK,SAAS,EAAE,IAAI,GAAG,OAAO,CAAC,KAAK,EAAE;YAAE,MAAM,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAC1G,CAAC,CAAC,CAAC,CAAC;IACJ,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { BaseEvmClient } from './base-evm-client.js';
|
|
2
|
+
export interface PointsPolicyRegistryClientConfig {
|
|
3
|
+
rpcUrl: string;
|
|
4
|
+
fallbackRpcUrls?: string[];
|
|
5
|
+
contractAddress: string;
|
|
6
|
+
evmChainId?: number;
|
|
7
|
+
}
|
|
8
|
+
export declare class PointsPolicyRegistryClient extends BaseEvmClient {
|
|
9
|
+
constructor(config: PointsPolicyRegistryClientConfig);
|
|
10
|
+
private contract;
|
|
11
|
+
policyCount(): Promise<number>;
|
|
12
|
+
policyAt(index: number): Promise<string>;
|
|
13
|
+
isPolicyRegistered(policy: string): Promise<boolean>;
|
|
14
|
+
maxPolicies(): Promise<number>;
|
|
15
|
+
owner(): Promise<string>;
|
|
16
|
+
/** Registered modifiers in evaluation order. */
|
|
17
|
+
policies(): Promise<string[]>;
|
|
18
|
+
/** The wash-trading registry a policy pins, or null when the policy has no such pointer. */
|
|
19
|
+
washTradingRegistryOf(policy: string): Promise<string | null>;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=points-policy-registry-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"points-policy-registry-client.d.ts","sourceRoot":"","sources":["../../../src/payments/evm/points-policy-registry-client.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD,MAAM,WAAW,gCAAgC;IAAG,MAAM,EAAE,MAAM,CAAC;IAAC,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,eAAe,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAAE;AAY/I,qBAAa,0BAA2B,SAAQ,aAAa;gBAC/C,MAAM,EAAE,gCAAgC;IACpD,OAAO,CAAC,QAAQ;IAEV,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC;IACpC,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IACxC,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAC9C,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC;IACpC,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC;IACxB,gDAAgD;IAC1C,QAAQ,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAInC,4FAA4F;IACtF,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;CAOpE"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { Contract } from 'ethers';
|
|
2
|
+
import { BaseEvmClient } from './base-evm-client.js';
|
|
3
|
+
const ABI = [
|
|
4
|
+
'function policyCount() external view returns (uint256)',
|
|
5
|
+
'function policyAt(uint256 index) external view returns (address)',
|
|
6
|
+
'function isPolicyRegistered(address policy) external view returns (bool)',
|
|
7
|
+
'function MAX_POLICIES() external view returns (uint256)',
|
|
8
|
+
'function owner() external view returns (address)',
|
|
9
|
+
];
|
|
10
|
+
const WASH_POLICY_ABI = ['function washTradingRegistry() external view returns (address)'];
|
|
11
|
+
export class PointsPolicyRegistryClient 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
|
+
async policyCount() { return Number(await this.contract().getFunction('policyCount')()); }
|
|
15
|
+
policyAt(index) { return this.contract().getFunction('policyAt')(index); }
|
|
16
|
+
isPolicyRegistered(policy) { return this.contract().getFunction('isPolicyRegistered')(policy); }
|
|
17
|
+
async maxPolicies() { return Number(await this.contract().getFunction('MAX_POLICIES')()); }
|
|
18
|
+
owner() { return this.contract().getFunction('owner')(); }
|
|
19
|
+
/** Registered modifiers in evaluation order. */
|
|
20
|
+
async policies() {
|
|
21
|
+
const count = await this.policyCount();
|
|
22
|
+
return Promise.all(Array.from({ length: count }, (_, index) => this.policyAt(index)));
|
|
23
|
+
}
|
|
24
|
+
/** The wash-trading registry a policy pins, or null when the policy has no such pointer. */
|
|
25
|
+
async washTradingRegistryOf(policy) {
|
|
26
|
+
try {
|
|
27
|
+
return await new Contract(policy, WASH_POLICY_ABI, this._provider).getFunction('washTradingRegistry')();
|
|
28
|
+
}
|
|
29
|
+
catch {
|
|
30
|
+
return null;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=points-policy-registry-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"points-policy-registry-client.js","sourceRoot":"","sources":["../../../src/payments/evm/points-policy-registry-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAIrD,MAAM,GAAG,GAAG;IACV,wDAAwD;IACxD,kEAAkE;IAClE,0EAA0E;IAC1E,yDAAyD;IACzD,kDAAkD;CAC1C,CAAC;AAEX,MAAM,eAAe,GAAG,CAAC,gEAAgE,CAAU,CAAC;AAEpG,MAAM,OAAO,0BAA2B,SAAQ,aAAa;IAC3D,YAAY,MAAwC,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,eAAe,EAAE,MAAM,CAAC,eAAe,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IAC1I,QAAQ,KAAe,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,gBAAgB,EAAE,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IAEjG,KAAK,CAAC,WAAW,KAAsB,OAAO,MAAM,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC,WAAW,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC3G,QAAQ,CAAC,KAAa,IAAqB,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACnG,kBAAkB,CAAC,MAAc,IAAsB,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC,WAAW,CAAC,oBAAoB,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAC1H,KAAK,CAAC,WAAW,KAAsB,OAAO,MAAM,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC,WAAW,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC5G,KAAK,KAAsB,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;IAC3E,gDAAgD;IAChD,KAAK,CAAC,QAAQ;QACZ,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;QACvC,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACxF,CAAC;IACD,4FAA4F;IAC5F,KAAK,CAAC,qBAAqB,CAAC,MAAc;QACxC,IAAI,CAAC;YACH,OAAO,MAAM,IAAI,QAAQ,CAAC,MAAM,EAAE,eAAe,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,WAAW,CAAC,qBAAqB,CAAC,EAAY,CAAC;QACpH,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { type AbstractSigner } from 'ethers';
|
|
2
|
+
import { BaseEvmClient } from './base-evm-client.js';
|
|
3
|
+
export interface PositionInitClientConfig {
|
|
4
|
+
rpcUrl: string;
|
|
5
|
+
fallbackRpcUrls?: string[];
|
|
6
|
+
contractAddress: string;
|
|
7
|
+
evmChainId?: number;
|
|
8
|
+
}
|
|
9
|
+
export declare class PositionInitClient extends BaseEvmClient {
|
|
10
|
+
constructor(config: PositionInitClientConfig);
|
|
11
|
+
private contract;
|
|
12
|
+
initPosition(signer: AbstractSigner): Promise<string>;
|
|
13
|
+
remainingInits(): Promise<bigint>;
|
|
14
|
+
agentInitialized(agentId: number): Promise<boolean>;
|
|
15
|
+
initAmount(): Promise<bigint>;
|
|
16
|
+
initEndEpoch(): Promise<number>;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=position-init-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"position-init-client.d.ts","sourceRoot":"","sources":["../../../src/payments/evm/position-init-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,cAAc,EAAE,MAAM,QAAQ,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,MAAM,WAAW,wBAAwB;IAAG,MAAM,EAAE,MAAM,CAAC;IAAC,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,eAAe,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAAE;AAQvI,qBAAa,kBAAmB,SAAQ,aAAa;gBACvC,MAAM,EAAE,wBAAwB;IAC5C,OAAO,CAAC,QAAQ;IAChB,YAAY,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC;IACrD,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC;IACjC,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IACnD,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC;IACvB,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC;CACtC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { Contract } from 'ethers';
|
|
2
|
+
import { BaseEvmClient } from './base-evm-client.js';
|
|
3
|
+
const ABI = [
|
|
4
|
+
'function initPosition() external returns (uint256 positionId)',
|
|
5
|
+
'function remainingInits() external view returns (uint256)',
|
|
6
|
+
'function agentInitialized(uint256 agentId) external view returns (bool)',
|
|
7
|
+
'function initAmount() external view returns (uint256)',
|
|
8
|
+
'function initEndEpoch() external view returns (uint256)',
|
|
9
|
+
];
|
|
10
|
+
export class PositionInitClient extends BaseEvmClient {
|
|
11
|
+
constructor(config) { super(config.rpcUrl, config.contractAddress, config.fallbackRpcUrls, config.evmChainId); }
|
|
12
|
+
contract() { return new Contract(this._contractAddress, ABI, this._provider); }
|
|
13
|
+
initPosition(signer) { return this._execWrite(signer, ABI, 'initPosition'); }
|
|
14
|
+
remainingInits() { return this.contract().getFunction('remainingInits')(); }
|
|
15
|
+
agentInitialized(agentId) { return this.contract().getFunction('agentInitialized')(agentId); }
|
|
16
|
+
initAmount() { return this.contract().getFunction('initAmount')(); }
|
|
17
|
+
async initEndEpoch() { return Number(await this.contract().getFunction('initEndEpoch')()); }
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=position-init-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"position-init-client.js","sourceRoot":"","sources":["../../../src/payments/evm/position-init-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAuB,MAAM,QAAQ,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD,MAAM,GAAG,GAAG;IACV,+DAA+D;IAC/D,2DAA2D;IAC3D,yEAAyE;IACzE,uDAAuD;IACvD,yDAAyD;CACjD,CAAC;AACX,MAAM,OAAO,kBAAmB,SAAQ,aAAa;IACnD,YAAY,MAAgC,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,eAAe,EAAE,MAAM,CAAC,eAAe,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IAClI,QAAQ,KAAe,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,gBAAgB,EAAE,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IACjG,YAAY,CAAC,MAAsB,IAAqB,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,GAAG,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC;IAC9G,cAAc,KAAsB,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC,WAAW,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC,CAAC;IAC7F,gBAAgB,CAAC,OAAe,IAAsB,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC,WAAW,CAAC,kBAAkB,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IACxH,UAAU,KAAsB,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC,WAAW,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC;IACrF,KAAK,CAAC,YAAY,KAAsB,OAAO,MAAM,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC,WAAW,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;CAC9G"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { BaseEvmClient } from './base-evm-client.js';
|
|
2
|
+
export interface RegistryClientConfig {
|
|
3
|
+
rpcUrl: string;
|
|
4
|
+
fallbackRpcUrls?: string[];
|
|
5
|
+
contractAddress: string;
|
|
6
|
+
evmChainId?: number;
|
|
7
|
+
}
|
|
8
|
+
export declare class RegistryClient extends BaseEvmClient {
|
|
9
|
+
constructor(config: RegistryClientConfig);
|
|
10
|
+
private _address;
|
|
11
|
+
emissions(): Promise<string>;
|
|
12
|
+
staking(): Promise<string>;
|
|
13
|
+
channels(): Promise<string>;
|
|
14
|
+
deposits(): Promise<string>;
|
|
15
|
+
antsToken(): Promise<string>;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=registry-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry-client.d.ts","sourceRoot":"","sources":["../../../src/payments/evm/registry-client.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAUD,qBAAa,cAAe,SAAQ,aAAa;gBACnC,MAAM,EAAE,oBAAoB;YAI1B,QAAQ;IAKtB,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC;IAC5B,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC;IAC1B,QAAQ,IAAI,OAAO,CAAC,MAAM,CAAC;IAC3B,QAAQ,IAAI,OAAO,CAAC,MAAM,CAAC;IAC3B,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC;CAC7B"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { Contract } from 'ethers';
|
|
2
|
+
import { BaseEvmClient } from './base-evm-client.js';
|
|
3
|
+
const REGISTRY_ABI = [
|
|
4
|
+
'function emissions() external view returns (address)',
|
|
5
|
+
'function staking() external view returns (address)',
|
|
6
|
+
'function channels() external view returns (address)',
|
|
7
|
+
'function deposits() external view returns (address)',
|
|
8
|
+
'function antsToken() external view returns (address)',
|
|
9
|
+
];
|
|
10
|
+
export class RegistryClient extends BaseEvmClient {
|
|
11
|
+
constructor(config) {
|
|
12
|
+
super(config.rpcUrl, config.contractAddress, config.fallbackRpcUrls, config.evmChainId);
|
|
13
|
+
}
|
|
14
|
+
async _address(method) {
|
|
15
|
+
const contract = new Contract(this._contractAddress, REGISTRY_ABI, this._provider);
|
|
16
|
+
return contract.getFunction(method)();
|
|
17
|
+
}
|
|
18
|
+
emissions() { return this._address('emissions'); }
|
|
19
|
+
staking() { return this._address('staking'); }
|
|
20
|
+
channels() { return this._address('channels'); }
|
|
21
|
+
deposits() { return this._address('deposits'); }
|
|
22
|
+
antsToken() { return this._address('antsToken'); }
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=registry-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry-client.js","sourceRoot":"","sources":["../../../src/payments/evm/registry-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AASrD,MAAM,YAAY,GAAG;IACnB,sDAAsD;IACtD,oDAAoD;IACpD,qDAAqD;IACrD,qDAAqD;IACrD,sDAAsD;CAC9C,CAAC;AAEX,MAAM,OAAO,cAAe,SAAQ,aAAa;IAC/C,YAAY,MAA4B;QACtC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,eAAe,EAAE,MAAM,CAAC,eAAe,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;IAC1F,CAAC;IAEO,KAAK,CAAC,QAAQ,CAAC,MAAc;QACnC,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,gBAAgB,EAAE,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QACnF,OAAO,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC,EAAqB,CAAC;IAC3D,CAAC;IAED,SAAS,KAAsB,OAAO,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IACnE,OAAO,KAAsB,OAAO,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IAC/D,QAAQ,KAAsB,OAAO,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IACjE,QAAQ,KAAsB,OAAO,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IACjE,SAAS,KAAsB,OAAO,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;CACpE"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import { type AbstractSigner } from 'ethers';
|
|
2
|
+
import { BaseEvmClient } from './base-evm-client.js';
|
|
3
|
+
export interface SellerPoolsClientConfig {
|
|
4
|
+
rpcUrl: string;
|
|
5
|
+
fallbackRpcUrls?: string[];
|
|
6
|
+
contractAddress: string;
|
|
7
|
+
antsTokenAddress: string;
|
|
8
|
+
evmChainId?: number;
|
|
9
|
+
}
|
|
10
|
+
export interface SellerPoolPosition {
|
|
11
|
+
id: number;
|
|
12
|
+
owner: string;
|
|
13
|
+
agentId: number;
|
|
14
|
+
amount: bigint;
|
|
15
|
+
weightAmount: bigint;
|
|
16
|
+
stakeStartEpoch: number;
|
|
17
|
+
stakeEndEpoch: number;
|
|
18
|
+
closedAtEpoch: number;
|
|
19
|
+
withdrawn: boolean;
|
|
20
|
+
}
|
|
21
|
+
export interface SellerPoolConfig {
|
|
22
|
+
minStakeEpochs: number;
|
|
23
|
+
maxStakeEpochs: number;
|
|
24
|
+
stakeActivationDelay: number;
|
|
25
|
+
maxSlashBps: number;
|
|
26
|
+
minEarlyExitSlashBps: number;
|
|
27
|
+
restakedRewardWeightBonusBps: number;
|
|
28
|
+
moveWeightPenaltyBps: number;
|
|
29
|
+
}
|
|
30
|
+
export interface PositionPowerSegment {
|
|
31
|
+
normalEndEpoch: number;
|
|
32
|
+
maxLockPower: bigint;
|
|
33
|
+
nextChangeEpoch: number;
|
|
34
|
+
}
|
|
35
|
+
export declare class SellerPoolsClient extends BaseEvmClient {
|
|
36
|
+
private readonly antsTokenAddress;
|
|
37
|
+
constructor(config: SellerPoolsClientConfig);
|
|
38
|
+
private contract;
|
|
39
|
+
stake(signer: AbstractSigner, agentId: number, amount: bigint, epochs: number): Promise<string>;
|
|
40
|
+
moveStake(signer: AbstractSigner, positionId: number, toAgentId: number): Promise<string>;
|
|
41
|
+
moveStakes(signer: AbstractSigner, positionIds: number[], toAgentId: number): Promise<string>;
|
|
42
|
+
splitStake(signer: AbstractSigner, positionId: number, splitAmount: bigint): Promise<string>;
|
|
43
|
+
mergeStakes(signer: AbstractSigner, positionIds: number[]): Promise<string>;
|
|
44
|
+
extendLock(signer: AbstractSigner, positionId: number, additionalEpochs: number): Promise<string>;
|
|
45
|
+
enableMaxLock(signer: AbstractSigner, positionId: number): Promise<string>;
|
|
46
|
+
disableMaxLock(signer: AbstractSigner, positionId: number): Promise<string>;
|
|
47
|
+
withdrawStakes(signer: AbstractSigner, ids: number[]): Promise<string>;
|
|
48
|
+
stakerPositionCount(staker: string): Promise<number>;
|
|
49
|
+
stakerPositionIds(staker: string, offset?: number, limit?: number): Promise<number[]>;
|
|
50
|
+
position(id: number): Promise<SellerPoolPosition>;
|
|
51
|
+
positionsBatch(ids: number[]): Promise<SellerPoolPosition[]>;
|
|
52
|
+
positionWithdrawableEpoch(id: number): Promise<number>;
|
|
53
|
+
earlyExitSlashBps(id: number): Promise<number>;
|
|
54
|
+
positionWeightAtEpoch(id: number, epoch: number): Promise<bigint>;
|
|
55
|
+
positionMaxLockPowerAtEpoch(id: number, epoch: number): Promise<bigint>;
|
|
56
|
+
positionPowerSegmentAt(id: number, epoch: number): Promise<PositionPowerSegment>;
|
|
57
|
+
isMaxLocked(id: number, epoch: number): Promise<boolean>;
|
|
58
|
+
agentIdForSeller(seller: string): Promise<number>;
|
|
59
|
+
currentEpoch(): Promise<number>;
|
|
60
|
+
stakeActivationDelay(): Promise<number>;
|
|
61
|
+
minStakeEpochs(): Promise<number>;
|
|
62
|
+
maxStakeEpochs(): Promise<number>;
|
|
63
|
+
nextPositionId(): Promise<number>;
|
|
64
|
+
stakingSource(): Promise<string>;
|
|
65
|
+
poolConfig(): Promise<SellerPoolConfig>;
|
|
66
|
+
hasPoolAtEpoch(agentId: number, epoch: number): Promise<boolean>;
|
|
67
|
+
poolWeightAtEpoch(agentId: number, epoch: number): Promise<bigint>;
|
|
68
|
+
poolActiveStakeAtEpoch(agentId: number, epoch: number): Promise<bigint>;
|
|
69
|
+
totalActiveStakeAtEpoch(epoch: number): Promise<bigint>;
|
|
70
|
+
totalPowerWeightAtEpoch(epoch: number): Promise<bigint>;
|
|
71
|
+
/** Non-view on chain (caches the current epoch's weight); read through a static call. */
|
|
72
|
+
currentPoolSecurityShareBps(agentId: number): Promise<number>;
|
|
73
|
+
currentPoolSecurityWeight(agentId: number): Promise<bigint>;
|
|
74
|
+
currentTotalSecurityWeight(): Promise<bigint>;
|
|
75
|
+
stakerTotalActiveStake(staker: string): Promise<bigint>;
|
|
76
|
+
stakerAgentActiveStake(staker: string, agentId: number): Promise<bigint>;
|
|
77
|
+
allStakerPositionIds(staker: string): Promise<number[]>;
|
|
78
|
+
}
|
|
79
|
+
export interface EarlyExitEstimate {
|
|
80
|
+
id: number;
|
|
81
|
+
amount: bigint;
|
|
82
|
+
slashBps: number;
|
|
83
|
+
slashedAmount: bigint;
|
|
84
|
+
returnedAmount: bigint;
|
|
85
|
+
}
|
|
86
|
+
export declare function estimateEarlyExit(position: SellerPoolPosition, slashBps: number): EarlyExitEstimate;
|
|
87
|
+
export type PositionState = 'pending' | 'active' | 'matured' | 'closed' | 'withdrawn';
|
|
88
|
+
export declare function positionState(position: SellerPoolPosition, currentEpoch: number): PositionState;
|
|
89
|
+
/**
|
|
90
|
+
* Off-chain mirror of the pool's early-exit slash curve, for previews before
|
|
91
|
+
* a position is withdrawable (the on-chain getter reverts while a change is
|
|
92
|
+
* pending). Whole-epoch integer arithmetic matches the contract.
|
|
93
|
+
*/
|
|
94
|
+
export declare function projectedEarlyExitSlashBps(position: SellerPoolPosition, epoch: number, config: Pick<SellerPoolConfig, 'maxSlashBps' | 'minEarlyExitSlashBps'>, maxLocked?: boolean): number;
|
|
95
|
+
//# sourceMappingURL=seller-pools-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"seller-pools-client.d.ts","sourceRoot":"","sources":["../../../src/payments/evm/seller-pools-client.ts"],"names":[],"mappings":"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"}
|