Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

State / merkle tree visualizer #11

Open
moul opened this issue Jun 15, 2023 · 5 comments
Open

State / merkle tree visualizer #11

moul opened this issue Jun 15, 2023 · 5 comments

Comments

@moul
Copy link
Member

moul commented Jun 15, 2023

I remember such amazing tools developed in the IPFS ecosystem to visualize merkle trees and CIDs in general. It was both useful for educational purpose but also for debugging.

Feel free to share existing projects that we could potentially adapt for our case.

Personally, I’d love something working in CLIs.

@moul
Copy link
Member Author

moul commented Jun 15, 2023

Cc @ajnavarro

@ajnavarro
Copy link

@moul I think you might be referring to https://dag.ipfs.tech/ , right?

I love CLIs too, and the best Merkle tree visualizer I know is the git log command:
Screenshot from 2023-06-15 10-17-20

Also, Merkle trees can be represented in a lot of different ways, ones are better for specific use cases. What do we want to show on that Merkle tree representation?

@moul
Copy link
Member Author

moul commented Jun 16, 2023

Not sure, but maybe visualizing the state evolution at the end of execution or through an indexer could greatly aid in contract debugging and discovering new usages.

@moul
Copy link
Member Author

moul commented Jun 20, 2023

cc @ilgooz do you have something similar in mind for Gno Studio?

@moul moul added the 💡 idea label Jun 21, 2023
@ajnavarro
Copy link

Maybe a crazy idea, but we can represent the realm states as a table and make queries filling a lot of different use cases:

These are some of the possible tables that we can have:

Functions Table

Field Name Type Value Example
package string gno.land/r/my/package
height number 23
name string Render
params json {"name":"Render", "type":"string"}
results json {"name": "_", "type": "string"}

State Table

Field Name Type Value Example
package string gno.land/r/my/package
height number 23
var_name string gBoards
var_type string avl.Tree
var_id string 7f83b1657ff1fc53b92dc18148a1daddd200126d9069:21
value blob [Content of the variable if any]
refs_names json ["var.name"]
refs_ids json ["7f83b1657ff1fc53b92dc18148a1d65dfc2d4b1:43"]

Query examples

Get last state for a specific var

SELECT 
    package, 
    value 
FROM 
    states 
WHERE 
    package='this.is/r/my/realm' and 
    height=last_height() and 
    var_name='avl.Tree';

Get all the states of a variable

SELECT 
    package, 
    value 
FROM 
    states 
WHERE 
    package='this.is/r/my/realm' and 
    var_name='avl.Tree';

Compare last two states of a variable

SELECT 
    value as 'previous',
    (
        SELECT 
            value 
        FROM 
            states 
        WHERE 
            package='this.is/r/my/realm' and 
            height=last_height() and 
            var_name='avl.Tree'
    ) as 'actual'
FROM 
    states 
WHERE 
    package='this.is/r/my/realm' and 
    height=last_height()-1 and 
    var_name='avl.Tree';

List all functions from a specific package

SELECT 
    name 
FROM 
    functions 
WHERE 
    package='this.is/r/my/realm' and 
    height=last_height();

Get all packages using the Render function

SELECT 
    package 
FROM 
    functions 
WHERE 
    name='Render' and 
    JSON_LENGTH(params) == 1 and 
    JSON_LENGTH(results) == 1 and
    height=last_height();

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
Status: 🔵 Not Needed for Launch
Status: Coffee Slot
Development

No branches or pull requests

2 participants