From b65cd2ab8df41faddfce3037fe5af9a7a719f8f3 Mon Sep 17 00:00:00 2001 From: rigel rozanski Date: Thu, 29 Jun 2017 03:04:20 -0400 Subject: [PATCH] auto-tutorial basecoin plugins --- docs/guide/basecoin-basics.md | 22 ++++----- docs/guide/basecoin-plugins.md | 81 +++++++++++++++++++++++++++++----- 2 files changed, 82 insertions(+), 21 deletions(-) diff --git a/docs/guide/basecoin-basics.md b/docs/guide/basecoin-basics.md index 07f66677a..48278986e 100644 --- a/docs/guide/basecoin-basics.md +++ b/docs/guide/basecoin-basics.md @@ -3,16 +3,14 @@ testTutorial_BasecoinBasics() { - rm -rf ~/.basecoin 2>/dev/null - rm -rf ~/.basecli 2>/dev/null + #shelldown[1][3] >/dev/null + #shelldown[1][4] >/dev/null KEYPASS=qwertyuiop - #shelldown[1][2] - RES=$((echo $KEYPASS; echo $KEYPASS) | #shelldown[1][3]) + RES=$((echo $KEYPASS; echo $KEYPASS) | #shelldown[1][6]) assertTrue "Line $LINENO: Expected to contain safe, got $RES" '[[ $RES == *safe* ]]' - RES=$((echo $KEYPASS; echo $KEYPASS) | #shelldown[1][4]) + RES=$((echo $KEYPASS; echo $KEYPASS) | #shelldown[1][7]) assertTrue "Line $LINENO: Expected to contain safe, got $RES" '[[ $RES == *safe* ]]' - assertTrue "Expected true for line $LINENO" $? #shelldown[3][-1] assertTrue "Expected true for line $LINENO" $? @@ -27,17 +25,16 @@ testTutorial_BasecoinBasics() { #shelldown[6][0] #shelldown[6][1] - RES="$(#shelldown[6][2])" - assertTrue "Line $LINENO: Expected to contain mycoin, got $RES" '[[ $RES == *mycoin* ]]' + RES=$(#shelldown[6][2] | jq '.data.coins[0].denom' | tr -d '"') + assertTrue "Line $LINENO: Expected to have mycoins, got $RES" '[[ $RES == mycoin ]]' RES="$(#shelldown[6][3] 2>&1)" assertTrue "Line $LINENO: Expected to contain ERROR, got $RES" '[[ $RES == *ERROR* ]]' RES=$((echo $KEYPASS) | #shelldown[7][-1] | jq '.deliver_tx.code') assertTrue "Line $LINENO: Expected 0 code deliver_tx, got $RES" '[[ $RES == 0 ]]' - RES=$(#shelldown[8][-1]) - assertTrue "Line $LINENO: Expected to contain 1000 mycoin, got $RES" '[[ $RES == *1000* ]]' - assertTrue "Line $LINENO: Expected to not contain Error, got $RES" '[[ $RES != *Error* ]]' + RES=$(#shelldown[8][-1] | jq '.data.coins[0].amount') + assertTrue "Line $LINENO: Expected to contain 1000 mycoin, got $RES" '[[ $RES == 1000 ]]' RES=$((echo $KEYPASS) | #shelldown[9][-1] | jq '.deliver_tx.code') assertTrue "Line $LINENO: Expected 0 code deliver_tx, got $RES" '[[ $RES == 0 ]]' @@ -90,7 +87,10 @@ and one to send some coins to later: ```shelldown[1] # WARNING: this will wipe out any existing info in the ~/.basecli dir # including private keys, don't run if you have lots of local state already +# while we're at it let's remove the working directory for the full node too basecli reset_all +rm -rf ~/.basecoin + basecli keys new cool basecli keys new friend ``` diff --git a/docs/guide/basecoin-plugins.md b/docs/guide/basecoin-plugins.md index a98e11f89..2ca621c52 100644 --- a/docs/guide/basecoin-plugins.md +++ b/docs/guide/basecoin-plugins.md @@ -1,11 +1,72 @@ + + # Basecoin Plugins In the [previous guide](basecoin-basics.md), we saw how to use the `basecoin` -tool to start a blockchain and the `basecli` tools to send transactions. We also learned about -`Account` and `SendTx`, the basic data types giving us a multi-asset -cryptocurrency. Here, we will demonstrate how to extend the tools to -use another transaction type, the `AppTx`, so we can send data to a custom plugin. In -this example we explore a simple plugin named `counter`. +tool to start a blockchain and the `basecli` tools to send transactions. We +also learned about `Account` and `SendTx`, the basic data types giving us a +multi-asset cryptocurrency. Here, we will demonstrate how to extend the tools +to use another transaction type, the `AppTx`, so we can send data to a custom +plugin. In this example we explore a simple plugin named `counter`. ## Example Plugin @@ -25,7 +86,7 @@ and a coin amount named `countfee`. The transaction is only accepted if both A new blockchain can be initialized and started just like in the [previous guide](basecoin-basics.md): -``` +```shelldown[0] # WARNING: this wipes out data - but counter is only for demos... rm -rf ~/.counter countercli reset_all @@ -41,7 +102,7 @@ counter start The default files are stored in `~/.counter`. In another window we can initialize the light-client and send a transaction: -``` +```shelldown[1] countercli init --node=tcp://localhost:46657 --genesis=$HOME/.counter/genesis.json YOU=$(countercli keys get friend | awk '{print $2}') @@ -51,7 +112,7 @@ countercli tx send --name=cool --amount=1000mycoin --to=$YOU --sequence=1 But the Counter has an additional command, `countercli tx counter`, which crafts an `AppTx` specifically for this plugin: -``` +```shelldown[2] countercli tx counter --name cool --amount=1mycoin --sequence=2 countercli tx counter --name cool --amount=1mycoin --sequence=3 --valid ``` @@ -61,7 +122,7 @@ valid, while the second transaction passes. We can build plugins that take many arguments of different types, and easily extend the tool to accomodate them. Of course, we can also expose queries on our plugin: -``` +```shelldown[3] countercli query counter ``` @@ -70,7 +131,7 @@ should see a Counter value of 1 representing the number of valid transactions. If we send another transaction, and then query again, we will see the value increment: -``` +```shelldown[4] countercli tx counter --name cool --amount=2mycoin --sequence=4 --valid --countfee=2mycoin countercli query counter ```