feat: Add Cargo files, CI, configs and README
This commit is contained in:
3
.cargo/config.toml
Normal file
3
.cargo/config.toml
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
[build]
|
||||||
|
# this flag is used to build tokio-console correctly.
|
||||||
|
rustflags = ["--cfg", "tokio_unstable"]
|
||||||
1
.clippy.toml
Normal file
1
.clippy.toml
Normal file
@@ -0,0 +1 @@
|
|||||||
|
allow-dbg-in-tests = true
|
||||||
17
.github/workflows/ci.yaml
vendored
Normal file
17
.github/workflows/ci.yaml
vendored
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
name: Continuous Integration
|
||||||
|
|
||||||
|
on:
|
||||||
|
pull_request:
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
id-token: write
|
||||||
|
contents: read
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
tests-and-lints:
|
||||||
|
uses: ./.github/workflows/tests-and-lints-template.yaml
|
||||||
|
secrets:
|
||||||
|
eth_rpc_url: ${{ secrets.ETH_RPC_URL }}
|
||||||
|
app_id: ${{ secrets.APP_ID }}
|
||||||
|
app_private_key: ${{ secrets.APP_PRIVATE_KEY }}
|
||||||
|
|
||||||
123
.github/workflows/tests-and-lints-template.yaml
vendored
Normal file
123
.github/workflows/tests-and-lints-template.yaml
vendored
Normal file
@@ -0,0 +1,123 @@
|
|||||||
|
name: Continuous Integration
|
||||||
|
|
||||||
|
on:
|
||||||
|
workflow_call:
|
||||||
|
inputs:
|
||||||
|
runs_on:
|
||||||
|
required: false
|
||||||
|
type: string
|
||||||
|
default: ubuntu-latest
|
||||||
|
timeout_minutes:
|
||||||
|
required: false
|
||||||
|
type: number
|
||||||
|
default: 15
|
||||||
|
secrets:
|
||||||
|
eth_rpc_url:
|
||||||
|
required: true
|
||||||
|
app_id:
|
||||||
|
required: true
|
||||||
|
app_private_key:
|
||||||
|
required: true
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
id-token: write
|
||||||
|
contents: read
|
||||||
|
|
||||||
|
env:
|
||||||
|
CARGO_TERM_COLOR: always
|
||||||
|
ETH_RPC_URL: ${{ secrets.eth_rpc_url }}
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
compile_and_test:
|
||||||
|
name: Compile & Test
|
||||||
|
runs-on: ${{ inputs.runs_on }}
|
||||||
|
timeout-minutes: ${{ inputs.timeout_minutes }}
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
toolchain:
|
||||||
|
- stable
|
||||||
|
steps:
|
||||||
|
- name: Generate a token
|
||||||
|
id: generate-token
|
||||||
|
uses: getsentry/action-github-app-token@v2
|
||||||
|
with:
|
||||||
|
app_id: ${{ secrets.app_id }}
|
||||||
|
private_key: ${{ secrets.app_private_key }}
|
||||||
|
|
||||||
|
- name: Install git
|
||||||
|
run: sudo apt update && sudo apt install -y git
|
||||||
|
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v3
|
||||||
|
|
||||||
|
- name: Setup git to use https
|
||||||
|
run: |
|
||||||
|
git config --global credential.helper store
|
||||||
|
echo "https://${{ steps.generate-token.outputs.token }}@github.com" > ~/.git-credentials
|
||||||
|
git config --global url."https://x-access-token:${{ steps.generate-token.outputs.token }}@github.com".insteadOf ssh://github.com
|
||||||
|
|
||||||
|
- name: Setup toolchain
|
||||||
|
uses: dtolnay/rust-toolchain@v1
|
||||||
|
with:
|
||||||
|
toolchain: ${{ matrix.toolchain }}
|
||||||
|
|
||||||
|
- name: Setup Rust Cache
|
||||||
|
uses: Swatinem/rust-cache@v2
|
||||||
|
with:
|
||||||
|
cache-on-failure: true
|
||||||
|
|
||||||
|
- name: Install latest nextest release
|
||||||
|
uses: taiki-e/install-action@nextest
|
||||||
|
|
||||||
|
- name: Test
|
||||||
|
run: cargo nextest run --workspace --lib --all-targets --all-features && cargo test --doc
|
||||||
|
|
||||||
|
lint:
|
||||||
|
name: Code Lint
|
||||||
|
runs-on: ${{ inputs.runs_on }}
|
||||||
|
timeout-minutes: ${{ inputs.timeout_minutes }}
|
||||||
|
steps:
|
||||||
|
- name: Generate a token
|
||||||
|
id: generate-token
|
||||||
|
uses: getsentry/action-github-app-token@v2
|
||||||
|
with:
|
||||||
|
app_id: ${{ secrets.app_id }}
|
||||||
|
private_key: ${{ secrets.app_private_key }}
|
||||||
|
|
||||||
|
- name: Install git
|
||||||
|
run: sudo apt update && sudo apt install -y git
|
||||||
|
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v3
|
||||||
|
|
||||||
|
- name: Setup git to use https
|
||||||
|
run: |
|
||||||
|
git config --global credential.helper store
|
||||||
|
echo "https://${{ steps.generate-token.outputs.token }}@github.com" > ~/.git-credentials
|
||||||
|
git config --global url."https://x-access-token:${{ steps.generate-token.outputs.token }}@github.com".insteadOf ssh://github.com
|
||||||
|
|
||||||
|
- name: Setup clippy toolchain - stable
|
||||||
|
uses: dtolnay/rust-toolchain@v1
|
||||||
|
with:
|
||||||
|
toolchain: stable
|
||||||
|
components: clippy
|
||||||
|
|
||||||
|
- name: Setup Rust Cache
|
||||||
|
uses: Swatinem/rust-cache@v2
|
||||||
|
with:
|
||||||
|
cache-on-failure: true
|
||||||
|
|
||||||
|
- run: cargo clippy --workspace --lib --all-targets --all-features -- -D clippy::dbg-macro
|
||||||
|
env:
|
||||||
|
RUSTFLAGS: -Dwarnings
|
||||||
|
|
||||||
|
- run: cargo check --no-default-features
|
||||||
|
env:
|
||||||
|
RUSTFLAGS: -Dwarnings
|
||||||
|
|
||||||
|
- name: Setup rustfmt toolchain - nightly
|
||||||
|
uses: dtolnay/rust-toolchain@nightly
|
||||||
|
with:
|
||||||
|
components: rustfmt
|
||||||
|
|
||||||
|
- run: cargo +nightly fmt --all --check
|
||||||
42
.github/workflows/v2-main-workflow.yaml
vendored
Normal file
42
.github/workflows/v2-main-workflow.yaml
vendored
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
name: Main workflow
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
tests-and-lints:
|
||||||
|
uses: ./.github/workflows/tests-and-lints-template.yaml
|
||||||
|
secrets:
|
||||||
|
eth_rpc_url: ${{ secrets.ETH_RPC_URL }}
|
||||||
|
app_id: ${{ secrets.APP_ID }}
|
||||||
|
app_private_key: ${{ secrets.APP_PRIVATE_KEY }}
|
||||||
|
|
||||||
|
check-release:
|
||||||
|
uses: propeller-heads/ci-cd-templates/.github/workflows/release-v2.yaml@main
|
||||||
|
with:
|
||||||
|
args: --dry-run --no-ci
|
||||||
|
permissions:
|
||||||
|
contents: write # to be able to publish a GitHub release
|
||||||
|
issues: write # to be able to comment on released issues
|
||||||
|
pull-requests: write # to be able to comment on released pull requests
|
||||||
|
id-token: write # to enable use of OIDC for npm provenance
|
||||||
|
secrets:
|
||||||
|
app_id: ${{ secrets.APP_ID }}
|
||||||
|
app_private_key: ${{ secrets.APP_PRIVATE_KEY }}
|
||||||
|
|
||||||
|
release:
|
||||||
|
needs:
|
||||||
|
- tests-and-lints
|
||||||
|
- check-release
|
||||||
|
if: needs.check-release.outputs.verify_release_version != ''
|
||||||
|
uses: propeller-heads/ci-cd-templates/.github/workflows/release-v2.yaml@main
|
||||||
|
permissions:
|
||||||
|
contents: write # to be able to publish a GitHub release
|
||||||
|
issues: write # to be able to comment on released issues
|
||||||
|
pull-requests: write # to be able to comment on released pull requests
|
||||||
|
id-token: write # to enable use of OIDC for npm provenance
|
||||||
|
secrets:
|
||||||
|
app_id: ${{ secrets.APP_ID }}
|
||||||
|
app_private_key: ${{ secrets.APP_PRIVATE_KEY }}
|
||||||
19
.github/workflows/v2-validate-pr.yaml
vendored
Normal file
19
.github/workflows/v2-validate-pr.yaml
vendored
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
name: Validate PR title
|
||||||
|
|
||||||
|
on:
|
||||||
|
pull_request_target:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
- release/*
|
||||||
|
types:
|
||||||
|
- opened
|
||||||
|
- edited
|
||||||
|
- synchronize
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
validate-pr:
|
||||||
|
uses: propeller-heads/ci-cd-templates/.github/workflows/validate-pr.yaml@main
|
||||||
|
secrets:
|
||||||
|
app_id: ${{ secrets.APP_ID }}
|
||||||
|
app_private_key: ${{ secrets.APP_PRIVATE_KEY }}
|
||||||
|
|
||||||
28
.gitignore
vendored
Normal file
28
.gitignore
vendored
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
# Generated by Cargo
|
||||||
|
# will have compiled files and executables
|
||||||
|
debug/
|
||||||
|
target/
|
||||||
|
|
||||||
|
# These are backup files generated by rustfmt
|
||||||
|
**/*.rs.bk
|
||||||
|
|
||||||
|
# MSVC Windows builds of rustc generate these, which store debugging information
|
||||||
|
*.pdb
|
||||||
|
|
||||||
|
# MacOS
|
||||||
|
.DS_Store
|
||||||
|
|
||||||
|
# data folder
|
||||||
|
.data/
|
||||||
|
|
||||||
|
# VS Code
|
||||||
|
.vscode
|
||||||
|
# Pycharm User-specific stuff
|
||||||
|
.idea/*
|
||||||
|
|
||||||
|
# Local History for Visual Studio Code
|
||||||
|
.history/
|
||||||
|
|
||||||
|
# Built Visual Studio Code Extensions
|
||||||
|
*.vsix
|
||||||
|
.env
|
||||||
14
.taplo.toml
Normal file
14
.taplo.toml
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
[schema]
|
||||||
|
path = "https://json.schemastore.org/cargo.json"
|
||||||
|
enabled = true
|
||||||
|
|
||||||
|
|
||||||
|
[formatting]
|
||||||
|
reorder_keys = false
|
||||||
|
|
||||||
|
[[rule]]
|
||||||
|
include = ["**/Cargo.toml"]
|
||||||
|
keys = ["dependencies"]
|
||||||
|
|
||||||
|
[rule.formatting]
|
||||||
|
reorder_keys = true
|
||||||
1
CODEOWNERS
Normal file
1
CODEOWNERS
Normal file
@@ -0,0 +1 @@
|
|||||||
|
@propeller-heads
|
||||||
3595
Cargo.lock
generated
Normal file
3595
Cargo.lock
generated
Normal file
File diff suppressed because it is too large
Load Diff
24
Cargo.toml
Normal file
24
Cargo.toml
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
[package]
|
||||||
|
name = "tycho-execution"
|
||||||
|
version = "0.1.0"
|
||||||
|
edition = "2021"
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
dotenv = "0.15.0"
|
||||||
|
lazy_static = "1.4.0"
|
||||||
|
num-bigint = "0.4.6"
|
||||||
|
|
||||||
|
tokio = { version = "1.38.0", features = ["full"] }
|
||||||
|
|
||||||
|
alloy = { version = "0.5.4", features = ["providers"] }
|
||||||
|
alloy-sol-types = { version = "0.8.14" }
|
||||||
|
alloy-primitives = { version = "0.8.9" }
|
||||||
|
tycho-core = { git = "https://github.com/propeller-heads/tycho-indexer.git", package = "tycho-core", tag = "0.46.0" }
|
||||||
|
hex = "0.4.3"
|
||||||
|
anyhow = "1.0.95"
|
||||||
|
num-traits = "0.2.19"
|
||||||
|
serde = { version = "1.0.217", features = ["derive"] }
|
||||||
|
serde_json = "1.0.135"
|
||||||
|
|
||||||
|
[profile.bench]
|
||||||
|
debug = true
|
||||||
@@ -1 +1,7 @@
|
|||||||
# tycho-execution
|
# Tycho Execution
|
||||||
|
|
||||||
|
TODO: add banner
|
||||||
|
|
||||||
|
Tycho Execution makes it easy to trade on different DEXs by handling the complex encoding for you. Instead of creating
|
||||||
|
custom code for each DEX, you get a simple, ready-to-use tool that generates the necessary data to execute trades. It’s
|
||||||
|
designed to be safe, straightforward, and quick to set up, so anyone can start trading without extra effort.
|
||||||
5
check.sh
Executable file
5
check.sh
Executable file
@@ -0,0 +1,5 @@
|
|||||||
|
set -e
|
||||||
|
|
||||||
|
cargo +nightly fmt --all --check
|
||||||
|
cargo clippy --workspace --lib --all-targets --all-features -- -D clippy::dbg-macro
|
||||||
|
cargo nextest run --workspace --lib --all-targets --all-features
|
||||||
87
release.config.js
Normal file
87
release.config.js
Normal file
@@ -0,0 +1,87 @@
|
|||||||
|
const config = {
|
||||||
|
branches: [
|
||||||
|
"release/+([0-9])?(.{+([0-9]),x}).x",
|
||||||
|
"main",
|
||||||
|
"next",
|
||||||
|
"next-major",
|
||||||
|
{
|
||||||
|
name: "prerelease",
|
||||||
|
prerelease: "pre",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
tagFormat: "${version}",
|
||||||
|
ci: true,
|
||||||
|
debug: true,
|
||||||
|
plugins: [
|
||||||
|
[
|
||||||
|
"@semantic-release/commit-analyzer",
|
||||||
|
{
|
||||||
|
preset: "conventionalcommits",
|
||||||
|
releaseRules: [
|
||||||
|
{type: "breaking", release: "major"},
|
||||||
|
{type: "feat", release: "minor"},
|
||||||
|
{type: "fix", release: "patch"},
|
||||||
|
{type: "refactor", release: "patch"},
|
||||||
|
{type: "security", release: "patch"},
|
||||||
|
{type: "style", release: "patch"},
|
||||||
|
{type: "test", release: false},
|
||||||
|
{type: "docs", release: false},
|
||||||
|
{type: "ci", release: false},
|
||||||
|
{type: "chore", release: false},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"@semantic-release/exec",
|
||||||
|
{
|
||||||
|
verifyReleaseCmd:
|
||||||
|
'echo "VERIFY_RELEASE_VERSION=${nextRelease.version}" >> $GITHUB_OUTPUT',
|
||||||
|
publishCmd:
|
||||||
|
'echo "NEXT_RELEASE_VERSION=${nextRelease.version}" >> $GITHUB_OUTPUT',
|
||||||
|
prepareCmd: [
|
||||||
|
"toml set --toml-path Cargo.toml package.version ${nextRelease.version}",
|
||||||
|
"cargo update -p tycho-execution",
|
||||||
|
].join(" && "),
|
||||||
|
},
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"@semantic-release/release-notes-generator",
|
||||||
|
{
|
||||||
|
preset: "conventionalcommits",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"@semantic-release/github",
|
||||||
|
{
|
||||||
|
successComment:
|
||||||
|
"This ${issue.pull_request ? 'PR is included' : 'issue has been resolved'} in version ${nextRelease.version} :tada:",
|
||||||
|
labels: true,
|
||||||
|
releasedLabels: true,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
],
|
||||||
|
};
|
||||||
|
|
||||||
|
const ref = process.env.GITHUB_REF;
|
||||||
|
const branch = ref.split("/").pop();
|
||||||
|
|
||||||
|
if (
|
||||||
|
config.branches.some(
|
||||||
|
(it) => it === branch || (it.name === branch && !it.prerelease),
|
||||||
|
)
|
||||||
|
) {
|
||||||
|
config.plugins.push("@semantic-release/changelog", [
|
||||||
|
"@semantic-release/git",
|
||||||
|
{
|
||||||
|
assets: [
|
||||||
|
"CHANGELOG.md",
|
||||||
|
"Cargo.toml",
|
||||||
|
"Cargo.lock",
|
||||||
|
],
|
||||||
|
message:
|
||||||
|
"chore(release): ${nextRelease.version} [skip ci]\n\n${nextRelease.notes}",
|
||||||
|
},
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = config;
|
||||||
3
rust-toolchain.toml
Normal file
3
rust-toolchain.toml
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
[toolchain]
|
||||||
|
channel = "nightly"
|
||||||
|
components = ["rustfmt"]
|
||||||
11
rustfmt.toml
Normal file
11
rustfmt.toml
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
reorder_imports = true
|
||||||
|
imports_granularity = "Crate"
|
||||||
|
use_small_heuristics = "Max"
|
||||||
|
comment_width = 100
|
||||||
|
wrap_comments = true
|
||||||
|
binop_separator = "Back"
|
||||||
|
trailing_comma = "Vertical"
|
||||||
|
trailing_semicolon = false
|
||||||
|
use_field_init_shorthand = true
|
||||||
|
chain_width=40
|
||||||
|
group_imports = "StdExternalCrate"
|
||||||
0
src/lib.rs
Normal file
0
src/lib.rs
Normal file
Reference in New Issue
Block a user