Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Aiken Stringify is a library that provides a set of functions to convert various data types to a readable string format, which is useful for debugging in the Aiken programming language. The library offers serializers for different data structures, such as inputs, outputs, addresses, values, minted values, data, out_refs, transactions, and redeemers

Notifications You must be signed in to change notification settings

Mavis2103/aiken-stringify

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

10 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Aiken Stringify

Converting anything to a String

Motivation

Debugging in Aiken is not a happy part, because the only way to log a value is converting it to a String and then passing it to a trace. For example:

trace @"here" // directly from a string
trace string.from_int(my_int) // convert to string
trace cbor.diagnostic(any_value) // diagnostic the value

The cbor.diagnostic helper works well, but not really readable for many cases, specially with encoded data. So this is why this library was born. For example, let's debug an output:

  • With cbor.diagnostic:
let input = Input {
  output_reference: OutputReference(TransactionId("tx_0"), 0),
  output: Output {
    value: assets.from_lovelace(111_000_000) |> assets.add("pid", "name", 1),
    address: Address {
      payment_credential: Script("script_hash"),
      stake_credential: None,
    },
    datum: NoDatum,
    reference_script: None,
  },
}
trace cbor.diagnostic(input)

We get:

121([_ 121([_ 121([_ h'74785F30']), 0]), 121([_ 121([_ 122([_ h'7363726970745F68617368']), 122([])]), {_ h'': {_ h'': 111000000 }, h'706964': {_ h'6E616D65': 1 } }, 121([]), 122([])])])
  • With stringify.input
// ...
trace stringify.input(input)

We get:

Input {
     output_reference: OutputReference(TransactionId('tx_0'), 0),
     output: Output {
       address: Address {
         payment_credential: Script('script_hash')
         stake_credential: None
       },
       value: Value ([
           h'',
           h'',
           111000000
       ],[
           h'706964', # pid
           h'6E616D65', # name
           1
       ]),
       datum: NoDatum
    }
}

Usage

More handy when wrapped by a custom logger. For example:

fn log(self: a, serializer: fn(a) -> String) {
  trace serializer(self)
  self
}

So we can attach it to anywhere like this:

let input = Input {
  output_reference: OutputReference(TransactionId("tx_0"), 0),
  output: Output {
    value: assets.from_lovelace(111_000_000) |> assets.add("pid", "name", 1),
    address: Address {
      payment_credential: Script("script_hash"),
      stake_credential: None,
    },
    datum: NoDatum,
    reference_script: None,
  },
}
+ |> log(stringify.input)

You can use defined loggers inside the debug module

Supported serializers

  • input
  • output
  • credential
  • address
  • value
  • minted_value
  • data
  • out_ref
  • tx
  • redeemers
  • bytearray

License

MIT

About

Aiken Stringify is a library that provides a set of functions to convert various data types to a readable string format, which is useful for debugging in the Aiken programming language. The library offers serializers for different data structures, such as inputs, outputs, addresses, values, minted values, data, out_refs, transactions, and redeemers

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published