@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,273 @@
|
|
|
1
|
+
import type { Address, Hash, Hex } from "viem";
|
|
2
|
+
import type { AdapterRegistrationV1, AssetFundingV1, LaunchExecutionMode, LaunchPlanV1, LaunchProgressV1, MarketLiveStateV1, PreparedMarketV1, ProfileRegistrationV1, ProfileTopologyV1, LaunchEnvelopeV2, LifecycleDeveloperTerms } from "./schema.js";
|
|
3
|
+
/** viem public clients or a raw JSON-RPC client; neither selects a transport. */
|
|
4
|
+
export type LifecycleRpcClient = {
|
|
5
|
+
request(args: {
|
|
6
|
+
method: string;
|
|
7
|
+
params?: readonly unknown[];
|
|
8
|
+
}): Promise<unknown>;
|
|
9
|
+
};
|
|
10
|
+
export type LifecycleBlock = {
|
|
11
|
+
number: bigint;
|
|
12
|
+
hash: Hash;
|
|
13
|
+
timestamp: bigint;
|
|
14
|
+
gasLimit: bigint;
|
|
15
|
+
baseFeePerGas?: bigint;
|
|
16
|
+
};
|
|
17
|
+
export type LifecycleLimitContext = {
|
|
18
|
+
client: LifecycleRpcClient;
|
|
19
|
+
account: Address;
|
|
20
|
+
orchestrator: Address;
|
|
21
|
+
block: LifecycleBlock;
|
|
22
|
+
chainId: bigint;
|
|
23
|
+
};
|
|
24
|
+
export type LifecycleLimits = {
|
|
25
|
+
headroomBps?: number;
|
|
26
|
+
chainGasLimit?: bigint;
|
|
27
|
+
rpcGasLimit?: bigint;
|
|
28
|
+
accountGasLimit?: bigint;
|
|
29
|
+
maxCalldataBytes?: number;
|
|
30
|
+
maxSimulationGas?: bigint;
|
|
31
|
+
chainId?: bigint;
|
|
32
|
+
orchestrator?: Address;
|
|
33
|
+
account?: Address;
|
|
34
|
+
observedBlockNumber?: bigint;
|
|
35
|
+
observedBlockHash?: Hash;
|
|
36
|
+
/** Chain-specific L1/data-fee oracle, called with exact calldata and the pinned block. */
|
|
37
|
+
estimateDataFee?: (transaction: LifecycleTransaction, context: LifecycleLimitContext) => Promise<bigint>;
|
|
38
|
+
};
|
|
39
|
+
export type LifecycleLimitSource = LifecycleLimits | ((context: LifecycleLimitContext) => Promise<LifecycleLimits>);
|
|
40
|
+
export type ResolvedLifecycleLimits = {
|
|
41
|
+
executionGasCeiling: bigint;
|
|
42
|
+
headroomBps: number;
|
|
43
|
+
maxCalldataBytes?: number;
|
|
44
|
+
maxSimulationGas?: bigint;
|
|
45
|
+
blockGasLimit: bigint;
|
|
46
|
+
chainGasLimit?: bigint;
|
|
47
|
+
rpcGasLimit?: bigint;
|
|
48
|
+
accountGasLimit?: bigint;
|
|
49
|
+
admissionKnown: boolean;
|
|
50
|
+
unknownExecutionConstraints: readonly string[];
|
|
51
|
+
unknownConstraints: readonly string[];
|
|
52
|
+
};
|
|
53
|
+
/** Only explicitly disposable RPCs may execute snapshot-isolated simulation transactions. */
|
|
54
|
+
export type ControlledLifecycleFork = {
|
|
55
|
+
client: LifecycleRpcClient;
|
|
56
|
+
isolation: "disposable";
|
|
57
|
+
allowTransactions: true;
|
|
58
|
+
expectedChainId?: bigint;
|
|
59
|
+
expectedBlockHash?: Hash;
|
|
60
|
+
impersonation?: "anvil" | "hardhat" | "none";
|
|
61
|
+
receiptTimeoutMs?: number;
|
|
62
|
+
sourceRpcUrl: string;
|
|
63
|
+
forkRpcUrl: string;
|
|
64
|
+
resetMethod?: "anvil_reset" | "hardhat_reset";
|
|
65
|
+
};
|
|
66
|
+
export type LifecycleTransactionKind = "approve-reset" | "approve" | "atomic" | "begin" | "prepare" | "activate" | "cancel";
|
|
67
|
+
export type LifecyclePostcondition = {
|
|
68
|
+
kind: "allowance";
|
|
69
|
+
asset: Address;
|
|
70
|
+
spender: Address;
|
|
71
|
+
minimum: bigint;
|
|
72
|
+
exact?: bigint;
|
|
73
|
+
} | {
|
|
74
|
+
kind: "launch";
|
|
75
|
+
phase: "Preparing" | "Ready" | "Active" | "Cancelled";
|
|
76
|
+
preparedMarkets: number;
|
|
77
|
+
};
|
|
78
|
+
export type LifecycleTransaction = {
|
|
79
|
+
id: string;
|
|
80
|
+
kind: LifecycleTransactionKind;
|
|
81
|
+
chainId: number;
|
|
82
|
+
from: Address;
|
|
83
|
+
to: Address;
|
|
84
|
+
data: Hex;
|
|
85
|
+
value: bigint;
|
|
86
|
+
dependencies: readonly string[];
|
|
87
|
+
postconditions: readonly LifecyclePostcondition[];
|
|
88
|
+
marketStart?: number;
|
|
89
|
+
marketCount?: number;
|
|
90
|
+
gas?: bigint;
|
|
91
|
+
gasPrice?: bigint;
|
|
92
|
+
/** Exact current-state execution admission, not a wallet batch or future guarantee. */
|
|
93
|
+
admission?: LifecycleAdmission;
|
|
94
|
+
estimate?: LifecycleTransactionEstimate;
|
|
95
|
+
};
|
|
96
|
+
export type LifecycleTransactionEstimate = {
|
|
97
|
+
gasUsed: bigint;
|
|
98
|
+
gasLimit: bigint;
|
|
99
|
+
gasPrice: bigint;
|
|
100
|
+
executionFee: bigint;
|
|
101
|
+
dataFee?: bigint;
|
|
102
|
+
totalFee?: bigint;
|
|
103
|
+
feeConfidence: "execution-and-data" | "execution-only";
|
|
104
|
+
};
|
|
105
|
+
export type LifecycleAdmission = {
|
|
106
|
+
admitted: boolean;
|
|
107
|
+
confidence: "stateful" | "provisional";
|
|
108
|
+
reason?: string;
|
|
109
|
+
limits: ResolvedLifecycleLimits;
|
|
110
|
+
};
|
|
111
|
+
export type LifecycleSimulationStep = {
|
|
112
|
+
transactionId: string;
|
|
113
|
+
success: boolean;
|
|
114
|
+
gasUsed?: bigint;
|
|
115
|
+
gasLimit?: bigint;
|
|
116
|
+
gasRequired?: bigint;
|
|
117
|
+
returnData?: Hex;
|
|
118
|
+
error?: string;
|
|
119
|
+
estimate?: LifecycleTransactionEstimate;
|
|
120
|
+
};
|
|
121
|
+
export type LifecycleSimulation = {
|
|
122
|
+
backend: "eth_simulateV1" | "controlled-fork" | "unavailable";
|
|
123
|
+
confidence: "stateful" | "provisional";
|
|
124
|
+
admitted: boolean;
|
|
125
|
+
blockNumber: bigint;
|
|
126
|
+
blockHash: Hash;
|
|
127
|
+
account: Address;
|
|
128
|
+
chainId: bigint;
|
|
129
|
+
steps: readonly LifecycleSimulationStep[];
|
|
130
|
+
limits: ResolvedLifecycleLimits;
|
|
131
|
+
reason?: string;
|
|
132
|
+
failedTransactionId?: string;
|
|
133
|
+
};
|
|
134
|
+
export type LifecycleFundingPrerequisite = {
|
|
135
|
+
funding: AssetFundingV1;
|
|
136
|
+
inputBalance: bigint;
|
|
137
|
+
requiredInput: bigint;
|
|
138
|
+
allowance?: bigint;
|
|
139
|
+
spender: Address;
|
|
140
|
+
nativeValue: bigint;
|
|
141
|
+
conversion: "none" | "native-wrap" | "allowlisted-swap";
|
|
142
|
+
};
|
|
143
|
+
export type LifecycleProfile = {
|
|
144
|
+
id: Hex;
|
|
145
|
+
registration: ProfileRegistrationV1;
|
|
146
|
+
adapter: AdapterRegistrationV1;
|
|
147
|
+
topology: ProfileTopologyV1;
|
|
148
|
+
venueKind: "uniswap-v4" | "abyss" | "unknown";
|
|
149
|
+
envelope?: LaunchEnvelopeV2;
|
|
150
|
+
developerTerms?: LifecycleDeveloperTerms;
|
|
151
|
+
protocolMaximumDeveloperFeeBps?: number;
|
|
152
|
+
admitted: boolean;
|
|
153
|
+
reason?: string;
|
|
154
|
+
};
|
|
155
|
+
export type LifecycleMarketProgress = {
|
|
156
|
+
index: number;
|
|
157
|
+
prepared: PreparedMarketV1;
|
|
158
|
+
live?: MarketLiveStateV1;
|
|
159
|
+
error?: string;
|
|
160
|
+
};
|
|
161
|
+
export type LifecycleReceiptReference = {
|
|
162
|
+
transactionHash: Hash;
|
|
163
|
+
replacementHash?: Hash;
|
|
164
|
+
confirmations?: number;
|
|
165
|
+
observedBlockNumber?: bigint;
|
|
166
|
+
observedBlockHash?: Hash;
|
|
167
|
+
};
|
|
168
|
+
export type LifecycleReceiptStatus = {
|
|
169
|
+
transactionHash: Hash;
|
|
170
|
+
effectiveHash: Hash;
|
|
171
|
+
status: "pending" | "confirmed" | "reverted" | "reorged" | "unconfirmed" | "replacement-cancelled";
|
|
172
|
+
blockNumber?: bigint;
|
|
173
|
+
blockHash?: Hash;
|
|
174
|
+
confirmations?: bigint;
|
|
175
|
+
replaced: boolean;
|
|
176
|
+
};
|
|
177
|
+
export type CanonicalLaunchProgress = {
|
|
178
|
+
canonical: LaunchProgressV1;
|
|
179
|
+
blockNumber: bigint;
|
|
180
|
+
blockHash: Hash;
|
|
181
|
+
chainId: bigint;
|
|
182
|
+
head: LaunchProgressV1;
|
|
183
|
+
confirmationDepth: number;
|
|
184
|
+
confirmedBlockNumber: bigint;
|
|
185
|
+
confirmedBlockHash: Hash;
|
|
186
|
+
confirmedAccountNonce: bigint;
|
|
187
|
+
headAccountNonce: bigint;
|
|
188
|
+
pendingAccountNonce: bigint;
|
|
189
|
+
confirmationSafe: boolean;
|
|
190
|
+
markets: readonly LifecycleMarketProgress[];
|
|
191
|
+
receipts: readonly LifecycleReceiptStatus[];
|
|
192
|
+
token: Address;
|
|
193
|
+
planHash: Hash;
|
|
194
|
+
launchId: Hash;
|
|
195
|
+
};
|
|
196
|
+
export type PoolBoundHookDeployment = {
|
|
197
|
+
deployer: Address;
|
|
198
|
+
initCodeHash: Hex;
|
|
199
|
+
salt: Hex;
|
|
200
|
+
predictedHook: Address;
|
|
201
|
+
};
|
|
202
|
+
export type LifecyclePoolBoundHookDeployment = PoolBoundHookDeployment & {
|
|
203
|
+
marketIndex: number;
|
|
204
|
+
};
|
|
205
|
+
export type PoolBoundHookSaltProgress = {
|
|
206
|
+
attempts: bigint;
|
|
207
|
+
salt: Hex;
|
|
208
|
+
predictedHook: Address;
|
|
209
|
+
};
|
|
210
|
+
export type PoolBoundLifecyclePreparationProgress = PoolBoundHookSaltProgress & {
|
|
211
|
+
marketIndex: number;
|
|
212
|
+
};
|
|
213
|
+
export type PlannedLaunch = {
|
|
214
|
+
plan: LaunchPlanV1;
|
|
215
|
+
planHash: Hash;
|
|
216
|
+
launchId: Hash;
|
|
217
|
+
predictedToken: Address;
|
|
218
|
+
tokenFactory: Address;
|
|
219
|
+
tokenFactoryCodeHash: Hex;
|
|
220
|
+
account: Address;
|
|
221
|
+
chainId: bigint;
|
|
222
|
+
mode: LaunchExecutionMode;
|
|
223
|
+
confirmations: number;
|
|
224
|
+
transactions: readonly LifecycleTransaction[];
|
|
225
|
+
prerequisites: readonly LifecycleFundingPrerequisite[];
|
|
226
|
+
profiles: readonly LifecycleProfile[];
|
|
227
|
+
simulation: LifecycleSimulation;
|
|
228
|
+
/** Exact CREATE2 metadata captured from the final committed bound markets. */
|
|
229
|
+
hookDeployments: readonly LifecyclePoolBoundHookDeployment[];
|
|
230
|
+
atomicAttempt: LifecycleSimulation;
|
|
231
|
+
progress: CanonicalLaunchProgress;
|
|
232
|
+
preparationBatchSize: number;
|
|
233
|
+
limits?: LifecycleLimitSource;
|
|
234
|
+
};
|
|
235
|
+
export type PlanLaunchOptions = {
|
|
236
|
+
client: LifecycleRpcClient;
|
|
237
|
+
account: Address;
|
|
238
|
+
plan: LaunchPlanV1;
|
|
239
|
+
mode: LaunchExecutionMode;
|
|
240
|
+
limits?: LifecycleLimitSource;
|
|
241
|
+
fork?: ControlledLifecycleFork;
|
|
242
|
+
receipts?: readonly LifecycleReceiptReference[];
|
|
243
|
+
confirmations?: number;
|
|
244
|
+
};
|
|
245
|
+
export type SimulateLaunchPlanOptions = {
|
|
246
|
+
client: LifecycleRpcClient;
|
|
247
|
+
planned: PlannedLaunch;
|
|
248
|
+
limits?: LifecycleLimitSource;
|
|
249
|
+
fork?: ControlledLifecycleFork;
|
|
250
|
+
/** Submitted receipt evidence and confirmation depth are inherited from the
|
|
251
|
+
* stored plan when omitted, exactly as build-next consumes them; resimulation
|
|
252
|
+
* never silently drops submitted-transaction context. */
|
|
253
|
+
receipts?: readonly LifecycleReceiptReference[];
|
|
254
|
+
confirmations?: number;
|
|
255
|
+
};
|
|
256
|
+
export type ReadLaunchProgressOptions = {
|
|
257
|
+
client: LifecycleRpcClient;
|
|
258
|
+
planned: Pick<PlannedLaunch, "plan" | "planHash" | "launchId" | "predictedToken" | "account" | "mode" | "confirmations">;
|
|
259
|
+
receipts?: readonly LifecycleReceiptReference[];
|
|
260
|
+
confirmations?: number;
|
|
261
|
+
};
|
|
262
|
+
export type BuildNextTransactionOptions = ReadLaunchProgressOptions & {
|
|
263
|
+
planned: PlannedLaunch;
|
|
264
|
+
action?: "continue" | "cancel";
|
|
265
|
+
limits?: LifecycleLimitSource;
|
|
266
|
+
fork?: ControlledLifecycleFork;
|
|
267
|
+
};
|
|
268
|
+
export declare class LifecyclePlanningError extends Error {
|
|
269
|
+
readonly code: string;
|
|
270
|
+
readonly simulation?: LifecycleSimulation;
|
|
271
|
+
constructor(code: string, message: string, simulation?: LifecycleSimulation);
|
|
272
|
+
}
|
|
273
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/lifecycle/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export class LifecyclePlanningError extends Error {
|
|
2
|
+
code;
|
|
3
|
+
simulation;
|
|
4
|
+
constructor(code, message, simulation) {
|
|
5
|
+
super(message);
|
|
6
|
+
this.name = "LifecyclePlanningError";
|
|
7
|
+
this.code = code;
|
|
8
|
+
this.simulation = simulation;
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/lifecycle/types.ts"],"names":[],"mappings":"AA6HA,MAAM,OAAO,sBAAuB,SAAQ,KAAK;IACtC,IAAI,CAAS;IACb,UAAU,CAAuB;IAC1C,YAAY,IAAY,EAAE,OAAe,EAAE,UAAgC;QACzE,KAAK,CAAC,OAAO,CAAC,CAAC;QAAC,IAAI,CAAC,IAAI,GAAG,wBAAwB,CAAC;QAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QAAC,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IACvG,CAAC;CACF"}
|
|
@@ -0,0 +1,243 @@
|
|
|
1
|
+
# Launch lifecycle API
|
|
2
|
+
|
|
3
|
+
`@black-market/sdk/lifecycle` is the browser-safe launch API; its exports are also available from `@black-market/sdk`. Supply the exact chain, core, creator and registry domain. Planning, salt preparation, reads and unsigned builders never sign, publish metadata or write to the source chain. A successful controlled-local simulation is not production deployment approval.
|
|
4
|
+
|
|
5
|
+
The canonical authorities are the registry/certification/adapter/config contracts under `contracts/src/launch/lifecycle/v2`, the typed hook deployers, and `contracts/src/launch/fees/v3` in the sibling protocol repository. Plan identity remains `LaunchPlanV1`; shared V4 accepts **config 4 only**, bound V4 **config 5 only**, and Abyss keeps its canonical schema. Old Atomic/Unified request encoders, template catalogs and old V4 profile/adapter constants have been removed. Immutable old contracts/pools and unrelated DEX/lending functions are not upgraded or rebound.
|
|
6
|
+
|
|
7
|
+
The keystore-only `DeployPoolLaunchV1` deployment includes fixed pool-bound V4
|
|
8
|
+
(`PoolHookDeployerV1`, `PoolMarketAdapterV1`, `PoolFeeCollectorFactoryV1`) and canonical Abyss:
|
|
9
|
+
two adapters and five automatically admitted profiles.
|
|
10
|
+
Registry V2 has one `LaunchCertificationV2` child and no arbitrary unsigned V4 endpoint.
|
|
11
|
+
V4 uses `profileEnvelope`, `profileId` and signed six-argument `registerProfile`.
|
|
12
|
+
Admin-only `registerAbyssProfile(uint8,registration)` independently certifies the four canonical
|
|
13
|
+
config-1 variants; they have no author envelope or royalty allocation.
|
|
14
|
+
Envelope/bounds/graph types and encoding helpers use `Launch` names.
|
|
15
|
+
There are no old-name aliases. The admission EIP-712 domain is `Black Market Launch Registry`,
|
|
16
|
+
version `2`; regenerate author consent after cutover. Market configuration tuple layouts remain
|
|
17
|
+
unchanged; bounds encoding changes below require fresh profile identities and consent.
|
|
18
|
+
Old deployment evidence is not new-graph proof.
|
|
19
|
+
|
|
20
|
+
`LaunchBoundsV2` has five members beginning with `minimumTickSpacing`: tick-spacing bounds,
|
|
21
|
+
maximum positions, maximum oracle cardinality and fee-mode flags. Former LP/hook fee ceilings
|
|
22
|
+
and profile-level oracle/external-liquidity pins are removed. Creators independently choose
|
|
23
|
+
valid LP/hook rates below 1,000,000 pips, including 15%, their registered oracle configuration,
|
|
24
|
+
and their per-pool external-liquidity policy. Author royalty ceilings remain separate.
|
|
25
|
+
Regenerate bounds digests, profile IDs and consent for the new tuple.
|
|
26
|
+
|
|
27
|
+
Robinhood P1 `(1,4096)`, P2 `(6,4096)` and P3 `(17,4096)` are usable on the same admitted profile.
|
|
28
|
+
Planning/preparation validates each selected oracle on the pinned factory at the pinned block;
|
|
29
|
+
unregistered/invalid oracle parameters and excessive cardinality still fail. With
|
|
30
|
+
`externalLiquidityDisabled=false`, third-party LP add/remove is allowed after opening.
|
|
31
|
+
Permanent launch custody and pre-opening protection remain unchanged.
|
|
32
|
+
|
|
33
|
+
Shared contracts are `FixedFeeSharedHookV1`, `SharedHookDeployerV1` and
|
|
34
|
+
`SharedMarketAdapterV1`. ABI exports are `sharedMarketAdapterV1Abi`,
|
|
35
|
+
`sharedHookDeployerV1Abi`, `poolMarketAdapterV1Abi`, `poolHookDeployerV1Abi` and
|
|
36
|
+
`poolFeeCollectorFactoryV1Abi`; validation uses `validateV4LifecycleMarket`.
|
|
37
|
+
The factory getter is `dependencyDigest(address)`. Identity domains are
|
|
38
|
+
`black-market.launch-profile.v2`, `black-market.v4-dependencies.v2` and
|
|
39
|
+
`black-market.pool-bound-market-economics.v1`. No old-name aliases remain; regenerate
|
|
40
|
+
profile identities, commitments and author consent for these domain labels.
|
|
41
|
+
|
|
42
|
+
## Public operations
|
|
43
|
+
|
|
44
|
+
| Operation | Contract |
|
|
45
|
+
| --- | --- |
|
|
46
|
+
| `readLifecycleProfiles({client, orchestrator, profileIds?, offset?, limit?})` | Bounded registry discovery, schema/topology dispatch, reviewed graph/terms certification and current registry admission. Default offset/limit is 0/100; explicit IDs can select a reviewed deployment's identities. |
|
|
47
|
+
| `predictLifecycleToken({client, plan})` | Exact prediction from the explicit core. |
|
|
48
|
+
| `preparePoolBoundLifecyclePlan({client, plan, signal?, onProgress?})` | Finalizes current config-5 salts offchain, then rechecks frozen plan, token-factory binding and exact deployment metadata. Does not deploy. |
|
|
49
|
+
| `readPoolBoundHookDeployment({client, plan, marketIndex})` | Verifies typed factory, code chunks, constructor, normalized economics, initcode, salt, CREATE2 prediction and recorded provenance of existing code. Works with draft salts; permission bits are additionally required for executable predeployment. |
|
|
50
|
+
| `buildPoolBoundHookDeploymentTransaction({client, plan, marketIndex})` | Optional permissionless typed `deploy(parameters,salt)` calldata. Does not create a token, register/initialize a pool, bind a collector or activate a launch. |
|
|
51
|
+
| `planLaunch({client, account, plan, mode, limits?, fork?, receipts?, confirmations?})` | Validates domain/funding/admission and canonical progress, records the exact atomic attempt, and reviews only the explicitly selected mode. |
|
|
52
|
+
| `simulateLaunchPlan({client, planned, limits?, fork?, receipts?, confirmations?})` | Rereads canonical state and proves remaining work. Preserves receipt evidence, economics and selected mode. |
|
|
53
|
+
| `readLaunchProgress({client, planned, receipts?, confirmations?})` | Confirmation-bound canonical state, latest head, receipt/replacement/reorg status, account-nonce safety and actual prepared market/live state. |
|
|
54
|
+
| `buildNextTransaction({client, planned, limits?, fork?, receipts?, confirmations?, action?})` | Rereads progress, constraints and stateful proof before returning one admitted transaction. `action: "cancel"` uses the stored commitment without requiring fresh adapter/profile admission. Terminal launches return `undefined`. |
|
|
55
|
+
|
|
56
|
+
Clients may be viem public clients or raw `request({method,params})` RPC clients. Transport, wallet, signing and durable storage are application-owned. `PlannedLaunch` contains bigint values and live limit callbacks: persist `serializeLaunchPlan(plan)`, explicit execution mode, confirmation policy and receipt references, not the entire object.
|
|
57
|
+
|
|
58
|
+
## Commitment and integer representation
|
|
59
|
+
|
|
60
|
+
The economic tuple contains chain/core/creator/nonce; ERC20/ERC404 token and token-global reward configuration; sorted funding outputs and fee assets; ordered markets; ordered initial buys; deadline; and initial executor fee. Each market commits exact adapter/profile/quote/budget/version/config bytes. Each buy commits market index, quote input, minimum token output, recipient and Q64.96 price limit; repeated indices keep their order.
|
|
61
|
+
|
|
62
|
+
`hashLaunchPlan` is `keccak256(abi.encode(keccak256(bytes("BLACK_MARKET_LAUNCH_PLAN_V1")),plan))`. `hashLaunchIdentity` is `keccak256(abi.encode(chainId,orchestrator,creator,nonce))`. Token prediction depends on that identity and token configuration, not the economic plan hash, so the predicted token can appear in sorted fee assets without circularity. Economics cannot change after begin. Mode/batching are execution metadata outside the tuple.
|
|
63
|
+
|
|
64
|
+
Use bigint for uint256/uint160/uint128 values and decimal strings in portable JSON. `parseLaunchPlan` rejects lossy JSON numbers and out-of-width values. Amounts are base units, liquidity is uint128, and `1n << 96n` is raw-unit price ratio 1, not a display-unit price. The pure helpers `deriveLaunchPoolRecipe`, `estimateLaunchInitialBuy` and `deriveLaunchBuySqrtPriceLimitX96` do not prove fees, market admission or execution; derive actual minimum outputs from stateful simulation and review the resulting final commitment again.
|
|
65
|
+
|
|
66
|
+
Bounds: 1–16 markets, 1–8 fee assets, at most 8 funding outputs, 64 ordered buys and 32 total positions. None guarantees gas feasibility. Reward-free ERC20 allows the positive uint256 supply domain; reward-enabled ERC20 is capped at `10^77`; ERC404 supply fits uint96. Current exported supply bounds preserve these exact numerical domains.
|
|
67
|
+
|
|
68
|
+
```ts
|
|
69
|
+
import { parseLaunchPlan, serializeLaunchPlan, encodeLaunchPlan, hashLaunchPlan, hashLaunchIdentity } from "@black-market/sdk/lifecycle";
|
|
70
|
+
const plan = parseLaunchPlan(savedPlanJson);
|
|
71
|
+
const bytes = encodeLaunchPlan(plan);
|
|
72
|
+
const commitment = hashLaunchPlan(plan);
|
|
73
|
+
const identity = hashLaunchIdentity(plan);
|
|
74
|
+
const portable = serializeLaunchPlan(plan);
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
## Registry-driven profile selection and frozen consent
|
|
78
|
+
|
|
79
|
+
The exact canonical registry getters are `profileCount`, `profileIds(offset,limit)`, `adapterCount`, `adapterIds(offset,limit)`, `profile`, `adapter`, `profileTopology` and `requireEligible`. There is no SDK template-ID allowlist and no invented `profiles()`/`isProfileEligible()` ABI. Schema plus certified topology dispatches supported implementations; an unsupported schema is reported separately from invalid/unsupported positions.
|
|
80
|
+
|
|
81
|
+
`LifecycleProfile` contains `registration`, `adapter`, unchanged `topology`, `venueKind`, `admitted` and optional refusal `reason`. Reviewed V4 adds:
|
|
82
|
+
|
|
83
|
+
- `envelope?: LaunchEnvelopeV2`: artifact/review/bounds/terms digests; topology, config/economic versions, capabilities, flags/callbacks, treasury policy, stable beneficiary/maximum rate, numerical bounds and the exact dependency graph.
|
|
84
|
+
- `developerTerms?: {adapter, beneficiary, maximumDeveloperFeeBps, termsDigest, enabled}`.
|
|
85
|
+
- `protocolMaximumDeveloperFeeBps?: number`.
|
|
86
|
+
|
|
87
|
+
The profile identity uses domain `black-market.launch-profile.v2` and commits the four review/economic digests, topology/config/economic versions, stable beneficiary, maximum author rate and capabilities. It deliberately excludes instance addresses. `hashLifecycleProfile`, `encode/decodeLaunchEnvelope`, `encode/decode/hashLaunchBounds` and `hashLaunchDependencies` expose exact canonical encodings/domains. Graph dependency hashing includes chain/core/registry/registrar, live runtime commitments and exact code-chunk provenance; only the shared deployment salt is outside that economic dependency digest.
|
|
88
|
+
|
|
89
|
+
Profile certification checks reviewed capabilities/bounds, adapter/core/graph runtime hashes, manager/oracle/locker/collector dependencies, typed hook deployer and STOP-prefixed creation-code chunks. Shared roots additionally require exact constructor/salt prediction and the deployer's recorded runtime. Bound roots require exact immutable constructor/key/economic commitment and recorded runtime when deployed. Address bits `0x1afc` under mask `0x3fff` are necessary but never sufficient. Runtime/initcode portability bounds remain 24,576/49,152 bytes; no compiler/code-size relaxation is assumed.
|
|
90
|
+
|
|
91
|
+
Registry `authorizationDigest`, `beneficiaryNonces` and `registerProfile` ABIs expose canonical reviewed admission/author consent. Admission does not make a template name an SDK allowlist or bypass current `requireEligible`. Profile retirement prevents new/pending source binding; it does not rewrite frozen active source terms or disable stable-author fee claims.
|
|
92
|
+
|
|
93
|
+
## Current venue codecs
|
|
94
|
+
|
|
95
|
+
### Shared V4, version 4
|
|
96
|
+
|
|
97
|
+
`encodeV4LifecycleMarketConfig` / `decodeV4LifecycleMarketConfig` accept only inner version 4. Market `configVersion` is 4. Exact schema:
|
|
98
|
+
|
|
99
|
+
```text
|
|
100
|
+
(uint16,uint24,int24,uint160,uint24,uint8,uint8,address,bool,bytes32,bytes32,bytes32,address,uint16,(int24,int24,uint128,bytes32,uint256)[])
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
### Pool-bound V4, version 5
|
|
104
|
+
|
|
105
|
+
`encodePoolBoundV4LifecycleMarketConfig` / `decodePoolBoundV4LifecycleMarketConfig` accept only inner version 5. Market `configVersion` is 5. Exact schema:
|
|
106
|
+
|
|
107
|
+
```text
|
|
108
|
+
(uint16,uint24,int24,uint160,uint24,uint8,uint8,address,bool,bytes32,bytes32,bytes32,bytes32,address,uint16,(int24,int24,uint128,bytes32,uint256)[])
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
Both preserve LP/hook fees, tick spacing, opening price, fee mode/denominator/treasury, external-liquidity policy and canonical oracle identity. Then come `profileId`, `termsDigest`, `developerBeneficiary` and explicit `developerFeeBps`, followed by positions. Version 5 inserts `hookSalt` immediately before `profileId`. There is no conversion from config 2/3 and no SDK default developer rate, including when the chosen rate is zero. Copy terms from the selected profile, not another shared/bound template's envelope. Inner/outer profile IDs must match; author identity is not the live payout. The creator rate cannot exceed either reviewed maximum or protocol ceiling.
|
|
112
|
+
|
|
113
|
+
```ts
|
|
114
|
+
const profile = profiles.find((row) => row.id === selectedProfileId);
|
|
115
|
+
if (!profile?.admitted || !profile.envelope || !profile.developerTerms) throw new Error("Selected profile is not reviewed/admitted");
|
|
116
|
+
const config = encodeV4LifecycleMarketConfig({
|
|
117
|
+
version: 4, lpFeePips, tickSpacing, sqrtPriceX96, hookFeePips, feeMode,
|
|
118
|
+
protocolFeeDenominator: profile.envelope.protocolFeeDenominator,
|
|
119
|
+
treasury: profile.envelope.protocolTreasury,
|
|
120
|
+
externalLiquidityDisabled: creatorSelectedExternalLiquidityDisabled,
|
|
121
|
+
oracleConfigId: creatorSelectedOracleConfigId,
|
|
122
|
+
profileId: profile.id, termsDigest: profile.developerTerms.termsDigest,
|
|
123
|
+
developerBeneficiary: profile.developerTerms.beneficiary,
|
|
124
|
+
developerFeeBps: creatorSelectedRate, positions,
|
|
125
|
+
});
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
`validateV4LifecycleMarket` checks profile/terms/topology/version, explicit author-rate ceilings and exact envelope bounds. Registry/adapter validation remains the execution authority. Positions must require **zero quote deposit** at the committed opening price in actual token orientation. Quotes fund ordered buys, not two-sided initial LP. At most one V4 market per quote is allowed across all templates/topologies/fees/salts; put that quote's positions into one market. Abyss may use the same quote.
|
|
129
|
+
|
|
130
|
+
`validateV4LifecycleOracle({client,envelope,oracleConfigId,block})` checks the selected registered
|
|
131
|
+
oracle against the certified factory and `maximumOracleCardinality`. Profile discovery does
|
|
132
|
+
not choose an oracle or query a profile-pinned oracle ID.
|
|
133
|
+
|
|
134
|
+
Abyss retains `encodeAbyssLifecycleMarketConfig` / `decodeAbyssLifecycleMarketConfig`: canonical pool profile, fee, oracle ID, opening price and ordered tick/liquidity/token-max positions. Quote/fee assets and direct ERC20/native-wrap funding are permissionless subject to actual code, transfers/balances/budgets and canonical bindings. Quote catalog metadata is not admission. Only swap-conversion inputs/targets use registry funding admission.
|
|
135
|
+
|
|
136
|
+
## Freeze and finalize bound economics
|
|
137
|
+
|
|
138
|
+
Freeze chain/core/creator/nonce, token identity, sorted fee policies, all funding/budgets/positions/terms and ordered buys before mining. Create config 5 with the chosen bound profile's exact terms and a draft salt; never implicitly reinterpret a shared config.
|
|
139
|
+
|
|
140
|
+
```ts
|
|
141
|
+
const stop = new AbortController();
|
|
142
|
+
const finalized = await preparePoolBoundLifecyclePlan({
|
|
143
|
+
client, plan: draft, signal: stop.signal,
|
|
144
|
+
onProgress: ({marketIndex, attempts, predictedHook}) => console.log(marketIndex, attempts.toString(), predictedHook),
|
|
145
|
+
});
|
|
146
|
+
const saved = serializeLaunchPlan(finalized.plan);
|
|
147
|
+
const boundIndex = finalized.plan.markets.findIndex((market) => market.configVersion === 5);
|
|
148
|
+
const optionalPredeploy = await buildPoolBoundHookDeploymentTransaction({client, plan: finalized.plan, marketIndex: boundIndex});
|
|
149
|
+
// Inspect only; separately admit/authenticate/sign any optional predeployment.
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
The collector supplies canonical normalized economic commitment and constructor metadata. `hashPoolBoundV4MarketCommitment` uses domain `black-market.pool-bound-market-economics.v1`: chain, core, registrar, predicted token, adapter/profile/quote/budget/version and encoded config hash with **only hookSalt zeroed**. Developer identity/digest/rate remain committed. The 18-word constructor freezes manager, registrar, oracle factory, core, locker, token/quote, fees/spacing/price/policy, economic commitment and position count. Salt is used verbatim by CREATE2, not as a constructor argument.
|
|
153
|
+
|
|
154
|
+
Mining is cancellable/nonblocking; `abort()` raises `AbortError` and does not cancel an onchain launch. Persist the returned finalized plan, not the draft. A salt-only change preserves normalized economics but changes final plan hash. Other changes invalidate initcode/mining; concurrent mutation is refused. Normal next-step review rechecks token factory and the captured `hookDeployments` baseline. Predeployment is permissionless, but code presence or self-reported getters alone cannot be adopted as provenance. It does not register/initialize/seal/open a market and does not eliminate real code-deposit/setup gas.
|
|
155
|
+
|
|
156
|
+
## Explicit execution mode and indivisible activation
|
|
157
|
+
|
|
158
|
+
Every planning call requires `mode: "atomic" | "staged"`. For an unstarted launch, `atomicAttempt` records the exact approval/funding plus atomic sequence independently of the requested graph.
|
|
159
|
+
|
|
160
|
+
- Atomic: after funding prerequisites, token creation, empty infrastructure, all mint/lock/buys/public activation are one transaction.
|
|
161
|
+
- Staged: prerequisites, `beginLaunch(Staged)`, contiguous empty `prepareMarkets` batches, then one `activateLaunch`. Preparation batches may shrink to fit.
|
|
162
|
+
- Activation cannot split. If mint/lock/all buys/opening cannot fit, staged is also refused. No position/buy/minimum is omitted to manufacture success.
|
|
163
|
+
|
|
164
|
+
No automatic atomic-to-staged fallback exists. Obtain separate consent to review the same commitment as staged. Both venues use token transfer restrictions plus activation-time canonical opening-state checks, not a pool gate. Manipulated opening price or preactivation liquidity fails verification; the token stays inactive and the launch remains Ready/cancellable. Failed activation rolls back every mint, seal, buy and opening together.
|
|
165
|
+
|
|
166
|
+
## Execution constraints and stateful simulation
|
|
167
|
+
|
|
168
|
+
Admission requires current `chainGasLimit`, `rpcGasLimit`, `accountGasLimit` and `maxCalldataBytes`; block gas limit alone cannot fill missing transaction/RPC/account policy. Use a `LifecycleLimitSource` callback whose returned chain/account/core/observed block/hash match the requested pinned context and actual provider-owned policy. Static supplied facts are only current at that exact context; relabeling stale limits is not proof.
|
|
169
|
+
|
|
170
|
+
The ceiling is the minimum of block and explicit transaction caps. Headroom defaults to 1,500 bps, bounded 0–10,000. The measurement pass is followed by execution at exact returned gas/fee limits. Fork execution uses gross sequential estimates rather than refund-reduced receipt gas as an executable minimum. Transactions expose `estimate.executionFee`, optional `dataFee/totalFee` and `feeConfidence: "execution-and-data" | "execution-only"`; missing rollup/data fee is not an invented all-in estimate. Limits are refreshed before every next transaction.
|
|
171
|
+
|
|
172
|
+
Sequential backends:
|
|
173
|
+
|
|
174
|
+
1. `eth_simulateV1`: actual ordered transactions, state carried between synthetic blocks, exact gas-envelope verification, core returns/events and ordered buy bounds.
|
|
175
|
+
2. Explicit separate disposable loopback fork: snapshot-isolated real transactions, exact pinned chain/header identity, canonical poststate/allowances and cleanup. Source RPC stays read-only.
|
|
176
|
+
3. Neither: unavailable/provisional/unadmitted; no executable next transaction.
|
|
177
|
+
|
|
178
|
+
Atomic/activation simulation `steps[].returnData` encodes the actual `LaunchReceiptV1` tuple. Controlled-fork output is reconstructed from matching real activation/buy receipt logs and canonical state, never geometric estimates or echoed request minima. `tokenOut` and `quoteSpent` are parallel arrays indexed by ordered buys.
|
|
179
|
+
|
|
180
|
+
```ts
|
|
181
|
+
const fork = createControlledLifecycleFork({
|
|
182
|
+
sourceRpcUrl: "http://127.0.0.1:18555", forkRpcUrl: "http://127.0.0.1:18556",
|
|
183
|
+
allowTransactions: true, impersonation: "anvil",
|
|
184
|
+
});
|
|
185
|
+
const planned = await planLaunch({client, account: plan.creator, plan, mode: "staged", limits, fork});
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
The fork endpoint must be distinct/loopback, including localhost/IP aliases and effective port. Anvil reset/impersonation is default; disposable Hardhat may explicitly use its reset method/impersonation. Never pass the source client as a fork or use a live unlocked wallet as a disposable backend. Operators own exclusive fork access during proof. Controlled-local policy does not prove live provider/account admission or imply bound topology is a gas optimization.
|
|
189
|
+
|
|
190
|
+
## Wallet submission and canonical recovery
|
|
191
|
+
|
|
192
|
+
The SDK never signs. Before **every** approval/reset/core/predeploy/cancel signature, compare the wallet's configured chain (if any) and fresh connected `getChainId()` with the returned `next.chainId`. Failure/invalid identity is a refusal. Supply a matching explicit viem Chain descriptor; do not pass `chain: null` or disable wallet chain checks. Send exact `from/to/data/value/gas/gasPrice`, not a cached estimate or wallet batch.
|
|
193
|
+
|
|
194
|
+
Persist transaction hashes immediately. After receipt, retain `observedBlockNumber`, `observedBlockHash`, confirmation policy and, for replacements, original `transactionHash` plus effective `replacementHash`. A same-nonce self-transfer is replacement-cancelled, not launch completion. Removed observed blocks are reorged; status zero is reverted; a missing receipt at the unchanged observed block remains pending. Unknown hashes do not invent reorgs.
|
|
195
|
+
|
|
196
|
+
`confirmations` is positive and defaults to 1. Progress anchors confirmed canonical and latest head hashes, compares confirmed/head/pending account nonces, and prevents ref-free reloads from advancing unconfirmed work. Pending receipts/state return no executable envelope (`RECEIPT_PENDING`/`UNCONFIRMED_STATE`). Reload the exact plan/mode/policy/receipt references; never trust a cached step counter. Market read failures are surfaced without removing adapter-independent cancellation.
|
|
197
|
+
|
|
198
|
+
## Funding and cancellation
|
|
199
|
+
|
|
200
|
+
Creator/payer/refund recipient are the same address. ERC20 prerequisites approve immutable `fundingEscrow`, not core/adapters; amounts aggregate by input asset and insufficient nonzero allowances reset before exact approval. NativeWrap requires canonical wrapped-native binding and exact summed native value; there is no invented launch fee. Swap funding commits approved target/spender/code hash and exact input/output/calldata. Unrelated donations/other launches are not swept as refunds.
|
|
201
|
+
|
|
202
|
+
Preparing/Ready cancellation uses the stored commitment after expiry/retirement without calling adapters or requiring new profile/funding admission. It refunds unspent external funding only. Wrapped-native refunds are wrapped ERC20, not original native gas funds. Cancelled token inventory remains inactive or burns according to the plan. Cancellation still needs current execution admission and nonce/receipt safety; Active/Cancelled are terminal and there is no postactivation creator pause.
|
|
203
|
+
|
|
204
|
+
```ts
|
|
205
|
+
const cancel = await buildNextTransaction({client, planned, receipts, limits, fork, action: "cancel"});
|
|
206
|
+
// Apply identical wallet-domain/exact-envelope/receipt handling before submission.
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
## Stable author APIs and V3 fees
|
|
210
|
+
|
|
211
|
+
`developerBeneficiary`/envelope `beneficiary` is stable `authorId`. Registry `authorPayout(authorId)` is mutable live routing/controller; zero means unknown. Registry admin or current payout/controller may change a known nonzero route with `setAuthorPayout`. Retirement never changes stable identity or blocks existing active developer credits.
|
|
212
|
+
|
|
213
|
+
| Helper | Inputs / semantics |
|
|
214
|
+
| --- | --- |
|
|
215
|
+
| `readLifecycleAuthor` | `{client,registry,authorId}` → canonical core/factory, known/live payout, hub count, pinned chain/block. |
|
|
216
|
+
| `readAuthorHubs` | Same + `offset?:bigint,limit?:bigint` (defaults 0/100), bounded **1..100**, offset ≤ total, actual hubs/nextOffset/total/cursorComplete. |
|
|
217
|
+
| `readDeveloperFees` | Same + `hub,assets?` → authenticated V3 hub, actual assets, claimable/reserved balances, frozen source terms/assets. Explicit unsupported assets are flagged, not relabeled supported. |
|
|
218
|
+
| `buildSetAuthorPayoutTransaction` | Same + `payout,account,chainId:bigint`; requires current controller/admin and known identity. |
|
|
219
|
+
| `buildClaimDeveloperFeesTransaction` | Same + `hub,asset,account,chainId:bigint`; permissionless fixed-live-payout direct claim. |
|
|
220
|
+
| `buildClaimDeveloperFeesPageTransaction` | Same + `offset:bigint,limit:bigint,assets?,account,chainId:bigint`; factory page **1..10**. |
|
|
221
|
+
| `decodeDeveloperClaimReceipt` | `{receipt,transaction}` using exact unsigned claim context; validates emitter/account/target/context/cursor/status/rows. |
|
|
222
|
+
|
|
223
|
+
Unsigned objects carry exact `chainId/from/to/data/value`, with no execution default. Canonical membership is anchored to **registry.core → core.feeFactory → factory.isHub** before any hub self-report; selected registry/core/factory bindings are also checked. Page assets are sorted unique nonzero addresses, at most eight; `[]` means each hub's actual assets. Page cursor completion is independent of payment success: statuses **0 paid, 1 zero, 2 unsupported, 3 failed** remain distinct; preserve retryable failed rows even when the cursor reaches total. A successful direct receipt without `DeveloperFeesClaimed` is `unobserved`, not an invented zero payment.
|
|
224
|
+
|
|
225
|
+
Choose an explicit page gas budget under the current account/RPC/chain limits, including every bounded hub/asset call plus factory overhead and EIP-150 headroom. `eth_estimateGas` success alone does not prove every row was attempted: the factory can complete the cursor while reporting failed rows under insufficient caller gas. Always decode and retry failed rows; never equate transaction success or cursor completion with payment success.
|
|
226
|
+
|
|
227
|
+
Current ordinary fee preview/building uses public `lifecycleFeeHubAbi` with **no-argument `claimAndSplit()`**. Preview via viem `simulateContract`/`eth_call`, and build unsigned calldata with `encodeFunctionData`; neither guarantees execution. V3 freezes each source's adapter/profile/terms/stable author/maximum/selected rate. For each actual collected asset: executor bounty is deducted, owner/rewards/burn policy is split with canonical dust allocation, then developer fees are floor-rounded from each source's proportional contribution to the owner share. Developer fees do not reduce rewards/burn, do not reward donations and do not spend prior reserved credits. Owner and developer allocations are reserved before external payouts. `Distributed` includes `developerAmount`; hub reserved inventory is `reservedOwnerFees + reservedDeveloperFees`, not owner reserves alone.
|
|
228
|
+
|
|
229
|
+
Current registered fee owners may update executor bounty up to 1,000 bps. Each no-arg harvest snapshots one rate for all sources, including already accrued source fees. Owner/reward/burn policy and frozen developer terms do not change; old owner credits remain with the credited owner. Owner `claimOwnerFees(asset,recipient)` withdraws reserved credits without harvesting/bounty. Developer `claimDeveloperFees(authorId,asset)` has no recipient argument and resolves live registry payout at execution.
|
|
230
|
+
|
|
231
|
+
Lifecycle dividend tokens retain independent current-owner dividend bounty up to 1,000 bps, gross previews and net beneficiary payments with separate caller bounty; self-claims get full gross. Staking claims have no dividend payout bounty. Oracle genesis/cardinality/opening state is not lending-feed maturity, depth or recency approval; unrelated lending checks remain unchanged.
|
|
232
|
+
|
|
233
|
+
## Independent vectors and local proof
|
|
234
|
+
|
|
235
|
+
`test/fixtures/launch-lifecycle-v1.json` is a portable **offline wire vector**, not a deployed launch. Its independent generator owns the literal canonical ABI tuple:
|
|
236
|
+
|
|
237
|
+
```sh
|
|
238
|
+
node examples/generate-lifecycle-commitment-fixture.mjs test/fixtures/launch-lifecycle-v1.json
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
After concurrent source changes settle, build/test the package and run `examples/quickstart.mjs`. Meaningful regressions cover commitment/identity/numerical domains, retired codecs, reviewed terms/rate/bounds, salt normalization/mining/cancellation, receipt recovery and author authentication/routing/page outcomes. Retired wording/selector/source-wiring tests are removed rather than re-pinned.
|
|
242
|
+
|
|
243
|
+
`examples/launch-lifecycle-smoke.mjs manifest.json sdk-plans.json` executes current Solidity-exported `plans` on explicitly authorized owned loopback fixtures, with distinct fork and reviewed controlled-local operator limits. It exercises explicit atomic/staged modes, mined typed predeployment, actual ordered buys/permanent custody, canonical recovery, no-arg V3 harvest and authenticated author page claims with actual payout balance checks. `test/lifecycle-chain.test.mjs` adds real-graph refusal/reorg/cancellation boundaries when the same fixture environment is provided. See [the current evidence index](../../black-market/docs/10-4-audit/README.md) for exercised results and limits; this guide makes no live broadcast/UI/provider-ceiling claim.
|
package/package.json
CHANGED
|
@@ -1,8 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@black-market/sdk",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "Canonical TypeScript SDK for
|
|
3
|
+
"version": "0.4.0",
|
|
4
|
+
"description": "Canonical TypeScript SDK for Black Market on Robinhood Chain (reviewed multi-market launches, Abyss DEX, lending).",
|
|
5
5
|
"license": "MIT",
|
|
6
|
+
"repository": {
|
|
7
|
+
"type": "git",
|
|
8
|
+
"url": "git+https://github.com/abysshopper/black-market-node-sdk.git"
|
|
9
|
+
},
|
|
6
10
|
"type": "module",
|
|
7
11
|
"main": "./dist/index.js",
|
|
8
12
|
"types": "./dist/index.d.ts",
|
|
@@ -10,11 +14,16 @@
|
|
|
10
14
|
".": {
|
|
11
15
|
"types": "./dist/index.d.ts",
|
|
12
16
|
"import": "./dist/index.js"
|
|
17
|
+
},
|
|
18
|
+
"./lifecycle": {
|
|
19
|
+
"types": "./dist/lifecycle/index.d.ts",
|
|
20
|
+
"import": "./dist/lifecycle/index.js"
|
|
13
21
|
}
|
|
14
22
|
},
|
|
15
23
|
"files": [
|
|
16
24
|
"dist",
|
|
17
|
-
"src"
|
|
25
|
+
"src",
|
|
26
|
+
"docs"
|
|
18
27
|
],
|
|
19
28
|
"sideEffects": false,
|
|
20
29
|
"engines": {
|