@sovereign-sdk/web3 0.4.0 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.mts +6 -4
- package/dist/index.d.ts +6 -4
- package/dist/index.js +19 -15
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +19 -15
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.d.mts
CHANGED
|
@@ -190,7 +190,6 @@ type DeepPartial<T> = T extends unknown[] ? T : T extends Record<string, unknown
|
|
|
190
190
|
|
|
191
191
|
type UnsignedTransactionContext<S extends BaseTypeSpec, C extends RollupContext> = {
|
|
192
192
|
runtimeCall: S["RuntimeCall"];
|
|
193
|
-
sender: Uint8Array;
|
|
194
193
|
overrides: DeepPartial<S["UnsignedTransaction"]>;
|
|
195
194
|
rollup: Rollup<S, C>;
|
|
196
195
|
};
|
|
@@ -298,24 +297,27 @@ declare class Rollup<S extends BaseTypeSpec, C extends RollupContext> {
|
|
|
298
297
|
* Submits a transaction to the rollup.
|
|
299
298
|
*
|
|
300
299
|
* @param transaction - The transaction to submit.
|
|
300
|
+
* @param {SovereignClient.RequestOptions} options - The options for the request.
|
|
301
301
|
*/
|
|
302
|
-
submitTransaction(transaction: S["Transaction"]): Promise<SovereignClient__default.Sequencer.TxCreateResponse>;
|
|
302
|
+
submitTransaction(transaction: S["Transaction"], options?: SovereignClient__default.RequestOptions): Promise<SovereignClient__default.Sequencer.TxCreateResponse>;
|
|
303
303
|
/**
|
|
304
304
|
* Signs and submits a transaction to the rollup.
|
|
305
305
|
* Utilizes the provided signer to sign the transaction.
|
|
306
306
|
*
|
|
307
307
|
* @param unsignedTx - The unsigned transaction to sign and submit.
|
|
308
308
|
* @param {SignerParams} params - The params for signing and submitting the transaction.
|
|
309
|
+
* @param {SovereignClient.RequestOptions} options - The options for the request.
|
|
309
310
|
*/
|
|
310
|
-
signAndSubmitTransaction(unsignedTx: S["UnsignedTransaction"], { signer }: SignerParams): Promise<TransactionResult<S["Transaction"]>>;
|
|
311
|
+
signAndSubmitTransaction(unsignedTx: S["UnsignedTransaction"], { signer }: SignerParams, options?: SovereignClient__default.RequestOptions): Promise<TransactionResult<S["Transaction"]>>;
|
|
311
312
|
/**
|
|
312
313
|
* Performs a runtime call transaction.
|
|
313
314
|
* Utilizes the provided signer to sign the transaction.
|
|
314
315
|
*
|
|
315
316
|
* @param runtimeCall - The runtime message to call.
|
|
316
317
|
* @param {CallParams<S>} params - The params for submitting a runtime call transaction.
|
|
318
|
+
* @param {SovereignClient.RequestOptions} options - The options for the request.
|
|
317
319
|
*/
|
|
318
|
-
call(runtimeCall: S["RuntimeCall"], { signer, overrides }: CallParams<S
|
|
320
|
+
call(runtimeCall: S["RuntimeCall"], { signer, overrides }: CallParams<S>, options?: SovereignClient__default.RequestOptions): Promise<TransactionResult<S["Transaction"]>>;
|
|
319
321
|
/**
|
|
320
322
|
* Create a subscription to events emitted over websockets by the rollup.
|
|
321
323
|
*/
|
package/dist/index.d.ts
CHANGED
|
@@ -190,7 +190,6 @@ type DeepPartial<T> = T extends unknown[] ? T : T extends Record<string, unknown
|
|
|
190
190
|
|
|
191
191
|
type UnsignedTransactionContext<S extends BaseTypeSpec, C extends RollupContext> = {
|
|
192
192
|
runtimeCall: S["RuntimeCall"];
|
|
193
|
-
sender: Uint8Array;
|
|
194
193
|
overrides: DeepPartial<S["UnsignedTransaction"]>;
|
|
195
194
|
rollup: Rollup<S, C>;
|
|
196
195
|
};
|
|
@@ -298,24 +297,27 @@ declare class Rollup<S extends BaseTypeSpec, C extends RollupContext> {
|
|
|
298
297
|
* Submits a transaction to the rollup.
|
|
299
298
|
*
|
|
300
299
|
* @param transaction - The transaction to submit.
|
|
300
|
+
* @param {SovereignClient.RequestOptions} options - The options for the request.
|
|
301
301
|
*/
|
|
302
|
-
submitTransaction(transaction: S["Transaction"]): Promise<SovereignClient__default.Sequencer.TxCreateResponse>;
|
|
302
|
+
submitTransaction(transaction: S["Transaction"], options?: SovereignClient__default.RequestOptions): Promise<SovereignClient__default.Sequencer.TxCreateResponse>;
|
|
303
303
|
/**
|
|
304
304
|
* Signs and submits a transaction to the rollup.
|
|
305
305
|
* Utilizes the provided signer to sign the transaction.
|
|
306
306
|
*
|
|
307
307
|
* @param unsignedTx - The unsigned transaction to sign and submit.
|
|
308
308
|
* @param {SignerParams} params - The params for signing and submitting the transaction.
|
|
309
|
+
* @param {SovereignClient.RequestOptions} options - The options for the request.
|
|
309
310
|
*/
|
|
310
|
-
signAndSubmitTransaction(unsignedTx: S["UnsignedTransaction"], { signer }: SignerParams): Promise<TransactionResult<S["Transaction"]>>;
|
|
311
|
+
signAndSubmitTransaction(unsignedTx: S["UnsignedTransaction"], { signer }: SignerParams, options?: SovereignClient__default.RequestOptions): Promise<TransactionResult<S["Transaction"]>>;
|
|
311
312
|
/**
|
|
312
313
|
* Performs a runtime call transaction.
|
|
313
314
|
* Utilizes the provided signer to sign the transaction.
|
|
314
315
|
*
|
|
315
316
|
* @param runtimeCall - The runtime message to call.
|
|
316
317
|
* @param {CallParams<S>} params - The params for submitting a runtime call transaction.
|
|
318
|
+
* @param {SovereignClient.RequestOptions} options - The options for the request.
|
|
317
319
|
*/
|
|
318
|
-
call(runtimeCall: S["RuntimeCall"], { signer, overrides }: CallParams<S
|
|
320
|
+
call(runtimeCall: S["RuntimeCall"], { signer, overrides }: CallParams<S>, options?: SovereignClient__default.RequestOptions): Promise<TransactionResult<S["Transaction"]>>;
|
|
319
321
|
/**
|
|
320
322
|
* Create a subscription to events emitted over websockets by the rollup.
|
|
321
323
|
*/
|
package/dist/index.js
CHANGED
|
@@ -139,7 +139,7 @@ var VersionMismatchError = class extends SovereignError {
|
|
|
139
139
|
};
|
|
140
140
|
var SchemaError = class extends SovereignError {
|
|
141
141
|
constructor(message, reason, schema) {
|
|
142
|
-
super(message);
|
|
142
|
+
super(`${message}: ${reason}`);
|
|
143
143
|
this.reason = reason;
|
|
144
144
|
this.schema = schema;
|
|
145
145
|
}
|
|
@@ -310,11 +310,12 @@ var Rollup = class {
|
|
|
310
310
|
* Submits a transaction to the rollup.
|
|
311
311
|
*
|
|
312
312
|
* @param transaction - The transaction to submit.
|
|
313
|
+
* @param {SovereignClient.RequestOptions} options - The options for the request.
|
|
313
314
|
*/
|
|
314
|
-
submitTransaction(transaction) {
|
|
315
|
+
submitTransaction(transaction, options) {
|
|
315
316
|
return __async(this, null, function* () {
|
|
316
317
|
const serializedTx = this.serializer.serializeTx(transaction);
|
|
317
|
-
return this.sequencer.txs.create({ body: import_js_base64.Base64.fromUint8Array(serializedTx) }).catch((e) => __async(this, null, function* () {
|
|
318
|
+
return this.sequencer.txs.create({ body: import_js_base64.Base64.fromUint8Array(serializedTx) }, options).catch((e) => __async(this, null, function* () {
|
|
318
319
|
if (isVersionMismatchError(e)) {
|
|
319
320
|
const oldVersion = (0, import_utils2.bytesToHex)(this.chainHash);
|
|
320
321
|
this._config.serializer = yield createSerializerFromHttp(this.http);
|
|
@@ -337,9 +338,10 @@ var Rollup = class {
|
|
|
337
338
|
*
|
|
338
339
|
* @param unsignedTx - The unsigned transaction to sign and submit.
|
|
339
340
|
* @param {SignerParams} params - The params for signing and submitting the transaction.
|
|
341
|
+
* @param {SovereignClient.RequestOptions} options - The options for the request.
|
|
340
342
|
*/
|
|
341
|
-
signAndSubmitTransaction(_0, _1) {
|
|
342
|
-
return __async(this, arguments, function* (unsignedTx, { signer }) {
|
|
343
|
+
signAndSubmitTransaction(_0, _1, _2) {
|
|
344
|
+
return __async(this, arguments, function* (unsignedTx, { signer }, options) {
|
|
343
345
|
const serializedUnsignedTx = this.serializer.serializeUnsignedTx(unsignedTx);
|
|
344
346
|
const signature = yield signer.sign(serializedUnsignedTx);
|
|
345
347
|
const publicKey = yield signer.publicKey();
|
|
@@ -350,7 +352,7 @@ var Rollup = class {
|
|
|
350
352
|
rollup: this
|
|
351
353
|
};
|
|
352
354
|
const tx = yield this._typeBuilder.transaction(context);
|
|
353
|
-
const result = yield this.submitTransaction(tx);
|
|
355
|
+
const result = yield this.submitTransaction(tx, options);
|
|
354
356
|
return { transaction: tx, response: result };
|
|
355
357
|
});
|
|
356
358
|
}
|
|
@@ -360,20 +362,23 @@ var Rollup = class {
|
|
|
360
362
|
*
|
|
361
363
|
* @param runtimeCall - The runtime message to call.
|
|
362
364
|
* @param {CallParams<S>} params - The params for submitting a runtime call transaction.
|
|
365
|
+
* @param {SovereignClient.RequestOptions} options - The options for the request.
|
|
363
366
|
*/
|
|
364
|
-
call(_0, _1) {
|
|
365
|
-
return __async(this, arguments, function* (runtimeCall, { signer, overrides }) {
|
|
366
|
-
const publicKey = yield signer.publicKey();
|
|
367
|
+
call(_0, _1, _2) {
|
|
368
|
+
return __async(this, arguments, function* (runtimeCall, { signer, overrides }, options) {
|
|
367
369
|
const context = {
|
|
368
370
|
runtimeCall,
|
|
369
|
-
sender: publicKey,
|
|
370
371
|
rollup: this,
|
|
371
372
|
overrides: overrides != null ? overrides : {}
|
|
372
373
|
};
|
|
373
374
|
const unsignedTx = yield this._typeBuilder.unsignedTransaction(context);
|
|
374
|
-
return this.signAndSubmitTransaction(
|
|
375
|
-
|
|
376
|
-
|
|
375
|
+
return this.signAndSubmitTransaction(
|
|
376
|
+
unsignedTx,
|
|
377
|
+
{
|
|
378
|
+
signer
|
|
379
|
+
},
|
|
380
|
+
options
|
|
381
|
+
);
|
|
377
382
|
});
|
|
378
383
|
}
|
|
379
384
|
/**
|
|
@@ -467,7 +472,7 @@ var useOrFetchGeneration = (_0) => __async(void 0, [_0], function* ({
|
|
|
467
472
|
if ((overrides == null ? void 0 : overrides.generation) !== void 0 && overrides.generation >= 0) {
|
|
468
473
|
return overrides.generation;
|
|
469
474
|
}
|
|
470
|
-
return
|
|
475
|
+
return Date.now();
|
|
471
476
|
});
|
|
472
477
|
function standardTypeBuilder() {
|
|
473
478
|
return {
|
|
@@ -519,7 +524,6 @@ var StandardRollup = class extends Rollup {
|
|
|
519
524
|
const runtimeCall = this.serializer.serializeRuntimeCall(runtimeMessage);
|
|
520
525
|
const publicKey = yield signer.publicKey();
|
|
521
526
|
const generation = yield useOrFetchGeneration({
|
|
522
|
-
sender: publicKey,
|
|
523
527
|
rollup: this,
|
|
524
528
|
overrides: { generation: overrideGeneration }
|
|
525
529
|
});
|
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/serialization.ts","../src/subscriptions.ts","../src/rollup/standard-rollup.ts"],"sourcesContent":["export * from \"./addresses\";\nexport * from \"./rollup\";\nexport * from \"./serialization\";\nexport * from \"./errors\";\nexport * from \"./type-spec\";\nexport { type EventPayload, Subscription } from \"./subscriptions\";\nexport * as SovereignClient from \"@sovereign-sdk/client\";\nexport { Schema } from \"@sovereign-sdk/universal-wallet-wasm\";\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 { Signer } from \"@sovereign-sdk/signers\";\nimport { bytesToHex } from \"@sovereign-sdk/utils\";\nimport { Base64 } from \"js-base64\";\nimport { RollupInterfaceError, VersionMismatchError } from \"../errors\";\nimport {\n type RollupSerializer,\n createSerializerFromHttp,\n} from \"../serialization\";\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 sender: Uint8Array;\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 * This is a partial version of the configuration object, using a partial version\n * allows setup code to initialize fields automatically for SDK users, for example\n * fetching a `serializer` instance from the rollups endpoint.\n */\nexport type PartialRollupConfig<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 * The serializer to use for the rollup.\n * If not provided, a serializer will be created using the provided client and the rollup HTTP endpoint.\n */\n serializer?: RollupSerializer;\n /**\n * Arbitrary context that is associated with the rollup.\n */\n context: C;\n};\n\n/**\n * Fully initialized rollup configuration.\n */\nexport type RollupConfig<C extends RollupContext> = Omit<\n PartialRollupConfig<C>,\n \"client\" | \"serializer\"\n> & {\n client: SovereignClient;\n serializer: RollupSerializer;\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\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 { data: dedup } = await this.rollup.addresses.dedup(\n bytesToHex(address),\n );\n\n if (dedup === undefined) {\n throw new RollupInterfaceError(\n \"Endpoint returned empty response\",\n \"dedup\",\n );\n }\n\n return dedup as S[\"Dedup\"];\n }\n\n /**\n * Submits a transaction to the rollup.\n *\n * @param transaction - The transaction to submit.\n */\n async submitTransaction(\n transaction: S[\"Transaction\"],\n ): Promise<SovereignClient.Sequencer.TxCreateResponse> {\n const serializedTx = this.serializer.serializeTx(transaction);\n\n return this.sequencer.txs\n .create({ body: Base64.fromUint8Array(serializedTx) })\n .catch(async (e) => {\n if (isVersionMismatchError(e as APIError)) {\n const oldVersion = bytesToHex(this.chainHash);\n this._config.serializer = await createSerializerFromHttp(this.http);\n const newVersion = bytesToHex(this.chainHash);\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 */\n async signAndSubmitTransaction(\n unsignedTx: S[\"UnsignedTransaction\"],\n { signer }: SignerParams,\n ): Promise<TransactionResult<S[\"Transaction\"]>> {\n const serializedUnsignedTx =\n this.serializer.serializeUnsignedTx(unsignedTx);\n const signature = await signer.sign(serializedUnsignedTx);\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);\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 */\n async call(\n runtimeCall: S[\"RuntimeCall\"],\n { signer, overrides }: CallParams<S>,\n ): Promise<TransactionResult<S[\"Transaction\"]>> {\n const publicKey = await signer.publicKey();\n const context = {\n runtimeCall,\n sender: publicKey,\n rollup: this,\n overrides: overrides ?? ({} as DeepPartial<S[\"UnsignedTransaction\"]>),\n };\n const unsignedTx = await this._typeBuilder.unsignedTransaction(context);\n\n return this.signAndSubmitTransaction(unsignedTx, {\n signer,\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 * See {@link RollupSerializer} for more information.\n */\n get serializer(): RollupSerializer {\n return this._config.serializer;\n }\n\n /**\n * The context for the rollup.\n */\n get context(): C {\n return this._config.context;\n }\n\n /**\n * The chain hash of the rollup.\n */\n get chainHash(): Uint8Array {\n return this.serializer.schema.chainHash;\n }\n}\n\nfunction isVersionMismatchError(e: APIError): boolean {\n if (\n // biome-ignore lint/suspicious/noExplicitAny: yolo\n (e.error as any)?.errors[0]?.details?.message?.includes(\n \"Signature verification failed\",\n )\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 RollupInterfaceError extends SovereignError {\n public readonly method: string;\n\n constructor(message: string, method: string) {\n super(message);\n\n this.method = method;\n }\n}\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);\n\n this.reason = reason;\n this.schema = schema;\n }\n}\n","import type SovereignClient from \"@sovereign-sdk/client\";\nimport { KnownTypeId, Schema } from \"@sovereign-sdk/universal-wallet-wasm\";\nimport { RollupInterfaceError, SchemaError } from \"./errors\";\n\n/**\n * A rollup schema is a description of the types that are utilized in the rollup.\n * It is used to serialize and deserialize the types.\n * As well as display them in a human-readable way that is verified by the rollup.\n */\nexport type RollupSchema = object;\n\n/**\n * A serializer is used to serialize rollup types to Borsh bytes.\n *\n * @example\n * ```typescript\n * const serializer = createSerializer(yourSchema);\n * const runtimeCall = {\n * value_setter: {\n * set_value: {\n * value: 100,\n * gas: null\n * },\n * },\n * };\n * const borshBytes = serializer.serializeRuntimeCall(runtimeCall);\n * ```\n */\nexport type RollupSerializer = {\n /**\n * Serialize an input to Borsh bytes.\n *\n * Treats `Uint8Array` as a plain array of numbers as this is the format used by universal-wallet-wasm\n * to represent Borsh bytes.\n *\n * @param input - The input to serialize.\n * @param index - The index of the type in the schema to serialize.\n * @returns The serialized Borsh bytes.\n */\n serialize(input: unknown, index: number): Uint8Array;\n\n /**\n * Serialize a runtime call to Borsh bytes.\n *\n * @param input - The runtime call to serialize.\n * @returns The serialized Borsh bytes.\n */\n serializeRuntimeCall(input: unknown): Uint8Array;\n\n /**\n * Serialize an unsigned transaction to Borsh bytes.\n *\n * @param input - The unsigned transaction to serialize.\n * @returns The serialized Borsh bytes.\n */\n serializeUnsignedTx(input: unknown): Uint8Array;\n\n /**\n * Serialize a transaction to Borsh bytes.\n *\n * @param input - The transaction to serialize.\n * @returns The serialized Borsh bytes.\n */\n serializeTx(input: unknown): Uint8Array;\n\n /**\n * Returns the `Schema` used by the serializer.\n */\n get schema(): Schema;\n};\n\nfunction loadSchema(schemaObject: RollupSchema): Schema {\n try {\n return Schema.fromJSON(JSON.stringify(schemaObject));\n } catch (err) {\n throw new SchemaError(\n \"Failed to create runtime schema\",\n (err as Error).message,\n schemaObject,\n );\n }\n}\n\n/**\n * Create a serializer for a rollup schema.\n *\n * @throws {@link SovereignError} - If the schema is invalid.\n * @param schemaObject - The rollup schema.\n * @returns The serializer.\n */\nexport function createSerializer(schemaObject: RollupSchema): RollupSerializer {\n const schema = loadSchema(schemaObject);\n\n return {\n schema,\n serialize(input: unknown, index: number): Uint8Array {\n try {\n return schema.jsonToBorsh(\n index,\n JSON.stringify(input, (_, value) => {\n if (value instanceof Uint8Array) {\n return Array.from(value);\n }\n return value;\n }),\n );\n } catch (err) {\n throw new SchemaError(\n \"Input serialization failed\",\n (err as Error).message,\n schemaObject,\n );\n }\n },\n serializeRuntimeCall(input: unknown): Uint8Array {\n return this.serialize(\n input,\n schema.knownTypeIndex(KnownTypeId.RuntimeCall),\n );\n },\n serializeUnsignedTx(input: unknown): Uint8Array {\n return this.serialize(\n input,\n schema.knownTypeIndex(KnownTypeId.UnsignedTransaction),\n );\n },\n serializeTx(input: unknown): Uint8Array {\n return this.serialize(\n input,\n schema.knownTypeIndex(KnownTypeId.Transaction),\n );\n },\n };\n}\n\nexport async function createSerializerFromHttp(\n client: SovereignClient,\n): Promise<RollupSerializer> {\n const { data: schema } = await client.rollup.schema.retrieve();\n\n if (!schema) {\n throw new RollupInterfaceError(\n \"Endpoint returned empty response\",\n \"schema\",\n );\n }\n\n return createSerializer(schema as RollupSchema);\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 _subscriptions[url]?.callbacks.forEach((cb) => cb(data));\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 { bytesToHex } from \"@sovereign-sdk/utils\";\nimport { createSerializerFromHttp } from \"../serialization\";\nimport {\n type PartialRollupConfig,\n Rollup,\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 UnsignedTransaction<RuntimeCall> = {\n runtime_call: RuntimeCall;\n generation: number;\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 useOrFetchGeneration = async <S extends StandardRollupSpec<unknown>>({\n overrides,\n}: Omit<\n UnsignedTransactionContext<S, StandardRollupContext>,\n \"runtimeCall\"\n>) => {\n if (overrides?.generation !== undefined && overrides.generation >= 0) {\n return overrides.generation;\n }\n\n return new Date().getTime();\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 { generation: _, ...overrides } = context.overrides;\n const generation = await useOrFetchGeneration(context);\n const details: TxDetails = {\n ...rollup.context.defaultTxDetails,\n ...overrides.details,\n };\n\n return {\n runtime_call: runtimeCall,\n generation,\n details,\n };\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 runtimeCall = this.serializer.serializeRuntimeCall(runtimeMessage);\n const publicKey = await signer.publicKey();\n const generation = await useOrFetchGeneration({\n sender: publicKey,\n rollup: this,\n overrides: { generation: overrideGeneration },\n });\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 // biome-ignore lint/style/noNonNullAssertion: fix later\n return response.data!;\n }\n}\n\nexport async function createStandardRollup<\n RuntimeCall,\n C extends StandardRollupContext = StandardRollupContext,\n>(\n config: PartialRollupConfig<C>,\n typeBuilderOverrides?: Partial<\n TypeBuilder<StandardRollupSpec<RuntimeCall>, C>\n >,\n) {\n const client = config.client ?? new SovereignClient({ baseURL: config.url });\n const serializer =\n config.serializer ?? (await createSerializerFromHttp(client));\n\n return new StandardRollup<RuntimeCall>(\n { ...config, client, serializer },\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","import_universal_wallet_wasm"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/addresses.ts","../src/rollup/rollup.ts","../src/errors.ts","../src/serialization.ts","../src/subscriptions.ts","../src/rollup/standard-rollup.ts"],"sourcesContent":["export * from \"./addresses\";\nexport * from \"./rollup\";\nexport * from \"./serialization\";\nexport * from \"./errors\";\nexport * from \"./type-spec\";\nexport { type EventPayload, Subscription } from \"./subscriptions\";\nexport * as SovereignClient from \"@sovereign-sdk/client\";\nexport { Schema } from \"@sovereign-sdk/universal-wallet-wasm\";\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 { Signer } from \"@sovereign-sdk/signers\";\nimport { bytesToHex } from \"@sovereign-sdk/utils\";\nimport { Base64 } from \"js-base64\";\nimport { RollupInterfaceError, VersionMismatchError } from \"../errors\";\nimport {\n type RollupSerializer,\n createSerializerFromHttp,\n} from \"../serialization\";\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 * This is a partial version of the configuration object, using a partial version\n * allows setup code to initialize fields automatically for SDK users, for example\n * fetching a `serializer` instance from the rollups endpoint.\n */\nexport type PartialRollupConfig<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 * The serializer to use for the rollup.\n * If not provided, a serializer will be created using the provided client and the rollup HTTP endpoint.\n */\n serializer?: RollupSerializer;\n /**\n * Arbitrary context that is associated with the rollup.\n */\n context: C;\n};\n\n/**\n * Fully initialized rollup configuration.\n */\nexport type RollupConfig<C extends RollupContext> = Omit<\n PartialRollupConfig<C>,\n \"client\" | \"serializer\"\n> & {\n client: SovereignClient;\n serializer: RollupSerializer;\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\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 { data: dedup } = await this.rollup.addresses.dedup(\n bytesToHex(address),\n );\n\n if (dedup === undefined) {\n throw new RollupInterfaceError(\n \"Endpoint returned empty response\",\n \"dedup\",\n );\n }\n\n return dedup 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 serializedTx = this.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(this.chainHash);\n this._config.serializer = await createSerializerFromHttp(this.http);\n const newVersion = bytesToHex(this.chainHash);\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 serializedUnsignedTx =\n this.serializer.serializeUnsignedTx(unsignedTx);\n const signature = await signer.sign(serializedUnsignedTx);\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 * See {@link RollupSerializer} for more information.\n */\n get serializer(): RollupSerializer {\n return this._config.serializer;\n }\n\n /**\n * The context for the rollup.\n */\n get context(): C {\n return this._config.context;\n }\n\n /**\n * The chain hash of the rollup.\n */\n get chainHash(): Uint8Array {\n return this.serializer.schema.chainHash;\n }\n}\n\nfunction isVersionMismatchError(e: APIError): boolean {\n if (\n // biome-ignore lint/suspicious/noExplicitAny: yolo\n (e.error as any)?.errors[0]?.details?.message?.includes(\n \"Signature verification failed\",\n )\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 RollupInterfaceError extends SovereignError {\n public readonly method: string;\n\n constructor(message: string, method: string) {\n super(message);\n\n this.method = method;\n }\n}\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 SovereignClient from \"@sovereign-sdk/client\";\nimport { KnownTypeId, Schema } from \"@sovereign-sdk/universal-wallet-wasm\";\nimport { RollupInterfaceError, SchemaError } from \"./errors\";\n\n/**\n * A rollup schema is a description of the types that are utilized in the rollup.\n * It is used to serialize and deserialize the types.\n * As well as display them in a human-readable way that is verified by the rollup.\n */\nexport type RollupSchema = object;\n\n/**\n * A serializer is used to serialize rollup types to Borsh bytes.\n *\n * @example\n * ```typescript\n * const serializer = createSerializer(yourSchema);\n * const runtimeCall = {\n * value_setter: {\n * set_value: {\n * value: 100,\n * gas: null\n * },\n * },\n * };\n * const borshBytes = serializer.serializeRuntimeCall(runtimeCall);\n * ```\n */\nexport type RollupSerializer = {\n /**\n * Serialize an input to Borsh bytes.\n *\n * Treats `Uint8Array` as a plain array of numbers as this is the format used by universal-wallet-wasm\n * to represent Borsh bytes.\n *\n * @param input - The input to serialize.\n * @param index - The index of the type in the schema to serialize.\n * @returns The serialized Borsh bytes.\n */\n serialize(input: unknown, index: number): Uint8Array;\n\n /**\n * Serialize a runtime call to Borsh bytes.\n *\n * @param input - The runtime call to serialize.\n * @returns The serialized Borsh bytes.\n */\n serializeRuntimeCall(input: unknown): Uint8Array;\n\n /**\n * Serialize an unsigned transaction to Borsh bytes.\n *\n * @param input - The unsigned transaction to serialize.\n * @returns The serialized Borsh bytes.\n */\n serializeUnsignedTx(input: unknown): Uint8Array;\n\n /**\n * Serialize a transaction to Borsh bytes.\n *\n * @param input - The transaction to serialize.\n * @returns The serialized Borsh bytes.\n */\n serializeTx(input: unknown): Uint8Array;\n\n /**\n * Returns the `Schema` used by the serializer.\n */\n get schema(): Schema;\n};\n\nfunction loadSchema(schemaObject: RollupSchema): Schema {\n try {\n return Schema.fromJSON(JSON.stringify(schemaObject));\n } catch (err) {\n throw new SchemaError(\n \"Failed to create runtime schema\",\n (err as Error).message,\n schemaObject,\n );\n }\n}\n\n/**\n * Create a serializer for a rollup schema.\n *\n * @throws {@link SovereignError} - If the schema is invalid.\n * @param schemaObject - The rollup schema.\n * @returns The serializer.\n */\nexport function createSerializer(schemaObject: RollupSchema): RollupSerializer {\n const schema = loadSchema(schemaObject);\n\n return {\n schema,\n serialize(input: unknown, index: number): Uint8Array {\n try {\n return schema.jsonToBorsh(\n index,\n JSON.stringify(input, (_, value) => {\n if (value instanceof Uint8Array) {\n return Array.from(value);\n }\n return value;\n }),\n );\n } catch (err) {\n throw new SchemaError(\n \"Input serialization failed\",\n (err as Error).message,\n schemaObject,\n );\n }\n },\n serializeRuntimeCall(input: unknown): Uint8Array {\n return this.serialize(\n input,\n schema.knownTypeIndex(KnownTypeId.RuntimeCall),\n );\n },\n serializeUnsignedTx(input: unknown): Uint8Array {\n return this.serialize(\n input,\n schema.knownTypeIndex(KnownTypeId.UnsignedTransaction),\n );\n },\n serializeTx(input: unknown): Uint8Array {\n return this.serialize(\n input,\n schema.knownTypeIndex(KnownTypeId.Transaction),\n );\n },\n };\n}\n\nexport async function createSerializerFromHttp(\n client: SovereignClient,\n): Promise<RollupSerializer> {\n const { data: schema } = await client.rollup.schema.retrieve();\n\n if (!schema) {\n throw new RollupInterfaceError(\n \"Endpoint returned empty response\",\n \"schema\",\n );\n }\n\n return createSerializer(schema as RollupSchema);\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 _subscriptions[url]?.callbacks.forEach((cb) => cb(data));\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 { bytesToHex } from \"@sovereign-sdk/utils\";\nimport { createSerializerFromHttp } from \"../serialization\";\nimport {\n type PartialRollupConfig,\n Rollup,\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 UnsignedTransaction<RuntimeCall> = {\n runtime_call: RuntimeCall;\n generation: number;\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 useOrFetchGeneration = async <S extends StandardRollupSpec<unknown>>({\n overrides,\n}: Omit<\n UnsignedTransactionContext<S, StandardRollupContext>,\n \"runtimeCall\"\n>) => {\n if (overrides?.generation !== undefined && overrides.generation >= 0) {\n return overrides.generation;\n }\n\n return 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 { generation: _, ...overrides } = context.overrides;\n const generation = await useOrFetchGeneration(context);\n const details: TxDetails = {\n ...rollup.context.defaultTxDetails,\n ...overrides.details,\n };\n\n return {\n runtime_call: runtimeCall,\n generation,\n details,\n };\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 runtimeCall = this.serializer.serializeRuntimeCall(runtimeMessage);\n const publicKey = await signer.publicKey();\n const generation = await useOrFetchGeneration({\n rollup: this,\n overrides: { generation: overrideGeneration },\n });\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 // biome-ignore lint/style/noNonNullAssertion: fix later\n return response.data!;\n }\n}\n\nexport async function createStandardRollup<\n RuntimeCall,\n C extends StandardRollupContext = StandardRollupContext,\n>(\n config: PartialRollupConfig<C>,\n typeBuilderOverrides?: Partial<\n TypeBuilder<StandardRollupSpec<RuntimeCall>, C>\n >,\n) {\n const client = config.client ?? new SovereignClient({ baseURL: config.url });\n const serializer =\n config.serializer ?? (await createSerializerFromHttp(client));\n\n return new StandardRollup<RuntimeCall>(\n { ...config, client, serializer },\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","import_universal_wallet_wasm"]}
|
package/dist/index.mjs
CHANGED
|
@@ -93,7 +93,7 @@ var VersionMismatchError = class extends SovereignError {
|
|
|
93
93
|
};
|
|
94
94
|
var SchemaError = class extends SovereignError {
|
|
95
95
|
constructor(message, reason, schema) {
|
|
96
|
-
super(message);
|
|
96
|
+
super(`${message}: ${reason}`);
|
|
97
97
|
this.reason = reason;
|
|
98
98
|
this.schema = schema;
|
|
99
99
|
}
|
|
@@ -264,11 +264,12 @@ var Rollup = class {
|
|
|
264
264
|
* Submits a transaction to the rollup.
|
|
265
265
|
*
|
|
266
266
|
* @param transaction - The transaction to submit.
|
|
267
|
+
* @param {SovereignClient.RequestOptions} options - The options for the request.
|
|
267
268
|
*/
|
|
268
|
-
submitTransaction(transaction) {
|
|
269
|
+
submitTransaction(transaction, options) {
|
|
269
270
|
return __async(this, null, function* () {
|
|
270
271
|
const serializedTx = this.serializer.serializeTx(transaction);
|
|
271
|
-
return this.sequencer.txs.create({ body: Base64.fromUint8Array(serializedTx) }).catch((e) => __async(this, null, function* () {
|
|
272
|
+
return this.sequencer.txs.create({ body: Base64.fromUint8Array(serializedTx) }, options).catch((e) => __async(this, null, function* () {
|
|
272
273
|
if (isVersionMismatchError(e)) {
|
|
273
274
|
const oldVersion = bytesToHex(this.chainHash);
|
|
274
275
|
this._config.serializer = yield createSerializerFromHttp(this.http);
|
|
@@ -291,9 +292,10 @@ var Rollup = class {
|
|
|
291
292
|
*
|
|
292
293
|
* @param unsignedTx - The unsigned transaction to sign and submit.
|
|
293
294
|
* @param {SignerParams} params - The params for signing and submitting the transaction.
|
|
295
|
+
* @param {SovereignClient.RequestOptions} options - The options for the request.
|
|
294
296
|
*/
|
|
295
|
-
signAndSubmitTransaction(_0, _1) {
|
|
296
|
-
return __async(this, arguments, function* (unsignedTx, { signer }) {
|
|
297
|
+
signAndSubmitTransaction(_0, _1, _2) {
|
|
298
|
+
return __async(this, arguments, function* (unsignedTx, { signer }, options) {
|
|
297
299
|
const serializedUnsignedTx = this.serializer.serializeUnsignedTx(unsignedTx);
|
|
298
300
|
const signature = yield signer.sign(serializedUnsignedTx);
|
|
299
301
|
const publicKey = yield signer.publicKey();
|
|
@@ -304,7 +306,7 @@ var Rollup = class {
|
|
|
304
306
|
rollup: this
|
|
305
307
|
};
|
|
306
308
|
const tx = yield this._typeBuilder.transaction(context);
|
|
307
|
-
const result = yield this.submitTransaction(tx);
|
|
309
|
+
const result = yield this.submitTransaction(tx, options);
|
|
308
310
|
return { transaction: tx, response: result };
|
|
309
311
|
});
|
|
310
312
|
}
|
|
@@ -314,20 +316,23 @@ var Rollup = class {
|
|
|
314
316
|
*
|
|
315
317
|
* @param runtimeCall - The runtime message to call.
|
|
316
318
|
* @param {CallParams<S>} params - The params for submitting a runtime call transaction.
|
|
319
|
+
* @param {SovereignClient.RequestOptions} options - The options for the request.
|
|
317
320
|
*/
|
|
318
|
-
call(_0, _1) {
|
|
319
|
-
return __async(this, arguments, function* (runtimeCall, { signer, overrides }) {
|
|
320
|
-
const publicKey = yield signer.publicKey();
|
|
321
|
+
call(_0, _1, _2) {
|
|
322
|
+
return __async(this, arguments, function* (runtimeCall, { signer, overrides }, options) {
|
|
321
323
|
const context = {
|
|
322
324
|
runtimeCall,
|
|
323
|
-
sender: publicKey,
|
|
324
325
|
rollup: this,
|
|
325
326
|
overrides: overrides != null ? overrides : {}
|
|
326
327
|
};
|
|
327
328
|
const unsignedTx = yield this._typeBuilder.unsignedTransaction(context);
|
|
328
|
-
return this.signAndSubmitTransaction(
|
|
329
|
-
|
|
330
|
-
|
|
329
|
+
return this.signAndSubmitTransaction(
|
|
330
|
+
unsignedTx,
|
|
331
|
+
{
|
|
332
|
+
signer
|
|
333
|
+
},
|
|
334
|
+
options
|
|
335
|
+
);
|
|
331
336
|
});
|
|
332
337
|
}
|
|
333
338
|
/**
|
|
@@ -421,7 +426,7 @@ var useOrFetchGeneration = (_0) => __async(void 0, [_0], function* ({
|
|
|
421
426
|
if ((overrides == null ? void 0 : overrides.generation) !== void 0 && overrides.generation >= 0) {
|
|
422
427
|
return overrides.generation;
|
|
423
428
|
}
|
|
424
|
-
return
|
|
429
|
+
return Date.now();
|
|
425
430
|
});
|
|
426
431
|
function standardTypeBuilder() {
|
|
427
432
|
return {
|
|
@@ -473,7 +478,6 @@ var StandardRollup = class extends Rollup {
|
|
|
473
478
|
const runtimeCall = this.serializer.serializeRuntimeCall(runtimeMessage);
|
|
474
479
|
const publicKey = yield signer.publicKey();
|
|
475
480
|
const generation = yield useOrFetchGeneration({
|
|
476
|
-
sender: publicKey,
|
|
477
481
|
rollup: this,
|
|
478
482
|
overrides: { generation: overrideGeneration }
|
|
479
483
|
});
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/addresses.ts","../src/rollup/rollup.ts","../src/errors.ts","../src/serialization.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 { Signer } from \"@sovereign-sdk/signers\";\nimport { bytesToHex } from \"@sovereign-sdk/utils\";\nimport { Base64 } from \"js-base64\";\nimport { RollupInterfaceError, VersionMismatchError } from \"../errors\";\nimport {\n type RollupSerializer,\n createSerializerFromHttp,\n} from \"../serialization\";\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 sender: Uint8Array;\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 * This is a partial version of the configuration object, using a partial version\n * allows setup code to initialize fields automatically for SDK users, for example\n * fetching a `serializer` instance from the rollups endpoint.\n */\nexport type PartialRollupConfig<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 * The serializer to use for the rollup.\n * If not provided, a serializer will be created using the provided client and the rollup HTTP endpoint.\n */\n serializer?: RollupSerializer;\n /**\n * Arbitrary context that is associated with the rollup.\n */\n context: C;\n};\n\n/**\n * Fully initialized rollup configuration.\n */\nexport type RollupConfig<C extends RollupContext> = Omit<\n PartialRollupConfig<C>,\n \"client\" | \"serializer\"\n> & {\n client: SovereignClient;\n serializer: RollupSerializer;\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\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 { data: dedup } = await this.rollup.addresses.dedup(\n bytesToHex(address),\n );\n\n if (dedup === undefined) {\n throw new RollupInterfaceError(\n \"Endpoint returned empty response\",\n \"dedup\",\n );\n }\n\n return dedup as S[\"Dedup\"];\n }\n\n /**\n * Submits a transaction to the rollup.\n *\n * @param transaction - The transaction to submit.\n */\n async submitTransaction(\n transaction: S[\"Transaction\"],\n ): Promise<SovereignClient.Sequencer.TxCreateResponse> {\n const serializedTx = this.serializer.serializeTx(transaction);\n\n return this.sequencer.txs\n .create({ body: Base64.fromUint8Array(serializedTx) })\n .catch(async (e) => {\n if (isVersionMismatchError(e as APIError)) {\n const oldVersion = bytesToHex(this.chainHash);\n this._config.serializer = await createSerializerFromHttp(this.http);\n const newVersion = bytesToHex(this.chainHash);\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 */\n async signAndSubmitTransaction(\n unsignedTx: S[\"UnsignedTransaction\"],\n { signer }: SignerParams,\n ): Promise<TransactionResult<S[\"Transaction\"]>> {\n const serializedUnsignedTx =\n this.serializer.serializeUnsignedTx(unsignedTx);\n const signature = await signer.sign(serializedUnsignedTx);\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);\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 */\n async call(\n runtimeCall: S[\"RuntimeCall\"],\n { signer, overrides }: CallParams<S>,\n ): Promise<TransactionResult<S[\"Transaction\"]>> {\n const publicKey = await signer.publicKey();\n const context = {\n runtimeCall,\n sender: publicKey,\n rollup: this,\n overrides: overrides ?? ({} as DeepPartial<S[\"UnsignedTransaction\"]>),\n };\n const unsignedTx = await this._typeBuilder.unsignedTransaction(context);\n\n return this.signAndSubmitTransaction(unsignedTx, {\n signer,\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 * See {@link RollupSerializer} for more information.\n */\n get serializer(): RollupSerializer {\n return this._config.serializer;\n }\n\n /**\n * The context for the rollup.\n */\n get context(): C {\n return this._config.context;\n }\n\n /**\n * The chain hash of the rollup.\n */\n get chainHash(): Uint8Array {\n return this.serializer.schema.chainHash;\n }\n}\n\nfunction isVersionMismatchError(e: APIError): boolean {\n if (\n // biome-ignore lint/suspicious/noExplicitAny: yolo\n (e.error as any)?.errors[0]?.details?.message?.includes(\n \"Signature verification failed\",\n )\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 RollupInterfaceError extends SovereignError {\n public readonly method: string;\n\n constructor(message: string, method: string) {\n super(message);\n\n this.method = method;\n }\n}\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);\n\n this.reason = reason;\n this.schema = schema;\n }\n}\n","import type SovereignClient from \"@sovereign-sdk/client\";\nimport { KnownTypeId, Schema } from \"@sovereign-sdk/universal-wallet-wasm\";\nimport { RollupInterfaceError, SchemaError } from \"./errors\";\n\n/**\n * A rollup schema is a description of the types that are utilized in the rollup.\n * It is used to serialize and deserialize the types.\n * As well as display them in a human-readable way that is verified by the rollup.\n */\nexport type RollupSchema = object;\n\n/**\n * A serializer is used to serialize rollup types to Borsh bytes.\n *\n * @example\n * ```typescript\n * const serializer = createSerializer(yourSchema);\n * const runtimeCall = {\n * value_setter: {\n * set_value: {\n * value: 100,\n * gas: null\n * },\n * },\n * };\n * const borshBytes = serializer.serializeRuntimeCall(runtimeCall);\n * ```\n */\nexport type RollupSerializer = {\n /**\n * Serialize an input to Borsh bytes.\n *\n * Treats `Uint8Array` as a plain array of numbers as this is the format used by universal-wallet-wasm\n * to represent Borsh bytes.\n *\n * @param input - The input to serialize.\n * @param index - The index of the type in the schema to serialize.\n * @returns The serialized Borsh bytes.\n */\n serialize(input: unknown, index: number): Uint8Array;\n\n /**\n * Serialize a runtime call to Borsh bytes.\n *\n * @param input - The runtime call to serialize.\n * @returns The serialized Borsh bytes.\n */\n serializeRuntimeCall(input: unknown): Uint8Array;\n\n /**\n * Serialize an unsigned transaction to Borsh bytes.\n *\n * @param input - The unsigned transaction to serialize.\n * @returns The serialized Borsh bytes.\n */\n serializeUnsignedTx(input: unknown): Uint8Array;\n\n /**\n * Serialize a transaction to Borsh bytes.\n *\n * @param input - The transaction to serialize.\n * @returns The serialized Borsh bytes.\n */\n serializeTx(input: unknown): Uint8Array;\n\n /**\n * Returns the `Schema` used by the serializer.\n */\n get schema(): Schema;\n};\n\nfunction loadSchema(schemaObject: RollupSchema): Schema {\n try {\n return Schema.fromJSON(JSON.stringify(schemaObject));\n } catch (err) {\n throw new SchemaError(\n \"Failed to create runtime schema\",\n (err as Error).message,\n schemaObject,\n );\n }\n}\n\n/**\n * Create a serializer for a rollup schema.\n *\n * @throws {@link SovereignError} - If the schema is invalid.\n * @param schemaObject - The rollup schema.\n * @returns The serializer.\n */\nexport function createSerializer(schemaObject: RollupSchema): RollupSerializer {\n const schema = loadSchema(schemaObject);\n\n return {\n schema,\n serialize(input: unknown, index: number): Uint8Array {\n try {\n return schema.jsonToBorsh(\n index,\n JSON.stringify(input, (_, value) => {\n if (value instanceof Uint8Array) {\n return Array.from(value);\n }\n return value;\n }),\n );\n } catch (err) {\n throw new SchemaError(\n \"Input serialization failed\",\n (err as Error).message,\n schemaObject,\n );\n }\n },\n serializeRuntimeCall(input: unknown): Uint8Array {\n return this.serialize(\n input,\n schema.knownTypeIndex(KnownTypeId.RuntimeCall),\n );\n },\n serializeUnsignedTx(input: unknown): Uint8Array {\n return this.serialize(\n input,\n schema.knownTypeIndex(KnownTypeId.UnsignedTransaction),\n );\n },\n serializeTx(input: unknown): Uint8Array {\n return this.serialize(\n input,\n schema.knownTypeIndex(KnownTypeId.Transaction),\n );\n },\n };\n}\n\nexport async function createSerializerFromHttp(\n client: SovereignClient,\n): Promise<RollupSerializer> {\n const { data: schema } = await client.rollup.schema.retrieve();\n\n if (!schema) {\n throw new RollupInterfaceError(\n \"Endpoint returned empty response\",\n \"schema\",\n );\n }\n\n return createSerializer(schema as RollupSchema);\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 _subscriptions[url]?.callbacks.forEach((cb) => cb(data));\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 { bytesToHex } from \"@sovereign-sdk/utils\";\nimport { createSerializerFromHttp } from \"../serialization\";\nimport {\n type PartialRollupConfig,\n Rollup,\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 UnsignedTransaction<RuntimeCall> = {\n runtime_call: RuntimeCall;\n generation: number;\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 useOrFetchGeneration = async <S extends StandardRollupSpec<unknown>>({\n overrides,\n}: Omit<\n UnsignedTransactionContext<S, StandardRollupContext>,\n \"runtimeCall\"\n>) => {\n if (overrides?.generation !== undefined && overrides.generation >= 0) {\n return overrides.generation;\n }\n\n return new Date().getTime();\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 { generation: _, ...overrides } = context.overrides;\n const generation = await useOrFetchGeneration(context);\n const details: TxDetails = {\n ...rollup.context.defaultTxDetails,\n ...overrides.details,\n };\n\n return {\n runtime_call: runtimeCall,\n generation,\n details,\n };\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 runtimeCall = this.serializer.serializeRuntimeCall(runtimeMessage);\n const publicKey = await signer.publicKey();\n const generation = await useOrFetchGeneration({\n sender: publicKey,\n rollup: this,\n overrides: { generation: overrideGeneration },\n });\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 // biome-ignore lint/style/noNonNullAssertion: fix later\n return response.data!;\n }\n}\n\nexport async function createStandardRollup<\n RuntimeCall,\n C extends StandardRollupContext = StandardRollupContext,\n>(\n config: PartialRollupConfig<C>,\n typeBuilderOverrides?: Partial<\n TypeBuilder<StandardRollupSpec<RuntimeCall>, C>\n >,\n) {\n const client = config.client ?? new SovereignClient({ baseURL: config.url });\n const serializer =\n config.serializer ?? (await createSerializerFromHttp(client));\n\n return new StandardRollup<RuntimeCall>(\n { ...config, client, serializer },\n {\n ...standardTypeBuilder(),\n ...typeBuilderOverrides,\n },\n );\n}\n","export * from \"./addresses\";\nexport * from \"./rollup\";\nexport * from \"./serialization\";\nexport * from \"./errors\";\nexport * from \"./type-spec\";\nexport { type EventPayload, Subscription } from \"./subscriptions\";\nexport * as SovereignClient from \"@sovereign-sdk/client\";\nexport { Schema } from \"@sovereign-sdk/universal-wallet-wasm\";\n"],"mappings":"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","names":["_a","subscription","SovereignClient","bytesToHex","_a","bytesToHex","SovereignClient","SovereignClient","Schema"]}
|
|
1
|
+
{"version":3,"sources":["../src/addresses.ts","../src/rollup/rollup.ts","../src/errors.ts","../src/serialization.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 { Signer } from \"@sovereign-sdk/signers\";\nimport { bytesToHex } from \"@sovereign-sdk/utils\";\nimport { Base64 } from \"js-base64\";\nimport { RollupInterfaceError, VersionMismatchError } from \"../errors\";\nimport {\n type RollupSerializer,\n createSerializerFromHttp,\n} from \"../serialization\";\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 * This is a partial version of the configuration object, using a partial version\n * allows setup code to initialize fields automatically for SDK users, for example\n * fetching a `serializer` instance from the rollups endpoint.\n */\nexport type PartialRollupConfig<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 * The serializer to use for the rollup.\n * If not provided, a serializer will be created using the provided client and the rollup HTTP endpoint.\n */\n serializer?: RollupSerializer;\n /**\n * Arbitrary context that is associated with the rollup.\n */\n context: C;\n};\n\n/**\n * Fully initialized rollup configuration.\n */\nexport type RollupConfig<C extends RollupContext> = Omit<\n PartialRollupConfig<C>,\n \"client\" | \"serializer\"\n> & {\n client: SovereignClient;\n serializer: RollupSerializer;\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\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 { data: dedup } = await this.rollup.addresses.dedup(\n bytesToHex(address),\n );\n\n if (dedup === undefined) {\n throw new RollupInterfaceError(\n \"Endpoint returned empty response\",\n \"dedup\",\n );\n }\n\n return dedup 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 serializedTx = this.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(this.chainHash);\n this._config.serializer = await createSerializerFromHttp(this.http);\n const newVersion = bytesToHex(this.chainHash);\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 serializedUnsignedTx =\n this.serializer.serializeUnsignedTx(unsignedTx);\n const signature = await signer.sign(serializedUnsignedTx);\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 * See {@link RollupSerializer} for more information.\n */\n get serializer(): RollupSerializer {\n return this._config.serializer;\n }\n\n /**\n * The context for the rollup.\n */\n get context(): C {\n return this._config.context;\n }\n\n /**\n * The chain hash of the rollup.\n */\n get chainHash(): Uint8Array {\n return this.serializer.schema.chainHash;\n }\n}\n\nfunction isVersionMismatchError(e: APIError): boolean {\n if (\n // biome-ignore lint/suspicious/noExplicitAny: yolo\n (e.error as any)?.errors[0]?.details?.message?.includes(\n \"Signature verification failed\",\n )\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 RollupInterfaceError extends SovereignError {\n public readonly method: string;\n\n constructor(message: string, method: string) {\n super(message);\n\n this.method = method;\n }\n}\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 SovereignClient from \"@sovereign-sdk/client\";\nimport { KnownTypeId, Schema } from \"@sovereign-sdk/universal-wallet-wasm\";\nimport { RollupInterfaceError, SchemaError } from \"./errors\";\n\n/**\n * A rollup schema is a description of the types that are utilized in the rollup.\n * It is used to serialize and deserialize the types.\n * As well as display them in a human-readable way that is verified by the rollup.\n */\nexport type RollupSchema = object;\n\n/**\n * A serializer is used to serialize rollup types to Borsh bytes.\n *\n * @example\n * ```typescript\n * const serializer = createSerializer(yourSchema);\n * const runtimeCall = {\n * value_setter: {\n * set_value: {\n * value: 100,\n * gas: null\n * },\n * },\n * };\n * const borshBytes = serializer.serializeRuntimeCall(runtimeCall);\n * ```\n */\nexport type RollupSerializer = {\n /**\n * Serialize an input to Borsh bytes.\n *\n * Treats `Uint8Array` as a plain array of numbers as this is the format used by universal-wallet-wasm\n * to represent Borsh bytes.\n *\n * @param input - The input to serialize.\n * @param index - The index of the type in the schema to serialize.\n * @returns The serialized Borsh bytes.\n */\n serialize(input: unknown, index: number): Uint8Array;\n\n /**\n * Serialize a runtime call to Borsh bytes.\n *\n * @param input - The runtime call to serialize.\n * @returns The serialized Borsh bytes.\n */\n serializeRuntimeCall(input: unknown): Uint8Array;\n\n /**\n * Serialize an unsigned transaction to Borsh bytes.\n *\n * @param input - The unsigned transaction to serialize.\n * @returns The serialized Borsh bytes.\n */\n serializeUnsignedTx(input: unknown): Uint8Array;\n\n /**\n * Serialize a transaction to Borsh bytes.\n *\n * @param input - The transaction to serialize.\n * @returns The serialized Borsh bytes.\n */\n serializeTx(input: unknown): Uint8Array;\n\n /**\n * Returns the `Schema` used by the serializer.\n */\n get schema(): Schema;\n};\n\nfunction loadSchema(schemaObject: RollupSchema): Schema {\n try {\n return Schema.fromJSON(JSON.stringify(schemaObject));\n } catch (err) {\n throw new SchemaError(\n \"Failed to create runtime schema\",\n (err as Error).message,\n schemaObject,\n );\n }\n}\n\n/**\n * Create a serializer for a rollup schema.\n *\n * @throws {@link SovereignError} - If the schema is invalid.\n * @param schemaObject - The rollup schema.\n * @returns The serializer.\n */\nexport function createSerializer(schemaObject: RollupSchema): RollupSerializer {\n const schema = loadSchema(schemaObject);\n\n return {\n schema,\n serialize(input: unknown, index: number): Uint8Array {\n try {\n return schema.jsonToBorsh(\n index,\n JSON.stringify(input, (_, value) => {\n if (value instanceof Uint8Array) {\n return Array.from(value);\n }\n return value;\n }),\n );\n } catch (err) {\n throw new SchemaError(\n \"Input serialization failed\",\n (err as Error).message,\n schemaObject,\n );\n }\n },\n serializeRuntimeCall(input: unknown): Uint8Array {\n return this.serialize(\n input,\n schema.knownTypeIndex(KnownTypeId.RuntimeCall),\n );\n },\n serializeUnsignedTx(input: unknown): Uint8Array {\n return this.serialize(\n input,\n schema.knownTypeIndex(KnownTypeId.UnsignedTransaction),\n );\n },\n serializeTx(input: unknown): Uint8Array {\n return this.serialize(\n input,\n schema.knownTypeIndex(KnownTypeId.Transaction),\n );\n },\n };\n}\n\nexport async function createSerializerFromHttp(\n client: SovereignClient,\n): Promise<RollupSerializer> {\n const { data: schema } = await client.rollup.schema.retrieve();\n\n if (!schema) {\n throw new RollupInterfaceError(\n \"Endpoint returned empty response\",\n \"schema\",\n );\n }\n\n return createSerializer(schema as RollupSchema);\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 _subscriptions[url]?.callbacks.forEach((cb) => cb(data));\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 { bytesToHex } from \"@sovereign-sdk/utils\";\nimport { createSerializerFromHttp } from \"../serialization\";\nimport {\n type PartialRollupConfig,\n Rollup,\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 UnsignedTransaction<RuntimeCall> = {\n runtime_call: RuntimeCall;\n generation: number;\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 useOrFetchGeneration = async <S extends StandardRollupSpec<unknown>>({\n overrides,\n}: Omit<\n UnsignedTransactionContext<S, StandardRollupContext>,\n \"runtimeCall\"\n>) => {\n if (overrides?.generation !== undefined && overrides.generation >= 0) {\n return overrides.generation;\n }\n\n return 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 { generation: _, ...overrides } = context.overrides;\n const generation = await useOrFetchGeneration(context);\n const details: TxDetails = {\n ...rollup.context.defaultTxDetails,\n ...overrides.details,\n };\n\n return {\n runtime_call: runtimeCall,\n generation,\n details,\n };\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 runtimeCall = this.serializer.serializeRuntimeCall(runtimeMessage);\n const publicKey = await signer.publicKey();\n const generation = await useOrFetchGeneration({\n rollup: this,\n overrides: { generation: overrideGeneration },\n });\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 // biome-ignore lint/style/noNonNullAssertion: fix later\n return response.data!;\n }\n}\n\nexport async function createStandardRollup<\n RuntimeCall,\n C extends StandardRollupContext = StandardRollupContext,\n>(\n config: PartialRollupConfig<C>,\n typeBuilderOverrides?: Partial<\n TypeBuilder<StandardRollupSpec<RuntimeCall>, C>\n >,\n) {\n const client = config.client ?? new SovereignClient({ baseURL: config.url });\n const serializer =\n config.serializer ?? (await createSerializerFromHttp(client));\n\n return new StandardRollup<RuntimeCall>(\n { ...config, client, serializer },\n {\n ...standardTypeBuilder(),\n ...typeBuilderOverrides,\n },\n );\n}\n","export * from \"./addresses\";\nexport * from \"./rollup\";\nexport * from \"./serialization\";\nexport * from \"./errors\";\nexport * from \"./type-spec\";\nexport { type EventPayload, Subscription } from \"./subscriptions\";\nexport * as SovereignClient from \"@sovereign-sdk/client\";\nexport { Schema } from \"@sovereign-sdk/universal-wallet-wasm\";\n"],"mappings":"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","names":["_a","subscription","SovereignClient","bytesToHex","_a","bytesToHex","SovereignClient","SovereignClient","Schema"]}
|