Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .gitmodules
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
[submodule "risc0-merkle-service"]
path = risc0-merkle-service
url = [email protected]:Layer-Edge/risc0-merkle-service.git
7 changes: 4 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -29,9 +29,10 @@ Key features:

Configure environment variables or in .env file
```env
GRPC_URL=grpc.testnet.layeredge.io:9090
CONTRACT_ADDR=cosmos1ufs3tlq4umljk0qfe8k5ya0x6hpavn897u2cnf9k0en9jr7qarqqt56709
ZK_PROVER_URL=http://127.0.0.1:3001
RPC_URL=https://rpc.layeredge.io
MERKLE_TREE_STORAGE_CONTRACT_ADDRESS=0x57bEBD1b51dF9F221F763a708591c1E72D2379D6
SUPER_PROOF_CONTRACT_ADDRESS=0x7f9EBd5DA0829bdB6CDFF45BbA0D68c0cae39364
ZK_PROVER_URL=http://127.0.0.1:3000
API_REQUEST_TIMEOUT=100
POINTS_API=http://127.0.0.1:8080
PRIVATE_KEY='cli-node-private-key'
Expand Down
84 changes: 84 additions & 0 deletions clients/MerkleTreeStorage.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
package clients

import (
"fmt"
"math/big"

"github.com/Layer-Edge/light-node/contracts"
"github.com/Layer-Edge/light-node/utils"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/ethclient"
)

type MerkleTreeData struct {
Root common.Hash
Owner common.Address
LeafCount *big.Int
CreatedAt *big.Int
Leaves []string
}

type MerkleTreeClient struct {
rpc *ethclient.Client
contract *contracts.MerkleTreeStorage
}

func (mtc *MerkleTreeClient) Init(merkleTreeStorageContractAddress string) error {
layerEdgeRPC := utils.GetEnv("RPC_URL", "https://rpc.layeredge.io")
layerEdgeClient, err := ethclient.Dial(layerEdgeRPC)
if err != nil {
return fmt.Errorf("error creating layerEdgeClient: %v", err)
}

contractAddress := common.HexToAddress(merkleTreeStorageContractAddress)
merkleTreeStorageContract, err := contracts.NewMerkleTreeStorage(contractAddress, layerEdgeClient)
if err != nil {
return fmt.Errorf("error creating merkleTreeStorageContract: %v", err)
}

mtc.rpc = layerEdgeClient
mtc.contract = merkleTreeStorageContract

return nil
}

func (mtc *MerkleTreeClient) GetAllRoots() ([]common.Hash, error) {
roots, err := mtc.contract.GetAllRoots(nil)
if err != nil {
return nil, fmt.Errorf("error getting all roots: %v", err)
}

// Convert [][32]byte to []common.Hash
hashRoots := make([]common.Hash, len(roots))
for i, root := range roots {
hashRoots[i] = common.BytesToHash(root[:])
}

return hashRoots, nil
}

func (mtc *MerkleTreeClient) GetTreeInfo(root common.Hash) (*MerkleTreeData, error) {
treeInfo, err := mtc.contract.GetTreeInfo(nil, root)
if err != nil {
return nil, fmt.Errorf("error getting tree info: %v", err)
}
// Convert [][]byte to []string
leaves := make([]string, len(treeInfo.Leaves))
for i, leaf := range treeInfo.Leaves {
leaves[i] = string(leaf)
}

return &MerkleTreeData{
Root: root,
Owner: treeInfo.Owner,
LeafCount: treeInfo.LeafCount,
CreatedAt: treeInfo.CreatedAt,
Leaves: leaves,
}, nil
}

func (mtc *MerkleTreeClient) Close() {
if mtc.rpc != nil {
mtc.rpc.Close()
}
}
165 changes: 0 additions & 165 deletions clients/cosmos.go

This file was deleted.

1,162 changes: 1,162 additions & 0 deletions contracts/MerkleTreeStorage.go

Large diffs are not rendered by default.

Loading