@black-market/sdk 0.1.0 → 0.4.0
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 +92 -20
- package/dist/abyss.d.ts +4 -2748
- package/dist/abyss.d.ts.map +1 -1
- package/dist/abyss.js +3 -1029
- package/dist/abyss.js.map +1 -1
- package/dist/addresses.d.ts +3 -7
- package/dist/addresses.d.ts.map +1 -1
- package/dist/addresses.js +6 -21
- package/dist/addresses.js.map +1 -1
- package/dist/auction.d.ts +2 -2
- package/dist/auction.d.ts.map +1 -1
- package/dist/auction.js +2 -2
- package/dist/auction.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/launch-api.d.ts +151 -0
- package/dist/launch-api.d.ts.map +1 -0
- package/dist/launch-api.js +117 -0
- package/dist/launch-api.js.map +1 -0
- package/dist/launch.d.ts +23 -185
- package/dist/launch.d.ts.map +1 -1
- package/dist/launch.js +35 -272
- package/dist/launch.js.map +1 -1
- package/dist/lifecycle/abi.d.ts +6391 -0
- package/dist/lifecycle/abi.d.ts.map +1 -0
- package/dist/lifecycle/abi.js +335 -0
- package/dist/lifecycle/abi.js.map +1 -0
- package/dist/lifecycle/authors.d.ts +133 -0
- package/dist/lifecycle/authors.d.ts.map +1 -0
- package/dist/lifecycle/authors.js +217 -0
- package/dist/lifecycle/authors.js.map +1 -0
- package/dist/lifecycle/fork.d.ts +15 -0
- package/dist/lifecycle/fork.d.ts.map +1 -0
- package/dist/lifecycle/fork.js +36 -0
- package/dist/lifecycle/fork.js.map +1 -0
- package/dist/lifecycle/index.d.ts +10 -0
- package/dist/lifecycle/index.d.ts.map +1 -0
- package/dist/lifecycle/index.js +10 -0
- package/dist/lifecycle/index.js.map +1 -0
- package/dist/lifecycle/markets.d.ts +349 -0
- package/dist/lifecycle/markets.d.ts.map +1 -0
- package/dist/lifecycle/markets.js +186 -0
- package/dist/lifecycle/markets.js.map +1 -0
- package/dist/lifecycle/planner.d.ts +20 -0
- package/dist/lifecycle/planner.d.ts.map +1 -0
- package/dist/lifecycle/planner.js +481 -0
- package/dist/lifecycle/planner.js.map +1 -0
- package/dist/lifecycle/progress.d.ts +43 -0
- package/dist/lifecycle/progress.d.ts.map +1 -0
- package/dist/lifecycle/progress.js +449 -0
- package/dist/lifecycle/progress.js.map +1 -0
- package/dist/lifecycle/rpc.d.ts +17 -0
- package/dist/lifecycle/rpc.d.ts.map +1 -0
- package/dist/lifecycle/rpc.js +100 -0
- package/dist/lifecycle/rpc.js.map +1 -0
- package/dist/lifecycle/schema.d.ts +1068 -0
- package/dist/lifecycle/schema.d.ts.map +1 -0
- package/dist/lifecycle/schema.js +335 -0
- package/dist/lifecycle/schema.js.map +1 -0
- package/dist/lifecycle/simulation.d.ts +3 -0
- package/dist/lifecycle/simulation.d.ts.map +1 -0
- package/dist/lifecycle/simulation.js +393 -0
- package/dist/lifecycle/simulation.js.map +1 -0
- package/dist/lifecycle/types.d.ts +273 -0
- package/dist/lifecycle/types.d.ts.map +1 -0
- package/dist/lifecycle/types.js +11 -0
- package/dist/lifecycle/types.js.map +1 -0
- package/docs/launch-lifecycle.md +243 -0
- package/package.json +12 -3
- package/src/abyss.ts +3 -1059
- package/src/addresses.ts +9 -26
- package/src/auction.ts +2 -2
- package/src/index.ts +2 -0
- package/src/launch-api.ts +110 -0
- package/src/launch.ts +43 -411
- package/src/lifecycle/abi.ts +343 -0
- package/src/lifecycle/authors.ts +203 -0
- package/src/lifecycle/fork.ts +36 -0
- package/src/lifecycle/index.ts +9 -0
- package/src/lifecycle/markets.ts +205 -0
- package/src/lifecycle/planner.ts +396 -0
- package/src/lifecycle/progress.ts +378 -0
- package/src/lifecycle/rpc.ts +88 -0
- package/src/lifecycle/schema.ts +387 -0
- package/src/lifecycle/simulation.ts +329 -0
- package/src/lifecycle/types.ts +132 -0
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { type Abi, type Address, type Hex } from "viem";
|
|
2
|
+
import { type LifecycleBlock, type LifecycleLimitContext, type LifecycleLimitSource, type LifecycleLimits, type LifecycleRpcClient, type ResolvedLifecycleLimits } from "./types.js";
|
|
3
|
+
import type { ProfileTopologyV1 } from "./schema.js";
|
|
4
|
+
export declare function lifecycleRpc(client: LifecycleRpcClient, method: string, params?: readonly unknown[]): Promise<unknown>;
|
|
5
|
+
export declare function rpcObject(value: unknown, label: string): Record<string, unknown>;
|
|
6
|
+
export declare function rpcHex(value: unknown, label: string): Hex;
|
|
7
|
+
export declare function rpcQuantity(value: unknown, label: string): bigint;
|
|
8
|
+
export declare function readLifecycleBlock(client: LifecycleRpcClient, tag?: Hex | "latest"): Promise<LifecycleBlock>;
|
|
9
|
+
export declare function assertLifecycleBlock(client: LifecycleRpcClient, block: LifecycleBlock): Promise<void>;
|
|
10
|
+
export declare function readLifecycleContract<T>(client: LifecycleRpcClient, to: Address, abi: Abi, functionName: string, args: readonly unknown[], block: LifecycleBlock, from?: Address): Promise<T>;
|
|
11
|
+
/** A reviewed registry must supply topology; missing selectors never certify a profile. */
|
|
12
|
+
export declare function readLifecycleProfileTopology(client: LifecycleRpcClient, registry: Address, profileId: Hex, block: LifecycleBlock): Promise<ProfileTopologyV1>;
|
|
13
|
+
export declare function resolveLifecycleLimits(context: LifecycleLimitContext, source?: LifecycleLimitSource): Promise<{
|
|
14
|
+
limits: ResolvedLifecycleLimits;
|
|
15
|
+
configuration: LifecycleLimits;
|
|
16
|
+
}>;
|
|
17
|
+
//# sourceMappingURL=rpc.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rpc.d.ts","sourceRoot":"","sources":["../../src/lifecycle/rpc.ts"],"names":[],"mappings":"AAAA,OAAO,EAA0D,KAAK,GAAG,EAAE,KAAK,OAAO,EAAE,KAAK,GAAG,EAAE,MAAM,MAAM,CAAC;AAChH,OAAO,EAA0B,KAAK,cAAc,EAAE,KAAK,qBAAqB,EAAE,KAAK,oBAAoB,EAAE,KAAK,eAAe,EAAE,KAAK,kBAAkB,EAAE,KAAK,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAE7M,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAErD,wBAAsB,YAAY,CAAC,MAAM,EAAE,kBAAkB,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAE,SAAS,OAAO,EAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAEhI;AACD,wBAAgB,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAKhF;AACD,wBAAgB,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,GAAG,CAGzD;AACD,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAIjE;AACD,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,kBAAkB,EAAE,GAAG,GAAE,GAAG,GAAG,QAAmB,GAAG,OAAO,CAAC,cAAc,CAAC,CAS5H;AACD,wBAAsB,oBAAoB,CAAC,MAAM,EAAE,kBAAkB,EAAE,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAG3G;AACD,wBAAsB,qBAAqB,CAAC,CAAC,EAAE,MAAM,EAAE,kBAAkB,EAAE,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,OAAO,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,CAMnM;AAED,2FAA2F;AAC3F,wBAAsB,4BAA4B,CAAC,MAAM,EAAE,kBAAkB,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAInK;AACD,wBAAsB,sBAAsB,CAAC,OAAO,EAAE,qBAAqB,EAAE,MAAM,CAAC,EAAE,oBAAoB,GAAG,OAAO,CAAC;IAAE,MAAM,EAAE,uBAAuB,CAAC;IAAC,aAAa,EAAE,eAAe,CAAA;CAAE,CAAC,CAoCxL"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { decodeFunctionResult, encodeFunctionData, isHex, toHex } from "viem";
|
|
2
|
+
import { LifecyclePlanningError } from "./types.js";
|
|
3
|
+
import { lifecycleRegistryAbi } from "./abi.js";
|
|
4
|
+
export async function lifecycleRpc(client, method, params = []) {
|
|
5
|
+
return client.request({ method, params });
|
|
6
|
+
}
|
|
7
|
+
export function rpcObject(value, label) {
|
|
8
|
+
if (value === null || typeof value !== "object" || Array.isArray(value))
|
|
9
|
+
throw new LifecyclePlanningError("INVALID_RPC_RESPONSE", `${label} must be an object`);
|
|
10
|
+
// The object guard establishes the RPC record boundary; fields remain untrusted unknowns.
|
|
11
|
+
const record = value;
|
|
12
|
+
return record;
|
|
13
|
+
}
|
|
14
|
+
export function rpcHex(value, label) {
|
|
15
|
+
if (typeof value !== "string" || !isHex(value))
|
|
16
|
+
throw new LifecyclePlanningError("INVALID_RPC_RESPONSE", `${label} must be hex`);
|
|
17
|
+
return value;
|
|
18
|
+
}
|
|
19
|
+
export function rpcQuantity(value, label) {
|
|
20
|
+
const hex = rpcHex(value, label);
|
|
21
|
+
if (!/^0x[0-9a-fA-F]+$/.test(hex))
|
|
22
|
+
throw new LifecyclePlanningError("INVALID_RPC_RESPONSE", `${label} must be a quantity`);
|
|
23
|
+
return BigInt(hex);
|
|
24
|
+
}
|
|
25
|
+
export async function readLifecycleBlock(client, tag = "latest") {
|
|
26
|
+
const value = rpcObject(await lifecycleRpc(client, "eth_getBlockByNumber", [tag, false]), "block");
|
|
27
|
+
const hash = rpcHex(value.hash, "block hash");
|
|
28
|
+
if (hash.length !== 66)
|
|
29
|
+
throw new LifecyclePlanningError("INVALID_RPC_RESPONSE", "Block hash must have 32 bytes");
|
|
30
|
+
return {
|
|
31
|
+
number: rpcQuantity(value.number, "block number"), hash,
|
|
32
|
+
timestamp: rpcQuantity(value.timestamp, "block timestamp"), gasLimit: rpcQuantity(value.gasLimit, "block gas limit"),
|
|
33
|
+
baseFeePerGas: value.baseFeePerGas === undefined || value.baseFeePerGas === null ? undefined : rpcQuantity(value.baseFeePerGas, "base fee"),
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
export async function assertLifecycleBlock(client, block) {
|
|
37
|
+
const current = await readLifecycleBlock(client, toHex(block.number));
|
|
38
|
+
if (current.hash.toLowerCase() !== block.hash.toLowerCase())
|
|
39
|
+
throw new LifecyclePlanningError("STATE_REORGED", "Pinned launch state changed during the operation; read canonical progress again");
|
|
40
|
+
}
|
|
41
|
+
export async function readLifecycleContract(client, to, abi, functionName, args, block, from) {
|
|
42
|
+
const data = encodeFunctionData({ abi, functionName, args });
|
|
43
|
+
const result = rpcHex(await lifecycleRpc(client, "eth_call", [{ to, from, data }, toHex(block.number)]), functionName);
|
|
44
|
+
// ABI decoding validates scalar widths and tuple layout; T names that exact frozen ABI result.
|
|
45
|
+
const decoded = decodeFunctionResult({ abi, functionName, data: result });
|
|
46
|
+
return decoded;
|
|
47
|
+
}
|
|
48
|
+
/** A reviewed registry must supply topology; missing selectors never certify a profile. */
|
|
49
|
+
export async function readLifecycleProfileTopology(client, registry, profileId, block) {
|
|
50
|
+
const topology = await readLifecycleContract(client, registry, lifecycleRegistryAbi, "profileTopology", [profileId], block);
|
|
51
|
+
if (topology.hookTopology !== 0 && topology.hookTopology !== 1 && topology.hookTopology !== 2)
|
|
52
|
+
throw new LifecyclePlanningError("INVALID_RPC_RESPONSE", "Registry returned an unsupported hook topology");
|
|
53
|
+
return { ...topology, hookTopology: topology.hookTopology };
|
|
54
|
+
}
|
|
55
|
+
export async function resolveLifecycleLimits(context, source) {
|
|
56
|
+
let configuration = {};
|
|
57
|
+
let sourceError;
|
|
58
|
+
try {
|
|
59
|
+
configuration = typeof source === "function" ? await source(context) : source ?? {};
|
|
60
|
+
}
|
|
61
|
+
catch (failure) {
|
|
62
|
+
sourceError = failure instanceof Error ? failure.message : String(failure);
|
|
63
|
+
}
|
|
64
|
+
const headroomBps = configuration.headroomBps ?? 1500;
|
|
65
|
+
if (!Number.isSafeInteger(headroomBps) || headroomBps < 0 || headroomBps > 10000)
|
|
66
|
+
throw new LifecyclePlanningError("INVALID_LIMITS", "Headroom must be between zero and 10000 basis points");
|
|
67
|
+
const ceilings = [context.block.gasLimit, configuration.chainGasLimit, configuration.rpcGasLimit, configuration.accountGasLimit].filter((limit) => limit !== undefined);
|
|
68
|
+
if (ceilings.some((limit) => typeof limit !== "bigint" || limit <= 0n))
|
|
69
|
+
throw new LifecyclePlanningError("INVALID_LIMITS", "Execution gas caps must be positive exact bigint values");
|
|
70
|
+
if (configuration.maxCalldataBytes !== undefined && (!Number.isSafeInteger(configuration.maxCalldataBytes) || configuration.maxCalldataBytes <= 0))
|
|
71
|
+
throw new LifecyclePlanningError("INVALID_LIMITS", "Calldata cap must be a positive byte count");
|
|
72
|
+
if (configuration.maxSimulationGas !== undefined && configuration.maxSimulationGas <= 0n)
|
|
73
|
+
throw new LifecyclePlanningError("INVALID_LIMITS", "Simulation aggregate gas cap must be positive");
|
|
74
|
+
const unknownExecutionConstraints = [
|
|
75
|
+
...(configuration.chainGasLimit === undefined ? ["Chain per-transaction execution cap is unknown; block gas limit is not an equivalent on every chain"] : []),
|
|
76
|
+
...(configuration.rpcGasLimit === undefined ? ["RPC transaction execution cap is unknown"] : []),
|
|
77
|
+
...(configuration.accountGasLimit === undefined ? ["Current account/wallet transaction execution cap is unknown"] : []),
|
|
78
|
+
...(configuration.maxCalldataBytes === undefined ? ["Applicable chain/account/RPC calldata byte cap is unknown"] : []),
|
|
79
|
+
...(configuration.chainId !== context.chainId ? ["Current limit chain provenance is missing or mismatched"] : []),
|
|
80
|
+
...(configuration.account?.toLowerCase() !== context.account.toLowerCase() ? ["Current limit account provenance is missing or mismatched"] : []),
|
|
81
|
+
...(configuration.orchestrator?.toLowerCase() !== context.orchestrator.toLowerCase() ? ["Current limit orchestrator provenance is missing or mismatched"] : []),
|
|
82
|
+
...(configuration.observedBlockNumber !== context.block.number || configuration.observedBlockHash?.toLowerCase() !== context.block.hash.toLowerCase() ? ["Current limit block provenance is missing, stale, or mismatched"] : []),
|
|
83
|
+
...(sourceError === undefined ? [] : [`Current limit source failed: ${sourceError}`]),
|
|
84
|
+
];
|
|
85
|
+
return {
|
|
86
|
+
configuration,
|
|
87
|
+
limits: {
|
|
88
|
+
executionGasCeiling: ceilings.reduce((minimum, limit) => limit < minimum ? limit : minimum), headroomBps,
|
|
89
|
+
maxCalldataBytes: configuration.maxCalldataBytes, maxSimulationGas: configuration.maxSimulationGas,
|
|
90
|
+
blockGasLimit: context.block.gasLimit, chainGasLimit: configuration.chainGasLimit,
|
|
91
|
+
rpcGasLimit: configuration.rpcGasLimit, accountGasLimit: configuration.accountGasLimit,
|
|
92
|
+
admissionKnown: unknownExecutionConstraints.length === 0, unknownExecutionConstraints,
|
|
93
|
+
unknownConstraints: [
|
|
94
|
+
...unknownExecutionConstraints,
|
|
95
|
+
...(configuration.estimateDataFee === undefined ? ["Chain-specific data fee is unavailable"] : []),
|
|
96
|
+
],
|
|
97
|
+
},
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=rpc.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rpc.js","sourceRoot":"","sources":["../../src/lifecycle/rpc.ts"],"names":[],"mappings":"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"}
|