Skip to content
Merged
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
11 changes: 1 addition & 10 deletions .github/CODEOWNERS
Original file line number Diff line number Diff line change
@@ -1,11 +1,2 @@
# root files
/*.* @WillPapper @daniilrrr @ericvelazquez @ibremseth @jorgemmsilva @tsite @Br1ght0ne


/synd-contracts @WillPapper @gustavoguimaraes

/synd-translator @WillPapper @daniilrrr @ericvelazquez @ibremseth @jorgemmsilva @tsite @Br1ght0ne

/synd-proposer @WillPapper @daniilrrr @ericvelazquez @ibremseth @jorgemmsilva @tsite @Br1ght0ne

/synd-maestro @WillPapper @daniilrrr @ericvelazquez @ibremseth @jorgemmsilva @tsite @Br1ght0ne
/*.* @WillPapper @sammdec @daniilrrr @ericvelazquez @ibremseth @jorgemmsilva @tsite @Br1ght0ne @calebguy
36 changes: 36 additions & 0 deletions .github/ISSUE_TEMPLATE/bug_report.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
---
name: Bug report
about: Create a report to help us improve
title: "[bug] your descriptive title here"
labels: ''
assignees: ''

---

**Describe the bug**
A clear and concise description of what the bug is.

**To Reproduce**
Steps to reproduce the behavior:
1. Go to '...'
2. Run service '....'
3. Scroll down to '....'
4. See error

**Expected behavior**
A clear and concise description of what you expected to happen.

**Screenshots**
If applicable, add screenshots to help explain your problem.

**Desktop (please complete the following information):**
- Release version
- Software component, if applicable

**Desktop (please complete the following information):**
- OS: [e.g. iOS]
- Version [e.g. 22]


**Additional context**
Add any other context about the problem here.
20 changes: 20 additions & 0 deletions .github/ISSUE_TEMPLATE/feature_request.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
---
name: Feature request
about: Suggest an idea for this project
title: "[request] your descriptive title here"
labels: ''
assignees: ''

---

**Is your feature request related to a problem? Please describe.**
A clear and concise description of what the problem is. Ex. When I run `synd-abc` I wish it would [...]

**Describe the solution you'd like**
A clear and concise description of what you want to happen.

**Describe alternatives you've considered**
A clear and concise description of any alternative solutions or features you've considered.

**Additional context**
Add any other context or screenshots about the feature request here.
21 changes: 21 additions & 0 deletions LICENSE
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
MIT License

Copyright (c) 2025 Syndicate Labs

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
14 changes: 10 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,21 +6,27 @@
[![Docker](https://img.shields.io/badge/docker-28.2.2+-blue.svg)](https://www.docker.com/)
<!-- [![License](https://img.shields.io/badge/license-XXX-green.svg)](LICENSE) -->

A comprehensive monorepo containing the complete Syndicate Appchains infrastructure stack.
This repository includes the core components for building, deploying, and managing syndicate appchains.
This monorepo contains the complete Syndicate Appchains infrastructure stack.
It includes the core components for building, deploying, and managing Syndicate appchains.

## 👾 Note to developers

If you wish to fork or build on top of the Syndicate Appchains stack, be mindful of potential rough edges or undocumented functionality in early versions of the software. While we aim to maintain semantic versioning (SemVer) in our releases, breaking changes may still occur.

Please reach out at https://syndicate.io/contact or create a Github issue in the repo for additional support.

## 📖 Documentation

For detailed documentation, architecture guides, and tutorials, visit [docs.syndicate.io](https://docs.syndicate.io/)

## 🏗️ Architecture Overview

Syndicate Appchains enables the creation of custom rollups that utilize a two-source chain architecture:
Syndicate Appchains enables the creation of custom blockchains that utilize a two-source chain architecture:

- **Sequencing Chain**: Stores transaction data and handles appchain sequencing
- **Settlement Chain**: Manages fund bridging from/to the rollup

This design provides cost-effective, customizable sequencing while leveraging the liquidity and security of established blockchain networks.
This design provides cost-effective, customizable sequencing while leveraging the liquidity and security of existing blockchain networks.

## 🚀 Quick Start

Expand Down
8 changes: 4 additions & 4 deletions shared/contract-bindings/src/synd/appchain_pool.rs

Large diffs are not rendered by default.

8 changes: 4 additions & 4 deletions shared/contract-bindings/src/synd/deploy_gas_archive.rs

Large diffs are not rendered by default.

326 changes: 266 additions & 60 deletions shared/contract-bindings/src/synd/gas_archive.rs

Large diffs are not rendered by default.

88 changes: 33 additions & 55 deletions shared/contract-bindings/src/synd/i_gas_data_provider.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ Generated by the following Solidity interface...
interface IGasDataProvider {
function getActiveAppchainIds(uint256 epochIndex) external view returns (uint256[] memory _chainIDs);
function getAppchainGasFees(uint256 epochIndex, uint256 appchainId) external view returns (uint256);
function getAppchainRewardsReceiver(uint256 epochIndex, uint256 appchainId) external view returns (address);
function getAppchainRewardsReceiver(uint256 appchainId) external view returns (address);
function getTotalGasFees(uint256 epochIndex) external view returns (uint256);
}
```
Expand Down Expand Up @@ -60,11 +60,6 @@ interface IGasDataProvider {
"type": "function",
"name": "getAppchainRewardsReceiver",
"inputs": [
{
"name": "epochIndex",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "appchainId",
"type": "uint256",
Expand Down Expand Up @@ -474,21 +469,19 @@ function getAppchainGasFees(uint256 epochIndex, uint256 appchainId) external vie
};
#[derive(serde::Serialize, serde::Deserialize)]
#[derive(Default, Debug, PartialEq, Eq, Hash)]
/**Function with signature `getAppchainRewardsReceiver(uint256,uint256)` and selector `0xec828a91`.
/**Function with signature `getAppchainRewardsReceiver(uint256)` and selector `0x0cc46212`.
```solidity
function getAppchainRewardsReceiver(uint256 epochIndex, uint256 appchainId) external view returns (address);
function getAppchainRewardsReceiver(uint256 appchainId) external view returns (address);
```*/
#[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
#[derive(Clone)]
pub struct getAppchainRewardsReceiverCall {
#[allow(missing_docs)]
pub epochIndex: alloy::sol_types::private::primitives::aliases::U256,
#[allow(missing_docs)]
pub appchainId: alloy::sol_types::private::primitives::aliases::U256,
}
#[derive(serde::Serialize, serde::Deserialize)]
#[derive(Default, Debug, PartialEq, Eq, Hash)]
///Container type for the return parameters of the [`getAppchainRewardsReceiver(uint256,uint256)`](getAppchainRewardsReceiverCall) function.
///Container type for the return parameters of the [`getAppchainRewardsReceiver(uint256)`](getAppchainRewardsReceiverCall) function.
#[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
#[derive(Clone)]
pub struct getAppchainRewardsReceiverReturn {
Expand All @@ -505,14 +498,10 @@ function getAppchainRewardsReceiver(uint256 epochIndex, uint256 appchainId) exte
use alloy::sol_types as alloy_sol_types;
{
#[doc(hidden)]
type UnderlyingSolTuple<'a> = (
alloy::sol_types::sol_data::Uint<256>,
alloy::sol_types::sol_data::Uint<256>,
);
type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,);
#[doc(hidden)]
type UnderlyingRustTuple<'a> = (
alloy::sol_types::private::primitives::aliases::U256,
alloy::sol_types::private::primitives::aliases::U256,
);
#[cfg(test)]
#[allow(dead_code, unreachable_patterns)]
Expand All @@ -530,18 +519,15 @@ function getAppchainRewardsReceiver(uint256 epochIndex, uint256 appchainId) exte
impl ::core::convert::From<getAppchainRewardsReceiverCall>
for UnderlyingRustTuple<'_> {
fn from(value: getAppchainRewardsReceiverCall) -> Self {
(value.epochIndex, value.appchainId)
(value.appchainId,)
}
}
#[automatically_derived]
#[doc(hidden)]
impl ::core::convert::From<UnderlyingRustTuple<'_>>
for getAppchainRewardsReceiverCall {
fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
Self {
epochIndex: tuple.0,
appchainId: tuple.1,
}
Self { appchainId: tuple.0 }
}
}
}
Expand Down Expand Up @@ -580,10 +566,7 @@ function getAppchainRewardsReceiver(uint256 epochIndex, uint256 appchainId) exte
}
#[automatically_derived]
impl alloy_sol_types::SolCall for getAppchainRewardsReceiverCall {
type Parameters<'a> = (
alloy::sol_types::sol_data::Uint<256>,
alloy::sol_types::sol_data::Uint<256>,
);
type Parameters<'a> = (alloy::sol_types::sol_data::Uint<256>,);
type Token<'a> = <Self::Parameters<
'a,
> as alloy_sol_types::SolType>::Token<'a>;
Expand All @@ -592,8 +575,8 @@ function getAppchainRewardsReceiver(uint256 epochIndex, uint256 appchainId) exte
type ReturnToken<'a> = <Self::ReturnTuple<
'a,
> as alloy_sol_types::SolType>::Token<'a>;
const SIGNATURE: &'static str = "getAppchainRewardsReceiver(uint256,uint256)";
const SELECTOR: [u8; 4] = [236u8, 130u8, 138u8, 145u8];
const SIGNATURE: &'static str = "getAppchainRewardsReceiver(uint256)";
const SELECTOR: [u8; 4] = [12u8, 196u8, 98u8, 18u8];
#[inline]
fn new<'a>(
tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
Expand All @@ -603,9 +586,6 @@ function getAppchainRewardsReceiver(uint256 epochIndex, uint256 appchainId) exte
#[inline]
fn tokenize(&self) -> Self::Token<'_> {
(
<alloy::sol_types::sol_data::Uint<
256,
> as alloy_sol_types::SolType>::tokenize(&self.epochIndex),
<alloy::sol_types::sol_data::Uint<
256,
> as alloy_sol_types::SolType>::tokenize(&self.appchainId),
Expand Down Expand Up @@ -821,10 +801,10 @@ function getTotalGasFees(uint256 epochIndex) external view returns (uint256);
///
/// Prefer using `SolInterface` methods instead.
pub const SELECTORS: &'static [[u8; 4usize]] = &[
[12u8, 196u8, 98u8, 18u8],
[40u8, 95u8, 36u8, 70u8],
[44u8, 208u8, 120u8, 184u8],
[206u8, 83u8, 124u8, 159u8],
[236u8, 130u8, 138u8, 145u8],
];
}
#[automatically_derived]
Expand Down Expand Up @@ -866,6 +846,17 @@ function getTotalGasFees(uint256 epochIndex) external view returns (uint256);
static DECODE_SHIMS: &[fn(
&[u8],
) -> alloy_sol_types::Result<IGasDataProviderCalls>] = &[
{
fn getAppchainRewardsReceiver(
data: &[u8],
) -> alloy_sol_types::Result<IGasDataProviderCalls> {
<getAppchainRewardsReceiverCall as alloy_sol_types::SolCall>::abi_decode_raw(
data,
)
.map(IGasDataProviderCalls::getAppchainRewardsReceiver)
}
getAppchainRewardsReceiver
},
{
fn getAppchainGasFees(
data: &[u8],
Expand Down Expand Up @@ -899,17 +890,6 @@ function getTotalGasFees(uint256 epochIndex) external view returns (uint256);
}
getTotalGasFees
},
{
fn getAppchainRewardsReceiver(
data: &[u8],
) -> alloy_sol_types::Result<IGasDataProviderCalls> {
<getAppchainRewardsReceiverCall as alloy_sol_types::SolCall>::abi_decode_raw(
data,
)
.map(IGasDataProviderCalls::getAppchainRewardsReceiver)
}
getAppchainRewardsReceiver
},
];
let Ok(idx) = Self::SELECTORS.binary_search(&selector) else {
return Err(
Expand All @@ -930,6 +910,17 @@ function getTotalGasFees(uint256 epochIndex) external view returns (uint256);
static DECODE_VALIDATE_SHIMS: &[fn(
&[u8],
) -> alloy_sol_types::Result<IGasDataProviderCalls>] = &[
{
fn getAppchainRewardsReceiver(
data: &[u8],
) -> alloy_sol_types::Result<IGasDataProviderCalls> {
<getAppchainRewardsReceiverCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
data,
)
.map(IGasDataProviderCalls::getAppchainRewardsReceiver)
}
getAppchainRewardsReceiver
},
{
fn getAppchainGasFees(
data: &[u8],
Expand Down Expand Up @@ -963,17 +954,6 @@ function getTotalGasFees(uint256 epochIndex) external view returns (uint256);
}
getTotalGasFees
},
{
fn getAppchainRewardsReceiver(
data: &[u8],
) -> alloy_sol_types::Result<IGasDataProviderCalls> {
<getAppchainRewardsReceiverCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
data,
)
.map(IGasDataProviderCalls::getAppchainRewardsReceiver)
}
getAppchainRewardsReceiver
},
];
let Ok(idx) = Self::SELECTORS.binary_search(&selector) else {
return Err(
Expand Down Expand Up @@ -1226,12 +1206,10 @@ the bytecode concatenated with the constructor's ABI-encoded arguments.*/
///Creates a new call builder for the [`getAppchainRewardsReceiver`] function.
pub fn getAppchainRewardsReceiver(
&self,
epochIndex: alloy::sol_types::private::primitives::aliases::U256,
appchainId: alloy::sol_types::private::primitives::aliases::U256,
) -> alloy_contract::SolCallBuilder<&P, getAppchainRewardsReceiverCall, N> {
self.call_builder(
&getAppchainRewardsReceiverCall {
epochIndex,
appchainId,
},
)
Expand Down
Loading
Loading