-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
docs: add documentation for blueprint feature
- Loading branch information
1 parent
b6b3104
commit ec98506
Showing
4 changed files
with
46 additions
and
3 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
{ | ||
"blueprint": "Blueprint" | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,34 @@ | ||
import { Callout } from 'nextra-theme-docs' | ||
|
||
# Blueprint | ||
|
||
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. | ||
|
||
With Atlas, you can easily have these types generated for you based on provided schema, along with some helper utilities, yay! | ||
|
||
<Callout> | ||
|
||
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. | ||
|
||
Validators written by tools such as Aiken uses data encoding for validator parameters. | ||
</Callout> | ||
|
||
[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. | ||
|
||
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. | ||
|
||
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]. | ||
|
||
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. | ||
|
||
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! | ||
|
||
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. | ||
|
||
<Callout> | ||
|
||
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). | ||
</Callout> | ||
|
||
[^1]: See [CIP-85](https://cips.cardano.org/cip/CIP-0085) to understand about different encodings used. | ||
[^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. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters