@sovereign-sdk/web3 0.10.0 → 0.11.1

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/dist/index.d.mts CHANGED
@@ -4,6 +4,7 @@ import * as SovereignClient from '@sovereign-sdk/client';
4
4
  export { SovereignClient };
5
5
  import { RollupSchema, Serializer } from '@sovereign-sdk/serializers';
6
6
  import { Signer } from '@sovereign-sdk/signers';
7
+ import { TxDetails, UnsignedTransaction, Transaction } from '@sovereign-sdk/types';
7
8
 
8
9
  /**
9
10
  * Encodes a public key as a bech32m address with the given human-readable part (hrp).
@@ -159,6 +160,13 @@ type RollupConfig<C extends RollupContext> = {
159
160
  * Arbitrary context that is associated with the rollup.
160
161
  */
161
162
  context: C;
163
+ /**
164
+ * The endpoint path for submitting transactions.
165
+ * Defaults to "/sequencer/txs", the standard Sovereign SDK endpoint.
166
+ * Can be overridden if your rollup is configured to expose non-standard endpoints in
167
+ * order to support multiple different transaction encoding or authentication schemes.
168
+ */
169
+ txSubmissionEndpoint: string;
162
170
  };
163
171
  /**
164
172
  * The result of signing and submitting a transaction.
@@ -212,12 +220,16 @@ declare class Rollup<S extends BaseTypeSpec, C extends RollupContext> {
212
220
  /**
213
221
  * Retrieve dedup information about the provided address.
214
222
  *
215
- * @param address - The public key to dedup.
223
+ * @param publicKey - The public key to dedup.
224
+ * TODO: How to add param for generation explicitly
216
225
  */
217
- dedup(address: Uint8Array): Promise<S["Dedup"]>;
226
+ dedup(publicKey: Uint8Array): Promise<S["Dedup"]>;
218
227
  /**
219
228
  * Submits a transaction to the rollup.
220
229
  *
230
+ * The endpoint used for submission can be overridden via the options.path parameter.
231
+ * If not specified, the rollup's configured txSubmissionEndpoint will be used.
232
+ *
221
233
  * @param transaction - The transaction to submit.
222
234
  * @param {SovereignClient.RequestOptions} options - The options for the request.
223
235
  */
@@ -229,6 +241,7 @@ declare class Rollup<S extends BaseTypeSpec, C extends RollupContext> {
229
241
  * @param unsignedTx - The unsigned transaction to sign and submit.
230
242
  * @param {SignerParams} params - The params for signing and submitting the transaction.
231
243
  * @param {SovereignClient.RequestOptions} options - The options for the request.
244
+ * @param endpoint - Optional endpoint override. If not specified, uses the rollup's configured txSubmissionEndpoint.
232
245
  */
233
246
  signAndSubmitTransaction(unsignedTx: S["UnsignedTransaction"], { signer }: SignerParams, options?: SovereignClient__default.RequestOptions): Promise<TransactionResult<S["Transaction"]>>;
234
247
  /**
@@ -240,6 +253,28 @@ declare class Rollup<S extends BaseTypeSpec, C extends RollupContext> {
240
253
  * @param {SovereignClient.RequestOptions} options - The options for the request.
241
254
  */
242
255
  call(runtimeCall: S["RuntimeCall"], { signer, overrides }: CallParams<S>, options?: SovereignClient__default.RequestOptions): Promise<TransactionResult<S["Transaction"]>>;
256
+ /**
257
+ * Prepares a runtime call by creating and signing a transaction without submitting it.
258
+ * This is useful for scenarios where you need the signed transaction for later submission
259
+ * or for analysis purposes.
260
+ *
261
+ * @param runtimeCall - The runtime message to prepare.
262
+ * @param params - The parameters for preparing the call.
263
+ * @param params.signer - The signer to use for signing the transaction.
264
+ * @param params.overrides - Optional overrides for the unsigned transaction.
265
+ * @returns A promise that resolves to the signed transaction.
266
+ */
267
+ prepareCall(runtimeCall: S["RuntimeCall"], { signer, overrides }: CallParams<S>): Promise<S["Transaction"]>;
268
+ /**
269
+ * Signs an unsigned transaction using the provided signer.
270
+ * Creates a signature by combining the serialized unsigned transaction with the chain hash,
271
+ * then constructs a fully signed transaction.
272
+ *
273
+ * @param unsignedTx - The unsigned transaction to sign.
274
+ * @param signer - The signer to use for signing the transaction.
275
+ * @returns A promise that resolves to the signed transaction.
276
+ */
277
+ signTransaction(unsignedTx: S["UnsignedTransaction"], signer: Signer): Promise<S["Transaction"]>;
243
278
  /**
244
279
  * Create a subscription to events emitted over websockets by the rollup.
245
280
  */
@@ -281,37 +316,6 @@ declare class Rollup<S extends BaseTypeSpec, C extends RollupContext> {
281
316
  chainHash(): Promise<Uint8Array>;
282
317
  }
283
318
 
284
- type TxDetails = {
285
- max_priority_fee_bips: number;
286
- max_fee: string;
287
- gas_limit: number[] | null;
288
- chain_id: number;
289
- };
290
- type Generation = {
291
- generation: number;
292
- };
293
- type Nonce = {
294
- nonce: number;
295
- };
296
- type Uniqueness = Nonce | Generation;
297
- type UnsignedTransaction<RuntimeCall> = {
298
- runtime_call: RuntimeCall;
299
- uniqueness: Uniqueness;
300
- details: TxDetails;
301
- };
302
- type TransactionV0<RuntimeCall> = {
303
- pub_key: {
304
- pub_key: Uint8Array;
305
- };
306
- signature: {
307
- msg_sig: Uint8Array;
308
- };
309
- } & UnsignedTransaction<RuntimeCall>;
310
- type Transaction<RuntimeCall> = {
311
- versioned_tx: {
312
- V0: TransactionV0<RuntimeCall>;
313
- };
314
- };
315
319
  type Dedup = {
316
320
  nonce: number;
317
321
  };
@@ -328,14 +332,7 @@ declare function standardTypeBuilder<S extends StandardRollupSpec<unknown>>(): T
328
332
  /**
329
333
  * The parameters for simulating a runtime call transaction.
330
334
  */
331
- type SimulateParams = {
332
- /**
333
- * The transaction details to use for the simulation.
334
- */
335
- txDetails: TxDetails;
336
- /** The generation of the transaction for uniquness purposes. */
337
- generation?: number;
338
- } & SignerParams;
335
+ type SimulateParams = Omit<SovereignClient__default.RollupSimulateParams, "call" | "sender"> & SignerParams;
339
336
  declare class StandardRollup<RuntimeCall> extends Rollup<StandardRollupSpec<RuntimeCall>, StandardRollupContext> {
340
337
  /**
341
338
  * Simulates a runtime call transaction.
@@ -344,7 +341,7 @@ declare class StandardRollup<RuntimeCall> extends Rollup<StandardRollupSpec<Runt
344
341
  *
345
342
  * @param runtimeMessage - The runtime message to call.
346
343
  */
347
- simulate(runtimeMessage: StandardRollupSpec<RuntimeCall>["RuntimeCall"], { signer, txDetails, generation: overrideGeneration }: SimulateParams): Promise<SovereignClient__default.Rollup.SimulateExecutionResponse>;
344
+ simulate(runtimeMessage: StandardRollupSpec<RuntimeCall>["RuntimeCall"], { signer }: SimulateParams): Promise<SovereignClient__default.Rollup.RollupSimulateResponse>;
348
345
  }
349
346
  declare const DEFAULT_TX_DETAILS: Omit<TxDetails, "chain_id">;
350
347
  declare function createStandardRollup<RuntimeCall, C extends StandardRollupContext = StandardRollupContext>(rollupConfig?: Partial<RollupConfig<DeepPartial<C>>>, typeBuilderOverrides?: Partial<TypeBuilder<StandardRollupSpec<RuntimeCall>, C>>): Promise<StandardRollup<RuntimeCall>>;
@@ -369,4 +366,4 @@ declare class SchemaError extends SovereignError {
369
366
  constructor(message: string, reason: string, schema: object);
370
367
  }
371
368
 
372
- export { type BaseTypeSpec, type CallParams, DEFAULT_TX_DETAILS, type Dedup, type EventPayload, type Generation, InvalidRollupConfigError, type Nonce, Rollup, type RollupConfig, type RollupContext, type RollupTypeSpec, SchemaError, type SignerParams, type SimulateParams, SovereignError, StandardRollup, type StandardRollupContext, type StandardRollupSpec, type Subscription, type Transaction, type TransactionContext, type TransactionResult, type TransactionV0, type TxDetails, type TypeBuilder, type Uniqueness, type UnsignedTransaction, type UnsignedTransactionContext, VersionMismatchError, addressFromPublicKey, createStandardRollup, standardTypeBuilder };
369
+ export { type BaseTypeSpec, type CallParams, DEFAULT_TX_DETAILS, type Dedup, type EventPayload, InvalidRollupConfigError, Rollup, type RollupConfig, type RollupContext, type RollupTypeSpec, SchemaError, type SignerParams, type SimulateParams, SovereignError, StandardRollup, type StandardRollupContext, type StandardRollupSpec, type Subscription, type TransactionContext, type TransactionResult, type TypeBuilder, type UnsignedTransactionContext, VersionMismatchError, addressFromPublicKey, createStandardRollup, standardTypeBuilder };
package/dist/index.d.ts CHANGED
@@ -4,6 +4,7 @@ import * as SovereignClient from '@sovereign-sdk/client';
4
4
  export { SovereignClient };
5
5
  import { RollupSchema, Serializer } from '@sovereign-sdk/serializers';
6
6
  import { Signer } from '@sovereign-sdk/signers';
7
+ import { TxDetails, UnsignedTransaction, Transaction } from '@sovereign-sdk/types';
7
8
 
8
9
  /**
9
10
  * Encodes a public key as a bech32m address with the given human-readable part (hrp).
@@ -159,6 +160,13 @@ type RollupConfig<C extends RollupContext> = {
159
160
  * Arbitrary context that is associated with the rollup.
160
161
  */
161
162
  context: C;
163
+ /**
164
+ * The endpoint path for submitting transactions.
165
+ * Defaults to "/sequencer/txs", the standard Sovereign SDK endpoint.
166
+ * Can be overridden if your rollup is configured to expose non-standard endpoints in
167
+ * order to support multiple different transaction encoding or authentication schemes.
168
+ */
169
+ txSubmissionEndpoint: string;
162
170
  };
163
171
  /**
164
172
  * The result of signing and submitting a transaction.
@@ -212,12 +220,16 @@ declare class Rollup<S extends BaseTypeSpec, C extends RollupContext> {
212
220
  /**
213
221
  * Retrieve dedup information about the provided address.
214
222
  *
215
- * @param address - The public key to dedup.
223
+ * @param publicKey - The public key to dedup.
224
+ * TODO: How to add param for generation explicitly
216
225
  */
217
- dedup(address: Uint8Array): Promise<S["Dedup"]>;
226
+ dedup(publicKey: Uint8Array): Promise<S["Dedup"]>;
218
227
  /**
219
228
  * Submits a transaction to the rollup.
220
229
  *
230
+ * The endpoint used for submission can be overridden via the options.path parameter.
231
+ * If not specified, the rollup's configured txSubmissionEndpoint will be used.
232
+ *
221
233
  * @param transaction - The transaction to submit.
222
234
  * @param {SovereignClient.RequestOptions} options - The options for the request.
223
235
  */
@@ -229,6 +241,7 @@ declare class Rollup<S extends BaseTypeSpec, C extends RollupContext> {
229
241
  * @param unsignedTx - The unsigned transaction to sign and submit.
230
242
  * @param {SignerParams} params - The params for signing and submitting the transaction.
231
243
  * @param {SovereignClient.RequestOptions} options - The options for the request.
244
+ * @param endpoint - Optional endpoint override. If not specified, uses the rollup's configured txSubmissionEndpoint.
232
245
  */
233
246
  signAndSubmitTransaction(unsignedTx: S["UnsignedTransaction"], { signer }: SignerParams, options?: SovereignClient__default.RequestOptions): Promise<TransactionResult<S["Transaction"]>>;
234
247
  /**
@@ -240,6 +253,28 @@ declare class Rollup<S extends BaseTypeSpec, C extends RollupContext> {
240
253
  * @param {SovereignClient.RequestOptions} options - The options for the request.
241
254
  */
242
255
  call(runtimeCall: S["RuntimeCall"], { signer, overrides }: CallParams<S>, options?: SovereignClient__default.RequestOptions): Promise<TransactionResult<S["Transaction"]>>;
256
+ /**
257
+ * Prepares a runtime call by creating and signing a transaction without submitting it.
258
+ * This is useful for scenarios where you need the signed transaction for later submission
259
+ * or for analysis purposes.
260
+ *
261
+ * @param runtimeCall - The runtime message to prepare.
262
+ * @param params - The parameters for preparing the call.
263
+ * @param params.signer - The signer to use for signing the transaction.
264
+ * @param params.overrides - Optional overrides for the unsigned transaction.
265
+ * @returns A promise that resolves to the signed transaction.
266
+ */
267
+ prepareCall(runtimeCall: S["RuntimeCall"], { signer, overrides }: CallParams<S>): Promise<S["Transaction"]>;
268
+ /**
269
+ * Signs an unsigned transaction using the provided signer.
270
+ * Creates a signature by combining the serialized unsigned transaction with the chain hash,
271
+ * then constructs a fully signed transaction.
272
+ *
273
+ * @param unsignedTx - The unsigned transaction to sign.
274
+ * @param signer - The signer to use for signing the transaction.
275
+ * @returns A promise that resolves to the signed transaction.
276
+ */
277
+ signTransaction(unsignedTx: S["UnsignedTransaction"], signer: Signer): Promise<S["Transaction"]>;
243
278
  /**
244
279
  * Create a subscription to events emitted over websockets by the rollup.
245
280
  */
@@ -281,37 +316,6 @@ declare class Rollup<S extends BaseTypeSpec, C extends RollupContext> {
281
316
  chainHash(): Promise<Uint8Array>;
282
317
  }
283
318
 
284
- type TxDetails = {
285
- max_priority_fee_bips: number;
286
- max_fee: string;
287
- gas_limit: number[] | null;
288
- chain_id: number;
289
- };
290
- type Generation = {
291
- generation: number;
292
- };
293
- type Nonce = {
294
- nonce: number;
295
- };
296
- type Uniqueness = Nonce | Generation;
297
- type UnsignedTransaction<RuntimeCall> = {
298
- runtime_call: RuntimeCall;
299
- uniqueness: Uniqueness;
300
- details: TxDetails;
301
- };
302
- type TransactionV0<RuntimeCall> = {
303
- pub_key: {
304
- pub_key: Uint8Array;
305
- };
306
- signature: {
307
- msg_sig: Uint8Array;
308
- };
309
- } & UnsignedTransaction<RuntimeCall>;
310
- type Transaction<RuntimeCall> = {
311
- versioned_tx: {
312
- V0: TransactionV0<RuntimeCall>;
313
- };
314
- };
315
319
  type Dedup = {
316
320
  nonce: number;
317
321
  };
@@ -328,14 +332,7 @@ declare function standardTypeBuilder<S extends StandardRollupSpec<unknown>>(): T
328
332
  /**
329
333
  * The parameters for simulating a runtime call transaction.
330
334
  */
331
- type SimulateParams = {
332
- /**
333
- * The transaction details to use for the simulation.
334
- */
335
- txDetails: TxDetails;
336
- /** The generation of the transaction for uniquness purposes. */
337
- generation?: number;
338
- } & SignerParams;
335
+ type SimulateParams = Omit<SovereignClient__default.RollupSimulateParams, "call" | "sender"> & SignerParams;
339
336
  declare class StandardRollup<RuntimeCall> extends Rollup<StandardRollupSpec<RuntimeCall>, StandardRollupContext> {
340
337
  /**
341
338
  * Simulates a runtime call transaction.
@@ -344,7 +341,7 @@ declare class StandardRollup<RuntimeCall> extends Rollup<StandardRollupSpec<Runt
344
341
  *
345
342
  * @param runtimeMessage - The runtime message to call.
346
343
  */
347
- simulate(runtimeMessage: StandardRollupSpec<RuntimeCall>["RuntimeCall"], { signer, txDetails, generation: overrideGeneration }: SimulateParams): Promise<SovereignClient__default.Rollup.SimulateExecutionResponse>;
344
+ simulate(runtimeMessage: StandardRollupSpec<RuntimeCall>["RuntimeCall"], { signer }: SimulateParams): Promise<SovereignClient__default.Rollup.RollupSimulateResponse>;
348
345
  }
349
346
  declare const DEFAULT_TX_DETAILS: Omit<TxDetails, "chain_id">;
350
347
  declare function createStandardRollup<RuntimeCall, C extends StandardRollupContext = StandardRollupContext>(rollupConfig?: Partial<RollupConfig<DeepPartial<C>>>, typeBuilderOverrides?: Partial<TypeBuilder<StandardRollupSpec<RuntimeCall>, C>>): Promise<StandardRollup<RuntimeCall>>;
@@ -369,4 +366,4 @@ declare class SchemaError extends SovereignError {
369
366
  constructor(message: string, reason: string, schema: object);
370
367
  }
371
368
 
372
- export { type BaseTypeSpec, type CallParams, DEFAULT_TX_DETAILS, type Dedup, type EventPayload, type Generation, InvalidRollupConfigError, type Nonce, Rollup, type RollupConfig, type RollupContext, type RollupTypeSpec, SchemaError, type SignerParams, type SimulateParams, SovereignError, StandardRollup, type StandardRollupContext, type StandardRollupSpec, type Subscription, type Transaction, type TransactionContext, type TransactionResult, type TransactionV0, type TxDetails, type TypeBuilder, type Uniqueness, type UnsignedTransaction, type UnsignedTransactionContext, VersionMismatchError, addressFromPublicKey, createStandardRollup, standardTypeBuilder };
369
+ export { type BaseTypeSpec, type CallParams, DEFAULT_TX_DETAILS, type Dedup, type EventPayload, InvalidRollupConfigError, Rollup, type RollupConfig, type RollupContext, type RollupTypeSpec, SchemaError, type SignerParams, type SimulateParams, SovereignError, StandardRollup, type StandardRollupContext, type StandardRollupSpec, type Subscription, type TransactionContext, type TransactionResult, type TypeBuilder, type UnsignedTransactionContext, VersionMismatchError, addressFromPublicKey, createStandardRollup, standardTypeBuilder };
package/dist/index.js CHANGED
@@ -217,17 +217,22 @@ var Rollup = class {
217
217
  /**
218
218
  * Retrieve dedup information about the provided address.
219
219
  *
220
- * @param address - The public key to dedup.
220
+ * @param publicKey - The public key to dedup.
221
+ * TODO: How to add param for generation explicitly
221
222
  */
222
- dedup(address) {
223
+ dedup(publicKey) {
223
224
  return __async(this, null, function* () {
224
- const response = yield this.rollup.addresses.dedup((0, import_utils2.bytesToHex)(address));
225
+ const credentialId = (0, import_utils2.bytesToHex)(publicKey);
226
+ const response = yield this.rollup.addresses.dedup(credentialId);
225
227
  return response;
226
228
  });
227
229
  }
228
230
  /**
229
231
  * Submits a transaction to the rollup.
230
232
  *
233
+ * The endpoint used for submission can be overridden via the options.path parameter.
234
+ * If not specified, the rollup's configured txSubmissionEndpoint will be used.
235
+ *
231
236
  * @param transaction - The transaction to submit.
232
237
  * @param {SovereignClient.RequestOptions} options - The options for the request.
233
238
  */
@@ -235,10 +240,14 @@ var Rollup = class {
235
240
  return __async(this, null, function* () {
236
241
  const serializer = yield this.serializer();
237
242
  const serializedTx = serializer.serializeTx(transaction);
238
- return this.sequencer.txs.create({ body: import_js_base64.Base64.fromUint8Array(serializedTx) }, options).catch((e) => __async(this, null, function* () {
243
+ const _a = options || {}, { body: _, query: __, path } = _a, requestOptions = __objRest(_a, ["body", "query", "path"]);
244
+ const txSubmissionEndpoint = path || this._config.txSubmissionEndpoint;
245
+ return this.http.post(txSubmissionEndpoint, __spreadValues({
246
+ body: { body: import_js_base64.Base64.fromUint8Array(serializedTx) }
247
+ }, requestOptions)).catch((e) => __async(this, null, function* () {
239
248
  if (isVersionMismatchError(e)) {
240
249
  const oldVersion = (0, import_utils2.bytesToHex)(yield this.chainHash());
241
- const { schema, chain_hash: newVersion } = yield this.rollup.schema.retrieve();
250
+ const { schema, chain_hash: newVersion } = yield this.rollup.schema();
242
251
  this._chainHash = (0, import_utils2.hexToBytes)(newVersion);
243
252
  this._serializer = this._config.getSerializer(schema);
244
253
  if (oldVersion !== newVersion) {
@@ -260,23 +269,11 @@ var Rollup = class {
260
269
  * @param unsignedTx - The unsigned transaction to sign and submit.
261
270
  * @param {SignerParams} params - The params for signing and submitting the transaction.
262
271
  * @param {SovereignClient.RequestOptions} options - The options for the request.
272
+ * @param endpoint - Optional endpoint override. If not specified, uses the rollup's configured txSubmissionEndpoint.
263
273
  */
264
274
  signAndSubmitTransaction(_0, _1, _2) {
265
275
  return __async(this, arguments, function* (unsignedTx, { signer }, options) {
266
- const serializer = yield this.serializer();
267
- const serializedUnsignedTx = serializer.serializeUnsignedTx(unsignedTx);
268
- const chainHash = yield this.chainHash();
269
- const signature = yield signer.sign(
270
- new Uint8Array([...serializedUnsignedTx, ...chainHash])
271
- );
272
- const publicKey = yield signer.publicKey();
273
- const context = {
274
- unsignedTx,
275
- sender: publicKey,
276
- signature,
277
- rollup: this
278
- };
279
- const tx = yield this._typeBuilder.transaction(context);
276
+ const tx = yield this.signTransaction(unsignedTx, signer);
280
277
  const result = yield this.submitTransaction(tx, options);
281
278
  return { transaction: tx, response: result };
282
279
  });
@@ -306,6 +303,55 @@ var Rollup = class {
306
303
  );
307
304
  });
308
305
  }
306
+ /**
307
+ * Prepares a runtime call by creating and signing a transaction without submitting it.
308
+ * This is useful for scenarios where you need the signed transaction for later submission
309
+ * or for analysis purposes.
310
+ *
311
+ * @param runtimeCall - The runtime message to prepare.
312
+ * @param params - The parameters for preparing the call.
313
+ * @param params.signer - The signer to use for signing the transaction.
314
+ * @param params.overrides - Optional overrides for the unsigned transaction.
315
+ * @returns A promise that resolves to the signed transaction.
316
+ */
317
+ prepareCall(_0, _1) {
318
+ return __async(this, arguments, function* (runtimeCall, { signer, overrides }) {
319
+ const context = {
320
+ runtimeCall,
321
+ rollup: this,
322
+ overrides: overrides != null ? overrides : {}
323
+ };
324
+ const unsignedTx = yield this._typeBuilder.unsignedTransaction(context);
325
+ return this.signTransaction(unsignedTx, signer);
326
+ });
327
+ }
328
+ /**
329
+ * Signs an unsigned transaction using the provided signer.
330
+ * Creates a signature by combining the serialized unsigned transaction with the chain hash,
331
+ * then constructs a fully signed transaction.
332
+ *
333
+ * @param unsignedTx - The unsigned transaction to sign.
334
+ * @param signer - The signer to use for signing the transaction.
335
+ * @returns A promise that resolves to the signed transaction.
336
+ */
337
+ signTransaction(unsignedTx, signer) {
338
+ return __async(this, null, function* () {
339
+ const serializer = yield this.serializer();
340
+ const serializedUnsignedTx = serializer.serializeUnsignedTx(unsignedTx);
341
+ const chainHash = yield this.chainHash();
342
+ const signature = yield signer.sign(
343
+ new Uint8Array([...serializedUnsignedTx, ...chainHash])
344
+ );
345
+ const publicKey = yield signer.publicKey();
346
+ const context = {
347
+ unsignedTx,
348
+ sender: publicKey,
349
+ signature,
350
+ rollup: this
351
+ };
352
+ return this._typeBuilder.transaction(context);
353
+ });
354
+ }
309
355
  /**
310
356
  * Create a subscription to events emitted over websockets by the rollup.
311
357
  */
@@ -361,7 +407,7 @@ var Rollup = class {
361
407
  serializer() {
362
408
  return __async(this, null, function* () {
363
409
  if (this._serializer) return this._serializer;
364
- const { schema } = yield this.rollup.schema.retrieve();
410
+ const { schema } = yield this.rollup.schema();
365
411
  this._serializer = this._config.getSerializer(schema);
366
412
  return this._serializer;
367
413
  });
@@ -375,7 +421,7 @@ var Rollup = class {
375
421
  chainHash() {
376
422
  return __async(this, null, function* () {
377
423
  if (this._chainHash) return this._chainHash;
378
- const { chain_hash } = yield this.rollup.schema.retrieve();
424
+ const { chain_hash } = yield this.rollup.schema();
379
425
  this._chainHash = (0, import_utils2.hexToBytes)(chain_hash);
380
426
  return this._chainHash;
381
427
  });
@@ -426,16 +472,10 @@ function standardTypeBuilder() {
426
472
  unsignedTx
427
473
  }) {
428
474
  return {
429
- versioned_tx: {
430
- V0: __spreadValues({
431
- pub_key: {
432
- pub_key: sender
433
- },
434
- signature: {
435
- msg_sig: signature
436
- }
437
- }, unsignedTx)
438
- }
475
+ V0: __spreadValues({
476
+ pub_key: (0, import_utils3.bytesToHex)(sender),
477
+ signature: (0, import_utils3.bytesToHex)(signature)
478
+ }, unsignedTx)
439
479
  };
440
480
  });
441
481
  }
@@ -450,29 +490,11 @@ var StandardRollup = class extends Rollup {
450
490
  * @param runtimeMessage - The runtime message to call.
451
491
  */
452
492
  simulate(_0, _1) {
453
- return __async(this, arguments, function* (runtimeMessage, { signer, txDetails, generation: overrideGeneration }) {
454
- const serializer = yield this.serializer();
455
- const runtimeCall = serializer.serializeRuntimeCall(runtimeMessage);
493
+ return __async(this, arguments, function* (runtimeMessage, { signer }) {
456
494
  const publicKey = yield signer.publicKey();
457
- const uniqueness = yield useOrFetchUniqueness({
458
- rollup: this,
459
- overrides: {
460
- uniqueness: overrideGeneration ? { generation: overrideGeneration } : void 0
461
- }
462
- });
463
- const generation = "generation" in uniqueness ? uniqueness.generation : uniqueness.nonce;
464
- const response = yield this.rollup.simulate({
465
- body: {
466
- details: __spreadProps(__spreadValues({}, txDetails), {
467
- // simulate needs this field as `undefined` currently
468
- gas_limit: txDetails.gas_limit || void 0
469
- }),
470
- encoded_call_message: (0, import_utils3.bytesToHex)(runtimeCall),
471
- generation,
472
- sender_pub_key: (0, import_utils3.bytesToHex)(publicKey)
473
- }
474
- });
475
- return response;
495
+ const sender = (0, import_utils3.bytesToHex)(publicKey);
496
+ const call = runtimeMessage;
497
+ return this.rollup.simulate({ sender, call });
476
498
  });
477
499
  }
478
500
  };
@@ -485,7 +507,7 @@ function buildContext(client, context) {
485
507
  return __async(this, null, function* () {
486
508
  const defaultTxDetails = __spreadValues(__spreadValues({}, DEFAULT_TX_DETAILS), context == null ? void 0 : context.defaultTxDetails);
487
509
  if (!defaultTxDetails.chain_id) {
488
- const { chain_id } = yield client.rollup.constants.retrieve();
510
+ const { chain_id } = yield client.rollup.constants();
489
511
  defaultTxDetails.chain_id = chain_id;
490
512
  }
491
513
  return {
@@ -495,13 +517,19 @@ function buildContext(client, context) {
495
517
  }
496
518
  function createStandardRollup(rollupConfig, typeBuilderOverrides) {
497
519
  return __async(this, null, function* () {
498
- var _a, _b;
520
+ var _a, _b, _c;
499
521
  const config = rollupConfig != null ? rollupConfig : {};
500
522
  const client = (_a = config.client) != null ? _a : new import_client2.default({ baseURL: config.url });
501
523
  const getSerializer = (_b = config.getSerializer) != null ? _b : (schema) => new import_serializers.JsSerializer(schema);
502
524
  const context = yield buildContext(client, config.context);
525
+ const txSubmissionEndpoint = (_c = config.txSubmissionEndpoint) != null ? _c : "/sequencer/txs";
503
526
  return new StandardRollup(
504
- __spreadProps(__spreadValues({}, config), { client, getSerializer, context }),
527
+ __spreadProps(__spreadValues({}, config), {
528
+ client,
529
+ getSerializer,
530
+ context,
531
+ txSubmissionEndpoint
532
+ }),
505
533
  __spreadValues(__spreadValues({}, standardTypeBuilder()), typeBuilderOverrides)
506
534
  );
507
535
  });
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/addresses.ts","../src/rollup/rollup.ts","../src/errors.ts","../src/subscriptions.ts","../src/rollup/standard-rollup.ts"],"sourcesContent":["export * from \"./addresses\";\nexport * from \"./rollup\";\nexport * from \"./errors\";\nexport * from \"./type-spec\";\nexport { type EventPayload, Subscription } from \"./subscriptions\";\nexport * as SovereignClient from \"@sovereign-sdk/client\";\n","import { type HexString, ensureBytes } from \"@sovereign-sdk/utils\";\nimport { bech32m } from \"bech32\";\n\n/**\n * Encodes a public key as a bech32m address with the given human-readable part (hrp).\n *\n * @param publicKey - The public key to encode, as a hex string or Uint8Array.\n * @param hrp - The human-readable part for the bech32m address (e.g., \"sov\").\n * @param concatPublicKey - Optional. If provided, only the first `concatPublicKey` bytes of the public key are used.\n * @returns The bech32m-encoded address as a string.\n * @throws {Error} If the public key is not a valid hex string or Uint8Array.\n */\nexport function addressFromPublicKey(\n publicKey: HexString | Uint8Array,\n hrp: string,\n concatPublicKey = 28,\n): string {\n let publicKeyBytes = ensureBytes(publicKey);\n\n if (concatPublicKey !== publicKey.length) {\n publicKeyBytes = publicKeyBytes.slice(0, concatPublicKey);\n }\n\n const words = bech32m.toWords(publicKeyBytes);\n return bech32m.encode(hrp, words);\n}\n","import SovereignClient from \"@sovereign-sdk/client\";\nimport type { APIError } from \"@sovereign-sdk/client\";\nimport type { RollupSchema, Serializer } from \"@sovereign-sdk/serializers\";\nimport type { Signer } from \"@sovereign-sdk/signers\";\nimport { bytesToHex, hexToBytes } from \"@sovereign-sdk/utils\";\nimport { Base64 } from \"js-base64\";\nimport { VersionMismatchError } from \"../errors\";\nimport {\n type Subscription,\n type SubscriptionToCallbackMap,\n createSubscription,\n} from \"../subscriptions\";\nimport type { BaseTypeSpec } from \"../type-spec\";\nimport type { DeepPartial } from \"../utils\";\n\nexport type UnsignedTransactionContext<\n S extends BaseTypeSpec,\n C extends RollupContext,\n> = {\n runtimeCall: S[\"RuntimeCall\"];\n // Provides the ability to override the generation data instead of retrieving it automatically.\n overrides: DeepPartial<S[\"UnsignedTransaction\"]>;\n rollup: Rollup<S, C>;\n};\n\nexport type TransactionContext<\n S extends BaseTypeSpec,\n C extends RollupContext,\n> = {\n unsignedTx: S[\"UnsignedTransaction\"];\n sender: Uint8Array;\n signature: Uint8Array;\n rollup: Rollup<S, C>;\n};\n\nexport type TypeBuilder<S extends BaseTypeSpec, C extends RollupContext> = {\n unsignedTransaction: (\n context: UnsignedTransactionContext<S, C>,\n ) => Promise<S[\"UnsignedTransaction\"]>;\n\n transaction: (context: TransactionContext<S, C>) => Promise<S[\"Transaction\"]>;\n};\n\n/**\n * Arbitrary context that is associated with the rollup.\n */\nexport type RollupContext = Record<string, unknown>;\n\n/**\n * The configuration for a rollup client.\n */\nexport type RollupConfig<C extends RollupContext> = {\n /**\n * The base URL of the rollup full node API.\n */\n url?: string;\n /**\n * The Sovereign SDK client to use for the rollup.\n * If not provided, the default client will be used using {@link PartialRollupConfig.url}.\n */\n client: SovereignClient;\n /**\n * Creates the serializer instance to use for the rollup.\n *\n * This can be called more than once, for example if the chain hash changes (i.e a new rollup version)\n * is detected then it will be called again with the new rollup schema.\n */\n getSerializer: (schema: RollupSchema) => Serializer;\n /**\n * Arbitrary context that is associated with the rollup.\n */\n context: C;\n};\n\n/**\n * The result of signing and submitting a transaction.\n *\n * @template Tx The type of the transaction\n */\nexport type TransactionResult<Tx> = {\n /**\n * The response from the sequencer.\n */\n response: SovereignClient.Sequencer.TxCreateResponse;\n /**\n * The transaction that was submitted.\n */\n transaction: Tx;\n};\n\n/**\n * The parameters for signing and submitting a transaction.\n */\nexport type SignerParams = {\n /**\n * The signer to use for signing the transaction.\n */\n signer: Signer;\n};\n\n/**\n * The parameters for calling executing a runtime call transaction.\n */\nexport type CallParams<S extends BaseTypeSpec> = {\n overrides?: DeepPartial<S[\"UnsignedTransaction\"]>;\n} & SignerParams;\n\n/**\n * A generic rollup client.\n *\n * @template S - The type specification for the rollup.\n * If not provided, the base type specification will be used which uses `any` for all types.\n * @template C - The context for the rollup.\n */\nexport class Rollup<S extends BaseTypeSpec, C extends RollupContext> {\n private readonly _config: RollupConfig<C>;\n private readonly _typeBuilder: TypeBuilder<S, C>;\n private _chainHash?: Uint8Array;\n private _serializer?: Serializer;\n\n /**\n * Creates a new rollup client.\n *\n * @param config - The configuration for the rollup client.\n * @param typeBuilder - The type builder for the rollup.\n */\n constructor(config: RollupConfig<C>, typeBuilder: TypeBuilder<S, C>) {\n this._config = config;\n this._typeBuilder = typeBuilder;\n }\n\n /**\n * Retrieve dedup information about the provided address.\n *\n * @param address - The public key to dedup.\n */\n async dedup(address: Uint8Array): Promise<S[\"Dedup\"]> {\n const response = await this.rollup.addresses.dedup(bytesToHex(address));\n return response as S[\"Dedup\"];\n }\n\n /**\n * Submits a transaction to the rollup.\n *\n * @param transaction - The transaction to submit.\n * @param {SovereignClient.RequestOptions} options - The options for the request.\n */\n async submitTransaction(\n transaction: S[\"Transaction\"],\n options?: SovereignClient.RequestOptions,\n ): Promise<SovereignClient.Sequencer.TxCreateResponse> {\n const serializer = await this.serializer();\n const serializedTx = serializer.serializeTx(transaction);\n\n return this.sequencer.txs\n .create({ body: Base64.fromUint8Array(serializedTx) }, options)\n .catch(async (e) => {\n if (isVersionMismatchError(e as APIError)) {\n const oldVersion = bytesToHex(await this.chainHash());\n const { schema, chain_hash: newVersion } =\n await this.rollup.schema.retrieve();\n this._chainHash = hexToBytes(newVersion);\n this._serializer = this._config.getSerializer(schema);\n\n if (oldVersion !== newVersion) {\n throw new VersionMismatchError(\n \"Schema version mismatch when submitting transaction\",\n newVersion,\n oldVersion,\n );\n }\n }\n throw e;\n });\n }\n\n /**\n * Signs and submits a transaction to the rollup.\n * Utilizes the provided signer to sign the transaction.\n *\n * @param unsignedTx - The unsigned transaction to sign and submit.\n * @param {SignerParams} params - The params for signing and submitting the transaction.\n * @param {SovereignClient.RequestOptions} options - The options for the request.\n */\n async signAndSubmitTransaction(\n unsignedTx: S[\"UnsignedTransaction\"],\n { signer }: SignerParams,\n options?: SovereignClient.RequestOptions,\n ): Promise<TransactionResult<S[\"Transaction\"]>> {\n const serializer = await this.serializer();\n const serializedUnsignedTx = serializer.serializeUnsignedTx(unsignedTx);\n const chainHash = await this.chainHash();\n const signature = await signer.sign(\n new Uint8Array([...serializedUnsignedTx, ...chainHash]),\n );\n const publicKey = await signer.publicKey();\n const context = {\n unsignedTx,\n sender: publicKey,\n signature,\n rollup: this,\n };\n const tx = await this._typeBuilder.transaction(context);\n const result = await this.submitTransaction(tx, options);\n\n return { transaction: tx, response: result };\n }\n\n /**\n * Performs a runtime call transaction.\n * Utilizes the provided signer to sign the transaction.\n *\n * @param runtimeCall - The runtime message to call.\n * @param {CallParams<S>} params - The params for submitting a runtime call transaction.\n * @param {SovereignClient.RequestOptions} options - The options for the request.\n */\n async call(\n runtimeCall: S[\"RuntimeCall\"],\n { signer, overrides }: CallParams<S>,\n options?: SovereignClient.RequestOptions,\n ): Promise<TransactionResult<S[\"Transaction\"]>> {\n const context = {\n runtimeCall,\n rollup: this,\n overrides: overrides ?? ({} as DeepPartial<S[\"UnsignedTransaction\"]>),\n };\n const unsignedTx = await this._typeBuilder.unsignedTransaction(context);\n\n return this.signAndSubmitTransaction(\n unsignedTx,\n {\n signer,\n },\n options,\n );\n }\n\n /**\n * Create a subscription to events emitted over websockets by the rollup.\n */\n subscribe<T extends keyof SubscriptionToCallbackMap>(\n type: T,\n callback: SubscriptionToCallbackMap[T],\n ): Subscription {\n return createSubscription(type, callback, this.http);\n }\n\n /**\n * Performs a healthcheck against the rollup to determine if it is currently healthy.\n *\n * @param timeout - Request timeout in milliseconds.\n * @returns `true` if the rollup is considered healthy otherwise `false`.\n */\n async healthcheck(timeout = 5000): Promise<boolean> {\n try {\n await this.http.get(\"/healthcheck\", { timeout, maxRetries: 1 });\n return true;\n } catch (e) {\n return !(e instanceof SovereignClient.APIConnectionError);\n }\n }\n\n /**\n * A ledger client that can be used to query the ledger.\n */\n get ledger(): SovereignClient.Ledger {\n return this.http.ledger;\n }\n\n /**\n * A sequencer client that can be used to submit transactions & batches to the rollup.\n */\n get sequencer(): SovereignClient.Sequencer {\n return this.http.sequencer;\n }\n\n /**\n * A rollup client that can be used to perform operations on the rollup.\n */\n get rollup(): SovereignClient.Rollup {\n return this.http.rollup;\n }\n\n /**\n * A client that can be used to perform HTTP requests to the Sovereign API.\n * This can be used as an escape hatch to execute arbitrary requests to the Sovereign API\n * if the operation is not supported by `ledger`, `sequencer`, or `rollup` clients.\n */\n get http(): SovereignClient {\n return this._config.client;\n }\n\n /**\n * The serializer for the rollup.\n * Can be used to serialize transactions, runtime calls, etc.\n */\n async serializer(): Promise<Serializer> {\n if (this._serializer) return this._serializer;\n const { schema } = await this.rollup.schema.retrieve();\n this._serializer = this._config.getSerializer(schema);\n return this._serializer;\n }\n\n /**\n * The context for the rollup.\n */\n get context(): C {\n return this._config.context;\n }\n\n async chainHash(): Promise<Uint8Array> {\n if (this._chainHash) return this._chainHash;\n const { chain_hash } = await this.rollup.schema.retrieve();\n this._chainHash = hexToBytes(chain_hash);\n return this._chainHash;\n }\n}\n\nfunction isVersionMismatchError(e: APIError): boolean {\n if (\n // biome-ignore lint/suspicious/noExplicitAny: yolo\n (e.error as any)?.details?.error?.includes(\"Signature verification failed\")\n ) {\n return true;\n }\n\n return false;\n}\n","/**\n * Base error class for Sovereign SDK Web3.\n */\nexport class SovereignError extends Error {\n constructor(message: string) {\n super(message);\n\n this.name = this.constructor.name;\n this.stack = new Error().stack;\n }\n}\n\nexport class InvalidRollupConfigError extends SovereignError {}\n\nexport class VersionMismatchError extends SovereignError {\n public readonly newVersion: string;\n public readonly currentVersion: string;\n public readonly retryable: boolean;\n\n constructor(message: string, newVersion: string, currentVersion: string) {\n super(message);\n\n this.newVersion = newVersion;\n this.currentVersion = currentVersion;\n this.retryable = newVersion !== currentVersion;\n }\n}\n\nexport class SchemaError extends SovereignError {\n public readonly schema: object;\n public readonly reason: string;\n\n constructor(message: string, reason: string, schema: object) {\n super(`${message}: ${reason}`);\n\n this.reason = reason;\n this.schema = schema;\n }\n}\n","import type SovereignSDK from \"@sovereign-sdk/client\";\nimport IsoWebSocket from \"isomorphic-ws\";\nimport { WebSocket } from \"partysocket\";\nimport { SovereignError } from \"./errors\";\n\ntype Url = string;\n\nexport function httpToWebSocket(url: string) {\n return url.replace(/^http(s?):\\/\\//, (_, s) => `ws${s}://`);\n}\n\nexport type Subscription = {\n /** Url providing the subscription. */\n url: Url;\n /** Unsubscribe this subscription. */\n unsubscribe: () => void;\n};\n\ntype SubscriptionEntry = {\n websocket: WebSocket;\n // biome-ignore lint/suspicious/noExplicitAny: allow\n callbacks: Array<(...args: any[]) => void>;\n};\n\nexport const _subscriptions: Record<Url, SubscriptionEntry> = {};\n\n/** Subscribe to the provided websocket url & call the provided callback on messages received. */\nexport function subscribe(\n url: Url,\n // biome-ignore lint/suspicious/noExplicitAny: allow\n callback: (...args: any[]) => void,\n): Subscription {\n const subscription = _subscriptions[url];\n\n if (!subscription) {\n const websocket = new WebSocket(url, [], { WebSocket: IsoWebSocket });\n // bun compatibility: https://github.com/partykit/partykit/issues/774\n websocket.binaryType = \"arraybuffer\";\n\n _subscriptions[url] = {\n websocket,\n callbacks: [callback],\n };\n\n websocket.addEventListener(\"message\", (message) => {\n const data = JSON.parse(message.data);\n const callbacks = _subscriptions[url]?.callbacks;\n if (callbacks) {\n for (const cb of callbacks) {\n cb(data);\n }\n }\n });\n websocket.addEventListener(\"error\", (e) =>\n console.log(\"Websocket error\", e),\n );\n } else {\n subscription.callbacks.push(callback);\n }\n\n const callbackIndex = _subscriptions[url]?.callbacks.length - 1;\n\n return {\n get url() {\n return url;\n },\n unsubscribe() {\n const subscription = _subscriptions[url];\n\n if (!subscription) {\n return;\n }\n\n subscription.callbacks.splice(callbackIndex, 1);\n\n if (!subscription.callbacks.length) {\n subscription.websocket.close();\n delete _subscriptions[url];\n }\n },\n };\n}\n\nexport type EventPayload = {\n tx_hash: string;\n type: \"event\";\n number: number;\n key: string;\n value: Record<string, unknown>;\n module: {\n type: \"moduleRef\";\n name: string;\n };\n};\n\nexport interface SubscriptionToCallbackMap {\n events: (event: EventPayload) => Promise<void>;\n}\n\nexport function createSubscription<T extends keyof SubscriptionToCallbackMap>(\n subscription: T,\n callback: SubscriptionToCallbackMap[T],\n client: SovereignSDK,\n): Subscription {\n switch (subscription) {\n case \"events\": {\n const url = client.buildURL(\"/sequencer/events/ws\", {});\n return subscribe(\n httpToWebSocket(url),\n callback as SubscriptionToCallbackMap[\"events\"],\n );\n }\n default:\n throw new SovereignError(`Invalid subscription type '${subscription}'`);\n }\n}\n","import SovereignClient from \"@sovereign-sdk/client\";\nimport { JsSerializer } from \"@sovereign-sdk/serializers\";\nimport { bytesToHex } from \"@sovereign-sdk/utils\";\nimport type { DeepPartial } from \"../utils\";\nimport {\n Rollup,\n type RollupConfig,\n type SignerParams,\n type TransactionContext,\n type TypeBuilder,\n type UnsignedTransactionContext,\n} from \"./rollup\";\n\nexport type TxDetails = {\n max_priority_fee_bips: number;\n max_fee: string;\n gas_limit: number[] | null;\n chain_id: number;\n};\n\nexport type Generation = { generation: number };\nexport type Nonce = { nonce: number };\nexport type Uniqueness = Nonce | Generation;\n\nexport type UnsignedTransaction<RuntimeCall> = {\n runtime_call: RuntimeCall;\n uniqueness: Uniqueness;\n details: TxDetails;\n};\n\nexport type TransactionV0<RuntimeCall> = {\n pub_key: { pub_key: Uint8Array };\n signature: { msg_sig: Uint8Array };\n} & UnsignedTransaction<RuntimeCall>;\n\nexport type Transaction<RuntimeCall> = {\n versioned_tx: { V0: TransactionV0<RuntimeCall> };\n};\n\nexport type Dedup = {\n nonce: number;\n};\n\nexport type StandardRollupContext = {\n defaultTxDetails: TxDetails;\n};\n\nexport type StandardRollupSpec<RuntimeCall> = {\n UnsignedTransaction: UnsignedTransaction<RuntimeCall>;\n Transaction: Transaction<RuntimeCall>;\n RuntimeCall: RuntimeCall;\n Dedup: Dedup;\n};\n\nconst useOrFetchUniqueness = async <S extends StandardRollupSpec<unknown>>({\n overrides,\n}: Omit<\n UnsignedTransactionContext<S, StandardRollupContext>,\n \"runtimeCall\"\n>) => {\n if (overrides?.uniqueness) {\n return overrides.uniqueness;\n }\n\n return { generation: Date.now() };\n};\n\nexport function standardTypeBuilder<\n S extends StandardRollupSpec<unknown>,\n>(): TypeBuilder<S, StandardRollupContext> {\n return {\n async unsignedTransaction(\n context: UnsignedTransactionContext<S, StandardRollupContext>,\n ) {\n const { rollup, runtimeCall } = context;\n const { uniqueness: _, ...overrides } = context.overrides;\n const uniqueness = await useOrFetchUniqueness(context);\n const details: TxDetails = {\n ...rollup.context.defaultTxDetails,\n ...overrides.details,\n };\n\n return {\n runtime_call: runtimeCall,\n uniqueness,\n details,\n } as S[\"UnsignedTransaction\"];\n },\n async transaction({\n sender,\n signature,\n unsignedTx,\n }: TransactionContext<S, StandardRollupContext>) {\n return {\n versioned_tx: {\n V0: {\n pub_key: {\n pub_key: sender,\n },\n signature: {\n msg_sig: signature,\n },\n ...unsignedTx,\n },\n },\n };\n },\n };\n}\n\n/**\n * The parameters for simulating a runtime call transaction.\n */\nexport type SimulateParams = {\n /**\n * The transaction details to use for the simulation.\n */\n txDetails: TxDetails;\n\n /** The generation of the transaction for uniquness purposes. */\n generation?: number;\n} & SignerParams;\n\nexport class StandardRollup<RuntimeCall> extends Rollup<\n StandardRollupSpec<RuntimeCall>,\n StandardRollupContext\n> {\n /**\n * Simulates a runtime call transaction.\n *\n * This method can be useful to estimate the gas cost of a runtime call transaction.\n *\n * @param runtimeMessage - The runtime message to call.\n */\n async simulate(\n runtimeMessage: StandardRollupSpec<RuntimeCall>[\"RuntimeCall\"],\n { signer, txDetails, generation: overrideGeneration }: SimulateParams,\n ): Promise<SovereignClient.Rollup.SimulateExecutionResponse> {\n const serializer = await this.serializer();\n const runtimeCall = serializer.serializeRuntimeCall(runtimeMessage);\n const publicKey = await signer.publicKey();\n const uniqueness = await useOrFetchUniqueness({\n rollup: this,\n overrides: {\n uniqueness: overrideGeneration\n ? { generation: overrideGeneration }\n : undefined,\n },\n });\n // Extract the generation number from the uniqueness object\n const generation =\n \"generation\" in uniqueness\n ? (uniqueness as Generation).generation\n : (uniqueness as Nonce).nonce; // Use nonce as fallback until simulate endpoint is updated.\n const response = await this.rollup.simulate({\n body: {\n details: {\n ...txDetails,\n // simulate needs this field as `undefined` currently\n gas_limit: txDetails.gas_limit || undefined,\n },\n encoded_call_message: bytesToHex(runtimeCall),\n generation,\n sender_pub_key: bytesToHex(publicKey),\n },\n });\n\n return response;\n }\n}\n\nexport const DEFAULT_TX_DETAILS: Omit<TxDetails, \"chain_id\"> = {\n max_priority_fee_bips: 0,\n max_fee: \"100000000\",\n gas_limit: null,\n};\n\nasync function buildContext<C extends StandardRollupContext>(\n client: SovereignClient,\n context?: DeepPartial<C>,\n): Promise<C> {\n const defaultTxDetails = {\n ...DEFAULT_TX_DETAILS,\n ...context?.defaultTxDetails,\n };\n\n if (!defaultTxDetails.chain_id) {\n const { chain_id } = await client.rollup.constants.retrieve();\n\n defaultTxDetails.chain_id = chain_id;\n }\n\n return {\n defaultTxDetails,\n } as C;\n}\n\nexport async function createStandardRollup<\n RuntimeCall,\n C extends StandardRollupContext = StandardRollupContext,\n>(\n rollupConfig?: Partial<RollupConfig<DeepPartial<C>>>,\n typeBuilderOverrides?: Partial<\n TypeBuilder<StandardRollupSpec<RuntimeCall>, C>\n >,\n) {\n const config = rollupConfig ?? {};\n const client = config.client ?? new SovereignClient({ baseURL: config.url });\n const getSerializer =\n config.getSerializer ?? ((schema) => new JsSerializer(schema));\n const context = await buildContext<C>(client, config.context);\n\n return new StandardRollup<RuntimeCall>(\n { ...config, client, getSerializer, context },\n {\n ...standardTypeBuilder(),\n ...typeBuilderOverrides,\n },\n );\n}\n"],"mappings":"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","names":["SovereignClient","import_utils","IsoWebSocket","_a","subscription","SovereignClient","import_client","import_utils","_a","SovereignClient","SovereignClient"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/addresses.ts","../src/rollup/rollup.ts","../src/errors.ts","../src/subscriptions.ts","../src/rollup/standard-rollup.ts"],"sourcesContent":["export * from \"./addresses\";\nexport * from \"./rollup\";\nexport * from \"./errors\";\nexport * from \"./type-spec\";\nexport { type EventPayload, Subscription } from \"./subscriptions\";\nexport * as SovereignClient from \"@sovereign-sdk/client\";\n","import { type HexString, ensureBytes } from \"@sovereign-sdk/utils\";\nimport { bech32m } from \"bech32\";\n\n/**\n * Encodes a public key as a bech32m address with the given human-readable part (hrp).\n *\n * @param publicKey - The public key to encode, as a hex string or Uint8Array.\n * @param hrp - The human-readable part for the bech32m address (e.g., \"sov\").\n * @param concatPublicKey - Optional. If provided, only the first `concatPublicKey` bytes of the public key are used.\n * @returns The bech32m-encoded address as a string.\n * @throws {Error} If the public key is not a valid hex string or Uint8Array.\n */\nexport function addressFromPublicKey(\n publicKey: HexString | Uint8Array,\n hrp: string,\n concatPublicKey = 28,\n): string {\n let publicKeyBytes = ensureBytes(publicKey);\n\n if (concatPublicKey !== publicKey.length) {\n publicKeyBytes = publicKeyBytes.slice(0, concatPublicKey);\n }\n\n const words = bech32m.toWords(publicKeyBytes);\n return bech32m.encode(hrp, words);\n}\n","import SovereignClient from \"@sovereign-sdk/client\";\nimport type { APIError } from \"@sovereign-sdk/client\";\nimport type { RollupSchema, Serializer } from \"@sovereign-sdk/serializers\";\nimport type { Signer } from \"@sovereign-sdk/signers\";\nimport { bytesToHex, hexToBytes } from \"@sovereign-sdk/utils\";\nimport { Base64 } from \"js-base64\";\nimport { VersionMismatchError } from \"../errors\";\nimport {\n type Subscription,\n type SubscriptionToCallbackMap,\n createSubscription,\n} from \"../subscriptions\";\nimport type { BaseTypeSpec } from \"../type-spec\";\nimport type { DeepPartial } from \"../utils\";\n\nexport type UnsignedTransactionContext<\n S extends BaseTypeSpec,\n C extends RollupContext,\n> = {\n runtimeCall: S[\"RuntimeCall\"];\n // Provides the ability to override the generation data instead of retrieving it automatically.\n overrides: DeepPartial<S[\"UnsignedTransaction\"]>;\n rollup: Rollup<S, C>;\n};\n\nexport type TransactionContext<\n S extends BaseTypeSpec,\n C extends RollupContext,\n> = {\n unsignedTx: S[\"UnsignedTransaction\"];\n sender: Uint8Array;\n signature: Uint8Array;\n rollup: Rollup<S, C>;\n};\n\nexport type TypeBuilder<S extends BaseTypeSpec, C extends RollupContext> = {\n unsignedTransaction: (\n context: UnsignedTransactionContext<S, C>,\n ) => Promise<S[\"UnsignedTransaction\"]>;\n\n transaction: (context: TransactionContext<S, C>) => Promise<S[\"Transaction\"]>;\n};\n\n/**\n * Arbitrary context that is associated with the rollup.\n */\nexport type RollupContext = Record<string, unknown>;\n\n/**\n * The configuration for a rollup client.\n */\nexport type RollupConfig<C extends RollupContext> = {\n /**\n * The base URL of the rollup full node API.\n */\n url?: string;\n /**\n * The Sovereign SDK client to use for the rollup.\n * If not provided, the default client will be used using {@link PartialRollupConfig.url}.\n */\n client: SovereignClient;\n /**\n * Creates the serializer instance to use for the rollup.\n *\n * This can be called more than once, for example if the chain hash changes (i.e a new rollup version)\n * is detected then it will be called again with the new rollup schema.\n */\n getSerializer: (schema: RollupSchema) => Serializer;\n /**\n * Arbitrary context that is associated with the rollup.\n */\n context: C;\n /**\n * The endpoint path for submitting transactions.\n * Defaults to \"/sequencer/txs\", the standard Sovereign SDK endpoint.\n * Can be overridden if your rollup is configured to expose non-standard endpoints in\n * order to support multiple different transaction encoding or authentication schemes.\n */\n txSubmissionEndpoint: string;\n};\n\n/**\n * The result of signing and submitting a transaction.\n *\n * @template Tx The type of the transaction\n */\nexport type TransactionResult<Tx> = {\n /**\n * The response from the sequencer.\n */\n response: SovereignClient.Sequencer.TxCreateResponse;\n /**\n * The transaction that was submitted.\n */\n transaction: Tx;\n};\n\n/**\n * The parameters for signing and submitting a transaction.\n */\nexport type SignerParams = {\n /**\n * The signer to use for signing the transaction.\n */\n signer: Signer;\n};\n\n/**\n * The parameters for calling executing a runtime call transaction.\n */\nexport type CallParams<S extends BaseTypeSpec> = {\n overrides?: DeepPartial<S[\"UnsignedTransaction\"]>;\n} & SignerParams;\n\n/**\n * A generic rollup client.\n *\n * @template S - The type specification for the rollup.\n * If not provided, the base type specification will be used which uses `any` for all types.\n * @template C - The context for the rollup.\n */\nexport class Rollup<S extends BaseTypeSpec, C extends RollupContext> {\n private readonly _config: RollupConfig<C>;\n private readonly _typeBuilder: TypeBuilder<S, C>;\n private _chainHash?: Uint8Array;\n private _serializer?: Serializer;\n\n /**\n * Creates a new rollup client.\n *\n * @param config - The configuration for the rollup client.\n * @param typeBuilder - The type builder for the rollup.\n */\n constructor(config: RollupConfig<C>, typeBuilder: TypeBuilder<S, C>) {\n this._config = config;\n this._typeBuilder = typeBuilder;\n }\n\n /**\n * Retrieve dedup information about the provided address.\n *\n * @param publicKey - The public key to dedup.\n * TODO: How to add param for generation explicitly\n */\n async dedup(publicKey: Uint8Array): Promise<S[\"Dedup\"]> {\n // for public key credential id is just its bytes representation\n const credentialId = bytesToHex(publicKey);\n const response = await this.rollup.addresses.dedup(credentialId);\n return response as S[\"Dedup\"];\n }\n\n /**\n * Submits a transaction to the rollup.\n *\n * The endpoint used for submission can be overridden via the options.path parameter.\n * If not specified, the rollup's configured txSubmissionEndpoint will be used.\n *\n * @param transaction - The transaction to submit.\n * @param {SovereignClient.RequestOptions} options - The options for the request.\n */\n async submitTransaction(\n transaction: S[\"Transaction\"],\n options?: SovereignClient.RequestOptions,\n ): Promise<SovereignClient.Sequencer.TxCreateResponse> {\n const serializer = await this.serializer();\n const serializedTx = serializer.serializeTx(transaction);\n // Stainless RequestOptions is generic internally, causing issues for `body` and `query`.\n // That's fine since we supply the `body` and transaction submission doesn't take query parameters.\n // So we hack around this by destructuring them out.\n const { body: _, query: __, path, ...requestOptions } = options || {};\n const txSubmissionEndpoint = path || this._config.txSubmissionEndpoint;\n\n return this.http\n .post<SovereignClient.Sequencer.TxCreateResponse>(txSubmissionEndpoint, {\n body: { body: Base64.fromUint8Array(serializedTx) },\n ...requestOptions,\n })\n .catch(async (e) => {\n if (isVersionMismatchError(e as APIError)) {\n const oldVersion = bytesToHex(await this.chainHash());\n const { schema, chain_hash: newVersion } = await this.rollup.schema();\n this._chainHash = hexToBytes(newVersion);\n this._serializer = this._config.getSerializer(schema);\n\n if (oldVersion !== newVersion) {\n throw new VersionMismatchError(\n \"Schema version mismatch when submitting transaction\",\n newVersion,\n oldVersion,\n );\n }\n }\n throw e;\n });\n }\n\n /**\n * Signs and submits a transaction to the rollup.\n * Utilizes the provided signer to sign the transaction.\n *\n * @param unsignedTx - The unsigned transaction to sign and submit.\n * @param {SignerParams} params - The params for signing and submitting the transaction.\n * @param {SovereignClient.RequestOptions} options - The options for the request.\n * @param endpoint - Optional endpoint override. If not specified, uses the rollup's configured txSubmissionEndpoint.\n */\n async signAndSubmitTransaction(\n unsignedTx: S[\"UnsignedTransaction\"],\n { signer }: SignerParams,\n options?: SovereignClient.RequestOptions,\n ): Promise<TransactionResult<S[\"Transaction\"]>> {\n const tx = await this.signTransaction(unsignedTx, signer);\n const result = await this.submitTransaction(tx, options);\n\n return { transaction: tx, response: result };\n }\n\n /**\n * Performs a runtime call transaction.\n * Utilizes the provided signer to sign the transaction.\n *\n * @param runtimeCall - The runtime message to call.\n * @param {CallParams<S>} params - The params for submitting a runtime call transaction.\n * @param {SovereignClient.RequestOptions} options - The options for the request.\n */\n async call(\n runtimeCall: S[\"RuntimeCall\"],\n { signer, overrides }: CallParams<S>,\n options?: SovereignClient.RequestOptions,\n ): Promise<TransactionResult<S[\"Transaction\"]>> {\n const context = {\n runtimeCall,\n rollup: this,\n overrides: overrides ?? ({} as DeepPartial<S[\"UnsignedTransaction\"]>),\n };\n const unsignedTx = await this._typeBuilder.unsignedTransaction(context);\n\n return this.signAndSubmitTransaction(\n unsignedTx,\n {\n signer,\n },\n options,\n );\n }\n\n /**\n * Prepares a runtime call by creating and signing a transaction without submitting it.\n * This is useful for scenarios where you need the signed transaction for later submission\n * or for analysis purposes.\n *\n * @param runtimeCall - The runtime message to prepare.\n * @param params - The parameters for preparing the call.\n * @param params.signer - The signer to use for signing the transaction.\n * @param params.overrides - Optional overrides for the unsigned transaction.\n * @returns A promise that resolves to the signed transaction.\n */\n async prepareCall(\n runtimeCall: S[\"RuntimeCall\"],\n { signer, overrides }: CallParams<S>,\n ): Promise<S[\"Transaction\"]> {\n const context = {\n runtimeCall,\n rollup: this,\n overrides: overrides ?? ({} as DeepPartial<S[\"UnsignedTransaction\"]>),\n };\n const unsignedTx = await this._typeBuilder.unsignedTransaction(context);\n return this.signTransaction(unsignedTx, signer);\n }\n\n /**\n * Signs an unsigned transaction using the provided signer.\n * Creates a signature by combining the serialized unsigned transaction with the chain hash,\n * then constructs a fully signed transaction.\n *\n * @param unsignedTx - The unsigned transaction to sign.\n * @param signer - The signer to use for signing the transaction.\n * @returns A promise that resolves to the signed transaction.\n */\n async signTransaction(\n unsignedTx: S[\"UnsignedTransaction\"],\n signer: Signer,\n ): Promise<S[\"Transaction\"]> {\n const serializer = await this.serializer();\n const serializedUnsignedTx = serializer.serializeUnsignedTx(unsignedTx);\n const chainHash = await this.chainHash();\n const signature = await signer.sign(\n new Uint8Array([...serializedUnsignedTx, ...chainHash]),\n );\n const publicKey = await signer.publicKey();\n const context = {\n unsignedTx,\n sender: publicKey,\n signature,\n rollup: this,\n };\n return this._typeBuilder.transaction(context);\n }\n\n /**\n * Create a subscription to events emitted over websockets by the rollup.\n */\n subscribe<T extends keyof SubscriptionToCallbackMap>(\n type: T,\n callback: SubscriptionToCallbackMap[T],\n ): Subscription {\n return createSubscription(type, callback, this.http);\n }\n\n /**\n * Performs a healthcheck against the rollup to determine if it is currently healthy.\n *\n * @param timeout - Request timeout in milliseconds.\n * @returns `true` if the rollup is considered healthy otherwise `false`.\n */\n async healthcheck(timeout = 5000): Promise<boolean> {\n try {\n await this.http.get(\"/healthcheck\", { timeout, maxRetries: 1 });\n return true;\n } catch (e) {\n return !(e instanceof SovereignClient.APIConnectionError);\n }\n }\n\n /**\n * A ledger client that can be used to query the ledger.\n */\n get ledger(): SovereignClient.Ledger {\n return this.http.ledger;\n }\n\n /**\n * A sequencer client that can be used to submit transactions & batches to the rollup.\n */\n get sequencer(): SovereignClient.Sequencer {\n return this.http.sequencer;\n }\n\n /**\n * A rollup client that can be used to perform operations on the rollup.\n */\n get rollup(): SovereignClient.Rollup {\n return this.http.rollup;\n }\n\n /**\n * A client that can be used to perform HTTP requests to the Sovereign API.\n * This can be used as an escape hatch to execute arbitrary requests to the Sovereign API\n * if the operation is not supported by `ledger`, `sequencer`, or `rollup` clients.\n */\n get http(): SovereignClient {\n return this._config.client;\n }\n\n /**\n * The serializer for the rollup.\n * Can be used to serialize transactions, runtime calls, etc.\n */\n async serializer(): Promise<Serializer> {\n if (this._serializer) return this._serializer;\n const { schema } = await this.rollup.schema();\n this._serializer = this._config.getSerializer(schema);\n return this._serializer;\n }\n\n /**\n * The context for the rollup.\n */\n get context(): C {\n return this._config.context;\n }\n\n async chainHash(): Promise<Uint8Array> {\n if (this._chainHash) return this._chainHash;\n const { chain_hash } = await this.rollup.schema();\n this._chainHash = hexToBytes(chain_hash);\n return this._chainHash;\n }\n}\n\nfunction isVersionMismatchError(e: APIError): boolean {\n if (\n // biome-ignore lint/suspicious/noExplicitAny: yolo\n (e.error as any)?.details?.error?.includes(\"Signature verification failed\")\n ) {\n return true;\n }\n\n return false;\n}\n","/**\n * Base error class for Sovereign SDK Web3.\n */\nexport class SovereignError extends Error {\n constructor(message: string) {\n super(message);\n\n this.name = this.constructor.name;\n this.stack = new Error().stack;\n }\n}\n\nexport class InvalidRollupConfigError extends SovereignError {}\n\nexport class VersionMismatchError extends SovereignError {\n public readonly newVersion: string;\n public readonly currentVersion: string;\n public readonly retryable: boolean;\n\n constructor(message: string, newVersion: string, currentVersion: string) {\n super(message);\n\n this.newVersion = newVersion;\n this.currentVersion = currentVersion;\n this.retryable = newVersion !== currentVersion;\n }\n}\n\nexport class SchemaError extends SovereignError {\n public readonly schema: object;\n public readonly reason: string;\n\n constructor(message: string, reason: string, schema: object) {\n super(`${message}: ${reason}`);\n\n this.reason = reason;\n this.schema = schema;\n }\n}\n","import type SovereignSDK from \"@sovereign-sdk/client\";\nimport IsoWebSocket from \"isomorphic-ws\";\nimport { WebSocket } from \"partysocket\";\nimport { SovereignError } from \"./errors\";\n\ntype Url = string;\n\nexport function httpToWebSocket(url: string) {\n return url.replace(/^http(s?):\\/\\//, (_, s) => `ws${s}://`);\n}\n\nexport type Subscription = {\n /** Url providing the subscription. */\n url: Url;\n /** Unsubscribe this subscription. */\n unsubscribe: () => void;\n};\n\ntype SubscriptionEntry = {\n websocket: WebSocket;\n // biome-ignore lint/suspicious/noExplicitAny: allow\n callbacks: Array<(...args: any[]) => void>;\n};\n\nexport const _subscriptions: Record<Url, SubscriptionEntry> = {};\n\n/** Subscribe to the provided websocket url & call the provided callback on messages received. */\nexport function subscribe(\n url: Url,\n // biome-ignore lint/suspicious/noExplicitAny: allow\n callback: (...args: any[]) => void,\n): Subscription {\n const subscription = _subscriptions[url];\n\n if (!subscription) {\n const websocket = new WebSocket(url, [], { WebSocket: IsoWebSocket });\n // bun compatibility: https://github.com/partykit/partykit/issues/774\n websocket.binaryType = \"arraybuffer\";\n\n _subscriptions[url] = {\n websocket,\n callbacks: [callback],\n };\n\n websocket.addEventListener(\"message\", (message) => {\n const data = JSON.parse(message.data);\n const callbacks = _subscriptions[url]?.callbacks;\n if (callbacks) {\n for (const cb of callbacks) {\n cb(data);\n }\n }\n });\n websocket.addEventListener(\"error\", (e) =>\n console.log(\"Websocket error\", e),\n );\n } else {\n subscription.callbacks.push(callback);\n }\n\n const callbackIndex = _subscriptions[url]?.callbacks.length - 1;\n\n return {\n get url() {\n return url;\n },\n unsubscribe() {\n const subscription = _subscriptions[url];\n\n if (!subscription) {\n return;\n }\n\n subscription.callbacks.splice(callbackIndex, 1);\n\n if (!subscription.callbacks.length) {\n subscription.websocket.close();\n delete _subscriptions[url];\n }\n },\n };\n}\n\nexport type EventPayload = {\n tx_hash: string;\n type: \"event\";\n number: number;\n key: string;\n value: Record<string, unknown>;\n module: {\n type: \"moduleRef\";\n name: string;\n };\n};\n\nexport interface SubscriptionToCallbackMap {\n events: (event: EventPayload) => Promise<void>;\n}\n\nexport function createSubscription<T extends keyof SubscriptionToCallbackMap>(\n subscription: T,\n callback: SubscriptionToCallbackMap[T],\n client: SovereignSDK,\n): Subscription {\n switch (subscription) {\n case \"events\": {\n const url = client.buildURL(\"/sequencer/events/ws\", {});\n return subscribe(\n httpToWebSocket(url),\n callback as SubscriptionToCallbackMap[\"events\"],\n );\n }\n default:\n throw new SovereignError(`Invalid subscription type '${subscription}'`);\n }\n}\n","import SovereignClient from \"@sovereign-sdk/client\";\nimport { JsSerializer } from \"@sovereign-sdk/serializers\";\nimport type {\n Transaction,\n TxDetails,\n UnsignedTransaction,\n} from \"@sovereign-sdk/types\";\nimport { bytesToHex } from \"@sovereign-sdk/utils\";\nimport type { DeepPartial } from \"../utils\";\nimport {\n Rollup,\n type RollupConfig,\n type SignerParams,\n type TransactionContext,\n type TypeBuilder,\n type UnsignedTransactionContext,\n} from \"./rollup\";\n\nexport type Dedup = {\n nonce: number;\n};\n\nexport type StandardRollupContext = {\n defaultTxDetails: TxDetails;\n};\n\nexport type StandardRollupSpec<RuntimeCall> = {\n UnsignedTransaction: UnsignedTransaction<RuntimeCall>;\n Transaction: Transaction<RuntimeCall>;\n RuntimeCall: RuntimeCall;\n Dedup: Dedup;\n};\n\nconst useOrFetchUniqueness = async <S extends StandardRollupSpec<unknown>>({\n overrides,\n}: Omit<\n UnsignedTransactionContext<S, StandardRollupContext>,\n \"runtimeCall\"\n>) => {\n if (overrides?.uniqueness) {\n return overrides.uniqueness;\n }\n\n return { generation: Date.now() };\n};\n\nexport function standardTypeBuilder<\n S extends StandardRollupSpec<unknown>,\n>(): TypeBuilder<S, StandardRollupContext> {\n return {\n async unsignedTransaction(\n context: UnsignedTransactionContext<S, StandardRollupContext>,\n ) {\n const { rollup, runtimeCall } = context;\n const { uniqueness: _, ...overrides } = context.overrides;\n const uniqueness = await useOrFetchUniqueness(context);\n const details: TxDetails = {\n ...rollup.context.defaultTxDetails,\n ...overrides.details,\n };\n\n return {\n runtime_call: runtimeCall,\n uniqueness,\n details,\n } as S[\"UnsignedTransaction\"];\n },\n async transaction({\n sender,\n signature,\n unsignedTx,\n }: TransactionContext<S, StandardRollupContext>) {\n return {\n V0: {\n pub_key: bytesToHex(sender),\n signature: bytesToHex(signature),\n ...unsignedTx,\n },\n };\n },\n };\n}\n\n/**\n * The parameters for simulating a runtime call transaction.\n */\nexport type SimulateParams = Omit<\n SovereignClient.RollupSimulateParams,\n \"call\" | \"sender\"\n> &\n SignerParams;\n\nexport class StandardRollup<RuntimeCall> extends Rollup<\n StandardRollupSpec<RuntimeCall>,\n StandardRollupContext\n> {\n /**\n * Simulates a runtime call transaction.\n *\n * This method can be useful to estimate the gas cost of a runtime call transaction.\n *\n * @param runtimeMessage - The runtime message to call.\n */\n async simulate(\n runtimeMessage: StandardRollupSpec<RuntimeCall>[\"RuntimeCall\"],\n { signer }: SimulateParams,\n ): Promise<SovereignClient.Rollup.RollupSimulateResponse> {\n const publicKey = await signer.publicKey();\n const sender = bytesToHex(publicKey);\n const call = runtimeMessage as { [key: string]: unknown };\n\n return this.rollup.simulate({ sender, call });\n }\n}\n\nexport const DEFAULT_TX_DETAILS: Omit<TxDetails, \"chain_id\"> = {\n max_priority_fee_bips: 0,\n max_fee: \"100000000\",\n gas_limit: null,\n};\n\nasync function buildContext<C extends StandardRollupContext>(\n client: SovereignClient,\n context?: DeepPartial<C>,\n): Promise<C> {\n const defaultTxDetails = {\n ...DEFAULT_TX_DETAILS,\n ...context?.defaultTxDetails,\n };\n\n if (!defaultTxDetails.chain_id) {\n const { chain_id } = await client.rollup.constants();\n\n defaultTxDetails.chain_id = chain_id;\n }\n\n return {\n defaultTxDetails,\n } as C;\n}\n\nexport async function createStandardRollup<\n RuntimeCall,\n C extends StandardRollupContext = StandardRollupContext,\n>(\n rollupConfig?: Partial<RollupConfig<DeepPartial<C>>>,\n typeBuilderOverrides?: Partial<\n TypeBuilder<StandardRollupSpec<RuntimeCall>, C>\n >,\n) {\n const config = rollupConfig ?? {};\n const client = config.client ?? new SovereignClient({ baseURL: config.url });\n const getSerializer =\n config.getSerializer ?? ((schema) => new JsSerializer(schema));\n const context = await buildContext<C>(client, config.context);\n\n // Default to the standard transaction submission endpoint\n const txSubmissionEndpoint = config.txSubmissionEndpoint ?? \"/sequencer/txs\";\n\n return new StandardRollup<RuntimeCall>(\n {\n ...config,\n client,\n getSerializer,\n context,\n txSubmissionEndpoint,\n },\n {\n ...standardTypeBuilder(),\n ...typeBuilderOverrides,\n },\n );\n}\n"],"mappings":"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","names":["SovereignClient","import_utils","IsoWebSocket","_a","subscription","SovereignClient","import_client","import_utils","_a","SovereignClient","SovereignClient"]}
package/dist/index.mjs CHANGED
@@ -174,17 +174,22 @@ var Rollup = class {
174
174
  /**
175
175
  * Retrieve dedup information about the provided address.
176
176
  *
177
- * @param address - The public key to dedup.
177
+ * @param publicKey - The public key to dedup.
178
+ * TODO: How to add param for generation explicitly
178
179
  */
179
- dedup(address) {
180
+ dedup(publicKey) {
180
181
  return __async(this, null, function* () {
181
- const response = yield this.rollup.addresses.dedup(bytesToHex(address));
182
+ const credentialId = bytesToHex(publicKey);
183
+ const response = yield this.rollup.addresses.dedup(credentialId);
182
184
  return response;
183
185
  });
184
186
  }
185
187
  /**
186
188
  * Submits a transaction to the rollup.
187
189
  *
190
+ * The endpoint used for submission can be overridden via the options.path parameter.
191
+ * If not specified, the rollup's configured txSubmissionEndpoint will be used.
192
+ *
188
193
  * @param transaction - The transaction to submit.
189
194
  * @param {SovereignClient.RequestOptions} options - The options for the request.
190
195
  */
@@ -192,10 +197,14 @@ var Rollup = class {
192
197
  return __async(this, null, function* () {
193
198
  const serializer = yield this.serializer();
194
199
  const serializedTx = serializer.serializeTx(transaction);
195
- return this.sequencer.txs.create({ body: Base64.fromUint8Array(serializedTx) }, options).catch((e) => __async(this, null, function* () {
200
+ const _a = options || {}, { body: _, query: __, path } = _a, requestOptions = __objRest(_a, ["body", "query", "path"]);
201
+ const txSubmissionEndpoint = path || this._config.txSubmissionEndpoint;
202
+ return this.http.post(txSubmissionEndpoint, __spreadValues({
203
+ body: { body: Base64.fromUint8Array(serializedTx) }
204
+ }, requestOptions)).catch((e) => __async(this, null, function* () {
196
205
  if (isVersionMismatchError(e)) {
197
206
  const oldVersion = bytesToHex(yield this.chainHash());
198
- const { schema, chain_hash: newVersion } = yield this.rollup.schema.retrieve();
207
+ const { schema, chain_hash: newVersion } = yield this.rollup.schema();
199
208
  this._chainHash = hexToBytes(newVersion);
200
209
  this._serializer = this._config.getSerializer(schema);
201
210
  if (oldVersion !== newVersion) {
@@ -217,23 +226,11 @@ var Rollup = class {
217
226
  * @param unsignedTx - The unsigned transaction to sign and submit.
218
227
  * @param {SignerParams} params - The params for signing and submitting the transaction.
219
228
  * @param {SovereignClient.RequestOptions} options - The options for the request.
229
+ * @param endpoint - Optional endpoint override. If not specified, uses the rollup's configured txSubmissionEndpoint.
220
230
  */
221
231
  signAndSubmitTransaction(_0, _1, _2) {
222
232
  return __async(this, arguments, function* (unsignedTx, { signer }, options) {
223
- const serializer = yield this.serializer();
224
- const serializedUnsignedTx = serializer.serializeUnsignedTx(unsignedTx);
225
- const chainHash = yield this.chainHash();
226
- const signature = yield signer.sign(
227
- new Uint8Array([...serializedUnsignedTx, ...chainHash])
228
- );
229
- const publicKey = yield signer.publicKey();
230
- const context = {
231
- unsignedTx,
232
- sender: publicKey,
233
- signature,
234
- rollup: this
235
- };
236
- const tx = yield this._typeBuilder.transaction(context);
233
+ const tx = yield this.signTransaction(unsignedTx, signer);
237
234
  const result = yield this.submitTransaction(tx, options);
238
235
  return { transaction: tx, response: result };
239
236
  });
@@ -263,6 +260,55 @@ var Rollup = class {
263
260
  );
264
261
  });
265
262
  }
263
+ /**
264
+ * Prepares a runtime call by creating and signing a transaction without submitting it.
265
+ * This is useful for scenarios where you need the signed transaction for later submission
266
+ * or for analysis purposes.
267
+ *
268
+ * @param runtimeCall - The runtime message to prepare.
269
+ * @param params - The parameters for preparing the call.
270
+ * @param params.signer - The signer to use for signing the transaction.
271
+ * @param params.overrides - Optional overrides for the unsigned transaction.
272
+ * @returns A promise that resolves to the signed transaction.
273
+ */
274
+ prepareCall(_0, _1) {
275
+ return __async(this, arguments, function* (runtimeCall, { signer, overrides }) {
276
+ const context = {
277
+ runtimeCall,
278
+ rollup: this,
279
+ overrides: overrides != null ? overrides : {}
280
+ };
281
+ const unsignedTx = yield this._typeBuilder.unsignedTransaction(context);
282
+ return this.signTransaction(unsignedTx, signer);
283
+ });
284
+ }
285
+ /**
286
+ * Signs an unsigned transaction using the provided signer.
287
+ * Creates a signature by combining the serialized unsigned transaction with the chain hash,
288
+ * then constructs a fully signed transaction.
289
+ *
290
+ * @param unsignedTx - The unsigned transaction to sign.
291
+ * @param signer - The signer to use for signing the transaction.
292
+ * @returns A promise that resolves to the signed transaction.
293
+ */
294
+ signTransaction(unsignedTx, signer) {
295
+ return __async(this, null, function* () {
296
+ const serializer = yield this.serializer();
297
+ const serializedUnsignedTx = serializer.serializeUnsignedTx(unsignedTx);
298
+ const chainHash = yield this.chainHash();
299
+ const signature = yield signer.sign(
300
+ new Uint8Array([...serializedUnsignedTx, ...chainHash])
301
+ );
302
+ const publicKey = yield signer.publicKey();
303
+ const context = {
304
+ unsignedTx,
305
+ sender: publicKey,
306
+ signature,
307
+ rollup: this
308
+ };
309
+ return this._typeBuilder.transaction(context);
310
+ });
311
+ }
266
312
  /**
267
313
  * Create a subscription to events emitted over websockets by the rollup.
268
314
  */
@@ -318,7 +364,7 @@ var Rollup = class {
318
364
  serializer() {
319
365
  return __async(this, null, function* () {
320
366
  if (this._serializer) return this._serializer;
321
- const { schema } = yield this.rollup.schema.retrieve();
367
+ const { schema } = yield this.rollup.schema();
322
368
  this._serializer = this._config.getSerializer(schema);
323
369
  return this._serializer;
324
370
  });
@@ -332,7 +378,7 @@ var Rollup = class {
332
378
  chainHash() {
333
379
  return __async(this, null, function* () {
334
380
  if (this._chainHash) return this._chainHash;
335
- const { chain_hash } = yield this.rollup.schema.retrieve();
381
+ const { chain_hash } = yield this.rollup.schema();
336
382
  this._chainHash = hexToBytes(chain_hash);
337
383
  return this._chainHash;
338
384
  });
@@ -383,16 +429,10 @@ function standardTypeBuilder() {
383
429
  unsignedTx
384
430
  }) {
385
431
  return {
386
- versioned_tx: {
387
- V0: __spreadValues({
388
- pub_key: {
389
- pub_key: sender
390
- },
391
- signature: {
392
- msg_sig: signature
393
- }
394
- }, unsignedTx)
395
- }
432
+ V0: __spreadValues({
433
+ pub_key: bytesToHex2(sender),
434
+ signature: bytesToHex2(signature)
435
+ }, unsignedTx)
396
436
  };
397
437
  });
398
438
  }
@@ -407,29 +447,11 @@ var StandardRollup = class extends Rollup {
407
447
  * @param runtimeMessage - The runtime message to call.
408
448
  */
409
449
  simulate(_0, _1) {
410
- return __async(this, arguments, function* (runtimeMessage, { signer, txDetails, generation: overrideGeneration }) {
411
- const serializer = yield this.serializer();
412
- const runtimeCall = serializer.serializeRuntimeCall(runtimeMessage);
450
+ return __async(this, arguments, function* (runtimeMessage, { signer }) {
413
451
  const publicKey = yield signer.publicKey();
414
- const uniqueness = yield useOrFetchUniqueness({
415
- rollup: this,
416
- overrides: {
417
- uniqueness: overrideGeneration ? { generation: overrideGeneration } : void 0
418
- }
419
- });
420
- const generation = "generation" in uniqueness ? uniqueness.generation : uniqueness.nonce;
421
- const response = yield this.rollup.simulate({
422
- body: {
423
- details: __spreadProps(__spreadValues({}, txDetails), {
424
- // simulate needs this field as `undefined` currently
425
- gas_limit: txDetails.gas_limit || void 0
426
- }),
427
- encoded_call_message: bytesToHex2(runtimeCall),
428
- generation,
429
- sender_pub_key: bytesToHex2(publicKey)
430
- }
431
- });
432
- return response;
452
+ const sender = bytesToHex2(publicKey);
453
+ const call = runtimeMessage;
454
+ return this.rollup.simulate({ sender, call });
433
455
  });
434
456
  }
435
457
  };
@@ -442,7 +464,7 @@ function buildContext(client, context) {
442
464
  return __async(this, null, function* () {
443
465
  const defaultTxDetails = __spreadValues(__spreadValues({}, DEFAULT_TX_DETAILS), context == null ? void 0 : context.defaultTxDetails);
444
466
  if (!defaultTxDetails.chain_id) {
445
- const { chain_id } = yield client.rollup.constants.retrieve();
467
+ const { chain_id } = yield client.rollup.constants();
446
468
  defaultTxDetails.chain_id = chain_id;
447
469
  }
448
470
  return {
@@ -452,13 +474,19 @@ function buildContext(client, context) {
452
474
  }
453
475
  function createStandardRollup(rollupConfig, typeBuilderOverrides) {
454
476
  return __async(this, null, function* () {
455
- var _a, _b;
477
+ var _a, _b, _c;
456
478
  const config = rollupConfig != null ? rollupConfig : {};
457
479
  const client = (_a = config.client) != null ? _a : new SovereignClient2({ baseURL: config.url });
458
480
  const getSerializer = (_b = config.getSerializer) != null ? _b : (schema) => new JsSerializer(schema);
459
481
  const context = yield buildContext(client, config.context);
482
+ const txSubmissionEndpoint = (_c = config.txSubmissionEndpoint) != null ? _c : "/sequencer/txs";
460
483
  return new StandardRollup(
461
- __spreadProps(__spreadValues({}, config), { client, getSerializer, context }),
484
+ __spreadProps(__spreadValues({}, config), {
485
+ client,
486
+ getSerializer,
487
+ context,
488
+ txSubmissionEndpoint
489
+ }),
462
490
  __spreadValues(__spreadValues({}, standardTypeBuilder()), typeBuilderOverrides)
463
491
  );
464
492
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/addresses.ts","../src/rollup/rollup.ts","../src/errors.ts","../src/subscriptions.ts","../src/rollup/standard-rollup.ts","../src/index.ts"],"sourcesContent":["import { type HexString, ensureBytes } from \"@sovereign-sdk/utils\";\nimport { bech32m } from \"bech32\";\n\n/**\n * Encodes a public key as a bech32m address with the given human-readable part (hrp).\n *\n * @param publicKey - The public key to encode, as a hex string or Uint8Array.\n * @param hrp - The human-readable part for the bech32m address (e.g., \"sov\").\n * @param concatPublicKey - Optional. If provided, only the first `concatPublicKey` bytes of the public key are used.\n * @returns The bech32m-encoded address as a string.\n * @throws {Error} If the public key is not a valid hex string or Uint8Array.\n */\nexport function addressFromPublicKey(\n publicKey: HexString | Uint8Array,\n hrp: string,\n concatPublicKey = 28,\n): string {\n let publicKeyBytes = ensureBytes(publicKey);\n\n if (concatPublicKey !== publicKey.length) {\n publicKeyBytes = publicKeyBytes.slice(0, concatPublicKey);\n }\n\n const words = bech32m.toWords(publicKeyBytes);\n return bech32m.encode(hrp, words);\n}\n","import SovereignClient from \"@sovereign-sdk/client\";\nimport type { APIError } from \"@sovereign-sdk/client\";\nimport type { RollupSchema, Serializer } from \"@sovereign-sdk/serializers\";\nimport type { Signer } from \"@sovereign-sdk/signers\";\nimport { bytesToHex, hexToBytes } from \"@sovereign-sdk/utils\";\nimport { Base64 } from \"js-base64\";\nimport { VersionMismatchError } from \"../errors\";\nimport {\n type Subscription,\n type SubscriptionToCallbackMap,\n createSubscription,\n} from \"../subscriptions\";\nimport type { BaseTypeSpec } from \"../type-spec\";\nimport type { DeepPartial } from \"../utils\";\n\nexport type UnsignedTransactionContext<\n S extends BaseTypeSpec,\n C extends RollupContext,\n> = {\n runtimeCall: S[\"RuntimeCall\"];\n // Provides the ability to override the generation data instead of retrieving it automatically.\n overrides: DeepPartial<S[\"UnsignedTransaction\"]>;\n rollup: Rollup<S, C>;\n};\n\nexport type TransactionContext<\n S extends BaseTypeSpec,\n C extends RollupContext,\n> = {\n unsignedTx: S[\"UnsignedTransaction\"];\n sender: Uint8Array;\n signature: Uint8Array;\n rollup: Rollup<S, C>;\n};\n\nexport type TypeBuilder<S extends BaseTypeSpec, C extends RollupContext> = {\n unsignedTransaction: (\n context: UnsignedTransactionContext<S, C>,\n ) => Promise<S[\"UnsignedTransaction\"]>;\n\n transaction: (context: TransactionContext<S, C>) => Promise<S[\"Transaction\"]>;\n};\n\n/**\n * Arbitrary context that is associated with the rollup.\n */\nexport type RollupContext = Record<string, unknown>;\n\n/**\n * The configuration for a rollup client.\n */\nexport type RollupConfig<C extends RollupContext> = {\n /**\n * The base URL of the rollup full node API.\n */\n url?: string;\n /**\n * The Sovereign SDK client to use for the rollup.\n * If not provided, the default client will be used using {@link PartialRollupConfig.url}.\n */\n client: SovereignClient;\n /**\n * Creates the serializer instance to use for the rollup.\n *\n * This can be called more than once, for example if the chain hash changes (i.e a new rollup version)\n * is detected then it will be called again with the new rollup schema.\n */\n getSerializer: (schema: RollupSchema) => Serializer;\n /**\n * Arbitrary context that is associated with the rollup.\n */\n context: C;\n};\n\n/**\n * The result of signing and submitting a transaction.\n *\n * @template Tx The type of the transaction\n */\nexport type TransactionResult<Tx> = {\n /**\n * The response from the sequencer.\n */\n response: SovereignClient.Sequencer.TxCreateResponse;\n /**\n * The transaction that was submitted.\n */\n transaction: Tx;\n};\n\n/**\n * The parameters for signing and submitting a transaction.\n */\nexport type SignerParams = {\n /**\n * The signer to use for signing the transaction.\n */\n signer: Signer;\n};\n\n/**\n * The parameters for calling executing a runtime call transaction.\n */\nexport type CallParams<S extends BaseTypeSpec> = {\n overrides?: DeepPartial<S[\"UnsignedTransaction\"]>;\n} & SignerParams;\n\n/**\n * A generic rollup client.\n *\n * @template S - The type specification for the rollup.\n * If not provided, the base type specification will be used which uses `any` for all types.\n * @template C - The context for the rollup.\n */\nexport class Rollup<S extends BaseTypeSpec, C extends RollupContext> {\n private readonly _config: RollupConfig<C>;\n private readonly _typeBuilder: TypeBuilder<S, C>;\n private _chainHash?: Uint8Array;\n private _serializer?: Serializer;\n\n /**\n * Creates a new rollup client.\n *\n * @param config - The configuration for the rollup client.\n * @param typeBuilder - The type builder for the rollup.\n */\n constructor(config: RollupConfig<C>, typeBuilder: TypeBuilder<S, C>) {\n this._config = config;\n this._typeBuilder = typeBuilder;\n }\n\n /**\n * Retrieve dedup information about the provided address.\n *\n * @param address - The public key to dedup.\n */\n async dedup(address: Uint8Array): Promise<S[\"Dedup\"]> {\n const response = await this.rollup.addresses.dedup(bytesToHex(address));\n return response as S[\"Dedup\"];\n }\n\n /**\n * Submits a transaction to the rollup.\n *\n * @param transaction - The transaction to submit.\n * @param {SovereignClient.RequestOptions} options - The options for the request.\n */\n async submitTransaction(\n transaction: S[\"Transaction\"],\n options?: SovereignClient.RequestOptions,\n ): Promise<SovereignClient.Sequencer.TxCreateResponse> {\n const serializer = await this.serializer();\n const serializedTx = serializer.serializeTx(transaction);\n\n return this.sequencer.txs\n .create({ body: Base64.fromUint8Array(serializedTx) }, options)\n .catch(async (e) => {\n if (isVersionMismatchError(e as APIError)) {\n const oldVersion = bytesToHex(await this.chainHash());\n const { schema, chain_hash: newVersion } =\n await this.rollup.schema.retrieve();\n this._chainHash = hexToBytes(newVersion);\n this._serializer = this._config.getSerializer(schema);\n\n if (oldVersion !== newVersion) {\n throw new VersionMismatchError(\n \"Schema version mismatch when submitting transaction\",\n newVersion,\n oldVersion,\n );\n }\n }\n throw e;\n });\n }\n\n /**\n * Signs and submits a transaction to the rollup.\n * Utilizes the provided signer to sign the transaction.\n *\n * @param unsignedTx - The unsigned transaction to sign and submit.\n * @param {SignerParams} params - The params for signing and submitting the transaction.\n * @param {SovereignClient.RequestOptions} options - The options for the request.\n */\n async signAndSubmitTransaction(\n unsignedTx: S[\"UnsignedTransaction\"],\n { signer }: SignerParams,\n options?: SovereignClient.RequestOptions,\n ): Promise<TransactionResult<S[\"Transaction\"]>> {\n const serializer = await this.serializer();\n const serializedUnsignedTx = serializer.serializeUnsignedTx(unsignedTx);\n const chainHash = await this.chainHash();\n const signature = await signer.sign(\n new Uint8Array([...serializedUnsignedTx, ...chainHash]),\n );\n const publicKey = await signer.publicKey();\n const context = {\n unsignedTx,\n sender: publicKey,\n signature,\n rollup: this,\n };\n const tx = await this._typeBuilder.transaction(context);\n const result = await this.submitTransaction(tx, options);\n\n return { transaction: tx, response: result };\n }\n\n /**\n * Performs a runtime call transaction.\n * Utilizes the provided signer to sign the transaction.\n *\n * @param runtimeCall - The runtime message to call.\n * @param {CallParams<S>} params - The params for submitting a runtime call transaction.\n * @param {SovereignClient.RequestOptions} options - The options for the request.\n */\n async call(\n runtimeCall: S[\"RuntimeCall\"],\n { signer, overrides }: CallParams<S>,\n options?: SovereignClient.RequestOptions,\n ): Promise<TransactionResult<S[\"Transaction\"]>> {\n const context = {\n runtimeCall,\n rollup: this,\n overrides: overrides ?? ({} as DeepPartial<S[\"UnsignedTransaction\"]>),\n };\n const unsignedTx = await this._typeBuilder.unsignedTransaction(context);\n\n return this.signAndSubmitTransaction(\n unsignedTx,\n {\n signer,\n },\n options,\n );\n }\n\n /**\n * Create a subscription to events emitted over websockets by the rollup.\n */\n subscribe<T extends keyof SubscriptionToCallbackMap>(\n type: T,\n callback: SubscriptionToCallbackMap[T],\n ): Subscription {\n return createSubscription(type, callback, this.http);\n }\n\n /**\n * Performs a healthcheck against the rollup to determine if it is currently healthy.\n *\n * @param timeout - Request timeout in milliseconds.\n * @returns `true` if the rollup is considered healthy otherwise `false`.\n */\n async healthcheck(timeout = 5000): Promise<boolean> {\n try {\n await this.http.get(\"/healthcheck\", { timeout, maxRetries: 1 });\n return true;\n } catch (e) {\n return !(e instanceof SovereignClient.APIConnectionError);\n }\n }\n\n /**\n * A ledger client that can be used to query the ledger.\n */\n get ledger(): SovereignClient.Ledger {\n return this.http.ledger;\n }\n\n /**\n * A sequencer client that can be used to submit transactions & batches to the rollup.\n */\n get sequencer(): SovereignClient.Sequencer {\n return this.http.sequencer;\n }\n\n /**\n * A rollup client that can be used to perform operations on the rollup.\n */\n get rollup(): SovereignClient.Rollup {\n return this.http.rollup;\n }\n\n /**\n * A client that can be used to perform HTTP requests to the Sovereign API.\n * This can be used as an escape hatch to execute arbitrary requests to the Sovereign API\n * if the operation is not supported by `ledger`, `sequencer`, or `rollup` clients.\n */\n get http(): SovereignClient {\n return this._config.client;\n }\n\n /**\n * The serializer for the rollup.\n * Can be used to serialize transactions, runtime calls, etc.\n */\n async serializer(): Promise<Serializer> {\n if (this._serializer) return this._serializer;\n const { schema } = await this.rollup.schema.retrieve();\n this._serializer = this._config.getSerializer(schema);\n return this._serializer;\n }\n\n /**\n * The context for the rollup.\n */\n get context(): C {\n return this._config.context;\n }\n\n async chainHash(): Promise<Uint8Array> {\n if (this._chainHash) return this._chainHash;\n const { chain_hash } = await this.rollup.schema.retrieve();\n this._chainHash = hexToBytes(chain_hash);\n return this._chainHash;\n }\n}\n\nfunction isVersionMismatchError(e: APIError): boolean {\n if (\n // biome-ignore lint/suspicious/noExplicitAny: yolo\n (e.error as any)?.details?.error?.includes(\"Signature verification failed\")\n ) {\n return true;\n }\n\n return false;\n}\n","/**\n * Base error class for Sovereign SDK Web3.\n */\nexport class SovereignError extends Error {\n constructor(message: string) {\n super(message);\n\n this.name = this.constructor.name;\n this.stack = new Error().stack;\n }\n}\n\nexport class InvalidRollupConfigError extends SovereignError {}\n\nexport class VersionMismatchError extends SovereignError {\n public readonly newVersion: string;\n public readonly currentVersion: string;\n public readonly retryable: boolean;\n\n constructor(message: string, newVersion: string, currentVersion: string) {\n super(message);\n\n this.newVersion = newVersion;\n this.currentVersion = currentVersion;\n this.retryable = newVersion !== currentVersion;\n }\n}\n\nexport class SchemaError extends SovereignError {\n public readonly schema: object;\n public readonly reason: string;\n\n constructor(message: string, reason: string, schema: object) {\n super(`${message}: ${reason}`);\n\n this.reason = reason;\n this.schema = schema;\n }\n}\n","import type SovereignSDK from \"@sovereign-sdk/client\";\nimport IsoWebSocket from \"isomorphic-ws\";\nimport { WebSocket } from \"partysocket\";\nimport { SovereignError } from \"./errors\";\n\ntype Url = string;\n\nexport function httpToWebSocket(url: string) {\n return url.replace(/^http(s?):\\/\\//, (_, s) => `ws${s}://`);\n}\n\nexport type Subscription = {\n /** Url providing the subscription. */\n url: Url;\n /** Unsubscribe this subscription. */\n unsubscribe: () => void;\n};\n\ntype SubscriptionEntry = {\n websocket: WebSocket;\n // biome-ignore lint/suspicious/noExplicitAny: allow\n callbacks: Array<(...args: any[]) => void>;\n};\n\nexport const _subscriptions: Record<Url, SubscriptionEntry> = {};\n\n/** Subscribe to the provided websocket url & call the provided callback on messages received. */\nexport function subscribe(\n url: Url,\n // biome-ignore lint/suspicious/noExplicitAny: allow\n callback: (...args: any[]) => void,\n): Subscription {\n const subscription = _subscriptions[url];\n\n if (!subscription) {\n const websocket = new WebSocket(url, [], { WebSocket: IsoWebSocket });\n // bun compatibility: https://github.com/partykit/partykit/issues/774\n websocket.binaryType = \"arraybuffer\";\n\n _subscriptions[url] = {\n websocket,\n callbacks: [callback],\n };\n\n websocket.addEventListener(\"message\", (message) => {\n const data = JSON.parse(message.data);\n const callbacks = _subscriptions[url]?.callbacks;\n if (callbacks) {\n for (const cb of callbacks) {\n cb(data);\n }\n }\n });\n websocket.addEventListener(\"error\", (e) =>\n console.log(\"Websocket error\", e),\n );\n } else {\n subscription.callbacks.push(callback);\n }\n\n const callbackIndex = _subscriptions[url]?.callbacks.length - 1;\n\n return {\n get url() {\n return url;\n },\n unsubscribe() {\n const subscription = _subscriptions[url];\n\n if (!subscription) {\n return;\n }\n\n subscription.callbacks.splice(callbackIndex, 1);\n\n if (!subscription.callbacks.length) {\n subscription.websocket.close();\n delete _subscriptions[url];\n }\n },\n };\n}\n\nexport type EventPayload = {\n tx_hash: string;\n type: \"event\";\n number: number;\n key: string;\n value: Record<string, unknown>;\n module: {\n type: \"moduleRef\";\n name: string;\n };\n};\n\nexport interface SubscriptionToCallbackMap {\n events: (event: EventPayload) => Promise<void>;\n}\n\nexport function createSubscription<T extends keyof SubscriptionToCallbackMap>(\n subscription: T,\n callback: SubscriptionToCallbackMap[T],\n client: SovereignSDK,\n): Subscription {\n switch (subscription) {\n case \"events\": {\n const url = client.buildURL(\"/sequencer/events/ws\", {});\n return subscribe(\n httpToWebSocket(url),\n callback as SubscriptionToCallbackMap[\"events\"],\n );\n }\n default:\n throw new SovereignError(`Invalid subscription type '${subscription}'`);\n }\n}\n","import SovereignClient from \"@sovereign-sdk/client\";\nimport { JsSerializer } from \"@sovereign-sdk/serializers\";\nimport { bytesToHex } from \"@sovereign-sdk/utils\";\nimport type { DeepPartial } from \"../utils\";\nimport {\n Rollup,\n type RollupConfig,\n type SignerParams,\n type TransactionContext,\n type TypeBuilder,\n type UnsignedTransactionContext,\n} from \"./rollup\";\n\nexport type TxDetails = {\n max_priority_fee_bips: number;\n max_fee: string;\n gas_limit: number[] | null;\n chain_id: number;\n};\n\nexport type Generation = { generation: number };\nexport type Nonce = { nonce: number };\nexport type Uniqueness = Nonce | Generation;\n\nexport type UnsignedTransaction<RuntimeCall> = {\n runtime_call: RuntimeCall;\n uniqueness: Uniqueness;\n details: TxDetails;\n};\n\nexport type TransactionV0<RuntimeCall> = {\n pub_key: { pub_key: Uint8Array };\n signature: { msg_sig: Uint8Array };\n} & UnsignedTransaction<RuntimeCall>;\n\nexport type Transaction<RuntimeCall> = {\n versioned_tx: { V0: TransactionV0<RuntimeCall> };\n};\n\nexport type Dedup = {\n nonce: number;\n};\n\nexport type StandardRollupContext = {\n defaultTxDetails: TxDetails;\n};\n\nexport type StandardRollupSpec<RuntimeCall> = {\n UnsignedTransaction: UnsignedTransaction<RuntimeCall>;\n Transaction: Transaction<RuntimeCall>;\n RuntimeCall: RuntimeCall;\n Dedup: Dedup;\n};\n\nconst useOrFetchUniqueness = async <S extends StandardRollupSpec<unknown>>({\n overrides,\n}: Omit<\n UnsignedTransactionContext<S, StandardRollupContext>,\n \"runtimeCall\"\n>) => {\n if (overrides?.uniqueness) {\n return overrides.uniqueness;\n }\n\n return { generation: Date.now() };\n};\n\nexport function standardTypeBuilder<\n S extends StandardRollupSpec<unknown>,\n>(): TypeBuilder<S, StandardRollupContext> {\n return {\n async unsignedTransaction(\n context: UnsignedTransactionContext<S, StandardRollupContext>,\n ) {\n const { rollup, runtimeCall } = context;\n const { uniqueness: _, ...overrides } = context.overrides;\n const uniqueness = await useOrFetchUniqueness(context);\n const details: TxDetails = {\n ...rollup.context.defaultTxDetails,\n ...overrides.details,\n };\n\n return {\n runtime_call: runtimeCall,\n uniqueness,\n details,\n } as S[\"UnsignedTransaction\"];\n },\n async transaction({\n sender,\n signature,\n unsignedTx,\n }: TransactionContext<S, StandardRollupContext>) {\n return {\n versioned_tx: {\n V0: {\n pub_key: {\n pub_key: sender,\n },\n signature: {\n msg_sig: signature,\n },\n ...unsignedTx,\n },\n },\n };\n },\n };\n}\n\n/**\n * The parameters for simulating a runtime call transaction.\n */\nexport type SimulateParams = {\n /**\n * The transaction details to use for the simulation.\n */\n txDetails: TxDetails;\n\n /** The generation of the transaction for uniquness purposes. */\n generation?: number;\n} & SignerParams;\n\nexport class StandardRollup<RuntimeCall> extends Rollup<\n StandardRollupSpec<RuntimeCall>,\n StandardRollupContext\n> {\n /**\n * Simulates a runtime call transaction.\n *\n * This method can be useful to estimate the gas cost of a runtime call transaction.\n *\n * @param runtimeMessage - The runtime message to call.\n */\n async simulate(\n runtimeMessage: StandardRollupSpec<RuntimeCall>[\"RuntimeCall\"],\n { signer, txDetails, generation: overrideGeneration }: SimulateParams,\n ): Promise<SovereignClient.Rollup.SimulateExecutionResponse> {\n const serializer = await this.serializer();\n const runtimeCall = serializer.serializeRuntimeCall(runtimeMessage);\n const publicKey = await signer.publicKey();\n const uniqueness = await useOrFetchUniqueness({\n rollup: this,\n overrides: {\n uniqueness: overrideGeneration\n ? { generation: overrideGeneration }\n : undefined,\n },\n });\n // Extract the generation number from the uniqueness object\n const generation =\n \"generation\" in uniqueness\n ? (uniqueness as Generation).generation\n : (uniqueness as Nonce).nonce; // Use nonce as fallback until simulate endpoint is updated.\n const response = await this.rollup.simulate({\n body: {\n details: {\n ...txDetails,\n // simulate needs this field as `undefined` currently\n gas_limit: txDetails.gas_limit || undefined,\n },\n encoded_call_message: bytesToHex(runtimeCall),\n generation,\n sender_pub_key: bytesToHex(publicKey),\n },\n });\n\n return response;\n }\n}\n\nexport const DEFAULT_TX_DETAILS: Omit<TxDetails, \"chain_id\"> = {\n max_priority_fee_bips: 0,\n max_fee: \"100000000\",\n gas_limit: null,\n};\n\nasync function buildContext<C extends StandardRollupContext>(\n client: SovereignClient,\n context?: DeepPartial<C>,\n): Promise<C> {\n const defaultTxDetails = {\n ...DEFAULT_TX_DETAILS,\n ...context?.defaultTxDetails,\n };\n\n if (!defaultTxDetails.chain_id) {\n const { chain_id } = await client.rollup.constants.retrieve();\n\n defaultTxDetails.chain_id = chain_id;\n }\n\n return {\n defaultTxDetails,\n } as C;\n}\n\nexport async function createStandardRollup<\n RuntimeCall,\n C extends StandardRollupContext = StandardRollupContext,\n>(\n rollupConfig?: Partial<RollupConfig<DeepPartial<C>>>,\n typeBuilderOverrides?: Partial<\n TypeBuilder<StandardRollupSpec<RuntimeCall>, C>\n >,\n) {\n const config = rollupConfig ?? {};\n const client = config.client ?? new SovereignClient({ baseURL: config.url });\n const getSerializer =\n config.getSerializer ?? ((schema) => new JsSerializer(schema));\n const context = await buildContext<C>(client, config.context);\n\n return new StandardRollup<RuntimeCall>(\n { ...config, client, getSerializer, context },\n {\n ...standardTypeBuilder(),\n ...typeBuilderOverrides,\n },\n );\n}\n","export * from \"./addresses\";\nexport * from \"./rollup\";\nexport * from \"./errors\";\nexport * from \"./type-spec\";\nexport { type EventPayload, Subscription } from \"./subscriptions\";\nexport * as SovereignClient from \"@sovereign-sdk/client\";\n"],"mappings":"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","names":["_a","subscription","SovereignClient","bytesToHex","_a","bytesToHex","SovereignClient","SovereignClient"]}
1
+ {"version":3,"sources":["../src/addresses.ts","../src/rollup/rollup.ts","../src/errors.ts","../src/subscriptions.ts","../src/rollup/standard-rollup.ts","../src/index.ts"],"sourcesContent":["import { type HexString, ensureBytes } from \"@sovereign-sdk/utils\";\nimport { bech32m } from \"bech32\";\n\n/**\n * Encodes a public key as a bech32m address with the given human-readable part (hrp).\n *\n * @param publicKey - The public key to encode, as a hex string or Uint8Array.\n * @param hrp - The human-readable part for the bech32m address (e.g., \"sov\").\n * @param concatPublicKey - Optional. If provided, only the first `concatPublicKey` bytes of the public key are used.\n * @returns The bech32m-encoded address as a string.\n * @throws {Error} If the public key is not a valid hex string or Uint8Array.\n */\nexport function addressFromPublicKey(\n publicKey: HexString | Uint8Array,\n hrp: string,\n concatPublicKey = 28,\n): string {\n let publicKeyBytes = ensureBytes(publicKey);\n\n if (concatPublicKey !== publicKey.length) {\n publicKeyBytes = publicKeyBytes.slice(0, concatPublicKey);\n }\n\n const words = bech32m.toWords(publicKeyBytes);\n return bech32m.encode(hrp, words);\n}\n","import SovereignClient from \"@sovereign-sdk/client\";\nimport type { APIError } from \"@sovereign-sdk/client\";\nimport type { RollupSchema, Serializer } from \"@sovereign-sdk/serializers\";\nimport type { Signer } from \"@sovereign-sdk/signers\";\nimport { bytesToHex, hexToBytes } from \"@sovereign-sdk/utils\";\nimport { Base64 } from \"js-base64\";\nimport { VersionMismatchError } from \"../errors\";\nimport {\n type Subscription,\n type SubscriptionToCallbackMap,\n createSubscription,\n} from \"../subscriptions\";\nimport type { BaseTypeSpec } from \"../type-spec\";\nimport type { DeepPartial } from \"../utils\";\n\nexport type UnsignedTransactionContext<\n S extends BaseTypeSpec,\n C extends RollupContext,\n> = {\n runtimeCall: S[\"RuntimeCall\"];\n // Provides the ability to override the generation data instead of retrieving it automatically.\n overrides: DeepPartial<S[\"UnsignedTransaction\"]>;\n rollup: Rollup<S, C>;\n};\n\nexport type TransactionContext<\n S extends BaseTypeSpec,\n C extends RollupContext,\n> = {\n unsignedTx: S[\"UnsignedTransaction\"];\n sender: Uint8Array;\n signature: Uint8Array;\n rollup: Rollup<S, C>;\n};\n\nexport type TypeBuilder<S extends BaseTypeSpec, C extends RollupContext> = {\n unsignedTransaction: (\n context: UnsignedTransactionContext<S, C>,\n ) => Promise<S[\"UnsignedTransaction\"]>;\n\n transaction: (context: TransactionContext<S, C>) => Promise<S[\"Transaction\"]>;\n};\n\n/**\n * Arbitrary context that is associated with the rollup.\n */\nexport type RollupContext = Record<string, unknown>;\n\n/**\n * The configuration for a rollup client.\n */\nexport type RollupConfig<C extends RollupContext> = {\n /**\n * The base URL of the rollup full node API.\n */\n url?: string;\n /**\n * The Sovereign SDK client to use for the rollup.\n * If not provided, the default client will be used using {@link PartialRollupConfig.url}.\n */\n client: SovereignClient;\n /**\n * Creates the serializer instance to use for the rollup.\n *\n * This can be called more than once, for example if the chain hash changes (i.e a new rollup version)\n * is detected then it will be called again with the new rollup schema.\n */\n getSerializer: (schema: RollupSchema) => Serializer;\n /**\n * Arbitrary context that is associated with the rollup.\n */\n context: C;\n /**\n * The endpoint path for submitting transactions.\n * Defaults to \"/sequencer/txs\", the standard Sovereign SDK endpoint.\n * Can be overridden if your rollup is configured to expose non-standard endpoints in\n * order to support multiple different transaction encoding or authentication schemes.\n */\n txSubmissionEndpoint: string;\n};\n\n/**\n * The result of signing and submitting a transaction.\n *\n * @template Tx The type of the transaction\n */\nexport type TransactionResult<Tx> = {\n /**\n * The response from the sequencer.\n */\n response: SovereignClient.Sequencer.TxCreateResponse;\n /**\n * The transaction that was submitted.\n */\n transaction: Tx;\n};\n\n/**\n * The parameters for signing and submitting a transaction.\n */\nexport type SignerParams = {\n /**\n * The signer to use for signing the transaction.\n */\n signer: Signer;\n};\n\n/**\n * The parameters for calling executing a runtime call transaction.\n */\nexport type CallParams<S extends BaseTypeSpec> = {\n overrides?: DeepPartial<S[\"UnsignedTransaction\"]>;\n} & SignerParams;\n\n/**\n * A generic rollup client.\n *\n * @template S - The type specification for the rollup.\n * If not provided, the base type specification will be used which uses `any` for all types.\n * @template C - The context for the rollup.\n */\nexport class Rollup<S extends BaseTypeSpec, C extends RollupContext> {\n private readonly _config: RollupConfig<C>;\n private readonly _typeBuilder: TypeBuilder<S, C>;\n private _chainHash?: Uint8Array;\n private _serializer?: Serializer;\n\n /**\n * Creates a new rollup client.\n *\n * @param config - The configuration for the rollup client.\n * @param typeBuilder - The type builder for the rollup.\n */\n constructor(config: RollupConfig<C>, typeBuilder: TypeBuilder<S, C>) {\n this._config = config;\n this._typeBuilder = typeBuilder;\n }\n\n /**\n * Retrieve dedup information about the provided address.\n *\n * @param publicKey - The public key to dedup.\n * TODO: How to add param for generation explicitly\n */\n async dedup(publicKey: Uint8Array): Promise<S[\"Dedup\"]> {\n // for public key credential id is just its bytes representation\n const credentialId = bytesToHex(publicKey);\n const response = await this.rollup.addresses.dedup(credentialId);\n return response as S[\"Dedup\"];\n }\n\n /**\n * Submits a transaction to the rollup.\n *\n * The endpoint used for submission can be overridden via the options.path parameter.\n * If not specified, the rollup's configured txSubmissionEndpoint will be used.\n *\n * @param transaction - The transaction to submit.\n * @param {SovereignClient.RequestOptions} options - The options for the request.\n */\n async submitTransaction(\n transaction: S[\"Transaction\"],\n options?: SovereignClient.RequestOptions,\n ): Promise<SovereignClient.Sequencer.TxCreateResponse> {\n const serializer = await this.serializer();\n const serializedTx = serializer.serializeTx(transaction);\n // Stainless RequestOptions is generic internally, causing issues for `body` and `query`.\n // That's fine since we supply the `body` and transaction submission doesn't take query parameters.\n // So we hack around this by destructuring them out.\n const { body: _, query: __, path, ...requestOptions } = options || {};\n const txSubmissionEndpoint = path || this._config.txSubmissionEndpoint;\n\n return this.http\n .post<SovereignClient.Sequencer.TxCreateResponse>(txSubmissionEndpoint, {\n body: { body: Base64.fromUint8Array(serializedTx) },\n ...requestOptions,\n })\n .catch(async (e) => {\n if (isVersionMismatchError(e as APIError)) {\n const oldVersion = bytesToHex(await this.chainHash());\n const { schema, chain_hash: newVersion } = await this.rollup.schema();\n this._chainHash = hexToBytes(newVersion);\n this._serializer = this._config.getSerializer(schema);\n\n if (oldVersion !== newVersion) {\n throw new VersionMismatchError(\n \"Schema version mismatch when submitting transaction\",\n newVersion,\n oldVersion,\n );\n }\n }\n throw e;\n });\n }\n\n /**\n * Signs and submits a transaction to the rollup.\n * Utilizes the provided signer to sign the transaction.\n *\n * @param unsignedTx - The unsigned transaction to sign and submit.\n * @param {SignerParams} params - The params for signing and submitting the transaction.\n * @param {SovereignClient.RequestOptions} options - The options for the request.\n * @param endpoint - Optional endpoint override. If not specified, uses the rollup's configured txSubmissionEndpoint.\n */\n async signAndSubmitTransaction(\n unsignedTx: S[\"UnsignedTransaction\"],\n { signer }: SignerParams,\n options?: SovereignClient.RequestOptions,\n ): Promise<TransactionResult<S[\"Transaction\"]>> {\n const tx = await this.signTransaction(unsignedTx, signer);\n const result = await this.submitTransaction(tx, options);\n\n return { transaction: tx, response: result };\n }\n\n /**\n * Performs a runtime call transaction.\n * Utilizes the provided signer to sign the transaction.\n *\n * @param runtimeCall - The runtime message to call.\n * @param {CallParams<S>} params - The params for submitting a runtime call transaction.\n * @param {SovereignClient.RequestOptions} options - The options for the request.\n */\n async call(\n runtimeCall: S[\"RuntimeCall\"],\n { signer, overrides }: CallParams<S>,\n options?: SovereignClient.RequestOptions,\n ): Promise<TransactionResult<S[\"Transaction\"]>> {\n const context = {\n runtimeCall,\n rollup: this,\n overrides: overrides ?? ({} as DeepPartial<S[\"UnsignedTransaction\"]>),\n };\n const unsignedTx = await this._typeBuilder.unsignedTransaction(context);\n\n return this.signAndSubmitTransaction(\n unsignedTx,\n {\n signer,\n },\n options,\n );\n }\n\n /**\n * Prepares a runtime call by creating and signing a transaction without submitting it.\n * This is useful for scenarios where you need the signed transaction for later submission\n * or for analysis purposes.\n *\n * @param runtimeCall - The runtime message to prepare.\n * @param params - The parameters for preparing the call.\n * @param params.signer - The signer to use for signing the transaction.\n * @param params.overrides - Optional overrides for the unsigned transaction.\n * @returns A promise that resolves to the signed transaction.\n */\n async prepareCall(\n runtimeCall: S[\"RuntimeCall\"],\n { signer, overrides }: CallParams<S>,\n ): Promise<S[\"Transaction\"]> {\n const context = {\n runtimeCall,\n rollup: this,\n overrides: overrides ?? ({} as DeepPartial<S[\"UnsignedTransaction\"]>),\n };\n const unsignedTx = await this._typeBuilder.unsignedTransaction(context);\n return this.signTransaction(unsignedTx, signer);\n }\n\n /**\n * Signs an unsigned transaction using the provided signer.\n * Creates a signature by combining the serialized unsigned transaction with the chain hash,\n * then constructs a fully signed transaction.\n *\n * @param unsignedTx - The unsigned transaction to sign.\n * @param signer - The signer to use for signing the transaction.\n * @returns A promise that resolves to the signed transaction.\n */\n async signTransaction(\n unsignedTx: S[\"UnsignedTransaction\"],\n signer: Signer,\n ): Promise<S[\"Transaction\"]> {\n const serializer = await this.serializer();\n const serializedUnsignedTx = serializer.serializeUnsignedTx(unsignedTx);\n const chainHash = await this.chainHash();\n const signature = await signer.sign(\n new Uint8Array([...serializedUnsignedTx, ...chainHash]),\n );\n const publicKey = await signer.publicKey();\n const context = {\n unsignedTx,\n sender: publicKey,\n signature,\n rollup: this,\n };\n return this._typeBuilder.transaction(context);\n }\n\n /**\n * Create a subscription to events emitted over websockets by the rollup.\n */\n subscribe<T extends keyof SubscriptionToCallbackMap>(\n type: T,\n callback: SubscriptionToCallbackMap[T],\n ): Subscription {\n return createSubscription(type, callback, this.http);\n }\n\n /**\n * Performs a healthcheck against the rollup to determine if it is currently healthy.\n *\n * @param timeout - Request timeout in milliseconds.\n * @returns `true` if the rollup is considered healthy otherwise `false`.\n */\n async healthcheck(timeout = 5000): Promise<boolean> {\n try {\n await this.http.get(\"/healthcheck\", { timeout, maxRetries: 1 });\n return true;\n } catch (e) {\n return !(e instanceof SovereignClient.APIConnectionError);\n }\n }\n\n /**\n * A ledger client that can be used to query the ledger.\n */\n get ledger(): SovereignClient.Ledger {\n return this.http.ledger;\n }\n\n /**\n * A sequencer client that can be used to submit transactions & batches to the rollup.\n */\n get sequencer(): SovereignClient.Sequencer {\n return this.http.sequencer;\n }\n\n /**\n * A rollup client that can be used to perform operations on the rollup.\n */\n get rollup(): SovereignClient.Rollup {\n return this.http.rollup;\n }\n\n /**\n * A client that can be used to perform HTTP requests to the Sovereign API.\n * This can be used as an escape hatch to execute arbitrary requests to the Sovereign API\n * if the operation is not supported by `ledger`, `sequencer`, or `rollup` clients.\n */\n get http(): SovereignClient {\n return this._config.client;\n }\n\n /**\n * The serializer for the rollup.\n * Can be used to serialize transactions, runtime calls, etc.\n */\n async serializer(): Promise<Serializer> {\n if (this._serializer) return this._serializer;\n const { schema } = await this.rollup.schema();\n this._serializer = this._config.getSerializer(schema);\n return this._serializer;\n }\n\n /**\n * The context for the rollup.\n */\n get context(): C {\n return this._config.context;\n }\n\n async chainHash(): Promise<Uint8Array> {\n if (this._chainHash) return this._chainHash;\n const { chain_hash } = await this.rollup.schema();\n this._chainHash = hexToBytes(chain_hash);\n return this._chainHash;\n }\n}\n\nfunction isVersionMismatchError(e: APIError): boolean {\n if (\n // biome-ignore lint/suspicious/noExplicitAny: yolo\n (e.error as any)?.details?.error?.includes(\"Signature verification failed\")\n ) {\n return true;\n }\n\n return false;\n}\n","/**\n * Base error class for Sovereign SDK Web3.\n */\nexport class SovereignError extends Error {\n constructor(message: string) {\n super(message);\n\n this.name = this.constructor.name;\n this.stack = new Error().stack;\n }\n}\n\nexport class InvalidRollupConfigError extends SovereignError {}\n\nexport class VersionMismatchError extends SovereignError {\n public readonly newVersion: string;\n public readonly currentVersion: string;\n public readonly retryable: boolean;\n\n constructor(message: string, newVersion: string, currentVersion: string) {\n super(message);\n\n this.newVersion = newVersion;\n this.currentVersion = currentVersion;\n this.retryable = newVersion !== currentVersion;\n }\n}\n\nexport class SchemaError extends SovereignError {\n public readonly schema: object;\n public readonly reason: string;\n\n constructor(message: string, reason: string, schema: object) {\n super(`${message}: ${reason}`);\n\n this.reason = reason;\n this.schema = schema;\n }\n}\n","import type SovereignSDK from \"@sovereign-sdk/client\";\nimport IsoWebSocket from \"isomorphic-ws\";\nimport { WebSocket } from \"partysocket\";\nimport { SovereignError } from \"./errors\";\n\ntype Url = string;\n\nexport function httpToWebSocket(url: string) {\n return url.replace(/^http(s?):\\/\\//, (_, s) => `ws${s}://`);\n}\n\nexport type Subscription = {\n /** Url providing the subscription. */\n url: Url;\n /** Unsubscribe this subscription. */\n unsubscribe: () => void;\n};\n\ntype SubscriptionEntry = {\n websocket: WebSocket;\n // biome-ignore lint/suspicious/noExplicitAny: allow\n callbacks: Array<(...args: any[]) => void>;\n};\n\nexport const _subscriptions: Record<Url, SubscriptionEntry> = {};\n\n/** Subscribe to the provided websocket url & call the provided callback on messages received. */\nexport function subscribe(\n url: Url,\n // biome-ignore lint/suspicious/noExplicitAny: allow\n callback: (...args: any[]) => void,\n): Subscription {\n const subscription = _subscriptions[url];\n\n if (!subscription) {\n const websocket = new WebSocket(url, [], { WebSocket: IsoWebSocket });\n // bun compatibility: https://github.com/partykit/partykit/issues/774\n websocket.binaryType = \"arraybuffer\";\n\n _subscriptions[url] = {\n websocket,\n callbacks: [callback],\n };\n\n websocket.addEventListener(\"message\", (message) => {\n const data = JSON.parse(message.data);\n const callbacks = _subscriptions[url]?.callbacks;\n if (callbacks) {\n for (const cb of callbacks) {\n cb(data);\n }\n }\n });\n websocket.addEventListener(\"error\", (e) =>\n console.log(\"Websocket error\", e),\n );\n } else {\n subscription.callbacks.push(callback);\n }\n\n const callbackIndex = _subscriptions[url]?.callbacks.length - 1;\n\n return {\n get url() {\n return url;\n },\n unsubscribe() {\n const subscription = _subscriptions[url];\n\n if (!subscription) {\n return;\n }\n\n subscription.callbacks.splice(callbackIndex, 1);\n\n if (!subscription.callbacks.length) {\n subscription.websocket.close();\n delete _subscriptions[url];\n }\n },\n };\n}\n\nexport type EventPayload = {\n tx_hash: string;\n type: \"event\";\n number: number;\n key: string;\n value: Record<string, unknown>;\n module: {\n type: \"moduleRef\";\n name: string;\n };\n};\n\nexport interface SubscriptionToCallbackMap {\n events: (event: EventPayload) => Promise<void>;\n}\n\nexport function createSubscription<T extends keyof SubscriptionToCallbackMap>(\n subscription: T,\n callback: SubscriptionToCallbackMap[T],\n client: SovereignSDK,\n): Subscription {\n switch (subscription) {\n case \"events\": {\n const url = client.buildURL(\"/sequencer/events/ws\", {});\n return subscribe(\n httpToWebSocket(url),\n callback as SubscriptionToCallbackMap[\"events\"],\n );\n }\n default:\n throw new SovereignError(`Invalid subscription type '${subscription}'`);\n }\n}\n","import SovereignClient from \"@sovereign-sdk/client\";\nimport { JsSerializer } from \"@sovereign-sdk/serializers\";\nimport type {\n Transaction,\n TxDetails,\n UnsignedTransaction,\n} from \"@sovereign-sdk/types\";\nimport { bytesToHex } from \"@sovereign-sdk/utils\";\nimport type { DeepPartial } from \"../utils\";\nimport {\n Rollup,\n type RollupConfig,\n type SignerParams,\n type TransactionContext,\n type TypeBuilder,\n type UnsignedTransactionContext,\n} from \"./rollup\";\n\nexport type Dedup = {\n nonce: number;\n};\n\nexport type StandardRollupContext = {\n defaultTxDetails: TxDetails;\n};\n\nexport type StandardRollupSpec<RuntimeCall> = {\n UnsignedTransaction: UnsignedTransaction<RuntimeCall>;\n Transaction: Transaction<RuntimeCall>;\n RuntimeCall: RuntimeCall;\n Dedup: Dedup;\n};\n\nconst useOrFetchUniqueness = async <S extends StandardRollupSpec<unknown>>({\n overrides,\n}: Omit<\n UnsignedTransactionContext<S, StandardRollupContext>,\n \"runtimeCall\"\n>) => {\n if (overrides?.uniqueness) {\n return overrides.uniqueness;\n }\n\n return { generation: Date.now() };\n};\n\nexport function standardTypeBuilder<\n S extends StandardRollupSpec<unknown>,\n>(): TypeBuilder<S, StandardRollupContext> {\n return {\n async unsignedTransaction(\n context: UnsignedTransactionContext<S, StandardRollupContext>,\n ) {\n const { rollup, runtimeCall } = context;\n const { uniqueness: _, ...overrides } = context.overrides;\n const uniqueness = await useOrFetchUniqueness(context);\n const details: TxDetails = {\n ...rollup.context.defaultTxDetails,\n ...overrides.details,\n };\n\n return {\n runtime_call: runtimeCall,\n uniqueness,\n details,\n } as S[\"UnsignedTransaction\"];\n },\n async transaction({\n sender,\n signature,\n unsignedTx,\n }: TransactionContext<S, StandardRollupContext>) {\n return {\n V0: {\n pub_key: bytesToHex(sender),\n signature: bytesToHex(signature),\n ...unsignedTx,\n },\n };\n },\n };\n}\n\n/**\n * The parameters for simulating a runtime call transaction.\n */\nexport type SimulateParams = Omit<\n SovereignClient.RollupSimulateParams,\n \"call\" | \"sender\"\n> &\n SignerParams;\n\nexport class StandardRollup<RuntimeCall> extends Rollup<\n StandardRollupSpec<RuntimeCall>,\n StandardRollupContext\n> {\n /**\n * Simulates a runtime call transaction.\n *\n * This method can be useful to estimate the gas cost of a runtime call transaction.\n *\n * @param runtimeMessage - The runtime message to call.\n */\n async simulate(\n runtimeMessage: StandardRollupSpec<RuntimeCall>[\"RuntimeCall\"],\n { signer }: SimulateParams,\n ): Promise<SovereignClient.Rollup.RollupSimulateResponse> {\n const publicKey = await signer.publicKey();\n const sender = bytesToHex(publicKey);\n const call = runtimeMessage as { [key: string]: unknown };\n\n return this.rollup.simulate({ sender, call });\n }\n}\n\nexport const DEFAULT_TX_DETAILS: Omit<TxDetails, \"chain_id\"> = {\n max_priority_fee_bips: 0,\n max_fee: \"100000000\",\n gas_limit: null,\n};\n\nasync function buildContext<C extends StandardRollupContext>(\n client: SovereignClient,\n context?: DeepPartial<C>,\n): Promise<C> {\n const defaultTxDetails = {\n ...DEFAULT_TX_DETAILS,\n ...context?.defaultTxDetails,\n };\n\n if (!defaultTxDetails.chain_id) {\n const { chain_id } = await client.rollup.constants();\n\n defaultTxDetails.chain_id = chain_id;\n }\n\n return {\n defaultTxDetails,\n } as C;\n}\n\nexport async function createStandardRollup<\n RuntimeCall,\n C extends StandardRollupContext = StandardRollupContext,\n>(\n rollupConfig?: Partial<RollupConfig<DeepPartial<C>>>,\n typeBuilderOverrides?: Partial<\n TypeBuilder<StandardRollupSpec<RuntimeCall>, C>\n >,\n) {\n const config = rollupConfig ?? {};\n const client = config.client ?? new SovereignClient({ baseURL: config.url });\n const getSerializer =\n config.getSerializer ?? ((schema) => new JsSerializer(schema));\n const context = await buildContext<C>(client, config.context);\n\n // Default to the standard transaction submission endpoint\n const txSubmissionEndpoint = config.txSubmissionEndpoint ?? \"/sequencer/txs\";\n\n return new StandardRollup<RuntimeCall>(\n {\n ...config,\n client,\n getSerializer,\n context,\n txSubmissionEndpoint,\n },\n {\n ...standardTypeBuilder(),\n ...typeBuilderOverrides,\n },\n );\n}\n","export * from \"./addresses\";\nexport * from \"./rollup\";\nexport * from \"./errors\";\nexport * from \"./type-spec\";\nexport { type EventPayload, Subscription } from \"./subscriptions\";\nexport * as SovereignClient from \"@sovereign-sdk/client\";\n"],"mappings":"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","names":["_a","subscription","SovereignClient","bytesToHex","_a","bytesToHex","SovereignClient","SovereignClient"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sovereign-sdk/web3",
3
- "version": "0.10.0",
3
+ "version": "0.11.1",
4
4
  "repository": "github:Sovereign-Labs/sovereign-sdk-web3-js",
5
5
  "files": [
6
6
  "dist",
@@ -18,21 +18,22 @@
18
18
  "types": "./dist/index.d.ts",
19
19
  "devDependencies": {
20
20
  "tsup": "^8.3.0",
21
- "vitest": "^3.0.5"
21
+ "vitest": "^3.0.5",
22
+ "@sovereign-sdk/types": "^0.1.1"
22
23
  },
23
24
  "peerDependencies": {
24
25
  "typescript": "^5.0.0"
25
26
  },
26
27
  "dependencies": {
27
- "@sovereign-sdk/client": "0.1.0-alpha.36",
28
+ "@sovereign-sdk/client": "0.1.0-alpha.39",
28
29
  "bech32": "^2.0.0",
29
30
  "isomorphic-ws": "^5.0.0",
30
31
  "js-base64": "^3.7.7",
31
32
  "partysocket": "^1.1.3",
32
33
  "ws": "^8.18.1",
33
- "@sovereign-sdk/signers": "^0.2.1",
34
- "@sovereign-sdk/serializers": "^0.1.1",
35
- "@sovereign-sdk/universal-wallet-wasm": "^0.4.0",
34
+ "@sovereign-sdk/serializers": "^0.1.2",
35
+ "@sovereign-sdk/universal-wallet-wasm": "^0.5.0",
36
+ "@sovereign-sdk/signers": "^0.3.0",
36
37
  "@sovereign-sdk/utils": "^0.0.4"
37
38
  },
38
39
  "publishConfig": {