From 5a8ef1aef0cdffb9ec8ea05320d59559671bdc11 Mon Sep 17 00:00:00 2001 From: waalge Date: Sat, 23 Nov 2024 17:05:42 +0000 Subject: [PATCH 1/4] add: template from docs --- crates/aiken/src/cmd/new.rs | 43 +++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/crates/aiken/src/cmd/new.rs b/crates/aiken/src/cmd/new.rs index f6596f8e..7dc43875 100644 --- a/crates/aiken/src/cmd/new.rs +++ b/crates/aiken/src/cmd/new.rs @@ -42,6 +42,7 @@ fn create_project(args: Args, package_name: &PackageName) -> miette::Result<()> if !args.lib { create_env(&root)?; create_validators(&root)?; + create_validator(&root)?; } readme(&root, &package_name.repo)?; @@ -110,6 +111,48 @@ fn create_validators(root: &Path) -> miette::Result<()> { fs::create_dir_all(validators).into_diagnostic() } +fn create_validator(root: &Path) -> miette::Result<()> { + let validators = root.join("validators"); + fs::write( + validators.join("hello.ak"), + indoc! { + r#" + use cardano/address.{{Credential}} + use cardano/assets.{{PolicyId}} + use cardano/certificate.{{Certificate}} + use cardano/governance.{{ProposalProcedure, Voter}} + use cardano/transaction.{{Transaction, OutputReference}} + + validator my_script {{ + mint(redeemer: MyMintRedeemer, policy_id: PolicyId, self: Transaction) {{ + todo @"mint logic goes here" + }} + + spend(datum: Option, redeemer: MySpendRedeemer, utxo: OutputReference, self: Transaction) {{ + todo @"spend logic goes here" + }} + + withdraw(redeemer: MyWithdrawRedeemer, account: Credential, self: Transaction) {{ + todo @"withdraw logic goes here" + }} + + publish(redeemer: MyPublishRedeemer, certificate: Certificate, self: Transaction) {{ + todo @"publish logic goes here" + }} + + vote(redeemer: MyVoteRedeemer, voter: Voter, self: Transaction) {{ + todo @"vote logic goes here" + }} + + propose(redeemer: MyProposeRedeemer, proposal: ProposalProcedure, self: Transaction) {{ + todo @"propose logic goes here" + }} + }} + "#, + }, + ).into_diagnostic() +} + fn readme(root: &Path, project_name: &str) -> miette::Result<()> { fs::write( root.join("README.md"), From 85b6caf9e9ca0b7a23d2d08c0a0fd4f43ea855ea Mon Sep 17 00:00:00 2001 From: Matthias Benkort <5680256+KtorZ@users.noreply.github.com> Date: Sat, 7 Dec 2024 13:28:36 +0100 Subject: [PATCH 2/4] Update crates/aiken/src/cmd/new.rs --- crates/aiken/src/cmd/new.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/aiken/src/cmd/new.rs b/crates/aiken/src/cmd/new.rs index 7dc43875..e80917cc 100644 --- a/crates/aiken/src/cmd/new.rs +++ b/crates/aiken/src/cmd/new.rs @@ -114,7 +114,7 @@ fn create_validators(root: &Path) -> miette::Result<()> { fn create_validator(root: &Path) -> miette::Result<()> { let validators = root.join("validators"); fs::write( - validators.join("hello.ak"), + validators.join("placeholder.ak"), indoc! { r#" use cardano/address.{{Credential}} From 44c894518b6afa1749387315a424fe6d8ea101f0 Mon Sep 17 00:00:00 2001 From: Matthias Benkort <5680256+KtorZ@users.noreply.github.com> Date: Sat, 7 Dec 2024 13:31:48 +0100 Subject: [PATCH 3/4] Apply suggestions from code review --- crates/aiken/src/cmd/new.rs | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/crates/aiken/src/cmd/new.rs b/crates/aiken/src/cmd/new.rs index e80917cc..ba749181 100644 --- a/crates/aiken/src/cmd/new.rs +++ b/crates/aiken/src/cmd/new.rs @@ -42,7 +42,6 @@ fn create_project(args: Args, package_name: &PackageName) -> miette::Result<()> if !args.lib { create_env(&root)?; create_validators(&root)?; - create_validator(&root)?; } readme(&root, &package_name.repo)?; @@ -108,11 +107,11 @@ fn create_lib(root: &Path) -> miette::Result<()> { fn create_validators(root: &Path) -> miette::Result<()> { let validators = root.join("validators"); - fs::create_dir_all(validators).into_diagnostic() + fs::create_dir_all(validators).into_diagnostic()?; + create_validator_placeholder(&validators) } -fn create_validator(root: &Path) -> miette::Result<()> { - let validators = root.join("validators"); +fn create_validator_placeholder(validators: &Path) -> miette::Result<()> { fs::write( validators.join("placeholder.ak"), indoc! { From 75c88be091d091a1f7bec1032baa48dfd37e740b Mon Sep 17 00:00:00 2001 From: KtorZ Date: Sat, 7 Dec 2024 13:42:53 +0100 Subject: [PATCH 4/4] Fix validator placeholder template - Remove escape sequences for curly braces, not actually needed - Make indentation 2-space - Make it compile without errors - Also add some example for 'else' --- crates/aiken/src/cmd/new.rs | 74 +++++++++++++++++++++---------------- 1 file changed, 42 insertions(+), 32 deletions(-) diff --git a/crates/aiken/src/cmd/new.rs b/crates/aiken/src/cmd/new.rs index ba749181..0a52c98f 100644 --- a/crates/aiken/src/cmd/new.rs +++ b/crates/aiken/src/cmd/new.rs @@ -107,7 +107,7 @@ fn create_lib(root: &Path) -> miette::Result<()> { fn create_validators(root: &Path) -> miette::Result<()> { let validators = root.join("validators"); - fs::create_dir_all(validators).into_diagnostic()?; + fs::create_dir_all(&validators).into_diagnostic()?; create_validator_placeholder(&validators) } @@ -116,37 +116,47 @@ fn create_validator_placeholder(validators: &Path) -> miette::Result<()> { validators.join("placeholder.ak"), indoc! { r#" - use cardano/address.{{Credential}} - use cardano/assets.{{PolicyId}} - use cardano/certificate.{{Certificate}} - use cardano/governance.{{ProposalProcedure, Voter}} - use cardano/transaction.{{Transaction, OutputReference}} - - validator my_script {{ - mint(redeemer: MyMintRedeemer, policy_id: PolicyId, self: Transaction) {{ - todo @"mint logic goes here" - }} - - spend(datum: Option, redeemer: MySpendRedeemer, utxo: OutputReference, self: Transaction) {{ - todo @"spend logic goes here" - }} - - withdraw(redeemer: MyWithdrawRedeemer, account: Credential, self: Transaction) {{ - todo @"withdraw logic goes here" - }} - - publish(redeemer: MyPublishRedeemer, certificate: Certificate, self: Transaction) {{ - todo @"publish logic goes here" - }} - - vote(redeemer: MyVoteRedeemer, voter: Voter, self: Transaction) {{ - todo @"vote logic goes here" - }} - - propose(redeemer: MyProposeRedeemer, proposal: ProposalProcedure, self: Transaction) {{ - todo @"propose logic goes here" - }} - }} + use cardano/address.{Credential} + use cardano/assets.{PolicyId} + use cardano/certificate.{Certificate} + use cardano/governance.{ProposalProcedure, Voter} + use cardano/transaction.{Transaction, OutputReference} + + validator placeholder { + mint(_redeemer: Data, _policy_id: PolicyId, _self: Transaction) { + todo @"mint logic goes here" + } + + spend(_datum: Option, _redeemer: Data, _utxo: OutputReference, _self: Transaction) { + todo @"spend logic goes here" + } + + withdraw(_redeemer: Data, _account: Credential, _self: Transaction) { + todo @"withdraw logic goes here" + } + + publish(_redeemer: Data, _certificate: Certificate, _self: Transaction) { + todo @"publish logic goes here" + } + + vote(_redeemer: Data, _voter: Voter, _self: Transaction) { + todo @"vote logic goes here" + } + + propose(_redeemer: Data, _proposal: ProposalProcedure, _self: Transaction) { + todo @"propose logic goes here" + } + + // // If needs be, remove any of unneeded handlers above, and use: + // + // else(_ctx: ScriptContext) { + // todo @"fallback logic if none of the other purposes match" + // } + // + // // You will also need an additional import: + // // + // // use cardano/script_context.{ScriptContext} + } "#, }, ).into_diagnostic()