Skip to content

Kirol54/zk-symbiotic

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

87 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ZK-block-lock

A LayerZero DVN that only approves cross-chain messages when two independent guarantees hold: (1) a stake-weighted quorum of Symbiotic Relay operators signs the packet, and (2) a ZK proof attests the LayerZero PacketSent event is included in a finalized Ethereum block. Result: multichain delivery with both crypto-economic and cryptographic security.

🎯 Project Overview

We've built a LayerZero DVN that provides dual security:

  • Stake-backed verification through Symbiotic Relay operators
  • ZK-finalized proof that LayerZero packets are included in finalized Ethereum blocks

Problem

DVNs typically rely on committees or oracles whose assurances are purely crypto-economic.

Solution

We fuse Symbiotic’s Relay SDK (universal staking → validator sets → aggregated BLS signatures verified on-chain) with our Ethereum state ZK proof (~14-minute/≥N-slot finality). A packet is deliverable only when both checks pass, tightening trust. The proofs are stored and then later retrieved using GolumDB.

Architecture Flow

User calls AppSource.depositETH (ETH)
→ locks ETH → Endpoint.send(...) → PacketSent event
→ DVN worker: sees event → computes message hash H
→ Relay: operators sign H → Aggregator returns aggregated BLS signature
→ ZK prover: publishes proof (finalized block + log inclusion)
→ DVN worker fetches proof from GolemDB
→ DVN worker → DVN contract (dest): submitVerification(packetId, H, aggSig, zkProof, zkInputs)
→ DVN contract: Settlement.verifyQuorumSigAt(H, ...) ✅ AND ZkVerifier.verifySourceEvent(...) ✅
→ ULN/Executor: delivers to AppDest.onLzReceive → AppDest mints bETH to user

Why it’s novel

Dual guarantees: crypto-economic restaking + cryptographic finality.

Composable: DVN is reusable for any OApp; zk module is pluggable.

What have we achieved during the hackathoon?

  • full idea creation/plan
  • skeleton setup of Symbiotic Relay
  • deposit token lock contract (AppSource.sol. mint token contract (AppDest.sol), token (bETH.sol)
  • deploy script and locking script for above
  • mock zk verifier contract
  • dvn worker in typescript (skeleton, not working version)
  • typescript code to store the generated proof and to get it after using GolemDB

Sum task network example

Ask DeepWiki

Prerequisites

Clone the repository

git clone https://github.com/symbioticfi/symbiotic-super-sum.git

Update submodules

git submodule update --init --recursive

Install dependencies

npm install

Running in docker

Dependencies

  • Docker

Quick Start

  1. Generate the network configuration:

    ./generate_network.sh
  2. Start the network:

    cd temp-network && docker compose up -d && cd ..
  3. Check status:

    cd temp-network && docker compose ps && cd ..

Services

Core Services

  • anvil: Local Ethereum network (port 8545)
  • anvil-settlement: Local Ethereum network (port 8546)
  • deployer: Contract deployment service
  • genesis-generator: Network genesis generation service
  • network-validator: intermediary service to mark network setup completion for all nodes

Relay Sidecars

  • relay-sidecar-1: First relay sidecar (port 8081)
  • relay-sidecar-2: Second relay sidecar (port 8082)
  • relay-sidecar-N: Nth relay sidecar (port 808N)

Sum Nodes

  • sum-node-1: First sum node (port 9091)
  • sum-node-2: Second sum node (port 9092)
  • sum-node-N: Nth sum node (port 909N)

Start the network

cd temp-network && docker compose up -d && cd ..

Check status

cd temp-network && docker compose ps && cd ..

View logs

# View all logs
cd temp-network && docker compose logs -f

# View specific service logs
cd temp-network && docker compose logs -f anvil
cd temp-network && docker compose logs -f anvil-settlement
cd temp-network && docker compose logs -f deployer && cd ..
cd temp-network && docker compose logs -f genesis-generator && cd ..
cd temp-network && docker compose logs -f relay-sidecar-1
cd temp-network && docker compose logs -f sum-node-1

Stop the network

cd temp-network && docker compose down && cd ..

Clean up data

cd temp-network && docker compose down
rm -rf data-* && cd ..

Create a task

cast send 0x99bbA657f2BbC93c02D617f8bA121cB8Fc104Acf "createTask(uint256,uint256)" 2 2 \
  --rpc-url http://127.0.0.1:8545 \
  --private-key 0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80

Check task result

cast call 0x99bbA657f2BbC93c02D617f8bA121cB8Fc104Acf "responses(bytes32)" 0x556b8b8eec9bc205e200fe8109800d09f66774f659322c71f9df42f668d18416 \
  --rpc-url http://127.0.0.1:8545

or

cast call 0x0165878A594ca255338adfa4d48449f69242Eb8F "responses(bytes32)" 0x556b8b8eec9bc205e200fe8109800d09f66774f659322c71f9df42f668d18416 \
  --rpc-url http://127.0.0.1:8546

Troubleshooting

  1. Services not starting: Check logs with cd temp-network && docker compose logs [service-name]
  2. Port conflicts: Ensure ports 8545-8546 8081-8099, 9091-9099 are available
  3. Build issues: Rebuild with cd temp-network && docker compose build && cd ..
  4. Reset everything: cd temp-network && docker compose down -v && rm -rf data-* && docker compose up -d && cd ..

Service Endpoints

Network Configuration

The network supports:

  • Up to 999 operators (configurable via generate_network.sh)
  • Committers: Operators that commit to the network
  • Aggregators: Operators that aggregate results
  • Signers: Regular operators that sign messages

Debugging

# Access container shell
cd temp-network && docker compose exec anvil sh
cd temp-network && docker compose exec relay-sidecar-1 sh
cd temp-network && docker compose exec sum-node-1 sh

# View real-time logs
cd temp-network && docker compose logs -f --tail=100

Performance Monitoring

# Check resource usage
docker stats

# Monitor specific container
docker stats symbiotic-anvil symbiotic-relay-1 symbiotic-sum-node-1

Running on host machine

Dependencies

  • golang >= v1.25.5
  • foundry, installation guide

Build contracts

forge build

Run local anvil nodes

Run first node:

anvil --port 8545 --chain-id 31337 --timestamp 1754051800 --auto-impersonate --slots-in-an-epoch 1

Run second node:

anvil --port 8546 --chain-id 31338 --timestamp 1754051800 --auto-impersonate --slots-in-an-epoch 1

Deploy contracts

Deploy Multicall3 contracts to anvil (needed for the Relay):

cast send 0x05f32b3cc3888453ff71b01135b34ff8e41263f2 --value 100000000000000000 --private-key 0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80 --rpc-url http://127.0.0.1:8545
cast publish 0xf90f538085174876e800830f42408080b90f00608060405234801561001057600080fd5b50610ee0806100206000396000f3fe6080604052600436106100f35760003560e01c80634d2301cc1161008a578063a8b0574e11610059578063a8b0574e1461025a578063bce38bd714610275578063c3077fa914610288578063ee82ac5e1461029b57600080fd5b80634d2301cc146101ec57806372425d9d1461022157806382ad56cb1461023457806386d516e81461024757600080fd5b80633408e470116100c65780633408e47014610191578063399542e9146101a45780633e64a696146101c657806342cbb15c146101d957600080fd5b80630f28c97d146100f8578063174dea711461011a578063252dba421461013a57806327e86d6e1461015b575b600080fd5b34801561010457600080fd5b50425b6040519081526020015b60405180910390f35b61012d610128366004610a85565b6102ba565b6040516101119190610bbe565b61014d610148366004610a85565b6104ef565b604051610111929190610bd8565b34801561016757600080fd5b50437fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0140610107565b34801561019d57600080fd5b5046610107565b6101b76101b2366004610c60565b610690565b60405161011193929190610cba565b3480156101d257600080fd5b5048610107565b3480156101e557600080fd5b5043610107565b3480156101f857600080fd5b50610107610207366004610ce2565b73ffffffffffffffffffffffffffffffffffffffff163190565b34801561022d57600080fd5b5044610107565b61012d610242366004610a85565b6106ab565b34801561025357600080fd5b5045610107565b34801561026657600080fd5b50604051418152602001610111565b61012d610283366004610c60565b61085a565b6101b7610296366004610a85565b610a1a565b3480156102a757600080fd5b506101076102b6366004610d18565b4090565b60606000828067ffffffffffffffff8111156102d8576102d8610d31565b60405190808252806020026020018201604052801561031e57816020015b6040805180820190915260008152606060208201528152602001906001900390816102f65790505b5092503660005b8281101561047757600085828151811061034157610341610d60565b6020026020010151905087878381811061035d5761035d610d60565b905060200281019061036f9190610d8f565b6040810135958601959093506103886020850185610ce2565b73ffffffffffffffffffffffffffffffffffffffff16816103ac6060870187610dcd565b6040516103ba929190610e32565b60006040518083038185875af1925050503d80600081146103f7576040519150601f19603f3d011682016040523d82523d6000602084013e6103fc565b606091505b50602080850191909152901515808452908501351761046d577f08c379a000000000000000000000000000000000000000000000000000000000600052602060045260176024527f4d756c746963616c6c333a2063616c6c206661696c656400000000000000000060445260846000fd5b5050600101610325565b508234146104e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4d756c746963616c6c333a2076616c7565206d69736d6174636800000000000060448201526064015b60405180910390fd5b50505092915050565b436060828067ffffffffffffffff81111561050c5761050c610d31565b60405190808252806020026020018201604052801561053f57816020015b606081526020019060019003908161052a5790505b5091503660005b8281101561068657600087878381811061056257610562610d60565b90506020028101906105749190610e42565b92506105836020840184610ce2565b73ffffffffffffffffffffffffffffffffffffffff166105a66020850185610dcd565b6040516105b4929190610e32565b6000604051808303816000865af19150503d80600081146105f1576040519150601f19603f3d011682016040523d82523d6000602084013e6105f6565b606091505b5086848151811061060957610609610d60565b602090810291909101015290508061067d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4d756c746963616c6c333a2063616c6c206661696c656400000000000000000060448201526064016104dd565b50600101610546565b5050509250929050565b43804060606106a086868661085a565b905093509350939050565b6060818067ffffffffffffffff8111156106c7576106c7610d31565b60405190808252806020026020018201604052801561070d57816020015b6040805180820190915260008152606060208201528152602001906001900390816106e55790505b5091503660005b828110156104e657600084828151811061073057610730610d60565b6020026020010151905086868381811061074c5761074c610d60565b905060200281019061075e9190610e76565b925061076d6020840184610ce2565b73ffffffffffffffffffffffffffffffffffffffff166107906040850185610dcd565b60405161079e929190610e32565b6000604051808303816000865af19150503d80600081146107db576040519150601f19603f3d011682016040523d82523d6000602084013e6107e0565b606091505b506020808401919091529015158083529084013517610851577f08c379a000000000000000000000000000000000000000000000000000000000600052602060045260176024527f4d756c746963616c6c333a2063616c6c206661696c656400000000000000000060445260646000fd5b50600101610714565b6060818067ffffffffffffffff81111561087657610876610d31565b6040519080825280602002602001820160405280156108bc57816020015b6040805180820190915260008152606060208201528152602001906001900390816108945790505b5091503660005b82811015610a105760008482815181106108df576108df610d60565b602002602001015190508686838181106108fb576108fb610d60565b905060200281019061090d9190610e42565b925061091c6020840184610ce2565b73ffffffffffffffffffffffffffffffffffffffff1661093f6020850185610dcd565b60405161094d929190610e32565b6000604051808303816000865af19150503d806000811461098a576040519150601f19603f3d011682016040523d82523d6000602084013e61098f565b606091505b506020830152151581528715610a07578051610a07576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4d756c746963616c6c333a2063616c6c206661696c656400000000000000000060448201526064016104dd565b506001016108c3565b5050509392505050565b6000806060610a2b60018686610690565b919790965090945092505050565b60008083601f840112610a4b57600080fd5b50813567ffffffffffffffff811115610a6357600080fd5b6020830191508360208260051b8501011115610a7e57600080fd5b9250929050565b60008060208385031215610a9857600080fd5b823567ffffffffffffffff811115610aaf57600080fd5b610abb85828601610a39565b90969095509350505050565b6000815180845260005b81811015610aed57602081850181015186830182015201610ad1565b81811115610aff576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b600082825180855260208086019550808260051b84010181860160005b84811015610bb1578583037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001895281518051151584528401516040858501819052610b9d81860183610ac7565b9a86019a9450505090830190600101610b4f565b5090979650505050505050565b602081526000610bd16020830184610b32565b9392505050565b600060408201848352602060408185015281855180845260608601915060608160051b870101935082870160005b82811015610c52577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa0888703018452610c40868351610ac7565b95509284019290840190600101610c06565b509398975050505050505050565b600080600060408486031215610c7557600080fd5b83358015158114610c8557600080fd5b9250602084013567ffffffffffffffff811115610ca157600080fd5b610cad86828701610a39565b9497909650939450505050565b838152826020820152606060408201526000610cd96060830184610b32565b95945050505050565b600060208284031215610cf457600080fd5b813573ffffffffffffffffffffffffffffffffffffffff81168114610bd157600080fd5b600060208284031215610d2a57600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81833603018112610dc357600080fd5b9190910192915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112610e0257600080fd5b83018035915067ffffffffffffffff821115610e1d57600080fd5b602001915036819003821315610a7e57600080fd5b8183823760009101908152919050565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1833603018112610dc357600080fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa1833603018112610dc357600080fdfea2646970667358221220bb2b5c71a328032f97c676ae39a1ec2148d3e5d6f73d95e9b17910152d61f16264736f6c634300080c00331ca0edce47092c0f398cebf3ffc267f05c8e7076e3b89445e0fe50f6332273d4569ba01b0b9d000e19b24c5869b0fc3b22b0d6fa47cd63316875cbbd577d76e6fde086 --rpc-url http://127.0.0.1:8545
cast send 0x05f32b3cc3888453ff71b01135b34ff8e41263f2 --value 100000000000000000 --private-key 0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80 --rpc-url http://127.0.0.1:8546
cast publish 0xf90f538085174876e800830f42408080b90f00608060405234801561001057600080fd5b50610ee0806100206000396000f3fe6080604052600436106100f35760003560e01c80634d2301cc1161008a578063a8b0574e11610059578063a8b0574e1461025a578063bce38bd714610275578063c3077fa914610288578063ee82ac5e1461029b57600080fd5b80634d2301cc146101ec57806372425d9d1461022157806382ad56cb1461023457806386d516e81461024757600080fd5b80633408e470116100c65780633408e47014610191578063399542e9146101a45780633e64a696146101c657806342cbb15c146101d957600080fd5b80630f28c97d146100f8578063174dea711461011a578063252dba421461013a57806327e86d6e1461015b575b600080fd5b34801561010457600080fd5b50425b6040519081526020015b60405180910390f35b61012d610128366004610a85565b6102ba565b6040516101119190610bbe565b61014d610148366004610a85565b6104ef565b604051610111929190610bd8565b34801561016757600080fd5b50437fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0140610107565b34801561019d57600080fd5b5046610107565b6101b76101b2366004610c60565b610690565b60405161011193929190610cba565b3480156101d257600080fd5b5048610107565b3480156101e557600080fd5b5043610107565b3480156101f857600080fd5b50610107610207366004610ce2565b73ffffffffffffffffffffffffffffffffffffffff163190565b34801561022d57600080fd5b5044610107565b61012d610242366004610a85565b6106ab565b34801561025357600080fd5b5045610107565b34801561026657600080fd5b50604051418152602001610111565b61012d610283366004610c60565b61085a565b6101b7610296366004610a85565b610a1a565b3480156102a757600080fd5b506101076102b6366004610d18565b4090565b60606000828067ffffffffffffffff8111156102d8576102d8610d31565b60405190808252806020026020018201604052801561031e57816020015b6040805180820190915260008152606060208201528152602001906001900390816102f65790505b5092503660005b8281101561047757600085828151811061034157610341610d60565b6020026020010151905087878381811061035d5761035d610d60565b905060200281019061036f9190610d8f565b6040810135958601959093506103886020850185610ce2565b73ffffffffffffffffffffffffffffffffffffffff16816103ac6060870187610dcd565b6040516103ba929190610e32565b60006040518083038185875af1925050503d80600081146103f7576040519150601f19603f3d011682016040523d82523d6000602084013e6103fc565b606091505b50602080850191909152901515808452908501351761046d577f08c379a000000000000000000000000000000000000000000000000000000000600052602060045260176024527f4d756c746963616c6c333a2063616c6c206661696c656400000000000000000060445260846000fd5b5050600101610325565b508234146104e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4d756c746963616c6c333a2076616c7565206d69736d6174636800000000000060448201526064015b60405180910390fd5b50505092915050565b436060828067ffffffffffffffff81111561050c5761050c610d31565b60405190808252806020026020018201604052801561053f57816020015b606081526020019060019003908161052a5790505b5091503660005b8281101561068657600087878381811061056257610562610d60565b90506020028101906105749190610e42565b92506105836020840184610ce2565b73ffffffffffffffffffffffffffffffffffffffff166105a66020850185610dcd565b6040516105b4929190610e32565b6000604051808303816000865af19150503d80600081146105f1576040519150601f19603f3d011682016040523d82523d6000602084013e6105f6565b606091505b5086848151811061060957610609610d60565b602090810291909101015290508061067d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4d756c746963616c6c333a2063616c6c206661696c656400000000000000000060448201526064016104dd565b50600101610546565b5050509250929050565b43804060606106a086868661085a565b905093509350939050565b6060818067ffffffffffffffff8111156106c7576106c7610d31565b60405190808252806020026020018201604052801561070d57816020015b6040805180820190915260008152606060208201528152602001906001900390816106e55790505b5091503660005b828110156104e657600084828151811061073057610730610d60565b6020026020010151905086868381811061074c5761074c610d60565b905060200281019061075e9190610e76565b925061076d6020840184610ce2565b73ffffffffffffffffffffffffffffffffffffffff166107906040850185610dcd565b60405161079e929190610e32565b6000604051808303816000865af19150503d80600081146107db576040519150601f19603f3d011682016040523d82523d6000602084013e6107e0565b606091505b506020808401919091529015158083529084013517610851577f08c379a000000000000000000000000000000000000000000000000000000000600052602060045260176024527f4d756c746963616c6c333a2063616c6c206661696c656400000000000000000060445260646000fd5b50600101610714565b6060818067ffffffffffffffff81111561087657610876610d31565b6040519080825280602002602001820160405280156108bc57816020015b6040805180820190915260008152606060208201528152602001906001900390816108945790505b5091503660005b82811015610a105760008482815181106108df576108df610d60565b602002602001015190508686838181106108fb576108fb610d60565b905060200281019061090d9190610e42565b925061091c6020840184610ce2565b73ffffffffffffffffffffffffffffffffffffffff1661093f6020850185610dcd565b60405161094d929190610e32565b6000604051808303816000865af19150503d806000811461098a576040519150601f19603f3d011682016040523d82523d6000602084013e61098f565b606091505b506020830152151581528715610a07578051610a07576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4d756c746963616c6c333a2063616c6c206661696c656400000000000000000060448201526064016104dd565b506001016108c3565b5050509392505050565b6000806060610a2b60018686610690565b919790965090945092505050565b60008083601f840112610a4b57600080fd5b50813567ffffffffffffffff811115610a6357600080fd5b6020830191508360208260051b8501011115610a7e57600080fd5b9250929050565b60008060208385031215610a9857600080fd5b823567ffffffffffffffff811115610aaf57600080fd5b610abb85828601610a39565b90969095509350505050565b6000815180845260005b81811015610aed57602081850181015186830182015201610ad1565b81811115610aff576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b600082825180855260208086019550808260051b84010181860160005b84811015610bb1578583037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001895281518051151584528401516040858501819052610b9d81860183610ac7565b9a86019a9450505090830190600101610b4f565b5090979650505050505050565b602081526000610bd16020830184610b32565b9392505050565b600060408201848352602060408185015281855180845260608601915060608160051b870101935082870160005b82811015610c52577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa0888703018452610c40868351610ac7565b95509284019290840190600101610c06565b509398975050505050505050565b600080600060408486031215610c7557600080fd5b83358015158114610c8557600080fd5b9250602084013567ffffffffffffffff811115610ca157600080fd5b610cad86828701610a39565b9497909650939450505050565b838152826020820152606060408201526000610cd96060830184610b32565b95945050505050565b600060208284031215610cf457600080fd5b813573ffffffffffffffffffffffffffffffffffffffff81168114610bd157600080fd5b600060208284031215610d2a57600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81833603018112610dc357600080fd5b9190910192915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112610e0257600080fd5b83018035915067ffffffffffffffff821115610e1d57600080fd5b602001915036819003821315610a7e57600080fd5b8183823760009101908152919050565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1833603018112610dc357600080fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa1833603018112610dc357600080fdfea2646970667358221220bb2b5c71a328032f97c676ae39a1ec2148d3e5d6f73d95e9b17910152d61f16264736f6c634300080c00331ca0edce47092c0f398cebf3ffc267f05c8e7076e3b89445e0fe50f6332273d4569ba01b0b9d000e19b24c5869b0fc3b22b0d6fa47cd63316875cbbd577d76e6fde086 --rpc-url http://127.0.0.1:8546

Deploy full local setup with Settlement and LayerZero DVN on 2 chains:

mkdir -p "temp-network/deploy-data"
forge script script/LocalDeploy.s.sol:LocalDeploy --rpc-url http://127.0.0.1:8545 -vv --broadcast --private-key 0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80
forge script script/SettlementChainDeploy.s.sol:SettlementChainDeploy --rpc-url http://127.0.0.1:8546 -vv --broadcast --private-key 0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80
forge script script/ValSetDriverDeploy.s.sol:ValSetDriverDeploy --rpc-url http://127.0.0.1:8545 -vv --broadcast --private-key 0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80

Note: By default it will deploy and setup 4 operators and quorum threshold 2/3+1. If you want to modify check out script/LocalDeploy.s.sol

Turn on interval mining in anvil

cast rpc --rpc-url http://127.0.0.1:8545 evm_setIntervalMining 1
cast rpc --rpc-url http://127.0.0.1:8546 evm_setIntervalMining 1

Note: By default anvil is using on-demand mining which is not compatible with relay contracts

Set network genesis

./bin/symbiotic_relay_utils network \
    --chains http://127.0.0.1:8545,http://127.0.0.1:8546 \
    --driver-address 0xb64F6B0A181De122bc2bEbfC343b3344b1C8dD6b \
    --driver-chainid 31337 \
  generate-genesis \
    --commit \
    --secret-keys 31337:ac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80,31338:ac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80

Note: If it's failing try again in 5 seconds

Run relay sidecar nodes

Sidecar 1 (signer only):

./bin/symbiotic_relay --config sidecar.common.yaml \
    --secret-keys symb/0/15/0xde0b6b3a7640000,evm/1/31337/0x0000000000000000000000000000000000000000000000000DE0B6B3A7640000,evm/1/31338/0x0000000000000000000000000000000000000000000000000DE0B6B3A7640000,p2p/1/0/0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364140,p2p/1/1/0x0000000000000000000000000000000000000000000000000DE0B6B3A7640000 \
    --http-listen :8081 \
    --p2p-listen "/ip4/127.0.0.1/tcp/8881" \
    --storage-dir .data-01

Sidecar 2 (Signer + Aggregator):

./bin/symbiotic_relay --config sidecar.common.yaml \
    --secret-keys symb/0/15/0xde0b6b3a7640001,evm/1/31337/0x0000000000000000000000000000000000000000000000000DE0B6B3A7640001,evm/1/31338/0x0000000000000000000000000000000000000000000000000DE0B6B3A7640001,p2p/1/0/0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364140,p2p/1/1/0x0000000000000000000000000000000000000000000000000DE0B6B3A7640001 \
    --http-listen :8082 \
    --p2p-listen "/ip4/127.0.0.1/tcp/8882" \
    --storage-dir .data-02 \
    --aggregator true

Sidecar 3 (Signer + Committer):

./bin/symbiotic_relay --config sidecar.common.yaml \
    --secret-keys symb/0/15/0xde0b6b3a7640002,evm/1/31337/0x0000000000000000000000000000000000000000000000000DE0B6B3A7640002,evm/1/31338/0x0000000000000000000000000000000000000000000000000DE0B6B3A7640002,p2p/1/0/0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364140,p2p/1/1/0x0000000000000000000000000000000000000000000000000DE0B6B3A7640002 \
    --http-listen :8083 \
    --p2p-listen "/ip4/127.0.0.1/tcp/8883" \
    --storage-dir .data-03 \
    --committer true

Note: It's enough to run only 3 out 4 nodes since quorum threshold is 2/3+1

Build sum node

cd off-chain
go build -o sum_node ./cmd/node/
cd ..

Run sum network nodes

Node 1 (connected with sidecar 1):

./off-chain/sum_node --evm-rpc-urls http://127.0.0.1:8545,http://127.0.0.1:8546 \
    --relay-api-url 127.0.0.1:8081 \
    --contract-addresses 0x99bbA657f2BbC93c02D617f8bA121cB8Fc104Acf,0x0165878A594ca255338adfa4d48449f69242Eb8F \
    --private-key 0000000000000000000000000000000000000000000000000DE0B6B3A7640000

Node 2 (connected with sidecar 2):

./off-chain/sum_node --evm-rpc-urls http://127.0.0.1:8545,http://127.0.0.1:8546 \
    --relay-api-url 127.0.0.1:8082 \
    --contract-addresses 0x99bbA657f2BbC93c02D617f8bA121cB8Fc104Acf,0x0165878A594ca255338adfa4d48449f69242Eb8F \
    --private-key 0000000000000000000000000000000000000000000000000DE0B6B3A7640001

Node 3 (connected with sidecar 3):

./off-chain/sum_node --evm-rpc-urls http://127.0.0.1:8545,http://127.0.0.1:8546 \
    --relay-api-url 127.0.0.1:8083 \
    --contract-addresses 0x99bbA657f2BbC93c02D617f8bA121cB8Fc104Acf,0x0165878A594ca255338adfa4d48449f69242Eb8F \
    --private-key 0000000000000000000000000000000000000000000000000DE0B6B3A7640002

Request task

cast send 0x99bbA657f2BbC93c02D617f8bA121cB8Fc104Acf "createTask(uint256,uint256)" 2 2  --rpc-url http://127.0.0.1:8545 --private-key ac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80

or

cast send 0x0165878A594ca255338adfa4d48449f69242Eb8F "createTask(uint256,uint256)" 2 2  --rpc-url http://127.0.0.1:8546 --private-key ac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80

Note: It creates task to sum 2+2, in sum and sidecar nodes you can see related logs

Check task result

Don't forget to replace {TASK_ID}, you can find it in sum node's logs

cast call 0x99bbA657f2BbC93c02D617f8bA121cB8Fc104Acf "responses(bytes32)" {TASK_ID} --rpc-url http://127.0.0.1:8545

or

cast call 0x0165878A594ca255338adfa4d48449f69242Eb8F "responses(bytes32)" {TASK_ID} --rpc-url http://127.0.0.1:8546

Note: It prints result in hex, results also might be found in sum node logs

About

Token bridge network built with Symbiotic Relay supercharged by zkProofs

Topics

Resources

License

Stars

Watchers

Forks

Languages

  • Rust 37.7%
  • Solidity 22.3%
  • TypeScript 22.1%
  • Shell 12.3%
  • Go 5.4%
  • Dockerfile 0.2%