From 8db1d83ab2144efd692aa768061ca0a1af150500 Mon Sep 17 00:00:00 2001 From: fontanellag Date: Fri, 11 Oct 2024 11:11:40 +0200 Subject: [PATCH] Added actionState --- GettingStarted/MinaAndZkAppEssentials.md | 14 ++++++++++++++ GettingStarted/deployIn10min.md | 1 + README.md | 5 ++--- img/actionState.png | Bin 0 -> 29620 bytes 4 files changed, 17 insertions(+), 3 deletions(-) create mode 100644 img/actionState.png diff --git a/GettingStarted/MinaAndZkAppEssentials.md b/GettingStarted/MinaAndZkAppEssentials.md index cbac369..caa7f68 100644 --- a/GettingStarted/MinaAndZkAppEssentials.md +++ b/GettingStarted/MinaAndZkAppEssentials.md @@ -16,6 +16,7 @@ - [Account Updates](#account-updates) - [Events](#events) - [Actions \& Reducers](#actions--reducers) + - [ActionState](#actionstate) - [Fetching events \& actions](#fetching-events--actions) - [Time Locked accounts](#time-locked-accounts) - [Custom Tokens](#custom-tokens) @@ -314,6 +315,19 @@ We talked about Account Updates in different paragraphs. Let's summarize the inf ``` - Suggest read [this article](https://zknoid.medium.com/mina-action-reducers-guide-why-we-need-them-81b6836c1700) also. +#### ActionState +- In Actions & Reducers we said that with `dispatch()` a new action is pushed pushed on the `actionState` and with `reduce()` operations are made on the actions of the `actionState` +- Only archive nodes store all actions themselves, while Ordinary nodes do not store actions directly: they store the hash of the Merkle list of actions (it's the hash of a MerkleList of MerkleLists) +- To retrieve the actionState: + ```js + this.account.actionState.getAndRequireEquals() + ``` +- Each zkApp has this value which is updated once at the end of block processing rather than after every transaction in a block. +- Particularly each zkApp does not store only the latest `actionState` , saved in `actionState[0]` position, but also the other previous 4. + ![Alt text](/img/actionState.png) +- When a new `actionState` hash needs to be added to the array, `actionState[4]` is deleted and the other are shifted one position down +- Default value for empty `actionState` hashes is [25079927036070901246064867767436987657692091363973573142121686150614948079097](https://github.com/o1-labs/o1js-bindings/blob/2d409a4aac8ef8fa3b565df1dad62305e0ae65eb/crypto/constants.ts#L235) +- As from this [post](https://zknoid.medium.com/mina-action-reducers-guide-lets-take-a-closer-look-2c4685715b78#:~:text=0%5D%20%3D%20newActionState%3B-,Why%20Five%20States%3F,-When%20you%20use), since generating proofs involving actions takes more time to be computed, `actionState` may change in that time. Storing up to 4 previous states gives five blocks (around 15 minutes) to submit a proof and avoid failures if the latest `actionState` hash changed. #### Fetching events & actions - TO-DO [here](https://docs.minaprotocol.com/zkapps/writing-a-zkapp/feature-overview/fetch-events-and-actions) diff --git a/GettingStarted/deployIn10min.md b/GettingStarted/deployIn10min.md index 744c9c6..7a54af0 100644 --- a/GettingStarted/deployIn10min.md +++ b/GettingStarted/deployIn10min.md @@ -132,6 +132,7 @@ After it if we look to the [appState](https://minascan.io/devnet/account/B62qkeb ### Testing +TO-DO: - https://docs.minaprotocol.com/zkapps/writing-a-zkapp/introduction-to-zkapps/getting-started-zkapps#3-add-testing-code - https://docs.minaprotocol.com/zkapps/writing-a-zkapp/introduction-to-zkapps/getting-started-zkapps#5-create-integration-test - https://docs.minaprotocol.com/zkapps/writing-a-zkapp/introduction-to-zkapps/getting-started-zkapps#7-test-with-lightnet diff --git a/README.md b/README.md index 83d9e68..3b8b91a 100644 --- a/README.md +++ b/README.md @@ -29,8 +29,7 @@ Generic issues:\ Actions & reducers issues:\ 🔒 [The `reduce()` method breaks if more than the hard-coded number (default: 32) of actions are pending](https://docs.minaprotocol.com/zkapps/writing-a-zkapp/feature-overview/actions-and-reducer)\ -🔒 [Be careful when creating Account Updates from a reducer](https://docs.minaprotocol.com/zkapps/writing-a-zkapp/introduction-to-zkapps/secure-zkapps#dont-deadlock-your-zkapp-by-interacting-with-unknown-accounts:~:text=accounts%20from%20a-,reducer,-%2C%20or%20in%20any)\ -🔒 +🔒 [Be careful when creating Account Updates from a reducer](https://docs.minaprotocol.com/zkapps/writing-a-zkapp/introduction-to-zkapps/secure-zkapps#be-careful-with-creating-account-updates-from-a-reducer)\ Permissions related issues:\ 🔒 [Explicitly setting Permissions to default is unnecessary if no other permissions are modified in the `init()` function](https://docs.minaprotocol.com/zkapps/writing-a-zkapp/feature-overview/permissions#default-permissions:~:text=send%3A%20Permissions.proof()%2C-,Alternatively,-%2C%20you%20can%20just)\ @@ -42,7 +41,7 @@ Permissions related issues:\ 🔒 [smart contract interactions are limited to `signature` instead of `proof`](https://docs.minaprotocol.com/zkapps/writing-a-zkapp/feature-overview/permissions#example-unsecurecontract:~:text=the%20transaction%20succeeds.-,However,-%2C%20this%20way%20of)\ 🔒 [restrictive permissions can be circumvented if `setPermissions` is not set to impossible](https://docs.minaprotocol.com/zkapps/writing-a-zkapp/feature-overview/permissions#example-impossible-to-upgrade:~:text=For%20the-,sake,-of%20security%2C%20it)\ 🔒 [lack of access controls](https://docs.minaprotocol.com/zkapps/writing-a-zkapp/feature-overview/permissions#example-unsecurecontract:~:text=not%20very%20secure%3A-,Anyone,-can%20call%20the)\ -🔒 [Minting unlimited tokens to himself is possile for an attacker if a custom token contract does not change `access` permission from `none` to at least `proof`](https://docs.minaprotocol.com/zkapps/writing-a-zkapp/introduction-to-zkapps/secure-zkapps#dont-deadlock-your-zkapp-by-interacting-with-unknown-accounts:~:text=can%20mint%20an-,arbitrary,-number%20of%20tokens) +🔒 [Minting unlimited tokens to himself is possile for an attacker if a custom token contract does not change `access` permission from `none` to at least `proof`](https://docs.minaprotocol.com/zkapps/writing-a-zkapp/introduction-to-zkapps/secure-zkapps#dont-deadlock-your-zkapp-by-interacting-with-unknown-accounts:~:text=can%20mint%20an-,arbitrary,-number%20of%20tokens)\ 🔒 Setting `access` to `impossible` makes your account inaccessible: no one will ever be able to call their contract againt. It's like deleting. ## Development best practices diff --git a/img/actionState.png b/img/actionState.png new file mode 100644 index 0000000000000000000000000000000000000000..23406ffd40238111f1ba491914d21a040cad6fd2 GIT binary patch literal 29620 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 P0O0?@vj6pH|Hl6VseE6K literal 0 HcmV?d00001