Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Holesky Launch #296

Merged
merged 307 commits into from
Nov 12, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
307 commits
Select commit Hold shift + click to select a range
db4d394
chore(holesky): update rc image for Helix
thedevbirb Oct 24, 2024
72e5f7f
fix(holesky): remove toml volume from dockerfile
thedevbirb Oct 24, 2024
19e2988
feat(holesky): cadvisor dashboard stub
thedevbirb Oct 24, 2024
d442366
fix(sidecar): test/CI
thedevbirb Oct 25, 2024
3c9f3f8
fix(holesky): restore commit-boost observability previosly removed by…
thedevbirb Oct 25, 2024
5a64219
fix(holesky/docs): broken links
Oct 25, 2024
5fdb314
fix(holesky): cAdvisor only scans for the services in the current doc…
thedevbirb Oct 25, 2024
1a5bed0
chore(testnet): holesky launch folder stub
thedevbirb Oct 15, 2024
9b18085
git(sidecar): add bolt-sidecar binaries to .gitignore
thedevbirb Oct 16, 2024
8aa2381
docker(sidecar): remove redundant dependencies during build
thedevbirb Oct 16, 2024
b0038f1
chore!(sidecar): rename env for telemetry options
thedevbirb Oct 16, 2024
a38ffb6
chore(sidecar): update .env.example
thedevbirb Oct 16, 2024
512956e
chore(sidecar): update Config.example.toml
thedevbirb Oct 16, 2024
0ed6dbc
chore!(sidecar): remove short options from telemetry config
thedevbirb Oct 16, 2024
3a2f014
chore(holesky): add .gitignore
thedevbirb Oct 17, 2024
f09560c
chore(mev-boost): add .env.example
thedevbirb Oct 17, 2024
1bd285b
feat(holesky): update networking & default values
Oct 25, 2024
d7e2b8f
chore(mev-boost): update .gitignore
thedevbirb Oct 17, 2024
4ee7816
chore(holesky): update docker compose setup
thedevbirb Oct 17, 2024
7201f6f
chore(holesky): move commit-boost config in separate directory
thedevbirb Oct 17, 2024
32aeb6c
fix(delegations-cli): non-descriptive error message
thedevbirb Oct 21, 2024
67aaf93
wip: pbs configs
merklefruit Oct 21, 2024
9d2b5a7
feat: working pbs docker compose
merklefruit Oct 21, 2024
ebfc692
chore(sidecar): more precise docs for config
thedevbirb Oct 21, 2024
12d83b1
docs(holesky): README launch wip
thedevbirb Oct 16, 2024
b854541
fix(holesky): add bolt prefix to all services and containers to avoid…
thedevbirb Oct 21, 2024
8504a90
fix(holesky): docker-compose sidecar entrypoint
thedevbirb Oct 21, 2024
8887d17
fix(sidecar): .env.example
thedevbirb Oct 21, 2024
70fc7d9
chore(holesky): add simple bash script to create .env stub
thedevbirb Oct 21, 2024
0197f1b
chore(sidecar): update Config.example.toml
thedevbirb Oct 22, 2024
5942872
chore(sidecar): review CLI options and their defaults
thedevbirb Oct 22, 2024
185c2a6
chore(sidecar): add Config.toml to .gitignore
thedevbirb Oct 22, 2024
af4dc93
feat(sidecar): allow reading TOML config from default path
thedevbirb Oct 22, 2024
68ab07a
chore(holesky): add *.toml to .gitignore
thedevbirb Oct 22, 2024
33f341d
fix(holesky): broken links in README, use TOML config file instead of…
thedevbirb Oct 22, 2024
743f032
chore(holesky): update docker-compose.yml
thedevbirb Oct 22, 2024
628b443
fix(sidecar): min_priority_fee is now u128 and not NonZero<u128>
thedevbirb Oct 22, 2024
9d55724
fix(holesky): cat -> cp in README
thedevbirb Oct 22, 2024
0286524
chore(holesky): delegations flag in README
thedevbirb Oct 22, 2024
b402cdb
fix(holesky): provide delegations cli volume
thedevbirb Oct 22, 2024
55f58cc
docs(holesky): update instructions
Oct 21, 2024
afc0dc5
docs(holesky): smol chagnes
Oct 21, 2024
619d9f0
docs(holesky): smol changes
Oct 21, 2024
a44016b
docs(holesky): validator registration script
Oct 21, 2024
d030036
docs(holesky): operator registration
Oct 22, 2024
b285e33
chore(holesky): README fmt
thedevbirb Oct 22, 2024
c0dbf4c
chore(holesky): validator controller reference on README
thedevbirb Oct 22, 2024
4648daf
fix(holesky): stale flags in README
thedevbirb Oct 22, 2024
23beddf
chore(sidecar): mark required fields in the Config.example.toml
thedevbirb Oct 22, 2024
6b92e59
fix(holesky): wrong code links and snippets in README
thedevbirb Oct 23, 2024
bbf670a
feat(holesky): test commit grafana dashboard and prometheus setup
thedevbirb Oct 23, 2024
4918c13
fix(contracts): move operators scripts into new operators folder
thedevbirb Oct 23, 2024
a3ba7cd
feat(holesky): EL script for StrategyManager.depositIntoStrategy
thedevbirb Oct 23, 2024
6b71506
fix(holesky): formatting in README
thedevbirb Oct 24, 2024
8c191b0
chore(holesky): better explanation of operator config steps for EL
thedevbirb Oct 24, 2024
61cc8a1
feat(holesky): update scripts + README for Symbiotic integration
thedevbirb Oct 23, 2024
3b222d3
fix(holesky): config options for Symbiotic guide
thedevbirb Oct 24, 2024
cb4d90e
chore(holesky): upgrade vault addresses for Symbiotic
thedevbirb Oct 24, 2024
dc162a7
fix(contracts/scripts): register Symbiotic operator script
Oct 24, 2024
e1154f9
chore(holesky): updated bolt-cli usage guide
merklefruit Oct 24, 2024
8091857
fix: broken links
merklefruit Oct 24, 2024
2de1617
chore!(sidecar,holesky): drop support for TOML, use .env everywhere
thedevbirb Oct 24, 2024
8e99590
chore(holesky): update README after dropping TOML support
thedevbirb Oct 24, 2024
74044aa
Update testnets/holesky/README.md
thedevbirb Oct 24, 2024
9d6243a
fix(holesky): docker compose setup -- grafana, prometheus
thedevbirb Oct 24, 2024
0ee6fc6
chore(holesky): update rc image for Helix
thedevbirb Oct 24, 2024
dac00cc
fix(holesky): remove toml volume from dockerfile
thedevbirb Oct 24, 2024
cd84836
feat(holesky): cadvisor dashboard stub
thedevbirb Oct 24, 2024
59c61f4
fix(sidecar): test/CI
thedevbirb Oct 25, 2024
6df1559
fix(holesky): restore commit-boost observability previosly removed by…
thedevbirb Oct 25, 2024
c1e26b5
fix(holesky/docs): broken links
Oct 25, 2024
4c5fb29
fix(holesky): cAdvisor only scans for the services in the current doc…
thedevbirb Oct 25, 2024
f0c1eb3
Merge branch 'lore/feat/holesky-launch' of github.com:chainbound/bolt…
Oct 25, 2024
9172aed
feat(holesky): update networking & default values
Oct 25, 2024
3a5edcc
fix(holesky): fix conflict
Oct 25, 2024
12f2c69
fix(holesky): add custom network to compose
Oct 25, 2024
eaeed3f
fix(holesky): typo
Oct 25, 2024
de9e97e
fix(holesky): genesis fork version on builder
Oct 25, 2024
f0c3eea
fix(holesky): cb port description
Oct 27, 2024
d5450f0
docs(holesky): document cb status
Oct 28, 2024
b5f67ba
chore(testnet): holesky launch folder stub
thedevbirb Oct 15, 2024
4afe620
git(sidecar): add bolt-sidecar binaries to .gitignore
thedevbirb Oct 16, 2024
5416032
docker(sidecar): remove redundant dependencies during build
thedevbirb Oct 16, 2024
d3f9b0c
chore!(sidecar): rename env for telemetry options
thedevbirb Oct 16, 2024
82aac7f
chore(sidecar): update .env.example
thedevbirb Oct 16, 2024
cc83818
chore(sidecar): update Config.example.toml
thedevbirb Oct 16, 2024
91b44ae
chore!(sidecar): remove short options from telemetry config
thedevbirb Oct 16, 2024
3701587
chore(holesky): add .gitignore
thedevbirb Oct 17, 2024
e22156d
chore(mev-boost): add .env.example
thedevbirb Oct 17, 2024
31ac432
chore(mev-boost): update .gitignore
thedevbirb Oct 17, 2024
ce27645
chore(holesky): update docker compose setup
thedevbirb Oct 17, 2024
a02f725
chore(holesky): move commit-boost config in separate directory
thedevbirb Oct 17, 2024
022ef5a
fix(delegations-cli): non-descriptive error message
thedevbirb Oct 21, 2024
e0208ad
wip: pbs configs
merklefruit Oct 21, 2024
cc45858
feat: working pbs docker compose
merklefruit Oct 21, 2024
e8da054
chore(sidecar): more precise docs for config
thedevbirb Oct 21, 2024
574c273
docs(holesky): README launch wip
thedevbirb Oct 16, 2024
9852e88
fix(holesky): add bolt prefix to all services and containers to avoid…
thedevbirb Oct 21, 2024
dbfc2f4
fix(holesky): docker-compose sidecar entrypoint
thedevbirb Oct 21, 2024
6cfdd37
fix(sidecar): .env.example
thedevbirb Oct 21, 2024
5a2ae13
chore(holesky): add simple bash script to create .env stub
thedevbirb Oct 21, 2024
ff47200
chore(sidecar): update Config.example.toml
thedevbirb Oct 22, 2024
55abca9
chore(sidecar): review CLI options and their defaults
thedevbirb Oct 22, 2024
dc93a4e
chore(sidecar): add Config.toml to .gitignore
thedevbirb Oct 22, 2024
90d3142
feat(sidecar): allow reading TOML config from default path
thedevbirb Oct 22, 2024
d3b34e7
chore(holesky): add *.toml to .gitignore
thedevbirb Oct 22, 2024
dc46e26
fix(holesky): broken links in README, use TOML config file instead of…
thedevbirb Oct 22, 2024
1e412c5
chore(holesky): update docker-compose.yml
thedevbirb Oct 22, 2024
32d4027
fix(sidecar): min_priority_fee is now u128 and not NonZero<u128>
thedevbirb Oct 22, 2024
a72034d
fix(holesky): cat -> cp in README
thedevbirb Oct 22, 2024
d603b4d
chore(holesky): delegations flag in README
thedevbirb Oct 22, 2024
5cc0f3d
fix(holesky): provide delegations cli volume
thedevbirb Oct 22, 2024
5511467
docs(holesky): update instructions
Oct 21, 2024
8432b43
docs(holesky): smol chagnes
Oct 21, 2024
bdeacac
docs(holesky): smol changes
Oct 21, 2024
59510db
docs(holesky): validator registration script
Oct 21, 2024
808d090
docs(holesky): operator registration
Oct 22, 2024
3cbbc7d
chore(holesky): README fmt
thedevbirb Oct 22, 2024
4131a92
chore(holesky): validator controller reference on README
thedevbirb Oct 22, 2024
9fb22a1
fix(holesky): stale flags in README
thedevbirb Oct 22, 2024
3b8731c
chore(sidecar): mark required fields in the Config.example.toml
thedevbirb Oct 22, 2024
6663b18
fix(holesky): wrong code links and snippets in README
thedevbirb Oct 23, 2024
cd48a2a
feat(holesky): test commit grafana dashboard and prometheus setup
thedevbirb Oct 23, 2024
a017f92
fix(contracts): move operators scripts into new operators folder
thedevbirb Oct 23, 2024
32c6391
feat(holesky): EL script for StrategyManager.depositIntoStrategy
thedevbirb Oct 23, 2024
fab2107
fix(holesky): formatting in README
thedevbirb Oct 24, 2024
310861f
chore(holesky): better explanation of operator config steps for EL
thedevbirb Oct 24, 2024
5c46e4a
feat(holesky): update scripts + README for Symbiotic integration
thedevbirb Oct 23, 2024
ee3109c
fix(holesky): config options for Symbiotic guide
thedevbirb Oct 24, 2024
2451c75
chore(holesky): upgrade vault addresses for Symbiotic
thedevbirb Oct 24, 2024
3062f3a
fix(contracts/scripts): register Symbiotic operator script
Oct 24, 2024
b39ce6c
chore(holesky): updated bolt-cli usage guide
merklefruit Oct 24, 2024
062389c
fix: broken links
merklefruit Oct 24, 2024
32cb2f0
chore!(sidecar,holesky): drop support for TOML, use .env everywhere
thedevbirb Oct 24, 2024
9d759c4
chore(holesky): update README after dropping TOML support
thedevbirb Oct 24, 2024
f06c362
Update testnets/holesky/README.md
thedevbirb Oct 24, 2024
261fdd1
fix(holesky): docker compose setup -- grafana, prometheus
thedevbirb Oct 24, 2024
4a9ea79
chore(holesky): update rc image for Helix
thedevbirb Oct 24, 2024
44d2bf0
fix(holesky): remove toml volume from dockerfile
thedevbirb Oct 24, 2024
c8e19a6
feat(holesky): cadvisor dashboard stub
thedevbirb Oct 24, 2024
3fc56a5
fix(sidecar): test/CI
thedevbirb Oct 25, 2024
656116c
fix(holesky): restore commit-boost observability previosly removed by…
thedevbirb Oct 25, 2024
fefc31c
fix(holesky/docs): broken links
Oct 25, 2024
cfa8e46
feat(holesky): update networking & default values
Oct 25, 2024
fe21cff
fix(holesky): add custom network to compose
Oct 25, 2024
16ee99b
fix(holesky): typo
Oct 25, 2024
14c3385
fix(holesky): genesis fork version on builder
Oct 25, 2024
c0839ba
fix(holesky): cb port description
Oct 27, 2024
d78c3c7
docs(holesky): document cb status
Oct 28, 2024
3840e24
chore(holesky): re-add bolt-default network to all services
thedevbirb Oct 28, 2024
e2d47cf
feat(contracts): smol changes
Oct 28, 2024
cd77ffa
docs(holesky): smol changes
Oct 28, 2024
4d307f4
fix: merge
Oct 28, 2024
d52fb5a
fix: merge conflict
Oct 28, 2024
34cf8c5
chore: remove mev-boost folder again
thedevbirb Oct 28, 2024
73a6fd3
Merge branch 'unstable' into lore/feat/holesky-launch
thedevbirb Oct 28, 2024
b640654
fix(holesky/docs): broken links
thedevbirb Oct 28, 2024
17dcc7f
chore(holesky/env): add BOLT_SIDECAR_ENABLE_UNSAFE_LOOKAHEAD in .env.…
thedevbirb Oct 28, 2024
b629e38
fix(holesky/docs): table of contents
thedevbirb Oct 29, 2024
a4c514a
docs(holesky): clarify order of operations
Oct 28, 2024
4c1baea
docs(holesky): callout fix
Oct 28, 2024
f0e18fa
fix(holesky/docks): broken link to contract
thedevbirb Oct 29, 2024
f55156c
docs(holesky): updates
Oct 29, 2024
c140a6e
fix(holesky/docs): toc
thedevbirb Oct 29, 2024
7bdeec5
Merge pull request #335 from chainbound/jonas/docs/updates
thedevbirb Oct 29, 2024
1d8d5bb
Merge branch 'unstable' into lore/feat/holesky-launch
thedevbirb Oct 29, 2024
5a26411
wip(registry): new storage layout with indexes
merklefruit Oct 28, 2024
d6675c8
feat: use separate validators library
merklefruit Oct 29, 2024
17a20ea
feat: upgrade validators script
merklefruit Oct 29, 2024
fe5a274
chore: added more tests
merklefruit Oct 29, 2024
c5a03ba
feat: updated libraries
merklefruit Oct 29, 2024
bec46ba
feat: update library versions
merklefruit Oct 29, 2024
240a2bd
chore: ci
merklefruit Oct 29, 2024
6f4ed59
chore: upgrade manager script
merklefruit Oct 29, 2024
eab4944
chore(contracts): forge fmt
Oct 30, 2024
89c08a6
feat(contracts): update tests
Oct 30, 2024
7997319
docs(contracts): update deployments
Oct 30, 2024
0d6e512
chore(contracts): TODO comment
Oct 30, 2024
795746d
Merge pull request #336 from chainbound/nico/feat/cheaper-unsafe-optin
Oct 30, 2024
cd71178
Merge branch 'unstable' into lore/feat/holesky-launch
thedevbirb Oct 30, 2024
2561f55
chore(holesky/docker): update bolt-mev-boost image
thedevbirb Oct 30, 2024
f0d2f88
chore(holesky): tag rc2 for bolt-sidecar
thedevbirb Oct 30, 2024
a24a599
Merge branch 'unstable' into lore/feat/holesky-launch
thedevbirb Oct 30, 2024
422003f
Merge branch 'unstable' into lore/feat/holesky-launch
thedevbirb Oct 30, 2024
44b795d
Merge branch 'unstable' into lore/feat/holesky-launch
thedevbirb Oct 30, 2024
d3560c0
Merge branch 'unstable' into lore/feat/holesky-launch
thedevbirb Oct 30, 2024
9023b10
chore(sidecar): error log
thedevbirb Oct 30, 2024
225f4d4
Merge branch 'unstable' into lore/feat/holesky-launch
thedevbirb Oct 31, 2024
eee25c7
Merge branch 'unstable' into lore/feat/holesky-launch
thedevbirb Oct 31, 2024
0eea48c
Merge branch 'unstable' into lore/feat/holesky-launch
thedevbirb Oct 31, 2024
8ea45a9
Merge branch 'unstable' into lore/feat/holesky-launch
thedevbirb Oct 31, 2024
4cbac2b
Merge branch 'unstable' into lore/feat/holesky-launch
thedevbirb Oct 31, 2024
00cc3fb
feat(cli): basefee + priority fee flags
Oct 31, 2024
1c60a41
Merge branch 'lore/feat/holesky-launch' of github.com:chainbound/bolt…
Oct 31, 2024
86dbc2f
Merge branch 'unstable' into lore/feat/holesky-launch
thedevbirb Oct 31, 2024
9e385fa
wip: logs
Oct 31, 2024
b656295
Merge branch 'unstable' into lore/feat/holesky-launch
thedevbirb Oct 31, 2024
6bd3917
Merge branch 'unstable' into lore/feat/holesky-launch
thedevbirb Oct 31, 2024
9a11980
chore(sidecar): remove extra logs
thedevbirb Oct 31, 2024
9307f14
chore: update send command impl
merklefruit Nov 1, 2024
0f660f5
chore: cleanup libraries, rm unused code
merklefruit Nov 4, 2024
1fa53fe
chore: fmt
merklefruit Nov 4, 2024
55b3c02
Merge branch 'unstable' into lore/feat/holesky-launch
thedevbirb Nov 5, 2024
aa3bc59
Merge branch 'unstable' into lore/feat/holesky-launch
thedevbirb Nov 5, 2024
0ba0f1f
fix(holesky/docs): broken symbiotic docs link
thedevbirb Nov 5, 2024
52b40ab
chore(holesky/docker): mount volumes on predefined paths
thedevbirb Nov 5, 2024
d2101e6
chore(holesky): remove defaults delegations.json file, no more needed
thedevbirb Nov 5, 2024
0679a49
chore(holesky/docs): update docs reflecting docker compose changes; r…
thedevbirb Nov 5, 2024
5072334
Merge branch 'unstable' into lore/feat/holesky-launch
thedevbirb Nov 5, 2024
114bd25
fix(holesky): mev-boost.env.example can lead to a wrong starting config
thedevbirb Nov 5, 2024
98ccd06
chore(sidecar): small nits
merklefruit Nov 6, 2024
178b142
chore(sidecar): small nits
merklefruit Nov 6, 2024
5130bee
feat(sidecar): robust generic future retry system
merklefruit Nov 6, 2024
a9e38fc
feat: rm validator indexes in favor of pubkeys
merklefruit Nov 6, 2024
3228368
chore(sidecar): add docs
merklefruit Nov 6, 2024
523d313
chore(sidecar): rm primitives todo comment
merklefruit Nov 6, 2024
9717a74
chore(sidecar): rm state fetcher todo
merklefruit Nov 6, 2024
f91d7c3
chore(ci): ignore eigenlayer docs website
merklefruit Nov 6, 2024
c6c4a32
chore: refactor sidecar modules and docs
merklefruit Nov 6, 2024
9c35be3
chore: more docs + refactor
merklefruit Nov 6, 2024
be2e6b0
feat(bolt-cli): add Dockerfile
thedevbirb Nov 7, 2024
e41c291
Merge pull request #362 from chainbound/nico/chore/refactor
thedevbirb Nov 7, 2024
82d869d
chore(holesky/pbs): update helix config
thedevbirb Nov 7, 2024
b804abb
Merge pull request #357 from chainbound/lore/fix/docker-volumes
thedevbirb Nov 7, 2024
1f310d9
Merge pull request #364 from chainbound/lore/chore/update-helix-config
merklefruit Nov 7, 2024
5b8c71a
fix: rm validator indexes in cb config file
merklefruit Nov 7, 2024
43f3b17
Merge pull request #361 from chainbound/nico/feat/solve-outstanding-t…
thedevbirb Nov 8, 2024
5d64ddf
Merge pull request #355 from chainbound/chore/cleanup-libraries
thedevbirb Nov 8, 2024
dccb14d
fix: broken link in md doc
merklefruit Nov 8, 2024
16205d2
fix!(config): remove empty environment variables set like 'VAR=' when…
thedevbirb Nov 8, 2024
4ad631f
Merge pull request #367 from chainbound/lore/fix/config
thedevbirb Nov 8, 2024
23f726e
fix: make cargo chef detect binary
merklefruit Nov 8, 2024
676e139
Merge pull request #363 from chainbound/lore/feat/bolt-cli-docker
thedevbirb Nov 8, 2024
51a46de
fix(holesky/docker): add environment variable replacement in entrypoi…
thedevbirb Nov 8, 2024
478ef10
chore(devnet): bump helix image
thedevbirb Nov 8, 2024
c2106e2
fix(sidecar): init fmt at the absolute beginning
thedevbirb Nov 8, 2024
1e5f4f2
fix(sidecar/config): missing field in Debug impl
thedevbirb Nov 8, 2024
3173638
fix(sidecar): don't remove constraints before accounting
Nov 9, 2024
3cdcaf7
chore: restore tracing in telemetry stack init
thedevbirb Nov 11, 2024
8161a72
fix(holesky/docs): docker compose command
thedevbirb Nov 11, 2024
e2bc4e1
Merge pull request #371 from chainbound/lore/fix/docker-again
thedevbirb Nov 11, 2024
22e9eb2
chore(sidecar): cleanup + remove TODOs (continue)
merklefruit Nov 8, 2024
60ec5fb
chore: eyre::Result
merklefruit Nov 11, 2024
ce968ec
Merge pull request #370 from chainbound/nico/chore/sidecar-cleanup
thedevbirb Nov 11, 2024
77c0b1b
fix: revert helix image tag to local
merklefruit Nov 11, 2024
d5a269a
chore: use alloy::hex::encode_prefixed where possible
merklefruit Nov 11, 2024
b2de942
Merge pull request #374 from chainbound/nico/chore/fixes
thedevbirb Nov 11, 2024
d2b5b9c
fix(sidecar): remove stale templates in case of missed slots
thedevbirb Nov 11, 2024
5106b45
Merge pull request #375 from chainbound/lore/fix/remove-stale-templates
merklefruit Nov 11, 2024
a749cf0
chore(holesky): bump helix image, add helix_website=debug log directive
thedevbirb Nov 12, 2024
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
2 changes: 1 addition & 1 deletion .github/.linkspector.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,4 +9,4 @@ useGitIgnore: true

ignorePatterns:
- pattern: "^https://.*etherscan.io/.*$"

- pattern: "^https://.*docs.eigenlayer.xyz/.*$"
4 changes: 4 additions & 0 deletions .github/workflows/contracts_ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,10 @@ on:
paths:
- "bolt-contracts/**"

concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true

jobs:
check:
name: Foundry project
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/linkspector.yml
Original file line number Diff line number Diff line change
Expand Up @@ -23,4 +23,4 @@ jobs:
reporter: github-pr-review
config_file: .github/.linkspector.yml
fail_on_error: true
filter_mode: nofilter
filter_mode: nofilter
58 changes: 58 additions & 0 deletions bolt-cli/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
# Stage 1: Base compiler image with necessary dependencies
FROM rust:1.81.0-slim-bullseye AS base

# Install cargo-chef for dependency caching
RUN cargo install cargo-chef

# Set the working directory to /app
WORKDIR /app

# Stage 2: Planner (generating the recipe)
FROM base AS planner

# Copy only Cargo files to cache dependencies
COPY Cargo.toml Cargo.lock ./

# Copy the main.rs file to allow cargo do detect a binary
COPY src/main.rs ./src/main.rs

# Prepare the recipe for caching dependencies (Cargo.toml/Cargo.lock)
RUN cargo chef prepare --recipe-path recipe.json

# Stage 3: Builder with necessary dependencies for OpenSSL
FROM base AS builder

# Install required dependencies for building Rust projects (OpenSSL, pkg-config)
RUN apt-get update && apt-get install -y \
pkg-config \
libssl-dev \
build-essential \
protobuf-compiler

# Copy the generated recipe from the planner stage
COPY --from=planner /app/recipe.json recipe.json

# Cache the dependencies using the cargo-chef recipe
RUN cargo chef cook --release --recipe-path recipe.json

# Copy the source code and build the project
COPY . .
RUN cargo build --release

# Stage 4: Final runtime image (lean image)
FROM debian:bullseye-slim AS runtime

# Set the working directory for the final container
WORKDIR /usr/local/bin

# Install necessary runtime dependencies (OpenSSL and CA certificates)
RUN apt-get update && apt-get install -y \
libssl-dev \
ca-certificates \
&& rm -rf /var/lib/apt/lists/*

# Copy the compiled binary from the builder stage
COPY --from=builder /app/target/release/bolt /usr/local/bin/bolt

# Define the entrypoint for the container
ENTRYPOINT ["/usr/local/bin/bolt"]
2 changes: 1 addition & 1 deletion bolt-cli/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ The Bolt CLI is a collection of command-line tools for interacting with Bolt pro
Prerequisites:

- [Rust toolchain][rust]
- [Protoc][protoc]
- [Protoc][protoc] (as well as `libprotobuf-dev` for some Linux distributions)

Once you have the necessary prerequisites, you can build the binary in the following way:

Expand Down
3 changes: 3 additions & 0 deletions bolt-cli/rust-toolchain.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
[toolchain]
channel = "1.81.0"
profile = "default"
8 changes: 8 additions & 0 deletions bolt-cli/src/cli.rs
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,14 @@ pub struct SendCommand {
#[clap(long, env = "BLOB", default_value = "false")]
pub blob: bool,

/// The max fee per gas in gwei.
#[clap(long, env = "MAX_FEE")]
pub max_fee: Option<u128>,

/// The max priority fee per gas in gwei.
#[clap(long, env = "PRIORITY_FEE", default_value = "2")]
pub priority_fee: u128,

/// If set, the transaction will target the devnet environment.
/// This is only used in Kurtosis for internal testing purposes
#[clap(long, hide = true, env = "DEVNET", default_value = "false")]
Expand Down
15 changes: 12 additions & 3 deletions bolt-cli/src/commands/send.rs
Original file line number Diff line number Diff line change
@@ -1,8 +1,11 @@
use std::time::Duration;

use alloy::{
consensus::{BlobTransactionSidecar, SidecarBuilder, SimpleCoder, Transaction},
consensus::{
constants::GWEI_TO_WEI, BlobTransactionSidecar, SidecarBuilder, SimpleCoder, Transaction,
},
eips::eip2718::Encodable2718,
hex,
network::{EthereumWallet, TransactionBuilder, TransactionBuilder4844},
primitives::{keccak256, Address, B256, U256},
providers::{ProviderBuilder, SendableTx},
Expand Down Expand Up @@ -73,6 +76,12 @@ impl SendCommand {
for _ in 0..self.count {
// generate a simple self-transfer of ETH
let mut req = create_tx_request(wallet.address(), self.blob);
if let Some(max_fee) = self.max_fee {
req.set_max_fee_per_gas(max_fee * GWEI_TO_WEI as u128);
}

req.set_max_priority_fee_per_gas(self.priority_fee * GWEI_TO_WEI as u128);

if let Some(next_nonce) = next_nonce {
req.set_nonce(next_nonce);
}
Expand Down Expand Up @@ -219,9 +228,9 @@ async fn sign_request(
keccak256(data)
};

let signature = hex::encode(wallet.sign_hash(&digest).await?.as_bytes());
let signature = hex::encode_prefixed(wallet.sign_hash(&digest).await?.as_bytes());

Ok(format!("{}:0x{}", wallet.address(), signature))
Ok(format!("{}:{}", wallet.address(), signature))
}

fn prepare_rpc_request(method: &str, params: Value) -> Value {
Expand Down
10 changes: 7 additions & 3 deletions bolt-cli/src/common/keystore.rs
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,9 @@ impl KeystoreSecret {
/// Load the keystore passwords from a directory containing individual password files.
pub fn from_directory(root_dir: &str) -> Result<Self> {
let mut secrets = HashMap::new();
for entry in fs::read_dir(root_dir)? {
for entry in fs::read_dir(root_dir)
.wrap_err(format!("failed to read secrets directory. path: {}", &root_dir))?
{
let entry = entry.wrap_err("Failed to read secrets directory entry")?;
let path = entry.path();

Expand Down Expand Up @@ -108,12 +110,14 @@ impl Drop for KeystoreSecret {
/// -- ...
/// Reference: https://github.com/chainbound/bolt/blob/4634ff905561009e4e74f9921dfdabf43717010f/bolt-sidecar/src/signer/keystore.rs#L109
pub fn keystore_paths(keys_path: &str) -> Result<Vec<PathBuf>> {
let keys_path = Path::new(keys_path).to_path_buf();
let keys_path_buf = Path::new(keys_path).to_path_buf();
let json_extension = OsString::from("json");

let mut keystores_paths = vec![];
// Iter over the `keys` directory
for entry in read_dir(keys_path)? {
for entry in read_dir(keys_path_buf)
.wrap_err(format!("failed to read keys directory. path: {keys_path}"))?
{
let path = read_path(entry)?;
if path.is_dir() {
for entry in read_dir(path)? {
Expand Down
33 changes: 20 additions & 13 deletions bolt-contracts/.gas-snapshot
Original file line number Diff line number Diff line change
Expand Up @@ -13,18 +13,25 @@ BoltChallengerTest:testProveTransactionInclusion() (gas: 176543)
BoltChallengerTest:testResolveChallengeFullDefenseSingleTx() (gas: 562694)
BoltChallengerTest:testResolveChallengeFullDefenseStackedTxs() (gas: 939716)
BoltChallengerTest:testResolveExpiredChallenge() (gas: 426457)
BoltManagerEigenLayerTest:testDeregisterOperatorFromAVS() (gas: 755578)
BoltManagerEigenLayerTest:testGetOperatorStake() (gas: 919551)
BoltManagerEigenLayerTest:testNonExistentProposerStatus() (gas: 901546)
BoltManagerEigenLayerTest:testProposerStatus() (gas: 928359)
BoltManagerEigenLayerTest:testProposersLookaheadStatus() (gas: 2221042)
BoltManagerSymbioticTest:testGetNonExistentProposerStatus() (gas: 1168685)
BoltManagerSymbioticTest:testGetProposerStatus() (gas: 1415457)
BoltManagerSymbioticTest:testProposersLookaheadStatus() (gas: 2488651)
BoltManagerSymbioticTest:testReadOperatorStake() (gas: 1448345)
BoltValidatorsTest:testUnsafeRegistration() (gas: 149361)
BoltValidatorsTest:testUnsafeRegistrationFailsIfAlreadyRegistered() (gas: 148862)
BoltValidatorsTest:testUnsafeRegistrationInvalidOperator() (gas: 22820)
BoltValidatorsTest:testUnsafeRegistrationWhenNotAllowed() (gas: 33183)
BoltManagerEigenLayerTest:testDeregisterOperatorFromAVS() (gas: 757038)
BoltManagerEigenLayerTest:testGetOperatorStake() (gas: 916622)
BoltManagerEigenLayerTest:testNonExistentProposerStatus() (gas: 902889)
BoltManagerEigenLayerTest:testProposerStatus() (gas: 927230)
BoltManagerEigenLayerTest:testProposersLookaheadStatus() (gas: 2197665)
BoltManagerSymbioticTest:testGetNonExistentProposerStatus() (gas: 1309103)
BoltManagerSymbioticTest:testGetProposerStatus() (gas: 1556603)
BoltManagerSymbioticTest:testProposersLookaheadStatus() (gas: 2632992)
BoltManagerSymbioticTest:testReadOperatorStake() (gas: 1590527)
BoltValidatorsTest:testUnsafeBatchRegistrationGasUsage() (gas: 29088733)
BoltValidatorsTest:testUnsafeRegistration() (gas: 138036)
BoltValidatorsTest:testUnsafeRegistrationFailsIfAlreadyRegistered() (gas: 135421)
BoltValidatorsTest:testUnsafeRegistrationInvalidOperator() (gas: 17352)
BoltValidatorsTest:testUnsafeRegistrationWhenNotAllowed() (gas: 12330)
BoltValidatorsV2Test:testReadRegisteredValidatorsV2() (gas: 8051)
BoltValidatorsV2Test:testUnauthorizedController() (gas: 3613)
BoltValidatorsV2Test:testUnsafeBatchRegistrationV2() (gas: 29122477)
BoltValidatorsV2Test:testUnsafeRegistrationInvalidOperatorV2() (gas: 10332)
BoltValidatorsV2Test:testUnsafeRegistrationV2() (gas: 215472)
BoltValidatorsV2Test:testUpdateMaxGasLimitV2() (gas: 4434)
TransactionDecoderTest:testDecodeAllTestCases() (gas: 0)
TransactionDecoderTest:testDecodeGasUsage() (gas: 53281)
12 changes: 6 additions & 6 deletions bolt-contracts/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ The values of these parameters can also be found in [`parameters.json`](./config

## Validator Registration: `BoltValidators`

The [`BoltValidators`](./src/contracts/BoltValidatorsV1.sol) contract is the only point of entry for
The [`BoltValidators`](./src/contracts/BoltValidatorsV2.sol) contract is the only point of entry for
validators to signal their intent to participate in Bolt Protocol and authenticate with their BLS private key.

The registration process includes the following steps:
Expand All @@ -76,7 +76,7 @@ will allow us to test the registration flow in a controlled environment.

## Bolt Network Entrypoint: `BoltManager`

The [`BoltManager`](./src/contracts/BoltManagerV1.sol) contract is a crucial component of Bolt that
The [`BoltManager`](./src/contracts/BoltManagerV2.sol) contract is a crucial component of Bolt that
integrates with restaking ecosystems Symbiotic and Eigenlayer. It manages the registration and
coordination of validators, operators, and vaults within the Bolt network.

Expand Down Expand Up @@ -156,10 +156,10 @@ request is valid according to Bolt Protocol rules. -->
| Name | Address | Notes |
| ---------------------- | -------------------- | ----------------------- |
| [`BoltParametersV1`](./src/contracts/BoltParametersV1.sol) | [0x20d1cf3A5BD5928dB3118b2CfEF54FDF9fda5c12](https://holesky.etherscan.io/address/0x20d1cf3A5BD5928dB3118b2CfEF54FDF9fda5c12) | Proxy: [`[email protected]`](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/release-v5.0/contracts/proxy/ERC1967/ERC1967Proxy.sol) |
| [`BoltValidatorsV1`](./src/contracts/BoltValidatorsV1.sol) | [0x47D2DC1DE1eFEFA5e6944402f2eda3981D36a9c8](https://holesky.etherscan.io/address/0x47D2DC1DE1eFEFA5e6944402f2eda3981D36a9c8) | Proxy: [`[email protected]`](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/release-v5.0/contracts/proxy/ERC1967/ERC1967Proxy.sol) |
| [`BoltManagerV1`](./src/contracts/BoltManagerV1.sol) | [0x440202829b493F9FF43E730EB5e8379EEa3678CF](https://holesky.etherscan.io/address/0x440202829b493F9FF43E730EB5e8379EEa3678CF) | Proxy: [`[email protected]`](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/release-v5.0/contracts/proxy/ERC1967/ERC1967Proxy.sol) |
| [`BoltEigenLayerMiddlewareV1`](./src/contracts/BoltEigenLayerMiddlewareV1.sol) | [0xa632a3e652110Bb2901D5cE390685E6a9838Ca04](https://holesky.etherscan.io/address/0xa632a3e652110Bb2901D5cE390685E6a9838Ca04) | Proxy: [`[email protected]`](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/release-v5.0/contracts/proxy/ERC1967/ERC1967Proxy.sol) |
| [`BoltSymbioticMiddlewareV1`](./src/contracts/BoltSymbioticMiddlewareV1.sol) | [0x04f40d9CaE475E5BaA462acE53E5c58A0DD8D8e8](https://holesky.etherscan.io/address/0x04f40d9CaE475E5BaA462acE53E5c58A0DD8D8e8) | Proxy: [`[email protected]`](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/release-v5.0/contracts/proxy/ERC1967/ERC1967Proxy.sol) |
| [`BoltValidatorsV2`](./src/contracts/BoltValidatorsV2.sol) | [0x47D2DC1DE1eFEFA5e6944402f2eda3981D36a9c8](https://holesky.etherscan.io/address/0x47D2DC1DE1eFEFA5e6944402f2eda3981D36a9c8) | Proxy: [`[email protected]`](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/release-v5.0/contracts/proxy/ERC1967/ERC1967Proxy.sol) |
| [`BoltManagerV2`](./src/contracts/BoltManagerV2.sol) | [0x440202829b493F9FF43E730EB5e8379EEa3678CF](https://holesky.etherscan.io/address/0x440202829b493F9FF43E730EB5e8379EEa3678CF) | Proxy: [`[email protected]`](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/release-v5.0/contracts/proxy/ERC1967/ERC1967Proxy.sol) |
| [`BoltEigenLayerMiddlewareV2`](./src/contracts/BoltEigenLayerMiddlewareV2.sol) | [0xa632a3e652110Bb2901D5cE390685E6a9838Ca04](https://holesky.etherscan.io/address/0xa632a3e652110Bb2901D5cE390685E6a9838Ca04) | Proxy: [`[email protected]`](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/release-v5.0/contracts/proxy/ERC1967/ERC1967Proxy.sol) |
| [`BoltSymbioticMiddlewareV2`](./src/contracts/BoltSymbioticMiddlewareV2.sol) | [0x04f40d9CaE475E5BaA462acE53E5c58A0DD8D8e8](https://holesky.etherscan.io/address/0x04f40d9CaE475E5BaA462acE53E5c58A0DD8D8e8) | Proxy: [`[email protected]`](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/release-v5.0/contracts/proxy/ERC1967/ERC1967Proxy.sol) |

## Testing

Expand Down
74 changes: 37 additions & 37 deletions bolt-contracts/config/holesky/deployments.json
Original file line number Diff line number Diff line change
@@ -1,38 +1,38 @@
{
"bolt": {
"validators": "0x47D2DC1DE1eFEFA5e6944402f2eda3981D36a9c8",
"parameters": "0x20d1cf3A5BD5928dB3118b2CfEF54FDF9fda5c12",
"manager": "0x440202829b493F9FF43E730EB5e8379EEa3678CF"
},
"symbiotic": {
"network": "0xb017002D8024d8c8870A5CECeFCc63887650D2a4",
"operatorRegistry": "0x6F75a4ffF97326A00e52662d82EA4FdE86a2C548",
"networkOptInService": "0x58973d16FFA900D11fC22e5e2B6840d9f7e13401",
"vaultFactory": "0x407A039D94948484D356eFB765b3c74382A050B4",
"vaultConfigurator": "0xD2191FE92987171691d552C219b8caEf186eb9cA",
"networkRegistry": "0x7d03b7343BF8d5cEC7C0C27ecE084a20113D15C9",
"networkMiddlewareService": "0x62a1ddfD86b4c1636759d9286D3A0EC722D086e3",
"middleware": "0x04f40d9CaE475E5BaA462acE53E5c58A0DD8D8e8",
"supportedVaults": [
"0xc79c533a77691641d52ebD5e87E51dCbCaeb0D78",
"0xe5708788c90e971f73D928b7c5A8FD09137010e0",
"0x11c5b9A9cd8269580aDDbeE38857eE451c1CFacd",
"0xC56Ba584929c6f381744fA2d7a028fA927817f2b",
"0xcDdeFfcD2bA579B8801af1d603812fF64c301462",
"0x91e84e12Bb65576C0a6614c5E6EbbB2eA595E10f"
]
},
"eigenLayer": {
"avsDirectory": "0x055733000064333CaDDbC92763c58BF0192fFeBf",
"delegationManager": "0xA44151489861Fe9e3055d95adC98FbD462B948e7",
"strategyManager": "0xdfB5f6CE42aAA7830E94ECFCcAd411beF4d4D5b6",
"middleware": "0xa632a3e652110Bb2901D5cE390685E6a9838Ca04",
"supportedStrategies": [
"0x7D704507b76571a51d9caE8AdDAbBFd0ba0e63d3",
"0x3A8fBdf9e77DFc25d09741f51d3E181b25d0c4E0",
"0x80528D6e9A2BAbFc766965E0E26d5aB08D9CFaF9",
"0x70EB4D3c164a6B4A5f908D4FBb5a9cAfFb66bAB6",
"0xaccc5A86732BE85b5012e8614AF237801636F8e5"
]
}
}
"bolt": {
"validators": "0x47D2DC1DE1eFEFA5e6944402f2eda3981D36a9c8",
"parameters": "0x20d1cf3A5BD5928dB3118b2CfEF54FDF9fda5c12",
"manager": "0x440202829b493F9FF43E730EB5e8379EEa3678CF"
},
"symbiotic": {
"network": "0xb017002D8024d8c8870A5CECeFCc63887650D2a4",
"operatorRegistry": "0x6F75a4ffF97326A00e52662d82EA4FdE86a2C548",
"networkOptInService": "0x58973d16FFA900D11fC22e5e2B6840d9f7e13401",
"vaultFactory": "0x407A039D94948484D356eFB765b3c74382A050B4",
"vaultConfigurator": "0xD2191FE92987171691d552C219b8caEf186eb9cA",
"networkRegistry": "0x7d03b7343BF8d5cEC7C0C27ecE084a20113D15C9",
"networkMiddlewareService": "0x62a1ddfD86b4c1636759d9286D3A0EC722D086e3",
"middleware": "0x04f40d9CaE475E5BaA462acE53E5c58A0DD8D8e8",
"supportedVaults": [
"0xc79c533a77691641d52ebD5e87E51dCbCaeb0D78",
"0xe5708788c90e971f73D928b7c5A8FD09137010e0",
"0x11c5b9A9cd8269580aDDbeE38857eE451c1CFacd",
"0xC56Ba584929c6f381744fA2d7a028fA927817f2b",
"0xcDdeFfcD2bA579B8801af1d603812fF64c301462",
"0x91e84e12Bb65576C0a6614c5E6EbbB2eA595E10f"
]
},
"eigenLayer": {
"avsDirectory": "0x055733000064333CaDDbC92763c58BF0192fFeBf",
"delegationManager": "0xA44151489861Fe9e3055d95adC98FbD462B948e7",
"strategyManager": "0xdfB5f6CE42aAA7830E94ECFCcAd411beF4d4D5b6",
"middleware": "0xa632a3e652110Bb2901D5cE390685E6a9838Ca04",
"supportedStrategies": [
"0x7D704507b76571a51d9caE8AdDAbBFd0ba0e63d3",
"0x3A8fBdf9e77DFc25d09741f51d3E181b25d0c4E0",
"0x80528D6e9A2BAbFc766965E0E26d5aB08D9CFaF9",
"0x70EB4D3c164a6B4A5f908D4FBb5a9cAfFb66bAB6",
"0xaccc5A86732BE85b5012e8614AF237801636F8e5"
]
}
}
5 changes: 0 additions & 5 deletions bolt-contracts/config/holesky/operator.json

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{
"strategy": "",
"token": "",
"amount": 0
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{
"rpc": "<scheme>://<host>:<port>",
"salt": "0x0000000000000000000000000000000000000000000000000000000000000000",
"expiry": "0x1000000000000000000000000000000000000000000000000000000000000000"
}
15 changes: 9 additions & 6 deletions bolt-contracts/docs/admin/deploying.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,14 @@
## Configuration

There are 2 JSON configuration files:
- [`config/holesky/deployments.json`](../../config/holesky/deployments.json): contains deployment addresses of EigenLayer ([here](https://github.com/Layr-Labs/eigenlayer-contracts/blob/dev/README.md#deployments)) and Symbiotic ([here](https://docs.symbiotic.fi/deployments)).
- [`config/holesky/parameters.json`](../../config/holesky/parameters.json): contains the launch parameters for `BoltParameters`.


- [`config/holesky/deployments.json`](../../config/holesky/deployments.json): contains deployment addresses of EigenLayer ([here](https://github.com/Layr-Labs/eigenlayer-contracts/blob/dev/README.md#deployments)) and Symbiotic ([here](https://docs.symbiotic.fi/deployments/current)).
- [`config/holesky/parameters.json`](../../config/holesky/parameters.json): contains the launch parameters for `BoltParameters`.

## Deployment Guide

Make sure we have a full compilation for the Foundry Upgrades Toolkit:

```bash
forge clean && forge build
```
Expand Down Expand Up @@ -54,6 +55,7 @@ addresses into the [`deployments.json`](../../config/holesky/deployments.json) f
### Deployment

Run the following script to deploy Bolt V1:

```bash
forge script script/holesky/admin/Deploy.s.sol --rpc-url $HOLESKY_RPC --private-key $ADMIN_PRIVATE_KEY --verify --broadcast -vvvv
```
Expand All @@ -74,17 +76,18 @@ forge script script/holesky/admin/helpers/Symbiotic.s.sol --rpc-url $HOLESKY_RPC
Also set the AVS metadata in the EigenLayer AVS Directory, needs to be run with the **admin private key** used at deployment.

```bash
forge script script/holesky/admin/helpers/RegisterAVS.s.sol --rpc-url $HOLESKY_RPC --private-key $ADMIN_PRIVATE_KEY --broadcast -vvvv
forge script script/holesky/admin/helpers/RegisterAVS.s.sol --rpc-url $HOLESKY_RPC --private-key $ADMIN_PRIVATE_KEY --broadcast -vvvv
```

> [!IMPORTANT]
> After the `deployments.json` file has been fully updated with the correct contract addresses, push it to Github.


### Other Scripts

#### Modifying supported Symbiotic Vaults

This script will update supported vaults according to `deployments.json`, and remove any vaults that have been whitelisted but are no longer in the `symbiotic.supportedVaults` list.

```bash
forge script script/holesky/admin/helpers/UpdateSupportedVaults.s.sol --rpc-url $HOLESKY_RPC --private-key $ADMIN_PRIVATE_KEY --broadcast -vvv
```
```
Loading
Loading