Skip to content

Commit ec98506

Browse files
committed
docs: add documentation for blueprint feature
1 parent b6b3104 commit ec98506

File tree

4 files changed

+46
-3
lines changed

4 files changed

+46
-3
lines changed

src/pages/_meta.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,11 @@
1313
},
1414
"introduction": "Introduction",
1515
"getting-started": "Getting Started",
16+
"additional-features": "Additional Features",
1617
"more-tutorials": "More Tutorials",
1718
"haddock": {
1819
"title": "API Reference (Haddock) ⬈",
1920
"href": "https://haddock.atlas-app.io/",
2021
"newWindow": true
2122
}
22-
}
23-
23+
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
{
2+
"blueprint": "Blueprint"
3+
}
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
import { Callout } from 'nextra-theme-docs'
2+
3+
# Blueprint
4+
5+
Plutus Contract Blueprint, as introduced by [CIP-57](https://cips.cardano.org/cip/CIP-0057) is an effective way of communicating desired structure of validator's associated types such as datum & redeemer to your off-chain code.
6+
7+
With Atlas, you can easily have these types generated for you based on provided schema, along with some helper utilities, yay!
8+
9+
<Callout>
10+
11+
If your validator is parameterised, parameters must be "data" encoded (instead of scott or sums-of-products encoding[^1]) as blueprint notation desires it (data) to be primary binary interface. This is not an issue for datums & redeemers as they are required to be data encoded anyway.
12+
13+
Validators written by tools such as Aiken uses data encoding for validator parameters.
14+
</Callout>
15+
16+
[Here](https://github.com/geniusyield/atlas/blob/main/tests/aiken/bar/validators/baz.ak) we have a parameterised Aiken validator. Mainly, it checks that sum of integers and length of bytestrings given in parameters, datum & redeemer sum up to a specific value.
17+
18+
For it, we have a simple off-chain code [here](https://github.com/geniusyield/atlas/blob/main/tests-privnet/GeniusYield/Test/Privnet/Blueprint.hs), have a look at it and we provide some description for it below.
19+
20+
We first use Template Haskell to splice declarations from [`makeBPTypes`](https://haddock.atlas-app.io/GeniusYield-Types-Blueprint-TH.html#v:makeBPTypes) and [`uponBPTypes`](https://haddock.atlas-app.io/GeniusYield-Types-Blueprint-TH.html#v:uponBPTypes). `makeBPTypes` introduces types from definitions given in blueprint file and `uponBPTypes` creates data related instances such as [`ToData`](https://plutus.cardano.intersectmbo.org/haddock/latest/plutus-ledger-api/PlutusLedgerApi-Common.html#t:ToData), [`FromData`](https://plutus.cardano.intersectmbo.org/haddock/latest/plutus-ledger-api/PlutusLedgerApi-Common.html#t:FromData) for these types[^2].
21+
22+
It is useful to see generated Template Haskell code to know for type and provided utility names which can be done via `-ddump-splices` GHC flag. You may combine this with `-ddump-to-file` to save the output to a file. If you are using cabal, see [this](https://stackoverflow.com/questions/24717500/viewing-core-when-compiling-with-cabal/69678961#69678961) answer on where one can find dumped splice files.
23+
24+
Now we can apply parameters (whose types have been generated by Atlas) to our validator with provided `applyParamsToBPValidator_baz_baz_spend` function and obtain `GYScript` from it using `scriptFromBPSerialisedScript` function. Likewise we have types generated for our datum & redeemer, sweet!
25+
26+
Rest of the off-chain code just tries to interact with the validator by creating a UTxO towards it and then later consuming from it.
27+
28+
<Callout>
29+
30+
To interact with blueprint file, you'll usually just need to import [`GeniusYield.Types.Blueprint.TH`](https://haddock.atlas-app.io/GeniusYield-Types-Blueprint-TH.html) module (which is exposed by `GeniusYield.Types` module), however if you want to inspect the parsed blueprint file, you can use [`readBlueprint`](https://haddock.atlas-app.io/GeniusYield-Types-Blueprint.html#v:readBlueprint).
31+
</Callout>
32+
33+
[^1]: See [CIP-85](https://cips.cardano.org/cip/CIP-0085) to understand about different encodings used.
34+
[^2]: We could however achieve both in single splice, however, since we are using utilities from PlutusTx to derive `ToData` etc. instances, they require type to be in scope first.

src/pages/getting-started/_meta.json

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,11 @@
44
"operations": "Operations over Contract",
55
"testing": "Testing",
66
"endpoints": "Creating Endpoints",
7-
"browser-integration": "Browser Integration"
7+
"browser-integration": "Browser Integration",
8+
"unit-tests": {
9+
"display": "hidden"
10+
},
11+
"integration-tests": {
12+
"display": "hidden"
13+
}
814
}

0 commit comments

Comments
 (0)