For now you'll need rust installed, see rustup.
cargo install aiken
For now the command line application can only encode/decode Untyped Plutus Core to/from it's on chain format. See the roadmap below for a list of planned features and goals.
# help
aiken help
# compile an untyped plutus core program to flat
aiken uplc flat program.uplc
aiken uplc flat program.uplc --print
# output
00001011 00010110 00100001 01001000
00000101 10000001
aiken uplc flat program.uplc --out=something.flat
# decode an untyped plutus core program from flat
aiken uplc unflat program.flat
aiken uplc unflat program.flat --print
# output
(program
11.22.33
(con integer 11)
)
aiken uplc unflat program.flat --out=something.uplc
In general, the goal is to port everything we need for plutus to Rust. This will be needed if we ever want to build a full node in Rust. Since we will have these tools natively in Rust, we plan on building a new high level language for writing smart contracts on Cardano. These are generic milestones and the listed ordering is not necessariy the implementation order or full scope.
- compile plutus core into it's on chain encoding
- reverse the on chain encoding into plutus core
- Plutus Core interpreter
- create a higher level syntax with inspiration from
- JS
- ReasonML
- Elm
- Roc
- Rust
- Gleam
- Language Server
We'd like to give a special thanks to @nkz for creating the logo and giving us the idea to name the project aiken.
Why Aiken?
The name comes from Howard Aiken, an American physicist and a pioneer in computing.
- Encoding/Decoding https://github.com/input-output-hk/plutus/blob/master/plutus-core/untyped-plutus-core/src/UntypedPlutusCore/Core/Instance/Flat.hs
- Typing https://github.com/input-output-hk/plutus/blob/master/plutus-core/untyped-plutus-core/src/UntypedPlutusCore/Core/Type.hs
- Serialization https://hydra.iohk.io/build/14133599/download/1/plutus-core-specification.pdf