1-23-2020 Workshop -Weighted Keys

Recording on Youtube: https://youtu.be/R24-3iIau0g

 

Dial in Information is at: https://casperlabs.atlassian.net/wiki/spaces/REL/pages/136544674/Weekly%2BWorkshops%2BHome

Participants

 

  • @Medha Parlikar

  • @Rita Allen (Unlicensed)

  • @Tom Vasile (Deactivated)

  • Ledger Leap (Stefan & Thomas)

  • @Ashok Ranadive (Unlicensed)

  • @Maciej Zielinski (Deactivated)

 

 

During this workshop, we will demonstrate CasperLabs' flexible multi-signature functionality within smart contracts. We will demonstrate the ‘threshold’ feature within an account, and how keys with sufficient weight can sign a deploy to meet a threshold, and how other keys lack the necessary weight to meet the threshold. Time permitting, we will update the authority of keys provided during the call to enable that key to sign the deployment.

Goals

  • Demonstrate the capability of CasperLabs weighted keys

  • Install the client

  • Build the contracts

  • Deploy to your local network

  • Check the outcome of the transaction by using GraphQL

 

  • We will record the session.

Step by Step Plan

  1. Create some keys

  2. View the default weights for the key.

  3. Update the key weights using a deployment

  4. View the weights.

  5. Change the threshold of an account for key management and deploy management and observe the new thresholds

  6. Observe how the heavy key can sign a deployment but a light key cannot.

 

  1. Clone the repository on your machine

git clone -b dev https://github.com/CasperLabs/CasperLabs.git

2. Install the CasperLabs client using brew, apt, docker or tarball ….

3. Compile contracts

cd execution-engine make setup make build-contracts

4. Let’s look at the weight of Key1 - go to clarity.casperlabs.io and look at GraphQL

Let’s get the latest block:

query { dagSlice(depth: 1) { blockHash } }

 

Now - let’s open a new tab in GraphQL and lets examine the account associated with Key1 : Use Graph QL to see the keys associated with the contract. Obtain your Hex key and replace it in keyBase16 - and the latest block hash in ‘blockHashBase16Prefix’ and then run this graphQL query.

You should see a result that looks like this:

 

5. Now we will add a new key with weight of 5 to this account.

Export the session arguments (this simplifies the deploy command)

Send the deployment

(the path for the contract under CasperLabs is ‘execution-engine/target/wasm32-unknown-unknown/release/keys_manager.wasm’)

Confirm that the deploy succeeded.

6. Let’s look at the key weights again:

We should see a weight of 5 for the weight on the new key2 that we just added.

Repeat the GraphQL query - and observe a different weight for the key.

7. Now we will update the thresholds for the account of Key1. NOTE: the key_management threshold must be equal or greater to the deployment_threshold. This is a safety measure which prevents the account from being locked out.

Run the deployment:

Confirm the deploy worked.

Check the values in GraphQL - you should see a new key management threshold.

 

8. Now update the deployment thresholds for the account. This will authorize only key2 to perform the token transfer.

Repeat the GraphQL queries by getting the latest block hash.

 

Upon completing this deployment, Key1 will not be authorized to sign a token transfer.

Let’s export our arguments for the token transfer.

Now let’s attempt a token transfer. We will sign this deployment with Key 1 -it should fail. NOTE: The user does not receive a message that the deployment failed. Nothing happens.

You can confirm this by checking the status of the deploy using the client:

 

Repeat the process with the higher weight key - key 2

Observe that the token transfer succeeds and token lands in the account3 balance.

Software Version (GitHash)

CasperLabs Client 0.11.0 (5777274434bf8cb676c43b0a0ca28f4e015c683e)

Deployed to DevNet

What you need to know:

  • Key weights work with thresholds. Any number of authorized keys can be used in combination to sign a deployment to meet a deploy threshold.

  • The key_management threshold must be equal or greater to the deployment_threshold. This is a safety measure which prevents the account from being locked out.

  • If the keys signing a deployment lack the sufficient weight to meet the threshold, the deployment fails to run on the node. Users do not get an error message about this. They observe that the transaction never appears in a block.

Notes:

Title

Description

Notes

Title

Description

Notes

Verify pre-requisites

Check that everyone has managed to get through the setup.

Does everyone have keys in Clarity?

Has everyone cloned the repository and built the contracts?

Does everyone have the client installed? What is the version number for the Client?

 

 

 

Outcome:

  • If you want to unwind the change to the thresholds, just repeat the process and reset the weights back to the defaults.

  • You can also attempt to remove the associated key also if you wish, after you have reduced the deployment thresholds and key management thresholds.

Help!

Go to Discord- we will help you there: https://discord.gg/mpZ9AYD

Decisions

  • We need to figure out how users can see that they hit an authorization error. No block is created, because the deploy isn’t authorized, and this presently only shows up on the server logs. App developers may need to check that they don’t send a deploy until the requisite key weights are in place.