@xyo-network/xl1-protocol-sdk 1.11.0 → 1.12.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.
Files changed (63) hide show
  1. package/dist/neutral/config/Api.d.ts +5 -13
  2. package/dist/neutral/config/Api.d.ts.map +1 -1
  3. package/dist/neutral/config/App.d.ts +4 -7
  4. package/dist/neutral/config/App.d.ts.map +1 -1
  5. package/dist/neutral/config/Chain.d.ts +3 -6
  6. package/dist/neutral/config/Chain.d.ts.map +1 -1
  7. package/dist/neutral/config/Config.d.ts +39 -225
  8. package/dist/neutral/config/Config.d.ts.map +1 -1
  9. package/dist/neutral/config/Evm.d.ts +11 -49
  10. package/dist/neutral/config/Evm.d.ts.map +1 -1
  11. package/dist/neutral/config/Log.d.ts +12 -7
  12. package/dist/neutral/config/Log.d.ts.map +1 -1
  13. package/dist/neutral/config/Producer.d.ts +7 -20
  14. package/dist/neutral/config/Producer.d.ts.map +1 -1
  15. package/dist/neutral/config/Telemetry.d.ts +8 -24
  16. package/dist/neutral/config/Telemetry.d.ts.map +1 -1
  17. package/dist/neutral/config/UsageMeta.d.ts +27 -0
  18. package/dist/neutral/config/UsageMeta.d.ts.map +1 -0
  19. package/dist/neutral/config/index.d.ts +1 -0
  20. package/dist/neutral/config/index.d.ts.map +1 -1
  21. package/dist/neutral/config/storage/Storage.d.ts +4 -34
  22. package/dist/neutral/config/storage/Storage.d.ts.map +1 -1
  23. package/dist/neutral/config/storage/driver/Mongo.d.ts +3 -15
  24. package/dist/neutral/config/storage/driver/Mongo.d.ts.map +1 -1
  25. package/dist/neutral/index.mjs +210 -67
  26. package/dist/neutral/index.mjs.map +1 -1
  27. package/dist/neutral/payload/netBalancesForPayloads.d.ts +5 -2
  28. package/dist/neutral/payload/netBalancesForPayloads.d.ts.map +1 -1
  29. package/dist/neutral/transaction/buildTransaction.d.ts +3 -3
  30. package/dist/neutral/transaction/buildTransaction.d.ts.map +1 -1
  31. package/dist/neutral/transaction/buildUnsignedTransaction.d.ts +3 -3
  32. package/dist/neutral/transaction/buildUnsignedTransaction.d.ts.map +1 -1
  33. package/dist/neutral/transaction/hydrateTransaction.d.ts +7 -7
  34. package/dist/neutral/transaction/hydrateTransaction.d.ts.map +1 -1
  35. package/dist/neutral/transaction/primitives/transactionBlockByteCount.d.ts +2 -2
  36. package/dist/neutral/transaction/primitives/transactionBlockByteCount.d.ts.map +1 -1
  37. package/dist/neutral/transaction/primitives/transactionElevatedPayloads.d.ts +2 -2
  38. package/dist/neutral/transaction/primitives/transactionElevatedPayloads.d.ts.map +1 -1
  39. package/dist/neutral/transaction/primitives/transactionRequiredGas.d.ts +3 -3
  40. package/dist/neutral/transaction/primitives/transactionRequiredGas.d.ts.map +1 -1
  41. package/dist/neutral/validation/schema/Mnemonic.d.ts +2 -2
  42. package/dist/neutral/validation/schema/Mnemonic.d.ts.map +1 -1
  43. package/package.json +13 -13
  44. package/src/config/Api.ts +21 -7
  45. package/src/config/App.ts +11 -2
  46. package/src/config/Chain.ts +10 -3
  47. package/src/config/Config.ts +19 -25
  48. package/src/config/Evm.ts +29 -12
  49. package/src/config/Log.ts +18 -2
  50. package/src/config/Producer.ts +36 -9
  51. package/src/config/Telemetry.ts +10 -6
  52. package/src/config/UsageMeta.ts +41 -0
  53. package/src/config/index.ts +1 -0
  54. package/src/config/storage/Storage.ts +10 -6
  55. package/src/config/storage/driver/Mongo.ts +28 -8
  56. package/src/transaction/buildTransaction.ts +5 -4
  57. package/src/transaction/buildUnsignedTransaction.ts +5 -4
  58. package/src/transaction/hydrateTransaction.ts +12 -12
  59. package/src/transaction/primitives/spec/transactionBlockByteCount.spec.ts +7 -7
  60. package/src/transaction/primitives/transactionBlockByteCount.ts +2 -2
  61. package/src/transaction/primitives/transactionElevatedPayloads.ts +2 -2
  62. package/src/transaction/primitives/transactionRequiredGas.ts +3 -3
  63. package/src/validation/schema/Mnemonic.ts +2 -2
@@ -1,33 +1,27 @@
1
- import type { LogLevelKey } from '@xylabs/logger'
2
- import { LogLevel } from '@xylabs/logger'
3
1
  import z from 'zod'
4
2
 
5
- import { ApiConfigSchema } from './Api.ts'
6
- import { AppConfigSchema } from './App.ts'
7
- import { ChainConfigSchema } from './Chain.ts'
8
- import { EvmConfigSchema } from './Evm.ts'
9
- import { ProducerConfigSchema } from './Producer.ts'
10
- import { StorageConfigSchema } from './storage/index.ts'
11
- import { TelemetryConfigSchema } from './Telemetry.ts'
3
+ import { ApiConfigZod } from './Api.ts'
4
+ import { AppConfigZod } from './App.ts'
5
+ import { ChainConfigZod } from './Chain.ts'
6
+ import { EvmConfigZod } from './Evm.ts'
7
+ import { LogConfigZod } from './Log.ts'
8
+ import { ProducerConfigZod } from './Producer.ts'
9
+ import { StorageConfigZod } from './storage/index.ts'
10
+ import { TelemetryConfigZod } from './Telemetry.ts'
12
11
 
13
- const LogLevels = Object.keys(LogLevel) as [LogLevelKey, ...LogLevelKey[]]
12
+ export const Xl1CommonConfigSchema = z.object({ ...LogConfigZod.shape }).describe('XL1 common configuration options')
14
13
 
15
- export const Xl1CommonConfigSchema = z.object({
16
- silent: z.boolean().default(false).describe('Whether to run in silent mode'),
17
- logLevel: z.enum(LogLevels).default('info').describe('Desired process verbosity'),
18
- }).describe('XL1 common configuration options')
19
-
20
- export const ConfigSchema = z.object({
14
+ export const ConfigZod = z.object({
21
15
  ...Xl1CommonConfigSchema.shape,
22
- api: ApiConfigSchema.default(ApiConfigSchema.parse({})).describe('Configuration for the API node'),
23
- app: AppConfigSchema.default(AppConfigSchema.parse({})).describe('Configuration for the application'),
24
- chain: ChainConfigSchema.default(ChainConfigSchema.parse({})).describe('Configuration for the chain'),
25
- evm: EvmConfigSchema.default(EvmConfigSchema.parse({})).describe('Configuration for EVM-backed services'),
26
- producer: ProducerConfigSchema.default(ProducerConfigSchema.parse({})).describe('Configuration for the producer'),
27
- storage: StorageConfigSchema.default(StorageConfigSchema.parse({})).describe('Configuration for the storage'),
28
- telemetry: TelemetryConfigSchema.default(TelemetryConfigSchema.parse({})).describe('Configuration for telemetry'),
16
+ api: ApiConfigZod.default(ApiConfigZod.parse({})).describe('Configuration for the API node'),
17
+ app: AppConfigZod.default(AppConfigZod.parse({})).describe('Configuration for the application'),
18
+ chain: ChainConfigZod.default(ChainConfigZod.parse({})).describe('Configuration for the chain'),
19
+ evm: EvmConfigZod.default(EvmConfigZod.parse({})).describe('Configuration for EVM-backed services'),
20
+ producer: ProducerConfigZod.default(ProducerConfigZod.parse({})).describe('Configuration for the producer'),
21
+ storage: StorageConfigZod.default(StorageConfigZod.parse({})).describe('Configuration for the storage'),
22
+ telemetry: TelemetryConfigZod.default(TelemetryConfigZod.parse({})).describe('Configuration for telemetry'),
29
23
  })
30
24
 
31
- export type Config = z.infer<typeof ConfigSchema>
25
+ export type Config = z.infer<typeof ConfigZod>
32
26
 
33
- export const getDefaultConfig = (): Config => ConfigSchema.parse({})
27
+ export const getDefaultConfig = (): Config => ConfigZod.parse({})
package/src/config/Evm.ts CHANGED
@@ -1,17 +1,34 @@
1
- import z from 'zod'
1
+ import z, { globalRegistry } from 'zod'
2
2
 
3
- export const EvmJsonRpcConfigSchema = z.object({
4
- //
5
- url: z.string().optional().describe('JSON-RPC URL'),
3
+ export const EvmInfuraConfigZod = z.object({
4
+ projectId: z.string().optional().register(globalRegistry, {
5
+ description: 'Infura project ID',
6
+ title: 'evm.infura.projectId',
7
+ type: 'string',
8
+ }),
9
+ projectSecret: z.string().optional().register(globalRegistry, {
10
+ description: 'Infura project secret',
11
+ title: 'evm.infura.projectSecret',
12
+ type: 'string',
13
+ }),
6
14
  })
7
- export const EvmInfuraConfigSchema = z.object({
8
- projectId: z.string().optional().describe('Infura project ID'),
9
- projectSecret: z.string().optional().describe('Infura project secret'),
15
+
16
+ export const EvmJsonRpcConfigZod = z.object({
17
+ url: z.url().optional().register(globalRegistry, {
18
+ description: 'JSON-RPC URL',
19
+ title: 'evm.jsonRpc.url',
20
+ type: 'string',
21
+ }),
10
22
  })
11
- export const EvmConfigSchema = z.object({
12
- chainId: z.string().optional().describe('EVM chain ID'),
13
- infura: EvmInfuraConfigSchema.optional().describe('Infura Provider configuration'),
14
- jsonRpc: EvmJsonRpcConfigSchema.optional().describe('JSON-RPC Provider configuration'),
23
+
24
+ export const EvmConfigZod = z.object({
25
+ chainId: z.string().optional().register(globalRegistry, {
26
+ description: 'EVM chain ID',
27
+ title: 'evm.chainId',
28
+ type: 'string',
29
+ }),
30
+ infura: EvmInfuraConfigZod.optional().describe('Infura Provider configuration'),
31
+ jsonRpc: EvmJsonRpcConfigZod.optional().describe('JSON-RPC Provider configuration'),
15
32
  })
16
33
 
17
- export type EvmConfig = z.infer<typeof EvmConfigSchema>
34
+ export type EvmConfig = z.infer<typeof EvmConfigZod>
package/src/config/Log.ts CHANGED
@@ -1,6 +1,22 @@
1
1
  import type { LogLevelKey } from '@xylabs/logger'
2
2
  import { LogLevel } from '@xylabs/logger'
3
- import z from 'zod'
3
+ import z, { globalRegistry } from 'zod'
4
4
  const LogLevels = Object.keys(LogLevel) as [LogLevelKey, ...LogLevelKey[]]
5
5
 
6
- export const LogConfigSchema = z.object({ level: z.enum(LogLevels).default('info').describe('Desired process verbosity') })
6
+ export const LogConfigZod = z.object({
7
+ logLevel: z.enum(LogLevels).default('info').register(globalRegistry, {
8
+ choices: LogLevels,
9
+ default: 'info',
10
+ description: 'Desired process verbosity',
11
+ title: 'logLevel',
12
+ type: 'string',
13
+ }),
14
+ silent: z.boolean().default(false).register(globalRegistry, {
15
+ default: false,
16
+ description: 'Whether to run in silent mode',
17
+ title: 'silent',
18
+ type: 'boolean',
19
+ }),
20
+ })
21
+
22
+ export type LogConfig = z.infer<typeof LogConfigZod>
@@ -1,16 +1,43 @@
1
- import z from 'zod'
1
+ import z, { globalRegistry } from 'zod'
2
2
 
3
- import { MnemonicStringSchema } from '../validation/index.ts'
3
+ import { MnemonicStringZod } from '../validation/index.ts'
4
4
 
5
- export const ProducerConfigSchema = z.object({
5
+ export const ProducerConfigZod = z.object({
6
+ disableIntentRedeclaration: z.boolean().optional().register(globalRegistry, {
7
+ description: 'Should the producer skip redeclaring their intent to continue producing blocks',
8
+ title: 'producer.disableIntentRedeclaration',
9
+ type: 'boolean',
10
+ }),
6
11
  // TODO: Port schema
7
- healthCheckPort: z.coerce.number().optional().describe('Port for the Producer health checks'),
12
+ healthCheckPort: z.coerce.number().optional().register(globalRegistry, {
13
+ description: 'Port for the Producer health checks',
14
+ title: 'producer.healthCheckPort',
15
+ type: 'number',
16
+ }),
8
17
  // TODO: BigInt schema
9
- minStake: z.coerce.number().default(1).describe('Minimum stake required to be a Producer'),
10
- mnemonic: MnemonicStringSchema.optional().describe('Mnemonic for the Producer wallet'),
18
+ minStake: z.coerce.number().default(1).register(globalRegistry, {
19
+ description: 'Minimum stake required to be a Producer',
20
+ title: 'producer.minStake',
21
+ type: 'number',
22
+ }),
23
+ mnemonic: MnemonicStringZod.optional().register(globalRegistry, {
24
+ description: 'Mnemonic for the Producer wallet',
25
+ title: 'producer.mnemonic',
26
+ type: 'string',
27
+ }),
11
28
  // TODO: Port schema
12
- port: z.coerce.number().default(8081).describe('Port for the Producer'),
13
- disableIntentRedeclaration: z.boolean().optional().describe('Should the producer skip redeclaring their intent to continue producing blocks'),
29
+ port: z.coerce.number().default(8081).register(globalRegistry, {
30
+ default: 8081,
31
+ description: 'Port for the Producer',
32
+ title: 'producer.port',
33
+ type: 'number',
34
+ }),
14
35
  // TODO: Address schema
15
- rewardAddress: z.string().optional().describe('Address to receive block rewards'),
36
+ rewardAddress: z.string().optional().register(globalRegistry, {
37
+ description: 'Address to receive block rewards',
38
+ title: 'producer.rewardAddress',
39
+ type: 'string',
40
+ }),
16
41
  })
42
+
43
+ export type ProducerConfig = z.infer<typeof ProducerConfigZod>
@@ -1,13 +1,17 @@
1
- import z from 'zod'
1
+ import z, { globalRegistry } from 'zod'
2
2
 
3
- export const OpenTelemetryConfigSchema = z.object({
3
+ export const OpenTelemetryConfigZod = z.object({
4
4
  // OpenTelemetry options
5
- otlpEndpoint: z.string().optional().describe('OTLP endpoint for exporting telemetry data'),
5
+ otlpEndpoint: z.url().optional().register(globalRegistry, {
6
+ description: 'OTLP endpoint for exporting telemetry data',
7
+ title: 'telemetry.otel.otlpEndpoint',
8
+ type: 'string',
9
+ }),
6
10
  })
7
11
 
8
- export const TelemetryConfigSchema = z.object({
12
+ export const TelemetryConfigZod = z.object({
9
13
  // OpenTelemetry configuration
10
- otel: OpenTelemetryConfigSchema.optional().describe('OpenTelemetry configuration'),
14
+ otel: OpenTelemetryConfigZod.optional().describe('OpenTelemetry configuration'),
11
15
  }).describe('Telemetry configuration options')
12
16
 
13
- export type TelemetryConfig = z.infer<typeof TelemetryConfigSchema>
17
+ export type TelemetryConfig = z.infer<typeof TelemetryConfigZod>
@@ -0,0 +1,41 @@
1
+ import z from 'zod'
2
+
3
+ const DescriptionSchema = z.string()
4
+ const TitleSchema = z.string()
5
+
6
+ export const JSONSchemaMetaSchema = z
7
+ .object({
8
+ id: z.string().optional(),
9
+ title: TitleSchema.optional(),
10
+ description: DescriptionSchema.optional(),
11
+ deprecated: z.boolean().optional(),
12
+ })
13
+ .catchall(z.unknown()) // allow arbitrary extra keys
14
+
15
+ export const GlobalMetaSchema = JSONSchemaMetaSchema.extend({})
16
+
17
+ const ChoicesSchema = z
18
+ .array(z.union([z.string(), z.number(), z.literal(true), z.undefined()]))
19
+ .readonly()
20
+
21
+ export const UsageMetaSchema = GlobalMetaSchema.extend({
22
+ choices: ChoicesSchema.optional(),
23
+ default: z.unknown().optional(),
24
+ description: DescriptionSchema,
25
+ group: z.string().optional(),
26
+ hidden: z.boolean().optional(),
27
+ title: TitleSchema,
28
+ type: z.union([
29
+ z.literal('array'),
30
+ z.literal('count'),
31
+ z.literal('boolean'),
32
+ z.literal('number'),
33
+ z.literal('string'),
34
+ ]),
35
+ })
36
+
37
+ export type UsageMeta = z.infer<typeof UsageMetaSchema>
38
+
39
+ export function isUsageMeta(v: unknown): v is UsageMeta {
40
+ return UsageMetaSchema.safeParse(v).success
41
+ }
@@ -1,2 +1,3 @@
1
1
  export * from './Config.ts'
2
2
  export { hasMongoConfig } from './storage/index.ts'
3
+ export * from './UsageMeta.ts'
@@ -1,10 +1,14 @@
1
- import z from 'zod'
1
+ import z, { globalRegistry } from 'zod'
2
2
 
3
- import { MongoConfigSchema } from './driver/index.ts'
3
+ import { MongoConfigZod } from './driver/index.ts'
4
4
 
5
- export const StorageConfigSchema = z.object({
6
- mongo: MongoConfigSchema.optional().describe('Configuration for the MongoDBstorage driver'),
7
- root: z.string().optional().describe('Root directory for local storage'),
5
+ export const StorageConfigZod = z.object({
6
+ mongo: MongoConfigZod.optional().describe('Configuration for the MongoD storage driver'),
7
+ root: z.string().optional().register(globalRegistry, {
8
+ description: 'Root directory for local storage',
9
+ title: 'storage.root',
10
+ type: 'string',
11
+ }),
8
12
  }).describe('Storage configuration options')
9
13
 
10
- export type StorageConfig = z.infer<typeof StorageConfigSchema>
14
+ export type StorageConfig = z.infer<typeof StorageConfigZod>
@@ -1,5 +1,5 @@
1
1
  import { isDefined, isUndefined } from '@xylabs/typeof'
2
- import z from 'zod'
2
+ import z, { globalRegistry } from 'zod'
3
3
 
4
4
  /**
5
5
  * Checks if the provided MongoDB configuration contains all necessary fields
@@ -19,13 +19,33 @@ export const hasMongoConfig = (config?: MongoConfig): config is Required<MongoCo
19
19
  )
20
20
  }
21
21
 
22
- export const MongoConfigSchema = z.object({
22
+ export const MongoConfigZod = z.object({
23
23
  // TODO: Create from other arguments
24
- connectionString: z.string().min(1).optional().describe('MongoDB connection string'),
25
- database: z.string().min(1).optional().describe('MongoDB database name'),
26
- domain: z.string().min(1).optional().describe('MongoDB domain'),
27
- password: z.string().min(1).optional().describe('MongoDB password'),
28
- username: z.string().min(1).optional().describe('MongoDB username'),
24
+ connectionString: z.string().min(1).optional().register(globalRegistry, {
25
+ description: 'MongoDB connection string',
26
+ title: 'storage.mongo.connectionString',
27
+ type: 'string',
28
+ }),
29
+ database: z.string().min(1).optional().register(globalRegistry, {
30
+ description: 'MongoDB database name',
31
+ title: 'storage.mongo.database',
32
+ type: 'string',
33
+ }),
34
+ domain: z.string().min(1).optional().register(globalRegistry, {
35
+ description: 'MongoDB domain',
36
+ title: 'storage.mongo.domain',
37
+ type: 'string',
38
+ }),
39
+ password: z.string().min(1).optional().register(globalRegistry, {
40
+ description: 'MongoDB password',
41
+ title: 'storage.mongo.password',
42
+ type: 'string',
43
+ }),
44
+ username: z.string().min(1).optional().register(globalRegistry, {
45
+ description: 'MongoDB username',
46
+ title: 'storage.mongo.username',
47
+ type: 'string',
48
+ }),
29
49
  })
30
50
 
31
- export type MongoConfig = z.infer<typeof MongoConfigSchema>
51
+ export type MongoConfig = z.infer<typeof MongoConfigZod>
@@ -1,5 +1,5 @@
1
1
  import { assertEx } from '@xylabs/assert'
2
- import type { Address, Hex } from '@xylabs/hex'
2
+ import type { Address } from '@xylabs/hex'
3
3
  import { toHex } from '@xylabs/hex'
4
4
  import type { AccountInstance } from '@xyo-network/account-model'
5
5
  import { BoundWitnessBuilder } from '@xyo-network/boundwitness-builder'
@@ -7,14 +7,15 @@ import { PayloadBuilder } from '@xyo-network/payload-builder'
7
7
  import type { Payload } from '@xyo-network/payload-model'
8
8
  import type {
9
9
  AllowedBlockPayload,
10
+ Chain,
10
11
  ExecutableFields,
11
12
  FromFields,
12
- HydratedTransaction, TransactionBoundWitness, TransactionBoundWitnessFields, TransactionFeesBigInt,
13
+ SignedHydratedTransactionWithStorageMeta, TransactionBoundWitness, TransactionBoundWitnessFields, TransactionFeesBigInt,
13
14
  } from '@xyo-network/xl1-protocol'
14
15
  import { defaultTransactionFees } from '@xyo-network/xl1-protocol'
15
16
 
16
17
  export async function buildTransaction(
17
- chain: Hex,
18
+ chain: Chain,
18
19
  onChainPayloads: AllowedBlockPayload[],
19
20
  offChainPayloads: Payload[],
20
21
  signer: AccountInstance | AccountInstance[],
@@ -22,7 +23,7 @@ export async function buildTransaction(
22
23
  exp: number,
23
24
  from?: Address,
24
25
  fees: TransactionFeesBigInt = defaultTransactionFees,
25
- ): Promise<HydratedTransaction> {
26
+ ): Promise<SignedHydratedTransactionWithStorageMeta> {
26
27
  if (from === undefined && Array.isArray(signer)) {
27
28
  throw new Error('from is required when signer is an array')
28
29
  }
@@ -1,25 +1,26 @@
1
- import type { Address, Hex } from '@xylabs/hex'
1
+ import type { Address } from '@xylabs/hex'
2
2
  import { toHex } from '@xylabs/hex'
3
3
  import { BoundWitnessBuilder } from '@xyo-network/boundwitness-builder'
4
4
  import { PayloadBuilder } from '@xyo-network/payload-builder'
5
5
  import type { Payload } from '@xyo-network/payload-model'
6
6
  import type {
7
7
  AllowedBlockPayload,
8
+ Chain,
8
9
  ExecutableFields,
9
10
  FromFields,
10
- HydratedTransaction, TransactionBoundWitness, TransactionBoundWitnessFields, TransactionFeesBigInt,
11
+ SignedHydratedTransactionWithStorageMeta, TransactionBoundWitness, TransactionBoundWitnessFields, TransactionFeesBigInt,
11
12
  } from '@xyo-network/xl1-protocol'
12
13
  import { defaultTransactionFees } from '@xyo-network/xl1-protocol'
13
14
 
14
15
  export async function buildUnsignedTransaction(
15
- chain: Hex,
16
+ chain: Chain,
16
17
  onChainPayloads: AllowedBlockPayload[],
17
18
  offChainPayloads: Payload[],
18
19
  nbf: number,
19
20
  exp: number,
20
21
  from: Address,
21
22
  fees: TransactionFeesBigInt = defaultTransactionFees,
22
- ): Promise<HydratedTransaction> {
23
+ ): Promise<SignedHydratedTransactionWithStorageMeta> {
23
24
  const txBoundWitnessFields: TransactionBoundWitnessFields = {
24
25
  chain,
25
26
  fees: {
@@ -5,44 +5,44 @@ import { hydrateTypedBoundWitness, tryHydrateTypedBoundWitness } from '@xyo-netw
5
5
  import type { Payload, WithStorageMeta } from '@xyo-network/payload-model'
6
6
  import type {
7
7
  AllowedBlockPayload,
8
- HydratedTransaction, TransactionBoundWitness,
8
+ SignedHydratedTransaction, SignedHydratedTransactionWithStorageMeta, TransactionBoundWitness,
9
9
  } from '@xyo-network/xl1-protocol'
10
- import { isAllowedBlockPayload, isTransactionBoundWitnessWithStorageMeta } from '@xyo-network/xl1-protocol'
10
+ import { isAllowedBlockPayload, isSignedTransactionBoundWitnessWithStorageMeta } from '@xyo-network/xl1-protocol'
11
11
 
12
12
  export const tryHydrateTransaction = async (
13
13
  archivist: ReadArchivist,
14
14
  hash: Hash,
15
- ): Promise<HydratedTransaction | undefined> => {
15
+ ): Promise<SignedHydratedTransactionWithStorageMeta | undefined> => {
16
16
  return (await tryHydrateTypedBoundWitness<TransactionBoundWitness>(
17
17
  archivist,
18
18
  hash,
19
- isTransactionBoundWitnessWithStorageMeta,
20
- )) as HydratedTransaction | undefined
19
+ isSignedTransactionBoundWitnessWithStorageMeta,
20
+ )) as SignedHydratedTransactionWithStorageMeta | undefined
21
21
  }
22
22
 
23
23
  export const hydrateTransaction = async (
24
24
  archivist: ReadArchivist,
25
25
  hash: Hash,
26
- ): Promise<HydratedTransaction> => {
26
+ ): Promise<SignedHydratedTransaction> => {
27
27
  return await hydrateTypedBoundWitness<TransactionBoundWitness>(
28
28
  archivist,
29
29
  hash,
30
- isTransactionBoundWitnessWithStorageMeta,
31
- ) as HydratedTransaction
30
+ isSignedTransactionBoundWitnessWithStorageMeta,
31
+ ) as SignedHydratedTransaction
32
32
  }
33
33
 
34
- export const flattenHydratedTransaction = (hydratedTransaction: HydratedTransaction): Payload[] => {
34
+ export const flattenHydratedTransaction = (hydratedTransaction: SignedHydratedTransaction): Payload[] => {
35
35
  const [tx, txPayloads] = hydratedTransaction
36
36
  return [...txPayloads, tx]
37
37
  }
38
38
 
39
- export const flattenHydratedTransactions = (hydratedTransactions: HydratedTransaction[]): Payload[] =>
39
+ export const flattenHydratedTransactions = (hydratedTransactions: SignedHydratedTransaction[]): Payload[] =>
40
40
  hydratedTransactions.flatMap(tx => flattenHydratedTransaction(tx))
41
41
 
42
42
  export const tryHydrateElevatedTransaction = async (
43
43
  archivist: ReadArchivist,
44
44
  hash: Hash,
45
- ): Promise<HydratedTransaction | undefined> => {
45
+ ): Promise<SignedHydratedTransactionWithStorageMeta | undefined> => {
46
46
  const hydratedTransaction = await tryHydrateTransaction(archivist, hash)
47
47
  if (!hydratedTransaction) {
48
48
  return undefined
@@ -68,6 +68,6 @@ export const tryHydrateElevatedTransaction = async (
68
68
  export const hydrateElevatedTransaction = async (
69
69
  archivist: ReadArchivist,
70
70
  hash: Hash,
71
- ): Promise<HydratedTransaction> => {
71
+ ): Promise<SignedHydratedTransaction> => {
72
72
  return assertEx(await tryHydrateElevatedTransaction(archivist, hash), () => 'Hydration failed')
73
73
  }
@@ -3,14 +3,14 @@ import type {
3
3
  } from '@xylabs/hex'
4
4
  import { PayloadBuilder } from '@xyo-network/payload-builder'
5
5
  import type { AnyPayload, Sequence } from '@xyo-network/payload-model'
6
- import type { HydratedTransaction, TransactionBoundWitness } from '@xyo-network/xl1-protocol'
6
+ import type { SignedHydratedTransactionWithStorageMeta, TransactionBoundWitness } from '@xyo-network/xl1-protocol'
7
7
  import {
8
8
  describe, expect, it,
9
9
  } from 'vitest'
10
10
 
11
11
  import { transactionBlockByteCount } from '../transactionBlockByteCount.ts'
12
12
 
13
- const hydratedTransaction: HydratedTransaction<TransactionBoundWitness, AnyPayload> = [
13
+ const hydratedTransaction: SignedHydratedTransactionWithStorageMeta<TransactionBoundWitness, AnyPayload> = [
14
14
  {
15
15
  schema: 'network.xyo.boundwitness',
16
16
  addresses: [
@@ -90,7 +90,7 @@ describe('transactionBlockByteCount', () => {
90
90
 
91
91
  it('handles transaction with empty payload array', () => {
92
92
  // Arrange
93
- const emptyPayloadsTransaction: HydratedTransaction = [
93
+ const emptyPayloadsTransaction: SignedHydratedTransactionWithStorageMeta = [
94
94
  { ...hydratedTransaction[0] },
95
95
  [], // Empty payload array
96
96
  ]
@@ -122,7 +122,7 @@ describe('transactionBlockByteCount', () => {
122
122
  },
123
123
  })
124
124
 
125
- const complexTransaction: HydratedTransaction = [
125
+ const complexTransaction: SignedHydratedTransactionWithStorageMeta = [
126
126
  { ...hydratedTransaction[0] },
127
127
  [complexPayload],
128
128
  ]
@@ -155,7 +155,7 @@ describe('transactionBlockByteCount', () => {
155
155
  _hash: `hash${i}`,
156
156
  })))
157
157
 
158
- const largeTransaction: HydratedTransaction = [
158
+ const largeTransaction: SignedHydratedTransactionWithStorageMeta = [
159
159
  { ...hydratedTransaction[0] },
160
160
  largePayloads,
161
161
  ]
@@ -185,7 +185,7 @@ describe('transactionBlockByteCount', () => {
185
185
  _hash: 'special-hash',
186
186
  })
187
187
 
188
- const specialTransaction: HydratedTransaction = [
188
+ const specialTransaction: SignedHydratedTransactionWithStorageMeta = [
189
189
  { ...hydratedTransaction[0] },
190
190
  [specialCharPayload],
191
191
  ]
@@ -219,7 +219,7 @@ describe('transactionBlockByteCount', () => {
219
219
  _extraMeta2: 'should be omitted as well',
220
220
  })
221
221
 
222
- const transactionWithExtraMeta: HydratedTransaction = [
222
+ const transactionWithExtraMeta: SignedHydratedTransactionWithStorageMeta = [
223
223
  txWithExtraMeta,
224
224
  [payloadWithExtraMeta],
225
225
  ]
@@ -1,8 +1,8 @@
1
1
  import { PayloadBuilder } from '@xyo-network/payload-builder'
2
- import type { HydratedTransaction } from '@xyo-network/xl1-protocol'
2
+ import type { SignedHydratedTransaction } from '@xyo-network/xl1-protocol'
3
3
 
4
4
  /** The number of bytes that a transaction and its payloads will take up in a block */
5
- export function transactionBlockByteCount([transaction, payloads]: HydratedTransaction): number {
5
+ export function transactionBlockByteCount([transaction, payloads]: SignedHydratedTransaction): number {
6
6
  const cleanTransaction = PayloadBuilder.omitStorageMeta(transaction)
7
7
  const transactionBytes = JSON.stringify(cleanTransaction).length
8
8
  const cleanPayloads = PayloadBuilder.omitStorageMeta(payloads)
@@ -1,6 +1,6 @@
1
1
  import { asHash, type Hash } from '@xylabs/hex'
2
2
  import type { Payload, WithHashStorageMeta } from '@xyo-network/payload-model'
3
- import type { HydratedTransaction, TransactionBoundWitness } from '@xyo-network/xl1-protocol'
3
+ import type { SignedHydratedTransactionWithStorageMeta, TransactionBoundWitness } from '@xyo-network/xl1-protocol'
4
4
 
5
5
  import { crackOperations } from './transactionOperations.ts'
6
6
 
@@ -9,7 +9,7 @@ export function transactionElevatedPayloadHashes(transaction: TransactionBoundWi
9
9
  return elevateOperations.map(op => asHash(op[1][0], true))
10
10
  }
11
11
 
12
- export function transactionElevatedPayloads([transaction, payloads]: HydratedTransaction): WithHashStorageMeta<Payload>[] {
12
+ export function transactionElevatedPayloads([transaction, payloads]: SignedHydratedTransactionWithStorageMeta): WithHashStorageMeta<Payload>[] {
13
13
  const hashes = transactionElevatedPayloadHashes(transaction)
14
14
  const elevatedPayloads = payloads.filter(payload => hashes.includes(payload._hash))
15
15
  return elevatedPayloads
@@ -1,16 +1,16 @@
1
- import type { HydratedTransaction } from '@xyo-network/xl1-protocol'
1
+ import type { SignedHydratedTransactionWithStorageMeta } from '@xyo-network/xl1-protocol'
2
2
  import { AttoXL1, TransactionGasCosts } from '@xyo-network/xl1-protocol'
3
3
 
4
4
  import { transactionBlockByteCount } from './transactionBlockByteCount.ts'
5
5
  import { transactionElevatedPayloads } from './transactionElevatedPayloads.ts'
6
6
 
7
7
  /** The required gas for the byte storage on the block chain for a transaction */
8
- export function transactionBytesRequiredGas([transaction, payloads]: HydratedTransaction): AttoXL1 {
8
+ export function transactionBytesRequiredGas([transaction, payloads]: SignedHydratedTransactionWithStorageMeta): AttoXL1 {
9
9
  const transactionBlockBytes = transactionBlockByteCount([transaction, payloads])
10
10
  return AttoXL1(TransactionGasCosts.characterStorage * BigInt(transactionBlockBytes))
11
11
  }
12
12
 
13
- export function transactionRequiredGas(hydratedTransaction: HydratedTransaction): AttoXL1 {
13
+ export function transactionRequiredGas(hydratedTransaction: SignedHydratedTransactionWithStorageMeta): AttoXL1 {
14
14
  const elevatedPayloads = transactionElevatedPayloads(hydratedTransaction)
15
15
  const hashes = elevatedPayloads.length + 1 /* for transaction itself */
16
16
  const signatures = hydratedTransaction[0].addresses.length
@@ -9,7 +9,7 @@ import { z } from 'zod'
9
9
  * • Checks that the word-count is 12, 15, 18, 21, or 24.
10
10
  *
11
11
  */
12
- export const MnemonicStringSchema = z
12
+ export const MnemonicStringZod = z
13
13
  .string()
14
14
  .transform(s => s.trim().replaceAll(/\s+/g, ' ')) // normalize spacing
15
15
  .refine(
@@ -17,4 +17,4 @@ export const MnemonicStringSchema = z
17
17
  { message: 'Mnemonic must contain 12, 15, 18, 21, or 24 words.' },
18
18
  ).describe('BIP-39 mnemonic string')
19
19
 
20
- export type MnemonicString = z.infer<typeof MnemonicStringSchema>
20
+ export type MnemonicString = z.infer<typeof MnemonicStringZod>