Data.ts
Data overview
Table of contents
- combinators
- constants
- constructors
- equality
- errors
- generators
- hashing
- model
- predicates
- schemas
- transformation
- utilities
- utils
combinators
withSchema
Create a schema that transforms from a custom type to Data and provides CBOR encoding
Signature
export declare const withSchema: <A, I extends Data>(
schema: Schema.Schema<A, I>,
options?: CBOR.CodecOptions
) => {
toData: (a: A, overrideOptions?: ParseOptions) => I
fromData: (i: I, overrideOptions?: ParseOptions) => A
toCBORHex: (a: A, overrideOptions?: ParseOptions) => string
toCBORBytes: (a: A, overrideOptions?: ParseOptions) => any
fromCBORHex: (i: string, overrideOptions?: ParseOptions) => A
fromCBORBytes: (i: any, overrideOptions?: ParseOptions) => A
}Added in v2.0.0
constants
DEFAULT_CBOR_OPTIONS
Default CBOR options for Data encoding/decoding
Signature
export declare const DEFAULT_CBOR_OPTIONS: CBOR.CodecOptionsAdded in v2.0.0
constructors
bytearray
Creates Plutus bounded bytes from hex string
Signature
export declare const bytearray: (bytes: string) => ByteArrayAdded in v2.0.0
constr
Creates a constructor with the specified index and data
Signature
export declare const constr: (index: bigint, fields: Array<Data>) => ConstrAdded in v2.0.0
int
Creates Plutus big integer
Signature
export declare const int: (integer: bigint) => IntAdded in v2.0.0
list
Creates a Plutus list from items
Signature
export declare const list: (list: Array<Data>) => ListAdded in v2.0.0
map
Creates a Plutus map from key-value pairs
Signature
export declare const map: (entries: Array<[key: Data, value: Data]>) => MapAdded in v2.0.0
equality
equals
Deep structural equality for Plutus Data values. Handles maps, lists, ints, bytes, and constrs.
Signature
export declare const equals: (a: Data, b: Data) => booleanAdded in v2.0.0
hash
Deep structural hash for Plutus Data values. Handles maps, lists, ints, bytes, and constrs.
Signature
export declare const hash: (data: Data) => numberAdded in v2.0.0
errors
DataError (class)
Error class for Data related operations.
Signature
export declare class DataErrorAdded in v2.0.0
generators
arbitrary
FastCheck arbitrary for PlutusData types
Signature
export declare const arbitrary: FastCheck.Arbitrary<Data>Added in v2.0.0
arbitraryConstr
Creates an arbitrary that generates Constr values
Signature
export declare const arbitraryConstr: (depth: number) => FastCheck.Arbitrary<Constr>Added in v2.0.0
arbitraryPlutusBigInt
Creates an arbitrary that generates PlutusBigInt values
Signature
export declare const arbitraryPlutusBigInt: () => FastCheck.Arbitrary<bigint>Added in v2.0.0
arbitraryPlutusBytes
Creates an arbitrary that generates PlutusBytes values
Signature
export declare const arbitraryPlutusBytes: () => FastCheck.Arbitrary<Uint8Array>Added in v2.0.0
arbitraryPlutusData
Creates an arbitrary that generates PlutusData values with controlled depth
Signature
export declare const arbitraryPlutusData: (depth?: number) => FastCheck.Arbitrary<Data>Added in v2.0.0
arbitraryPlutusList
Creates an arbitrary that generates PlutusList values
Signature
export declare const arbitraryPlutusList: (depth: number) => FastCheck.Arbitrary<List>Added in v2.0.0
arbitraryPlutusMap
Creates an arbitrary that generates PlutusMap values with unique keys Following a similar distribution pattern:
- 60% PlutusBigInt keys
- 30% PlutusBytes keys
- 10% Complex keys
Signature
export declare const arbitraryPlutusMap: (depth: number) => FastCheck.Arbitrary<Map>Added in v2.0.0
hashing
hashData
Compute the hash of PlutusData using blake2b-256 over its CBOR encoding. Defaults to CML_DATA_DEFAULT_OPTIONS (indefinite-length arrays/maps).
Signature
export declare const hashData: (data: Data, options?: CBOR.CodecOptions) => DatumHash.DatumHashExample
import * as Data from "@evolution-sdk/evolution/Data"
// Hash a simple integer
const intData = 42n
const intHash = Data.hashData(intData)
// Hash a constructor
const constr = new Data.Constr({ index: 0n, fields: [1n, 2n] })
const constrHash = Data.hashData(constr)
// Hash a bytearray
const bytes = new Uint8Array([0xde, 0xad, 0xbe, 0xef])
const bytesHash = Data.hashData(bytes)Added in v2.0.0
model
Data (type alias)
PlutusData type definition (runtime type) Based on Conway CDDL specification
CDDL: plutus_data =
constr<plutus_data>
/ {* plutus_data => plutus_data}
/ [* plutus_data]
/ big_int
/ bounded_bytes
constr<a0> =
#6.121([* a0])
/ #6.122([* a0])
/ #6.123([* a0])
/ #6.124([* a0])
/ #6.125([* a0])
/ #6.126([* a0])
/ #6.127([* a0])
/ #6.102([uint, [* a0]])Constructor Index Limits:
- Tags 121-127: Direct encoding for constructor indices 0-6
- Tag 102: General constructor encoding for any uint value
- Maximum constructor index: 2^64 - 1 (18,446,744,073,709,551,615) as per CBOR RFC 8949 specification for unsigned integers
Signature
export type Data =
// Constr (runtime with bigint index)
| Constr
// Map (using standard Map since Schema.Map produces Map<K,V>)
| globalThis.Map<Data, Data>
// List
| ReadonlyArray<Data>
// Int (runtime as bigint)
| bigint
// ByteArray (runtime as Uint8Array)
| Uint8ArrayAdded in v2.0.0
DataEncoded (type alias)
PlutusData encoded type (for JSON/CBOR encoding) Based on Conway CDDL specification
Signature
export type DataEncoded =
// Constr (encoded with string index)
| { readonly index: string; readonly fields: ReadonlyArray<DataEncoded> }
// Map (encoded as array of [key, value] pairs)
| ReadonlyArray<readonly [DataEncoded, DataEncoded]>
// List
| ReadonlyArray<DataEncoded>
// Int (encoded as string)
| string
// ByteArray (encoded as hex string)
| stringAdded in v2.0.0
List (type alias)
PlutusList type alias
Signature
export type List = ReadonlyArray<Data>Added in v2.0.0
Map (type alias)
PlutusMap type alias
Signature
export type Map = globalThis.Map<Data, Data>Added in v2.0.0
predicates
isBytes
Type guard to check if a value is a PlutusBytes
Signature
export declare const isBytes: (u: unknown, overrideOptions?: ParseOptions | number) => u is Uint8ArrayAdded in v2.0.0
isConstr
Type guard to check if a value is a Constr
Signature
export declare const isConstr: (data: unknown) => data is ConstrAdded in v2.0.0
isInt
Type guard to check if a value is a PlutusBigInt
Signature
export declare const isInt: (u: unknown, overrideOptions?: ParseOptions | number) => u is bigintAdded in v2.0.0
isList
Type guard to check if a value is a PlutusList
Signature
export declare const isList: (u: unknown, overrideOptions?: ParseOptions | number) => u is readonly Data[]Added in v2.0.0
isMap
Type guard to check if a value is a PlutusMap
Signature
export declare const isMap: (u: unknown, overrideOptions?: ParseOptions | number) => u is globalThis.Map<Data, Data>Added in v2.0.0
schemas
ByteArray
Schema for PlutusBytes data type
Signature
export declare const ByteArray: Schema.Schema<Uint8Array, string, never>Added in v2.0.0
Constr (class)
Constr schema for constructor alternatives
Signature
export declare class ConstrAdded in v2.0.0
[Equal.symbol] (method)
Signature
[Equal.symbol](that: unknown): boolean[Hash.symbol] (method)
Signature
[Hash.symbol](): numberDataSchema
Combined schema for PlutusData type with proper recursion
Signature
export declare const DataSchema: DataSchemaAdded in v2.0.0
FromCBORBytes
CBOR bytes transformation schema for PlutusData using CDDL. Transforms between CBOR bytes and Data using CDDL encoding.
Signature
export declare const FromCBORBytes: (
options?: CBOR.CodecOptions
) => Schema.transform<
Schema.transformOrFail<
typeof Schema.Uint8ArrayFromSelf,
Schema.declare<CBOR.CBOR, CBOR.CBOR, readonly [], never>,
never
>,
Schema.transformOrFail<Schema.Schema<CBOR.CBOR, CBOR.CBOR, never>, Schema.SchemaClass<Data, Data, never>, never>
>Added in v2.0.0
FromCBORHex
CBOR hex transformation schema for PlutusData using CDDL. Transforms between CBOR hex string and Data using CDDL encoding.
Signature
export declare const FromCBORHex: (
options?: CBOR.CodecOptions
) => Schema.transform<
Schema.Schema<Uint8Array, string, never>,
Schema.transform<
Schema.transformOrFail<
typeof Schema.Uint8ArrayFromSelf,
Schema.declare<CBOR.CBOR, CBOR.CBOR, readonly [], never>,
never
>,
Schema.transformOrFail<Schema.Schema<CBOR.CBOR, CBOR.CBOR, never>, Schema.SchemaClass<Data, Data, never>, never>
>
>Added in v2.0.0
FromCDDL
CDDL schema for PlutusData following the Conway specification.
plutus_data =
constr<plutus_data>
/ {* plutus_data => plutus_data}
/ [* plutus_data]
/ big_int
/ bounded_bytes
constr<a0> =
#6.121([* a0]) // index 0
/ #6.122([* a0]) // index 1
/ #6.123([* a0]) // index 2
/ #6.124([* a0]) // index 3
/ #6.125([* a0]) // index 4
/ #6.126([* a0]) // index 5
/ #6.127([* a0]) // index 6
/ #6.102([uint, [* a0]]) // general constructor
big_int = int / big_uint / big_nint
big_uint = #6.2(bounded_bytes)
big_nint = #6.3(bounded_bytes)This transforms between CBOR values and PlutusData using the existing plutusDataToCBORValue and cborValueToPlutusData functions.
Signature
export declare const FromCDDL: Schema.transformOrFail<
Schema.Schema<CBOR.CBOR, CBOR.CBOR, never>,
Schema.SchemaClass<Data, Data, never>,
never
>Added in v2.0.0
IntSchema
Schema for PlutusBigInt data type
Matches the CDDL specification for big_int:
big_int = int / big_uint / big_nint
big_uint = #6.2(bounded_bytes)
big_nint = #6.3(bounded_bytes)Where:
intcovers integers that fit in CBOR major types 0 and 1 (0 to 2^64-1 for positive, -(2^64-1) to -1 for negative)big_uint(tag 2) covers positive integers larger than 2^64-1big_nint(tag 3) covers negative integers smaller than -(2^64-1)
Note: JavaScript's Number.MAX_SAFE_INTEGER (2^53-1) is much smaller than CBOR's 64-bit limit.
Signature
export declare const IntSchema: Schema.transformOrFail<
Schema.SchemaClass<string, string, never>,
typeof Schema.BigIntFromSelf,
never
>Added in v2.0.0
ListSchema
Schema for PlutusList data type
Signature
export declare const ListSchema: Schema.Array$<Schema.suspend<Data, DataEncoded, never>>Added in v2.0.0
MapSchema
Schema for PlutusMap data type
Signature
export declare const MapSchema: Schema.transform<
Schema.Array$<Schema.Tuple2<Schema.suspend<Data, DataEncoded, never>, Schema.suspend<Data, DataEncoded, never>>>,
Schema.MapFromSelf<Schema.SchemaClass<Data, Data, never>, Schema.SchemaClass<Data, Data, never>>
>Added in v2.0.0
transformation
cborValueToPlutusData
Convert CBORValue to PlutusData
Signature
export declare const cborValueToPlutusData: (cborValue: CBOR.CBOR) => DataAdded in v2.0.0
fromCBORBytes
Decode PlutusData from CBOR bytes
Signature
export declare const fromCBORBytes: (bytes: Uint8Array, options?: CBOR.CodecOptions) => DataAdded in v2.0.0
fromCBORHex
Decode PlutusData from CBOR hex string
Signature
export declare const fromCBORHex: (hex: string, options?: CBOR.CodecOptions) => DataAdded in v2.0.0
plutusDataToCBORValue
Convert PlutusData to CBORValue
Signature
export declare const plutusDataToCBORValue: (data: Data) => CBOR.CBORAdded in v2.0.0
toCBORBytes
Encode PlutusData to CBOR bytes
Signature
export declare const toCBORBytes: (data: Data, options?: CBOR.CodecOptions) => anyAdded in v2.0.0
toCBORHex
Encode PlutusData to CBOR hex string
Signature
export declare const toCBORHex: (data: Data, options?: CBOR.CodecOptions) => stringAdded in v2.0.0
utilities
matchConstr
Pattern matching helper for Constr types
Signature
export declare const matchConstr: <T>(
constr: Constr,
cases: { [key: number]: (fields: ReadonlyArray<Data>) => T; _: (index: number, fields: ReadonlyArray<Data>) => T }
) => TAdded in v2.0.0
matchData
Pattern matching helper for PlutusData types
Signature
export declare const matchData: <T>(
data: Data,
cases: {
Map: (entries: ReadonlyArray<[Data, Data]>) => T
List: (items: ReadonlyArray<Data>) => T
Int: (value: bigint) => T
Bytes: (bytes: Uint8Array) => T
Constr: (constr: Constr) => T
}
) => TAdded in v2.0.0
utils
ByteArray (type alias)
Signature
export type ByteArray = typeof ByteArray.TypeCDDLSchema
Signature
export declare const CDDLSchema: Schema.Schema<CBOR.CBOR, CBOR.CBOR, never>DataSchema (interface)
Signature
export interface DataSchema extends Schema.SchemaClass<Data, DataEncoded> {}Int (type alias)
Signature
export type Int = typeof IntSchema.Type