A monorepo containing all the custom components of the Astria network

Related tags

Cryptography astria
Overview

Astria

Astria replaces centralized sequencers, allowing many rollups to share a single decentralized network of sequencers that’s simple and permissionless to join. This shared sequencer network provides out-of-the-box censorship resistance, fast block confirmations, and atomic cross-rollup composability – all while retaining each rollup’s sovereignty.

This repository contains the custom Astria components that make up the Astria network. Other components of the Astria network can be found in the astriaorg organization.

To run locally, we utilize a dev-cluster which can be found at astriaorg/dev-cluster.

To learn more about Astria, please visit astria.org.

Components

Contributing

Pull requests should be created against the main branch. In general, we follow the "fork-and-pull" Git workflow.

  1. Fork the repo on GitHub
  2. Clone the project to your own machine
  3. Commit changes to your own branch
  4. Push your work back up to your fork
  5. Submit a Pull request so that we can review your changes

NOTE: Be sure to merge the latest from upstream before making a pull request!

Issues

If you encounter any issues while using this project or have any questions, please open an issue in this repository here.

Comments
  • Add support for edge cases around soft commitments

    Add support for edge cases around soft commitments

    Currently in conductor, soft commits (gossiped) transactions are executed (via DoBlock) and firm commits (from DA) are finalized (FinalizeBlock).

    We need support for various edge cases where transactions aren't seen immediately:

    • gossip not working, transactions seen first in DA
    • missed astria block via gossip (ie block number 10 received but 9 is not)
    conductor 
    opened by joroshiba 2
  • feat(conductor): handle case where block is received from DA before gossip

    feat(conductor): handle case where block is received from DA before gossip

    as title says, if we receive a block from DA that we don't have an execution hash for (ie it was not executed either because it was never received, or there was nothing to execute) we try to execute it, and if there was a block executed, we mark it final. "nothing to execute" case means there were no txs for our rollup namespace in the block.

    closes #13

    opened by noot 1
  • Provide a package name for sequencer protos

    Provide a package name for sequencer protos

    Because our sequencer protobufs don't have a package field the resulting rust modules are also empty, making it necessary to import them with _.rs, which is not nice:

    https://github.com/astriaorg/sequencer-relayer/blob/8cd9b9e4268368c48ab3be02d9fa85b46914a32e/sequencer-relayer-proto/src/lib.rs#LL1C1

    We should give them a proper namespace.

    good first issue 
    opened by SuperFluffy 1
  • implement github workflow for testing, linting

    implement github workflow for testing, linting

    This PR implements github workflows for running tests, formatting, and linting.

    Because astria-conductor needs the astria-sequencer-relayer to be running but we want to avoid building container images as part of the tests, this PR circumvents the issue by:

    1. building astria-sequencer-relayer as a binary before the tests are run;
    2. copying the binary to /tmp/astria/;
    3. mounting /tmp/astria/astria-sequencer-relayer into a barebones debian:bookworm-slim container as a hostPath.

    This strategy can be repeated for future test requirements.

    Note that debian:bookworm-slim (glibc 2.36) is preferred over debian:buster-slim (2.28) because of compatibility with ubuntu-22.04 (glibc 2.35).

    This PR also moves to rustls everywhere to avoid linking to openssl.

    Issues that this PR will left unaddressed:

    • gossipnet tests stall indefinitely and never finish on CI (but work locally): #24
    • rs-cnc needs celestia running for its roundtrip test to work (needs to be updated to folow astria-conductor and astria-sequencer-relayer): #25
    • astria-conductor and astria-sequencer-relayer have a ton of duplicate code. This needs to be refactored into a common testing crate: #26
    opened by SuperFluffy 1
  • move all sources into a cargo workspace

    move all sources into a cargo workspace

    this steps just moves everything out of sources/ and places it into crates/. cargo check passes after adding making the crates workspace members in the root Cargo.toml.

    The crates do not refer to each other by path, and they are also not yet cleaned up.

    opened by SuperFluffy 1
  • use tracing for telemetry

    use tracing for telemetry

    This commit replaces log and flexilogger by tracing and tracing-subscriber. The default log level is info, which can be overriden by using the RUST_LOG environment variable with directives as described in the tracing subscriber docs: https://docs.rs/tracing-subscriber/0.3.17/tracing_subscriber/filter/struct.EnvFilter.html

    Because env var directives are strictly more powerful than setting verbosity levels on the command line the log-level flag is removed.

    If astria-conductor is connected to a tty it will emit tracing events using human-readable format. If it is not connected to a tty it will emit JSON.

    By default logging is disabled in integration tests. It can be enabled by setting the environment variable TEST_LOG=1.

    Note that the service no longer writes explicitly writes logs to a file. Because astria-conductor is intended to be run as a service by a service manager or orchestration platform, it is assumed that persisting logs is handled externally.

    Partially addresses #14

    opened by SuperFluffy 0
  • verify that block transactions are correct

    verify that block transactions are correct

    to ensure that the sequencer wrote the correct transactions to Celestia, we need to validate on reading that the transactions written hash to the correct hash in the header (DataHash)

    can just call this function: https://github.com/astriaorg/sequencer-relayer/blob/master/sequencer-relayer/src/sequencer_block.rs#L198

    conductor 
    opened by noot 0
  • transition to single astria-proto directory

    transition to single astria-proto directory

    • Adds workflow to run buf lint, and push build artifacts to buf.build/astria/astria (non main pushes are drafts)
    • Combines astria-execution-apis-rpc and astria-sequencer-relayer-proto into astria-proto
    • Makes all packages prefixed with astria following proto standards to allow cleaner imports. (ie astria.execution.v1)
    • Adds a protobuf package name to astria-sequencer-relayer-proto

    Fixes https://github.com/astriaorg/astria/issues/10

    opened by joroshiba 0
  • Add docker container flows

    Add docker container flows

    Builds and pushes images for astria-conductor and astria-sequencer-relayer.

    Builds are done when any of following occur

    • pull requests where there are changes in corresponding folders, or to the workflow file.
    • when tagged releases of format v{major}.{minor}.{patch}--{component-name} are created

    Fixes #42

    opened by joroshiba 0
  • renamed prev_state_root in DoBlockRequest to prev_block_hash

    renamed prev_state_root in DoBlockRequest to prev_block_hash

    In crates/astria-proto/proto/astria/execution/v1/execution.proto, there is a the gRPC method DoBlockRequest has a field called prev_state_root but what's actually passed here is the parent block hash, and should be called prev_block_hash.

    Therefore, field prev_state_root is renamed to prev_block_hash in DoBlockRequest.

    opened by akansjain 2
  • conductor reader validates `SequencerNamespaceData` before checking that block contains relevant namespace txs

    conductor reader validates `SequencerNamespaceData` before checking that block contains relevant namespace txs

    as title says, this is because the Reader doesn't contain the namespace the conductor cares about, but the Executor does, and checks whether the block should be executed. this should be changed so we aren't validating irrelevant blocks.

    note: this may not be relevant, and depends upon our design/relation of the conductor to a tendermint light client; if we run a light client internally to the conductor (ie. track the validator set) then we need to keep this, but if we assume we have a trusted external client as we do right now, we can change this.

    conductor research 
    opened by noot 0
  • separate linting from pushing artifacts

    separate linting from pushing artifacts

    At the moment linting protobufs and pushing them to buf are on step. They should be separate steps (with the linting step being a requirement for the push step) so that linting can be used as a branch protection rule https://github.com/astriaorg/astria/blob/4aa28c1a8e82e9d5f36313891470165f01812d36/.github/workflows/proto.yml#L17

    ci 
    opened by SuperFluffy 0
  • newly proposed blocks should be marked

    newly proposed blocks should be marked "head", and commited should be marked "safe"

    When tendermint proposes a new block, the block contains the commit for the parent block. However, the conductor currently treats this incorrectly, as when it receives a newly-proposed block, it executes it and marks it as safe/softly-committed, even though it's not actually finalized by tendermint yet. The correct logic when receiving a newly proposed block would be:

    • execute and mark newly proposed block as "head" of chain
    • verify commit contained in block (which is for the parent block), if it's verified, then mark parent block as "safe"
    • receiving block from DA remains the same

    Requires:

    • updating the gRPC service to have methods such as:
    ExecuteAndMarkAsHead(txs, prev_block_hash)
    SetBlockAsSafe(block_hash)
    SetBlockAsFinal(block_hash)
    
    • updating the geth fork to support these methods
    • updating conductor to correctly handle newly proposed vs committed blocks

    blocked by #44

    conductor proto 
    opened by noot 0
Owner
Astria
The Shared Sequencer Network
Astria
Subspace Monorepo

Subspace Network Monorepo This is a mono repository for Subspace Network implementation, primarily containing Subspace node/client using Substrate fra

subspace 182 Dec 24, 2022
Project Serum Rust Monorepo

serum-dex Project Serum Rust Monorepo Website | Discord | Awesome | DEX | TypeScript Program Deployments Program Devnet Mainnet Beta DEX DESVgJVGajEgK

Project Serum 564 Dec 31, 2022
Monorepo of our ahead-of-time implementation of Secure ECMAScript

Ahead-of-time Secure EcmaScript The monorepo contains a set of packages that helps adopt SES in a pre-compiled way. Security Assumptions This project

Dimension 13 Dec 21, 2022
A multiplexed p2p network framework that supports custom protocols

Tentacle Overview This is a minimal implementation for a multiplexed p2p network based on yamux that supports mounting custom protocols. Architecture

漂流 188 Dec 19, 2022
Biddi Network enables custom p2p swaps in Solana ocean 🌊.

Peer to peer, decentralized protocol which allow direct swaps between 2 network participants for custom tokens without liquidity pools on Solana blockchain.

Biddi Network 2 Nov 1, 2022
Transmissing metainfo across components.

Metainfo Transmissing metainfo across components. Quickstart Metainfo is designed to be passed through task local, so we provided a unified key for it

CloudWeGo 10 Oct 29, 2022
Pure Rust implementation of components of the Secure Shell (SSH) protocol

RustCrypto: SSH Pure Rust implementation of components of the Secure Shell (SSH) protocol. Crates Name crates.io Docs Description ssh—encoding Decoder

Rust Crypto 27 Dec 27, 2022
Reference library that implements all the necessary functionality for developing a client that is compatible with TAPLE's DLT network.

⚠️ TAPLE is in early development and should not be used in production ⚠️ TAPLE Core TAPLE (pronounced T+ ?? ['tapəl]) stands for Tracking (Autonomous)

Open Canarias 6 Jan 25, 2023
Cross-chain bridge message delivery network. We are hiring, [email protected]

Introduction Implementation of a https://darwinia.network node in Rust based on the Substrate framework. This repository contains runtimes for the Dar

Darwinia Network 225 Nov 8, 2022
ARYA Network is a polkadot/substrate based chain for Non-fungible Token platform on which we can own sell and buy the NFT's on polkadot network.

ARYA Network ARYA Network is a polkadot/substrate based chain for Non-fungible Token platform on which we can own sell and buy the NFT's on polkadot n

Pankaj Chaudhary 6 Dec 20, 2022
The Zenotta Network Protocol (ZNP), the network that supports the Zenotta blockchain

Zenotta Network Protocol A repo for the development of the Zenotta Network Protocol (ZNP). We will regularly be updating links and easter eggs inside

Zenotta AG 10 Apr 2, 2023
dWallet Network, a composable modular signature network is the home of dWallets

Welcome to dWallet Network dWallet Network, a composable modular signature network is the home of dWallets. A dWallet is a noncollusive and massively

dWallet Labs 8 Feb 26, 2024
Custom Ethereum vanity address generator made in Rust

ethaddrgen Custom Ethereum address generator Get a shiny ethereum address and stand out from the crowd! Disclaimer: Do not use the private key shown i

Jakub Hlusička 153 Dec 27, 2022
Custom p2p swaps powered by Solana blockchain

Peer to peer, decentralized protocol which allow direct swaps between 2 network participants for custom tokens without liquidity pools on Solana blockchain.

Ilia 3 Mar 18, 2022
Single and multi-threaded custom ingestion crate for Stellar Futurenet, written in Rust.

rs-ingest Ingestion library written in rust for Futurenet rs-ingest Ingestion library written in rust for Futurenet Features Running offline Single-th

Xycloo Labs 3 Aug 14, 2023
A CLI application which allows you to archive Urbit channels and all linked content in them.

The Urbit Content Archiver is a small CLI application that exports channels from your Urbit ship and auto-downloads any directly linked content locall

Robert Kornacki 33 Sep 25, 2022
🔐 Encrypts all the Serialize.

serde-encrypt ?? Encrypts all the Serialize. Alice Bob +-----------------------------------+

Sho Nakatani 163 Dec 13, 2022
All the data an IC app needs to make seamless experiences, accessible directly on the IC. DAB is an open internet service for NFT, Token, Canister, and Dapp registries.

DAB ?? Overview An Internet Computer open internet service for data. All the data an IC app needs to make a seamless experience, accessible directly o

Psychedelic 58 Oct 6, 2022
Bitcoin Push Notification Service (BPNS) allows you to receive notifications of Bitcoin transactions of your non-custodial wallets on a provider of your choice, all while respecting your privacy

Bitcoin Push Notification Service (BPNS) Description Bitcoin Push Notification Service (BPNS) allows you to receive notifications of Bitcoin transacti

BPNS 1 May 2, 2022