diff --git a/go.mod b/go.mod index 73cfab2..01f0139 100644 --- a/go.mod +++ b/go.mod @@ -1,23 +1,21 @@ module github.com/nodeset-org/hyperdrive-daemon -go 1.24 +go 1.24.0 toolchain go1.24.2 -require ( - github.com/rocket-pool/node-manager-core v0.5.2-0.20250430074613-76bcf6bb1be0 -) +require github.com/rocket-pool/node-manager-core v0.5.2-0.20250430074613-76bcf6bb1be0 -replace github.com/rocket-pool/node-manager-core => github.com/nodeset-org/node-manager-core v0.6.0 +replace github.com/rocket-pool/node-manager-core => github.com/nodeset-org/node-manager-core v0.7.0 require ( filippo.io/age v1.2.0 github.com/alessio/shellescape v1.4.2 github.com/docker/docker v27.3.1+incompatible - github.com/ethereum/go-ethereum v1.15.8 + github.com/ethereum/go-ethereum v1.16.5 github.com/fatih/color v1.17.0 github.com/goccy/go-json v0.10.4 - github.com/golang-jwt/jwt/v4 v4.5.1 + github.com/golang-jwt/jwt/v4 v4.5.2 github.com/google/uuid v1.6.0 github.com/gorilla/mux v1.8.1 github.com/hashicorp/go-version v1.6.0 @@ -27,7 +25,7 @@ require ( github.com/stretchr/testify v1.10.0 github.com/urfave/cli/v2 v2.27.5 github.com/wealdtech/go-ens/v3 v3.6.0 - golang.org/x/sync v0.11.0 + golang.org/x/sync v0.12.0 gopkg.in/yaml.v3 v3.0.1 ) @@ -38,15 +36,14 @@ require ( github.com/Microsoft/go-winio v0.6.2 // indirect github.com/Microsoft/hcsshim v0.12.5 // indirect github.com/beorn7/perks v1.0.1 // indirect - github.com/bits-and-blooms/bitset v1.17.0 // indirect + github.com/bits-and-blooms/bitset v1.20.0 // indirect github.com/btcsuite/btcd v0.24.2 // indirect github.com/btcsuite/btcd/btcec/v2 v2.3.4 // indirect github.com/btcsuite/btcd/btcutil v1.1.5 // indirect github.com/btcsuite/btcd/chaincfg/chainhash v1.1.0 // indirect github.com/cespare/xxhash/v2 v2.3.0 // indirect github.com/compose-spec/compose-go/v2 v2.1.3 // indirect - github.com/consensys/bavard v0.1.22 // indirect - github.com/consensys/gnark-crypto v0.14.0 // indirect + github.com/consensys/gnark-crypto v0.18.0 // indirect github.com/containerd/cgroups/v3 v3.0.3 // indirect github.com/containerd/containerd v1.7.19 // indirect github.com/containerd/containerd/api v1.7.19 // indirect @@ -58,8 +55,8 @@ require ( github.com/containerd/ttrpc v1.2.5 // indirect github.com/containerd/typeurl/v2 v2.2.0 // indirect github.com/cpuguy83/go-md2man/v2 v2.0.5 // indirect + github.com/crate-crypto/go-eth-kzg v1.4.0 // indirect github.com/crate-crypto/go-ipa v0.0.0-20240724233137-53bbb0ceb27a // indirect - github.com/crate-crypto/go-kzg-4844 v1.1.0 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/deckarep/golang-set/v2 v2.6.0 // indirect github.com/decred/dcrd/dcrec/secp256k1/v4 v4.3.0 // indirect @@ -69,10 +66,11 @@ require ( github.com/docker/go-events v0.0.0-20190806004212-e31b211e4f1c // indirect github.com/docker/go-metrics v0.0.1 // indirect github.com/docker/go-units v0.5.0 // indirect - github.com/ethereum/c-kzg-4844 v1.0.2 // indirect + github.com/emicklei/dot v1.6.2 // indirect + github.com/ethereum/c-kzg-4844/v2 v2.1.3 // indirect github.com/ethereum/go-verkle v0.2.2 // indirect github.com/felixge/httpsnoop v1.0.4 // indirect - github.com/ferranbt/fastssz v0.1.3 // indirect + github.com/ferranbt/fastssz v0.1.4 // indirect github.com/fsnotify/fsnotify v1.7.0 // indirect github.com/glendc/go-external-ip v0.1.0 // indirect github.com/go-logr/logr v1.4.2 // indirect @@ -99,7 +97,6 @@ require ( github.com/minio/highwayhash v1.0.3 // indirect github.com/minio/sha256-simd v1.0.1 // indirect github.com/mitchellh/mapstructure v1.5.0 // indirect - github.com/mmcloughlin/addchain v0.4.0 // indirect github.com/moby/docker-image-spec v1.3.1 // indirect github.com/moby/locker v1.0.1 // indirect github.com/moby/patternmatcher v0.6.0 // indirect @@ -141,7 +138,7 @@ require ( github.com/shirou/gopsutil v3.21.11+incompatible // indirect github.com/sirupsen/logrus v1.9.3 // indirect github.com/spaolacci/murmur3 v1.1.0 // indirect - github.com/supranational/blst v0.3.14 // indirect + github.com/supranational/blst v0.3.16-0.20250831170142-f48500c1fdbe // indirect github.com/thomaso-mirodin/intmath v0.0.0-20160323211736-5dc6d854e46e // indirect github.com/tklauser/go-sysconf v0.3.14 // indirect github.com/tklauser/numcpus v0.8.0 // indirect @@ -163,11 +160,11 @@ require ( go.opentelemetry.io/otel v1.28.0 // indirect go.opentelemetry.io/otel/metric v1.28.0 // indirect go.opentelemetry.io/otel/trace v1.28.0 // indirect - golang.org/x/crypto v0.35.0 // indirect + golang.org/x/crypto v0.36.0 // indirect golang.org/x/exp v0.0.0-20240716160929-1d5bc16f04a8 // indirect - golang.org/x/net v0.36.0 // indirect - golang.org/x/sys v0.30.0 // indirect - golang.org/x/text v0.22.0 // indirect + golang.org/x/net v0.38.0 // indirect + golang.org/x/sys v0.36.0 // indirect + golang.org/x/text v0.23.0 // indirect golang.org/x/time v0.9.0 // indirect google.golang.org/genproto v0.0.0-20240711142825-46eb208f015d // indirect google.golang.org/genproto/googleapis/api v0.0.0-20240711142825-46eb208f015d // indirect @@ -177,5 +174,4 @@ require ( gopkg.in/natefinch/lumberjack.v2 v2.2.1 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect lukechampine.com/blake3 v1.2.1 // indirect - rsc.io/tmplfunc v0.0.3 // indirect ) diff --git a/go.sum b/go.sum index 8c960d0..1de0975 100644 --- a/go.sum +++ b/go.sum @@ -20,8 +20,8 @@ github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERo github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU= github.com/Microsoft/hcsshim v0.12.5 h1:bpTInLlDy/nDRWFVcefDZZ1+U8tS+rz3MxjKgu9boo0= github.com/Microsoft/hcsshim v0.12.5/go.mod h1:tIUGego4G1EN5Hb6KC90aDYiUI2dqLSTTOCjVNpOgZ8= -github.com/VictoriaMetrics/fastcache v1.12.2 h1:N0y9ASrJ0F6h0QaC3o6uJb3NIZ9VKLjCM7NQbSmF7WI= -github.com/VictoriaMetrics/fastcache v1.12.2/go.mod h1:AmC+Nzz1+3G2eCPapF6UcsnkThDcMsQicp4xDukwJYI= +github.com/VictoriaMetrics/fastcache v1.13.0 h1:AW4mheMR5Vd9FkAPUv+NH6Nhw+fmbTMGMsNAoA/+4G0= +github.com/VictoriaMetrics/fastcache v1.13.0/go.mod h1:hHXhl4DA2fTL2HTZDJFXWgW0LNjo6B+4aj2Wmng3TjU= github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= @@ -33,8 +33,8 @@ github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24 github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= -github.com/bits-and-blooms/bitset v1.17.0 h1:1X2TS7aHz1ELcC0yU1y2stUs/0ig5oMU6STFZGrhvHI= -github.com/bits-and-blooms/bitset v1.17.0/go.mod h1:7hO7Gc7Pp1vODcmWvKMRA9BNmbv6a/7QIWpPxHddWR8= +github.com/bits-and-blooms/bitset v1.20.0 h1:2F+rfL86jE2d/bmw7OhqUg2Sj/1rURkBn3MdfoPyRVU= +github.com/bits-and-blooms/bitset v1.20.0/go.mod h1:7hO7Gc7Pp1vODcmWvKMRA9BNmbv6a/7QIWpPxHddWR8= github.com/btcsuite/btcd v0.20.1-beta/go.mod h1:wVuoA8VJLEcwgqHBwHmzLRazpKxTv13Px/pDuV7OomQ= github.com/btcsuite/btcd v0.22.0-beta.0.20220111032746-97732e52810c/go.mod h1:tjmYdS6MLJ5/s0Fj4DbLgSbDHbEqLJrtnHecBFkdz5M= github.com/btcsuite/btcd v0.23.5-0.20231215221805-96c9fd8078fd/go.mod h1:nm3Bko6zh6bWP60UxwoT5LzdGJsQJaPo6HjduXq9p6A= @@ -76,18 +76,16 @@ github.com/cockroachdb/fifo v0.0.0-20240606204812-0bbfbd93a7ce h1:giXvy4KSc/6g/e github.com/cockroachdb/fifo v0.0.0-20240606204812-0bbfbd93a7ce/go.mod h1:9/y3cnZ5GKakj/H4y9r9GTjCvAFta7KLgSHPJJYc52M= github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b h1:r6VH0faHjZeQy818SGhaone5OnYfxFR/+AzdY3sf5aE= github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b/go.mod h1:Vz9DsVWQQhf3vs21MhPMZpMGSht7O/2vFW2xusFUVOs= -github.com/cockroachdb/pebble v1.1.2 h1:CUh2IPtR4swHlEj48Rhfzw6l/d0qA31fItcIszQVIsA= -github.com/cockroachdb/pebble v1.1.2/go.mod h1:4exszw1r40423ZsmkG/09AFEG83I0uDgfujJdbL6kYU= +github.com/cockroachdb/pebble v1.1.5 h1:5AAWCBWbat0uE0blr8qzufZP5tBjkRyy/jWe1QWLnvw= +github.com/cockroachdb/pebble v1.1.5/go.mod h1:17wO9el1YEigxkP/YtV8NtCivQDgoCyBg5c4VR/eOWo= github.com/cockroachdb/redact v1.1.5 h1:u1PMllDkdFfPWaNGMyLD1+so+aq3uUItthCFqzwPJ30= github.com/cockroachdb/redact v1.1.5/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZZ2lK+dpvRg= github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 h1:zuQyyAKVxetITBuuhv3BI9cMrmStnpT18zmgmTxunpo= github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06/go.mod h1:7nc4anLGjupUW/PeY5qiNYsdNXj7zopG+eqsS7To5IQ= github.com/compose-spec/compose-go/v2 v2.1.3 h1:bD67uqLuL/XgkAK6ir3xZvNLFPxPScEi1KW7R5esrLE= github.com/compose-spec/compose-go/v2 v2.1.3/go.mod h1:lFN0DrMxIncJGYAXTfWuajfwj5haBJqrBkarHcnjJKc= -github.com/consensys/bavard v0.1.22 h1:Uw2CGvbXSZWhqK59X0VG/zOjpTFuOMcPLStrp1ihI0A= -github.com/consensys/bavard v0.1.22/go.mod h1:k/zVjHHC4B+PQy1Pg7fgvG3ALicQw540Crag8qx+dZs= -github.com/consensys/gnark-crypto v0.14.0 h1:DDBdl4HaBtdQsq/wfMwJvZNE80sHidrK3Nfrefatm0E= -github.com/consensys/gnark-crypto v0.14.0/go.mod h1:CU4UijNPsHawiVGNxe9co07FkzCeWHHrb1li/n1XoU0= +github.com/consensys/gnark-crypto v0.18.0 h1:vIye/FqI50VeAr0B3dx+YjeIvmc3LWz4yEfbWBpTUf0= +github.com/consensys/gnark-crypto v0.18.0/go.mod h1:L3mXGFTe1ZN+RSJ+CLjUt9x7PNdx8ubaYfDROyp2Z8c= github.com/containerd/cgroups/v3 v3.0.3 h1:S5ByHZ/h9PMe5IOQoN7E+nMc2UcLEM/V48DGDJ9kip0= github.com/containerd/cgroups/v3 v3.0.3/go.mod h1:8HBe7V3aWGLFPd/k03swSIsGjZhHI2WzJmticMgVuz0= github.com/containerd/containerd v1.7.19 h1:/xQ4XRJ0tamDkdzrrBAUy/LE5nCcxFKdBm4EcPrSMEE= @@ -110,10 +108,10 @@ github.com/containerd/typeurl/v2 v2.2.0 h1:6NBDbQzr7I5LHgp34xAXYF5DOTQDn05X58lsP github.com/containerd/typeurl/v2 v2.2.0/go.mod h1:8XOOxnyatxSWuG8OfsZXVnAF4iZfedjS/8UHSPJnX4g= github.com/cpuguy83/go-md2man/v2 v2.0.5 h1:ZtcqGrnekaHpVLArFSe4HK5DoKx1T0rq2DwVB0alcyc= github.com/cpuguy83/go-md2man/v2 v2.0.5/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= +github.com/crate-crypto/go-eth-kzg v1.4.0 h1:WzDGjHk4gFg6YzV0rJOAsTK4z3Qkz5jd4RE3DAvPFkg= +github.com/crate-crypto/go-eth-kzg v1.4.0/go.mod h1:J9/u5sWfznSObptgfa92Jq8rTswn6ahQWEuiLHOjCUI= github.com/crate-crypto/go-ipa v0.0.0-20240724233137-53bbb0ceb27a h1:W8mUrRp6NOVl3J+MYp5kPMoUZPp7aOYHtaua31lwRHg= github.com/crate-crypto/go-ipa v0.0.0-20240724233137-53bbb0ceb27a/go.mod h1:sTwzHBvIzm2RfVCGNEBZgRyjwK40bVoun3ZnGOCafNM= -github.com/crate-crypto/go-kzg-4844 v1.1.0 h1:EN/u9k2TF6OWSHrCCDBBU6GLNMq88OspHHlMnHfoyU4= -github.com/crate-crypto/go-kzg-4844 v1.1.0/go.mod h1:JolLjpSff1tCCJKaJx4psrlEdlXuJEC996PL3tTAFks= github.com/creack/pty v1.1.18 h1:n56/Zwd5o6whRC5PMGretI4IdRLlmBXYNjScPaBgsbY= github.com/creack/pty v1.1.18/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4= github.com/d4l3k/messagediff v1.2.1 h1:ZcAIMYsUg0EAp9X+tt8/enBE/Q8Yd5kzPynLyKptt9U= @@ -122,6 +120,8 @@ github.com/davecgh/go-spew v0.0.0-20171005155431-ecdeabc65495/go.mod h1:J7Y8YcW2 github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/dchest/siphash v1.2.3 h1:QXwFc8cFOR2dSa/gE6o/HokBMWtLUaNDVd+22aKHeEA= +github.com/dchest/siphash v1.2.3/go.mod h1:0NvQU092bT0ipiFN++/rXm69QG9tVxLAlQHIXMPAkHc= github.com/deckarep/golang-set/v2 v2.6.0 h1:XfcQbWM1LlMB8BsJ8N9vW5ehnnPVIw0je80NsVHagjM= github.com/deckarep/golang-set/v2 v2.6.0/go.mod h1:VAky9rY/yGXJOLEDv3OMci+7wtDpOF4IN+y82NBOac4= github.com/decred/dcrd/crypto/blake256 v1.0.0/go.mod h1:sQl2p6Y26YV+ZOcSTP6thNdn47hh8kt6rqSlvmrXFAc= @@ -147,22 +147,26 @@ github.com/docker/go-metrics v0.0.1 h1:AgB/0SvBxihN0X8OR4SjsblXkbMvalQ8cjmtKQ2rQ github.com/docker/go-metrics v0.0.1/go.mod h1:cG1hvH2utMXtqgqqYE9plW6lDxS3/5ayHzueweSI3Vw= github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4= github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= +github.com/emicklei/dot v1.6.2 h1:08GN+DD79cy/tzN6uLCT84+2Wk9u+wvqP+Hkx/dIR8A= +github.com/emicklei/dot v1.6.2/go.mod h1:DeV7GvQtIw4h2u73RKBkkFdvVAz0D9fzeJrgPW6gy/s= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/ethereum/c-kzg-4844 v1.0.2 h1:8tV84BCEiPeOkiVgW9mpYBeBUir2bkCNVqxPwwVeO+s= -github.com/ethereum/c-kzg-4844 v1.0.2/go.mod h1:VewdlzQmpT5QSrVhbBuGoCdFJkpaJlO1aQputP83wc0= -github.com/ethereum/go-ethereum v1.15.8 h1:H6NilvRXFVoHiXZ3zkuTqKW5XcxjLZniV5UjxJt1GJU= -github.com/ethereum/go-ethereum v1.15.8/go.mod h1:+S9k+jFzlyVTNcYGvqFhzN/SFhI6vA+aOY4T5tLSPL0= +github.com/ethereum/c-kzg-4844/v2 v2.1.3 h1:DQ21UU0VSsuGy8+pcMJHDS0CV1bKmJmxsJYK8l3MiLU= +github.com/ethereum/c-kzg-4844/v2 v2.1.3/go.mod h1:fyNcYI/yAuLWJxf4uzVtS8VDKeoAaRM8G/+ADz/pRdA= +github.com/ethereum/go-bigmodexpfix v0.0.0-20250911101455-f9e208c548ab h1:rvv6MJhy07IMfEKuARQ9TKojGqLVNxQajaXEp/BoqSk= +github.com/ethereum/go-bigmodexpfix v0.0.0-20250911101455-f9e208c548ab/go.mod h1:IuLm4IsPipXKF7CW5Lzf68PIbZ5yl7FFd74l/E0o9A8= +github.com/ethereum/go-ethereum v1.16.5 h1:GZI995PZkzP7ySCxEFaOPzS8+bd8NldE//1qvQDQpe0= +github.com/ethereum/go-ethereum v1.16.5/go.mod h1:kId9vOtlYg3PZk9VwKbGlQmSACB5ESPTBGT+M9zjmok= github.com/ethereum/go-verkle v0.2.2 h1:I2W0WjnrFUIzzVPwm8ykY+7pL2d4VhlsePn4j7cnFk8= github.com/ethereum/go-verkle v0.2.2/go.mod h1:M3b90YRnzqKyyzBEWJGqj8Qff4IDeXnzFw0P9bFw3uk= github.com/fatih/color v1.17.0 h1:GlRw1BRJxkpqUCBKzKOw098ed57fEsKeNjpTe3cSjK4= github.com/fatih/color v1.17.0/go.mod h1:YZ7TlrGPkiz6ku9fK3TLD/pl3CpsiFyu8N92HLgmosI= github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= -github.com/ferranbt/fastssz v0.1.3 h1:ZI+z3JH05h4kgmFXdHuR1aWYsgrg7o+Fw7/NCzM16Mo= -github.com/ferranbt/fastssz v0.1.3/go.mod h1:0Y9TEd/9XuFlh7mskMPfXiI2Dkw4Ddg9EyXt1W7MRvE= +github.com/ferranbt/fastssz v0.1.4 h1:OCDB+dYDEQDvAgtAGnTSidK1Pe2tW3nFV40XyMkTeDY= +github.com/ferranbt/fastssz v0.1.4/go.mod h1:Ea3+oeoRGGLGm5shYAeDgu6PGUlcvQhE2fILyD9+tGg= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA= @@ -189,13 +193,13 @@ github.com/go-viper/mapstructure/v2 v2.0.0 h1:dhn8MZ1gZ0mzeodTG3jt5Vj/o87xZKuNAp github.com/go-viper/mapstructure/v2 v2.0.0/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM= github.com/goccy/go-json v0.10.4 h1:JSwxQzIqKfmFX1swYPpUThQZp/Ka4wzJdK0LWVytLPM= github.com/goccy/go-json v0.10.4/go.mod h1:oq7eo15ShAhp70Anwd5lgX2pLfOS3QCiwU/PULtXL6M= -github.com/gofrs/flock v0.8.1 h1:+gYjHKf32LDeiEEFhQaotPbLuUXjY5ZqxKgXy7n59aw= -github.com/gofrs/flock v0.8.1/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14jxHU= +github.com/gofrs/flock v0.12.1 h1:MTLVXXHf8ekldpJk3AKicLij9MdwOWkZ+a/jHHZby9E= +github.com/gofrs/flock v0.12.1/go.mod h1:9zxTsyu5xtJ9DK+1tFZyibEV7y3uwDxPPfbxeeHCoD0= github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= -github.com/golang-jwt/jwt/v4 v4.5.1 h1:JdqV9zKUdtaa9gdPlywC3aeoEsR681PlKC+4F5gQgeo= -github.com/golang-jwt/jwt/v4 v4.5.1/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= +github.com/golang-jwt/jwt/v4 v4.5.2 h1:YtQM7lnr8iZ+j5q71MGKkNw9Mn7AjHM68uc9g5fXeUI= +github.com/golang-jwt/jwt/v4 v4.5.2/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE= @@ -215,8 +219,8 @@ github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb h1:PBC98N2aIaM3XXiurYmW7fx4GZkL8feAMVq7nEjURHk= -github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/golang/snappy v1.0.0 h1:Oy607GVXHs7RtbggtPBnr2RmDArIsAefDwvrdWvRhGs= +github.com/golang/snappy v1.0.0/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= @@ -228,7 +232,6 @@ github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeN github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/google/subcommands v1.2.0/go.mod h1:ZjhPrFU+Olkh9WazFPsl27BQ4UPiG37m3yTrtFlrHVk= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= @@ -258,8 +261,8 @@ github.com/hashicorp/golang-lru v1.0.2 h1:dV3g9Z/unq5DpblPpw+Oqcv4dU/1omnb4Ok8iP github.com/hashicorp/golang-lru v1.0.2/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= github.com/herumi/bls-eth-go-binary v1.36.1 h1:SfLjxbO1fWkKtKS7J3Ezd1/5QXrcaTZgWynxdSe10hQ= github.com/herumi/bls-eth-go-binary v1.36.1/go.mod h1:luAnRm3OsMQeokhGzpYmc0ZKwawY7o87PUEP11Z7r7U= -github.com/holiman/billy v0.0.0-20240216141850-2abb0c79d3c4 h1:X4egAf/gcS1zATw6wn4Ej8vjuVGxeHdan+bRb2ebyv4= -github.com/holiman/billy v0.0.0-20240216141850-2abb0c79d3c4/go.mod h1:5GuXa7vkL8u9FkFuWdVvfR5ix8hRB7DbOAaYULamFpc= +github.com/holiman/billy v0.0.0-20250707135307-f2f9b9aae7db h1:IZUYC/xb3giYwBLMnr8d0TGTzPKFGNTCGgGLoyeX330= +github.com/holiman/billy v0.0.0-20250707135307-f2f9b9aae7db/go.mod h1:xTEYN9KCHxuYHs+NmrmzFcnvHMzLLNiGFafCb1n3Mfg= github.com/holiman/bloomfilter/v2 v2.0.3 h1:73e0e/V0tCydx14a0SCYS/EWCxgwLZ18CZcZKVu0fao= github.com/holiman/bloomfilter/v2 v2.0.3/go.mod h1:zpoh+gs7qcpqrHr3dB55AMiJwo0iURXE7ZOP9L9hSkA= github.com/holiman/uint256 v1.3.2 h1:a9EgMPSC1AAaj1SZL5zIQD3WbwTuHrMGOerLjGmM/TA= @@ -320,9 +323,6 @@ github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyua github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/pointerstructure v1.2.0 h1:O+i9nHnXS3l/9Wu7r4NrEdwA2VFTicjUEN1uBnDo34A= github.com/mitchellh/pointerstructure v1.2.0/go.mod h1:BRAsLI5zgXmw97Lf6s25bs8ohIXc3tViBH44KcwB2g4= -github.com/mmcloughlin/addchain v0.4.0 h1:SobOdjm2xLj1KkXN5/n0xTIWyZA2+s99UCY1iPfkHRY= -github.com/mmcloughlin/addchain v0.4.0/go.mod h1:A86O+tHqZLMNO4w6ZZ4FlVQEadcoqkyU72HC5wJ4RlU= -github.com/mmcloughlin/profile v0.1.1/go.mod h1:IhHD7q1ooxgwTgjxQYkACGA77oFTDdFVejUS1/tS/qU= github.com/moby/docker-image-spec v1.3.1 h1:jMKff3w6PgbfSa69GfNg+zN/XLhfXJGnEx3Nl2EsFP0= github.com/moby/docker-image-spec v1.3.1/go.mod h1:eKmb5VW8vQEh/BAr2yvVNvuiJuY6UIocYsFu/DxxRpo= github.com/moby/locker v1.0.1 h1:fOXqR41zeveg4fFODix+1Ch4mj/gT0NE1XJbp/epuBg= @@ -374,8 +374,8 @@ github.com/multiformats/go-varint v0.0.7/go.mod h1:r8PUYw/fD/SjBCiKOoDlGF6QawOEL github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= -github.com/nodeset-org/node-manager-core v0.6.0 h1:4FMjCASnwUpKEO6I6qcMLf1c9dLwKsE6YAl+7U4Y9uY= -github.com/nodeset-org/node-manager-core v0.6.0/go.mod h1:W2M1rQxoYunKI3cRlvbwQZR0UXxuloTI8FK9TryLbUQ= +github.com/nodeset-org/node-manager-core v0.7.0 h1:UCv9lAUetJe4+6u0ZxU6/3jCCs/ekzM33n/sE75t3ME= +github.com/nodeset-org/node-manager-core v0.7.0/go.mod h1:Wk7HmUGOXu9N+GF0O6sND2yT5v3gMMb70Y4HaZnv5v8= github.com/nodeset-org/nodeset-client-go v1.3.1 h1:y1AYTDjlXauOPunO98ebb5VeOkckzeyLMBeewIoyQc4= github.com/nodeset-org/nodeset-client-go v1.3.1/go.mod h1:X7vNVv8nzjV5FaiRS9epHmj5woxGSRvY6+qn2l0JY4Q= github.com/nodeset-org/osha v0.4.0 h1:g5A6L33mzW26XMGtAOmiY4uWYO0EVaxAIe4+eizz/Qg= @@ -483,8 +483,8 @@ github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= -github.com/supranational/blst v0.3.14 h1:xNMoHRJOTwMn63ip6qoWJ2Ymgvj7E2b9jY2FAwY+qRo= -github.com/supranational/blst v0.3.14/go.mod h1:jZJtfjgudtNl4en1tzwPIV3KjUnQUvG3/j+w+fVonLw= +github.com/supranational/blst v0.3.16-0.20250831170142-f48500c1fdbe h1:nbdqkIGOGfUAD54q1s2YBcBz/WcsxCO9HUQ4aGV5hUw= +github.com/supranational/blst v0.3.16-0.20250831170142-f48500c1fdbe/go.mod h1:jZJtfjgudtNl4en1tzwPIV3KjUnQUvG3/j+w+fVonLw= github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 h1:epCh84lMvA70Z7CTTCmYQn2CKbY8j86K7/FAIr141uY= github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7/go.mod h1:q4W45IWZaF22tdD+VEXcAWRA037jwmWEB5VWYORlTpc= github.com/thomaso-mirodin/intmath v0.0.0-20160323211736-5dc6d854e46e h1:cR8/SYRgyQCt5cNCMniB/ZScMkhI9nk8U5C7SbISXjo= @@ -497,8 +497,6 @@ github.com/tyler-smith/go-bip39 v1.1.0 h1:5eUemwrMargf3BSLRRCalXT93Ns6pQJIjYQN2n github.com/tyler-smith/go-bip39 v1.1.0/go.mod h1:gUYDtqQw1JS3ZJ8UWVcGTGqqr6YIN3CWg+kkNaLt55U= github.com/uber/jaeger-client-go v2.25.0+incompatible h1:IxcNZ7WRY1Y3G4poYlx24szfsn/3LvK9QHCq9oQw8+U= github.com/uber/jaeger-client-go v2.25.0+incompatible/go.mod h1:WVhlPFC8FDjOFMMWRy2pZqQJSXxYSwNYOkTr/Z6d3Kk= -github.com/umbracle/gohashtree v0.0.2-alpha.0.20230207094856-5b775a815c10 h1:CQh33pStIp/E30b7TxDlXfM0145bn2e8boI30IxAhTg= -github.com/umbracle/gohashtree v0.0.2-alpha.0.20230207094856-5b775a815c10/go.mod h1:x/Pa0FF5Te9kdrlZKJK82YmAkvL8+f989USgz6Jiw7M= github.com/urfave/cli/v2 v2.27.5 h1:WoHEJLdsXr6dDWoJgMq/CboDmyY/8HMMH1fTECbih+w= github.com/urfave/cli/v2 v2.27.5/go.mod h1:3Sevf16NykTbInEnD0yKkjDAeZDS0A6bzhBH5hrMvTQ= github.com/vbatts/tar-split v0.11.5 h1:3bHCTIheBm1qFTcgh9oPu+nNBtX+XJIupG/vacinCts= @@ -557,8 +555,8 @@ golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnf golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.35.0 h1:b15kiHdrGCHrP6LvwaQ3c03kgNhhiMgvlhxHQhmg2Xs= -golang.org/x/crypto v0.35.0/go.mod h1:dy7dXNW32cAb/6/PRuTNsix8T+vJAqvuIy5Bli/x0YQ= +golang.org/x/crypto v0.36.0 h1:AnAEvhDddvBdpY+uR+MyHmuZzzNqXSe/GvuDeob5L34= +golang.org/x/crypto v0.36.0/go.mod h1:Y4J0ReaxCR1IMaabaSMugxJES1EpwhBHhv2bDHklZvc= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20240716160929-1d5bc16f04a8 h1:Z+vTUQyBb738QmIhbJx3z4htsxDeI+rd0EHvNm8jHkg= golang.org/x/exp v0.0.0-20240716160929-1d5bc16f04a8/go.mod h1:M4RDyNAINzryxdtnbRXRL/OHtkFuWGRjvuhBJpk2IlY= @@ -582,8 +580,8 @@ golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/ golang.org/x/net v0.0.0-20200813134508-3edf25e44fcc/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.36.0 h1:vWF2fRbw4qslQsQzgFqZff+BItCvGFQqKzKIzx1rmoA= -golang.org/x/net v0.36.0/go.mod h1:bFmbeoIPfrw4sMHNhb4J9f6+tPziuGjq7Jk/38fxi1I= +golang.org/x/net v0.38.0 h1:vRMAPTMaeGqVhG5QyLJHqNDwecKTomGeqbnfZyKlBI8= +golang.org/x/net v0.38.0/go.mod h1:ivrbrMbzFq5J41QOQh0siUuly180yBYtLp+CKbEaFx8= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.21.0 h1:tsimM75w1tF/uws5rbeHzIWxEqElMehnc+iW793zsZs= golang.org/x/oauth2 v0.21.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI= @@ -593,8 +591,8 @@ golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.11.0 h1:GGz8+XQP4FvTTrjZPzNKTMFtSXH80RAzG+5ghFPgK9w= -golang.org/x/sync v0.11.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.12.0 h1:MHc5BpPuC30uJk597Ri8TV3CNZcTLu6B6z4lJy+g6Jw= +golang.org/x/sync v0.12.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -619,15 +617,15 @@ golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.21.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.30.0 h1:QjkSwP/36a20jFYWkSue1YwXzLmsV5Gfq7Eiy72C1uc= -golang.org/x/sys v0.30.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/term v0.29.0 h1:L6pJp37ocefwRRtYPKSWOWzOtWSxVajvz2ldH/xi3iU= -golang.org/x/term v0.29.0/go.mod h1:6bl4lRlvVuDgSf3179VpIxBF0o10JUpXWOnI7nErv7s= +golang.org/x/sys v0.36.0 h1:KVRy2GtZBrk1cBYA7MKu5bEZFxQk4NIDV6RLVcC8o0k= +golang.org/x/sys v0.36.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= +golang.org/x/term v0.30.0 h1:PQ39fJZ+mfadBm0y5WlL4vlM7Sx1Hgf13sMIY2+QS9Y= +golang.org/x/term v0.30.0/go.mod h1:NYYFdzHoI5wRh/h5tDMdMqCqPJZEuNqVR5xJLd/n67g= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.22.0 h1:bofq7m3/HAFvbF51jz3Q9wLg3jkvSPuiZu/pD1XwgtM= -golang.org/x/text v0.22.0/go.mod h1:YRoo4H8PVmsu+E3Ou7cqLVH8oXWIHVoX0jqUWALQhfY= +golang.org/x/text v0.23.0 h1:D71I7dUrlY+VX0gQShAThNGHFxZ13dGLBHQLVl1mJlY= +golang.org/x/text v0.23.0/go.mod h1:/BLNzu4aZCJ1+kcD0DNRotWKage4q2rGVAg4o22unh4= golang.org/x/time v0.9.0 h1:EsRrnYcQiGH+5FfbgvV4AP7qEZstoyrHB0DzarOQ4ZY= golang.org/x/time v0.9.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -707,8 +705,6 @@ k8s.io/utils v0.0.0-20230220204549-a5ecb0141aa5 h1:kmDqav+P+/5e1i9tFfHq1qcF3sOrD k8s.io/utils v0.0.0-20230220204549-a5ecb0141aa5/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= lukechampine.com/blake3 v1.2.1 h1:YuqqRuaqsGV71BV/nm9xlI0MKUv4QC54jQnBChWbGnI= lukechampine.com/blake3 v1.2.1/go.mod h1:0OFRp7fBtAylGVCO40o87sbupkyIGgbpv1+M1k1LM6k= -rsc.io/tmplfunc v0.0.3 h1:53XFQh69AfOa8Tw0Jm7t+GV7KZhOi6jzsCzTtKbMvzU= -rsc.io/tmplfunc v0.0.3/go.mod h1:AG3sTPzElb1Io3Yg4voV9AGZJuleGAwaVRxL9M49PhA= sigs.k8s.io/json v0.0.0-20220713155537-f223a00ba0e2 h1:iXTIw73aPyC+oRdyqqvVJuloN1p0AC/kzH07hu3NE+k= sigs.k8s.io/json v0.0.0-20220713155537-f223a00ba0e2/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0= sigs.k8s.io/structured-merge-diff/v4 v4.2.3 h1:PRbqxJClWWYMNV1dhaG4NsibJbArud9kFxnAMREiWFE= diff --git a/shared/config/enums.go b/shared/config/enums.go index 83bf466..75d4ec1 100644 --- a/shared/config/enums.go +++ b/shared/config/enums.go @@ -8,22 +8,3 @@ const ( // Local test network for development Network_LocalTest config.Network = "local-test" ) - -type MevRelayID string - -// Enum to identify MEV-boost relays -const ( - MevRelayID_Unknown MevRelayID = "" - MevRelayID_Flashbots MevRelayID = "flashbots" - MevRelayID_BloxrouteMaxProfit MevRelayID = "bloxrouteMaxProfit" - MevRelayID_BloxrouteRegulated MevRelayID = "bloxrouteRegulated" - MevRelayID_TitanRegional MevRelayID = "titanRegional" -) - -type MevSelectionMode string - -// Enum to describe MEV-Boost relay selection mode -const ( - MevSelectionMode_All MevSelectionMode = "all" - MevSelectionMode_Manual MevSelectionMode = "manual" -) diff --git a/shared/config/hyperdrive-config.go b/shared/config/hyperdrive-config.go index cf742b4..08efac5 100644 --- a/shared/config/hyperdrive-config.go +++ b/shared/config/hyperdrive-config.go @@ -11,6 +11,7 @@ import ( "github.com/nodeset-org/hyperdrive-daemon/shared" "github.com/nodeset-org/hyperdrive-daemon/shared/config/ids" "github.com/nodeset-org/hyperdrive-daemon/shared/config/migration" + "github.com/nodeset-org/hyperdrive-daemon/shared/config/pbs" "github.com/rocket-pool/node-manager-core/config" "github.com/rocket-pool/node-manager-core/log" "gopkg.in/yaml.v3" @@ -60,8 +61,8 @@ type HyperdriveConfig struct { // Metrics Metrics *config.MetricsConfig - // MEV-Boost - MevBoost *MevBoostConfig + // PBS + Pbs *pbs.PbsConfig // Modules Modules map[string]any @@ -150,7 +151,7 @@ func NewHyperdriveConfigForNetwork(hdDir string, networks []*HyperdriveSettings, ID: ids.NetworkID, Name: "Network", Description: "The Ethereum network you want to use - select Hoodi Testnet to practice with fake ETH, or Mainnet to stake on the real network using real ETH.", - AffectsContainers: []config.ContainerID{config.ContainerID_Daemon, config.ContainerID_ExecutionClient, config.ContainerID_BeaconNode, config.ContainerID_ValidatorClient, config.ContainerID_MevBoost}, + AffectsContainers: []config.ContainerID{config.ContainerID_Daemon, config.ContainerID_ExecutionClient, config.ContainerID_BeaconNode, config.ContainerID_ValidatorClient, pbs.ContainerID_Pbs}, CanBeBlank: false, OverwriteOnUpgrade: false, }, @@ -309,7 +310,7 @@ func NewHyperdriveConfigForNetwork(hdDir string, networks []*HyperdriveSettings, cfg.ExternalBeaconClient = config.NewExternalBeaconConfig() cfg.Fallback = config.NewFallbackConfig() cfg.Metrics = NewMetricsConfig() - cfg.MevBoost = NewMevBoostConfig(cfg) + cfg.Pbs = pbs.NewPbsConfig() // Provision the defaults for each network for _, network := range networks { @@ -359,7 +360,7 @@ func (cfg *HyperdriveConfig) GetSubconfigs() map[string]config.IConfigSection { ids.LocalBeaconID: cfg.LocalBeaconClient, ids.ExternalBeaconID: cfg.ExternalBeaconClient, ids.MetricsID: cfg.Metrics, - ids.MevBoostID: cfg.MevBoost, + ids.PbsID: cfg.Pbs, } } diff --git a/shared/config/ids/hyperdrive.go b/shared/config/ids/hyperdrive.go index 1319d3e..6d43ebd 100644 --- a/shared/config/ids/hyperdrive.go +++ b/shared/config/ids/hyperdrive.go @@ -26,18 +26,5 @@ const ( LocalBeaconID string = "localBeacon" ExternalBeaconID string = "externalBeacon" MetricsID string = "metrics" - MevBoostID string = "mevBoost" - - // MEV-Boost - MevBoostEnableID string = "enableMevBoost" - MevBoostModeID string = "mode" - MevBoostSelectionModeID string = "selectionMode" - MevBoostOpenRpcPortID string = "openRpcPort" - MevBoostExternalUrlID string = "externalUrl" - MevBoostFlashbotsID string = "flashbotsEnabled" - MevBoostBloxRouteMaxProfitID string = "bloxRouteMaxProfitEnabled" - MevBoostBloxRouteRegulatedID string = "bloxRouteRegulatedEnabled" - MevBoostEdenID string = "edenEnabled" - MevBoostTitanRegionalID string = "titanRegionaEnabled" - MevBoostCustomRelaysID string = "customRelays" + PbsID string = "pbs" ) diff --git a/shared/config/ids/pbs.go b/shared/config/ids/pbs.go new file mode 100644 index 0000000..7756ad5 --- /dev/null +++ b/shared/config/ids/pbs.go @@ -0,0 +1,25 @@ +package ids + +const ( + // PBS client + PbsEnableID string = "enablePbs" + PbsModeID string = "mode" + PbsClientID string = "pbsClient" + PbsRelaySelectionModeID string = "selectionMode" + PbsOpenRpcPortID string = "openRpcPort" + PbsExternalUrlID string = "externalUrl" + PbsFlashbotsID string = "flashbotsEnabled" + PbsBloxRouteMaxProfitID string = "bloxRouteMaxProfitEnabled" + PbsBloxRouteRegulatedID string = "bloxRouteRegulatedEnabled" + PbsBoostEdenID string = "edenEnabled" + PbsTitanRegionalID string = "titanRegionaEnabled" + PbsCustomRelaysID string = "customRelays" + PbsLocalID string = "localClient" + PbsExternalID string = "externalClient" + + // Commit-Boost PBS + CommitBoostPbsID string = "commitBoost" + + // Mev-Boost PBS + MevBoostPbsID string = "mevBoost" +) diff --git a/shared/config/mev-boost-config.go b/shared/config/mev-boost-config.go deleted file mode 100644 index ddab357..0000000 --- a/shared/config/mev-boost-config.go +++ /dev/null @@ -1,456 +0,0 @@ -package config - -import ( - "fmt" - "strings" - - ids "github.com/nodeset-org/hyperdrive-daemon/shared/config/ids" - "github.com/rocket-pool/node-manager-core/config" - nmc_ids "github.com/rocket-pool/node-manager-core/config/ids" -) - -// Constants -const ( - mevBoostProdTag string = "flashbots/mev-boost:1.9" - mevBoostTestTag string = "flashbots/mev-boost:1.9" -) - -// A MEV relay -type MevRelay struct { - ID MevRelayID - Name string - Description string - Urls map[string]string -} - -// Configuration for MEV-Boost -type MevBoostConfig struct { - // Toggle to enable / disable - Enable config.Parameter[bool] - - // Ownership mode - Mode config.Parameter[config.ClientMode] - - // The mode for relay selection - SelectionMode config.Parameter[MevSelectionMode] - - // Flashbots relay - FlashbotsRelay config.Parameter[bool] - - // bloXroute max profit relay - BloxRouteMaxProfitRelay config.Parameter[bool] - - // bloXroute regulated relay - BloxRouteRegulatedRelay config.Parameter[bool] - - // Titan regional relay - TitanRegionalRelay config.Parameter[bool] - - // Custom relays provided by the user - CustomRelays config.Parameter[string] - - // The RPC port - Port config.Parameter[uint16] - - // Toggle for forwarding the HTTP port outside of Docker - OpenRpcPort config.Parameter[config.RpcPortMode] - - // The Docker Hub tag for MEV-Boost - ContainerTag config.Parameter[string] - - // Custom command line flags - AdditionalFlags config.Parameter[string] - - // The URL of an external MEV-Boost client - ExternalUrl config.Parameter[string] - - /////////////////////////// - // Non-editable settings // - /////////////////////////// - - parent *HyperdriveConfig - relays []MevRelay - relayMap map[MevRelayID]MevRelay -} - -// Generates a new MEV-Boost configuration -func NewMevBoostConfig(parent *HyperdriveConfig) *MevBoostConfig { - // Generate the relays - relays := createDefaultRelays() - relayMap := map[MevRelayID]MevRelay{} - for _, relay := range relays { - relayMap[relay.ID] = relay - } - - rpcPortModes := config.GetPortModes("") - - return &MevBoostConfig{ - parent: parent, - - Enable: config.Parameter[bool]{ - ParameterCommon: &config.ParameterCommon{ - ID: ids.MevBoostEnableID, - Name: "Enable MEV-Boost", - Description: "Enable MEV-Boost, which connects your validators to one or more relays of your choice. The relays act as intermediaries between you and professional block builders that find and extract MEV opportunities. The builders will give you a healthy tip in return, which tends to be worth more than blocks you built on your own.", - AffectsContainers: []config.ContainerID{config.ContainerID_BeaconNode, config.ContainerID_MevBoost}, - CanBeBlank: false, - OverwriteOnUpgrade: false, - }, - Default: map[config.Network]bool{ - config.Network_All: true, - }, - }, - - Mode: config.Parameter[config.ClientMode]{ - ParameterCommon: &config.ParameterCommon{ - ID: ids.MevBoostModeID, - Name: "MEV-Boost Mode", - Description: "Choose whether to let Hyperdrive manage your MEV-Boost instance (Locally Managed), or if you manage your own outside of Hyperdrive (Externally Managed).", - AffectsContainers: []config.ContainerID{config.ContainerID_BeaconNode, config.ContainerID_MevBoost}, - CanBeBlank: false, - OverwriteOnUpgrade: false, - }, - Options: []*config.ParameterOption[config.ClientMode]{{ - ParameterOptionCommon: &config.ParameterOptionCommon{ - Name: "Locally Managed", - Description: "Allow Hyperdrive to manage the MEV-Boost client for you", - }, - Value: config.ClientMode_Local, - }, { - ParameterOptionCommon: &config.ParameterOptionCommon{ - Name: "Externally Managed", - Description: "Use an existing MEV-Boost client that you manage on your own", - }, - Value: config.ClientMode_External, - }}, - Default: map[config.Network]config.ClientMode{ - config.Network_All: config.ClientMode_Local, - }, - }, - - SelectionMode: config.Parameter[MevSelectionMode]{ - ParameterCommon: &config.ParameterCommon{ - ID: ids.MevBoostSelectionModeID, - Name: "Selection Mode", - Description: "Select how the TUI shows you the options for which MEV relays to enable.", - AffectsContainers: []config.ContainerID{config.ContainerID_MevBoost}, - CanBeBlank: false, - OverwriteOnUpgrade: false, - }, - Options: []*config.ParameterOption[MevSelectionMode]{{ - ParameterOptionCommon: &config.ParameterOptionCommon{ - Name: "Use All Relays", - Description: "Use this if you simply want to enable all of the built-in relays without needing to read about each individual relay. If new relays get added to Hyperdrive, you'll automatically start using those too.\n\nNote that all of Hyperdrive's built-in relays support regional sanction lists (such as the US OFAC list) and are compliant with regulations. To learn more, please visit https://medium.com/coinmonks/understanding-the-impact-of-the-ofac-sanctions-on-block-builders-9c0e02b7e450.", - }, - Value: MevSelectionMode_All, - }, { - ParameterOptionCommon: &config.ParameterOptionCommon{ - Name: "Manual Mode", - Description: "Each relay will be shown, and you can enable each one individually as you see fit.\nUse this if you already know about the relays and want to customize the ones you will use.\n\nNote that all of Hyperdrive's built-in relays support regional sanction lists (such as the US OFAC list) and are compliant with regulations. To learn more, please visit https://medium.com/coinmonks/understanding-the-impact-of-the-ofac-sanctions-on-block-builders-9c0e02b7e450.", - }, - Value: MevSelectionMode_Manual, - }}, - Default: map[config.Network]MevSelectionMode{ - config.Network_All: MevSelectionMode_All, - }, - }, - - // Explicit relay params - FlashbotsRelay: generateRelayParameter(ids.MevBoostFlashbotsID, relayMap[MevRelayID_Flashbots]), - BloxRouteMaxProfitRelay: generateRelayParameter(ids.MevBoostBloxRouteMaxProfitID, relayMap[MevRelayID_BloxrouteMaxProfit]), - BloxRouteRegulatedRelay: generateRelayParameter(ids.MevBoostBloxRouteRegulatedID, relayMap[MevRelayID_BloxrouteRegulated]), - TitanRegionalRelay: generateRelayParameter(ids.MevBoostTitanRegionalID, relayMap[MevRelayID_TitanRegional]), - - CustomRelays: config.Parameter[string]{ - ParameterCommon: &config.ParameterCommon{ - ID: ids.MevBoostCustomRelaysID, - Name: "Custom Relays", - Description: "Add custom relay URLs to MEV-Boost that aren't part of the built-in set. You can add multiple relays by separating each one with a comma. Any relay URLs can be used as long as they match your selected Ethereum network.\n\nFor a comprehensive list of available relays, we recommend the list maintained by ETHStaker:\nhttps://github.com/eth-educators/ethstaker-guides/blob/main/MEV-relay-list.md", - AffectsContainers: []config.ContainerID{config.ContainerID_MevBoost}, - CanBeBlank: true, - OverwriteOnUpgrade: false, - }, - Default: map[config.Network]string{ - config.Network_All: "", - }, - }, - - Port: config.Parameter[uint16]{ - ParameterCommon: &config.ParameterCommon{ - ID: nmc_ids.PortID, - Name: "Port", - Description: "The port that MEV-Boost should serve its API on.", - AffectsContainers: []config.ContainerID{config.ContainerID_BeaconNode, config.ContainerID_MevBoost}, - CanBeBlank: false, - OverwriteOnUpgrade: false, - }, - Default: map[config.Network]uint16{ - config.Network_All: uint16(18550), - }, - }, - - OpenRpcPort: config.Parameter[config.RpcPortMode]{ - ParameterCommon: &config.ParameterCommon{ - ID: nmc_ids.OpenPortID, - Name: "Expose API Port", - Description: "Expose the API port to other processes on your machine, or to your local network so other local machines can access MEV-Boost's API.", - AffectsContainers: []config.ContainerID{config.ContainerID_MevBoost}, - CanBeBlank: false, - OverwriteOnUpgrade: false, - }, - Options: rpcPortModes, - Default: map[config.Network]config.RpcPortMode{ - config.Network_All: config.RpcPortMode_Closed, - }, - }, - - ContainerTag: config.Parameter[string]{ - ParameterCommon: &config.ParameterCommon{ - ID: nmc_ids.ContainerTagID, - Name: "Container Tag", - Description: "The tag name of the MEV-Boost container you want to use on Docker Hub.", - AffectsContainers: []config.ContainerID{config.ContainerID_MevBoost}, - CanBeBlank: false, - OverwriteOnUpgrade: true, - }, - Default: map[config.Network]string{ - config.Network_Hoodi: mevBoostTestTag, - config.Network_All: mevBoostProdTag, - }, - }, - - AdditionalFlags: config.Parameter[string]{ - ParameterCommon: &config.ParameterCommon{ - ID: nmc_ids.AdditionalFlagsID, - Name: "Additional Flags", - Description: "Additional custom command line flags you want to pass to MEV-Boost, to take advantage of other settings that Hyperdrive's configuration doesn't cover.", - AffectsContainers: []config.ContainerID{config.ContainerID_MevBoost}, - CanBeBlank: true, - OverwriteOnUpgrade: false, - }, - Default: map[config.Network]string{ - config.Network_All: "", - }, - }, - - ExternalUrl: config.Parameter[string]{ - ParameterCommon: &config.ParameterCommon{ - ID: ids.MevBoostExternalUrlID, - Name: "External URL", - Description: "The URL of the external MEV-Boost client or provider.\nNOTE: If you are running it on the same machine as this node, addresses like `localhost` and `127.0.0.1` will not work due to Docker limitations. Enter your machine's LAN IP address instead, for example 'http://192.168.1.100:18550'.", - AffectsContainers: []config.ContainerID{config.ContainerID_BeaconNode}, - CanBeBlank: true, - OverwriteOnUpgrade: false, - }, - Default: map[config.Network]string{ - config.Network_All: "", - }, - }, - - relays: relays, - relayMap: relayMap, - } -} - -// The title for the config -func (cfg *MevBoostConfig) GetTitle() string { - return "MEV-Boost" -} - -// Get the Parameters for this config -func (cfg *MevBoostConfig) GetParameters() []config.IParameter { - return []config.IParameter{ - &cfg.Enable, - &cfg.Mode, - &cfg.SelectionMode, - &cfg.FlashbotsRelay, - &cfg.BloxRouteMaxProfitRelay, - &cfg.BloxRouteRegulatedRelay, - &cfg.TitanRegionalRelay, - &cfg.CustomRelays, - &cfg.Port, - &cfg.OpenRpcPort, - &cfg.ContainerTag, - &cfg.AdditionalFlags, - &cfg.ExternalUrl, - } -} - -// Get the sections underneath this one -func (cfg *MevBoostConfig) GetSubconfigs() map[string]config.IConfigSection { - return map[string]config.IConfigSection{} -} - -// Checks if any relays are available for the current network -func (cfg *MevBoostConfig) HasRelays() bool { - networkName := cfg.parent.GetEthNetworkName() - if networkName == "" { - return false - } - - // Check if any of the relays are available for that Eth network - for _, relay := range cfg.relays { - _, exists := relay.Urls[networkName] - if !exists { - continue - } - return true - } - - return false -} - -// Get the relays that are available for the current network -func (cfg *MevBoostConfig) GetAvailableRelays() []MevRelay { - relays := []MevRelay{} - networkName := cfg.parent.GetEthNetworkName() - if networkName == "" { - return relays - } - - for _, relay := range cfg.relays { - _, exists := relay.Urls[networkName] - if !exists { - continue - } - relays = append(relays, relay) - } - return relays -} - -// Get which MEV-boost relays are enabled -func (cfg *MevBoostConfig) GetEnabledMevRelays() []MevRelay { - relays := []MevRelay{} - networkName := cfg.parent.GetEthNetworkName() - if networkName == "" { - return relays - } - - switch cfg.SelectionMode.Value { - case MevSelectionMode_All: - for _, relay := range cfg.relays { - _, exists := relay.Urls[networkName] - if !exists { - // Skip relays that don't exist on the current network - continue - } - relays = append(relays, relay) - } - - case MevSelectionMode_Manual: - if cfg.FlashbotsRelay.Value { - _, exists := cfg.relayMap[MevRelayID_Flashbots].Urls[networkName] - if exists { - relays = append(relays, cfg.relayMap[MevRelayID_Flashbots]) - } - } - if cfg.BloxRouteMaxProfitRelay.Value { - _, exists := cfg.relayMap[MevRelayID_BloxrouteMaxProfit].Urls[networkName] - if exists { - relays = append(relays, cfg.relayMap[MevRelayID_BloxrouteMaxProfit]) - } - } - if cfg.BloxRouteRegulatedRelay.Value { - _, exists := cfg.relayMap[MevRelayID_BloxrouteRegulated].Urls[networkName] - if exists { - relays = append(relays, cfg.relayMap[MevRelayID_BloxrouteRegulated]) - } - } - if cfg.TitanRegionalRelay.Value { - _, exists := cfg.relayMap[MevRelayID_TitanRegional].Urls[networkName] - if exists { - relays = append(relays, cfg.relayMap[MevRelayID_TitanRegional]) - } - } - } - - return relays -} - -func (cfg *MevBoostConfig) GetRelayString() string { - relayUrls := []string{} - networkName := cfg.parent.GetEthNetworkName() - if networkName == "" { - return "" - } - - relays := cfg.GetEnabledMevRelays() - for _, relay := range relays { - relayUrls = append(relayUrls, relay.Urls[networkName]) - } - if cfg.CustomRelays.Value != "" { - relayUrls = append(relayUrls, cfg.CustomRelays.Value) - } - - relayString := strings.Join(relayUrls, ",") - return relayString -} - -// Create the default MEV relays -func createDefaultRelays() []MevRelay { - relays := []MevRelay{ - // Flashbots - { - ID: MevRelayID_Flashbots, - Name: "Flashbots", - Description: "Flashbots is the developer of MEV-Boost, and one of the best-known and most trusted relays in the space.", - Urls: map[string]string{ - config.EthNetwork_Mainnet: "https://0xac6e77dfe25ecd6110b8e780608cce0dab71fdd5ebea22a16c0205200f2f8e2e3ad3b71d3499c54ad14d6c21b41a37ae@boost-relay.flashbots.net?id=hyperdrive", - config.EthNetwork_Hoodi: "https://0xafa4c6985aa049fb79dd37010438cfebeb0f2bd42b115b89dd678dab0670c1de38da0c4e9138c9290a398ecd9a0b3110@boost-relay-hoodi.flashbots.net", - }, - }, - - // bloXroute Max Profit - { - ID: MevRelayID_BloxrouteMaxProfit, - Name: "bloXroute Max Profit", - Description: "Select this to enable the \"max profit\" relay from bloXroute.", - Urls: map[string]string{ - config.EthNetwork_Mainnet: "https://0x8b5d2e73e2a3a55c6c87b8b6eb92e0149a125c852751db1422fa951e42a09b82c142c3ea98d0d9930b056a3bc9896b8f@bloxroute.max-profit.blxrbdn.com?id=hyperdrive", - config.EthNetwork_Hoodi: "https://0x821f2a65afb70e7f2e820a925a9b4c80a159620582c1766b1b09729fec178b11ea22abb3a51f07b288be815a1a2ff516@bloxroute.hoodi.blxrbdn.com", - }, - }, - - // bloXroute Regulated - { - ID: MevRelayID_BloxrouteRegulated, - Name: "bloXroute Regulated", - Description: "Select this to enable the \"regulated\" relay from bloXroute.", - Urls: map[string]string{ - config.EthNetwork_Mainnet: "https://0xb0b07cd0abef743db4260b0ed50619cf6ad4d82064cb4fbec9d3ec530f7c5e6793d9f286c4e082c0244ffb9f2658fe88@bloxroute.regulated.blxrbdn.com?id=hyperdrive", - }, - }, - - // Titan Regional - { - ID: MevRelayID_TitanRegional, - Name: "Titan Regional", - Description: "Titan Relay is a neutral, Rust-based MEV-Boost Relay optimized for low latency through put, geographical distribution, and robustness. This is the regulated (censoring) version.", - Urls: map[string]string{ - config.EthNetwork_Mainnet: "https://0x8c4ed5e24fe5c6ae21018437bde147693f68cda427cd1122cf20819c30eda7ed74f72dece09bb313f2a1855595ab677d@regional.titanrelay.xyz", - config.EthNetwork_Hoodi: "https://0xaa58208899c6105603b74396734a6263cc7d947f444f396a90f7b7d3e65d102aec7e5e5291b27e08d02c50a050825c2f@hoodi.titanrelay.xyz", - }, - }, - } - - return relays -} - -// Generate one of the relay parameters -func generateRelayParameter(id string, relay MevRelay) config.Parameter[bool] { - description := fmt.Sprintf("[lime]NOTE: You can enable multiple options.\n\n[white]%s\n\n", relay.Description) - - return config.Parameter[bool]{ - ParameterCommon: &config.ParameterCommon{ - ID: id, - Name: fmt.Sprintf("Enable %s", relay.Name), - Description: description, - AffectsContainers: []config.ContainerID{config.ContainerID_MevBoost}, - CanBeBlank: false, - OverwriteOnUpgrade: false, - }, - Default: map[config.Network]bool{ - config.Network_All: false, - }, - } -} diff --git a/shared/config/pbs/cb-pbs-config.go b/shared/config/pbs/cb-pbs-config.go new file mode 100644 index 0000000..640f496 --- /dev/null +++ b/shared/config/pbs/cb-pbs-config.go @@ -0,0 +1,95 @@ +package pbs + +import ( + "fmt" + + "github.com/rocket-pool/node-manager-core/config" + nmc_ids "github.com/rocket-pool/node-manager-core/config/ids" +) + +// Constants +const ( + CommitBoostConfigFile string = "cb_config.toml" + commitBoostPbsProdTag string = "ghcr.io/commit-boost/pbs:v0.8.0" + commitBoostPbsTestTag string = "ghcr.io/commit-boost/pbs:v0.8.1-rc.4" +) + +// Configuration for Commit-Boost's PBS service +type CommitBoostPbsConfig struct { + // The Docker Hub tag for Commit-Boost PBS + ContainerTag config.Parameter[string] + + // Custom command line flags + AdditionalFlags config.Parameter[string] +} + +// Generates a new Commit-Boost PBS service configuration +func NewCommitBoostPbsConfig() *CommitBoostPbsConfig { + return &CommitBoostPbsConfig{ + ContainerTag: config.Parameter[string]{ + ParameterCommon: &config.ParameterCommon{ + ID: nmc_ids.ContainerTagID, + Name: "Container Tag", + Description: "The tag name of the Commit-Boost PBS container you want to use.", + AffectsContainers: []config.ContainerID{ContainerID_Pbs}, + CanBeBlank: false, + OverwriteOnUpgrade: true, + }, + Default: map[config.Network]string{ + config.Network_Hoodi: commitBoostPbsTestTag, + config.Network_All: commitBoostPbsProdTag, + }, + }, + + AdditionalFlags: config.Parameter[string]{ + ParameterCommon: &config.ParameterCommon{ + ID: nmc_ids.AdditionalFlagsID, + Name: "Additional Flags", + Description: "Additional custom command line flags you want to pass to Commit-Boost PBS, to take advantage of other settings that Hyperdrive's configuration doesn't cover.", + AffectsContainers: []config.ContainerID{ContainerID_Pbs}, + CanBeBlank: true, + OverwriteOnUpgrade: false, + }, + Default: map[config.Network]string{ + config.Network_All: "", + }, + }, + } +} + +// The title for the config +func (cfg *CommitBoostPbsConfig) GetTitle() string { + return "Commit Boost PBS" +} + +// Get the Parameters for this config +func (cfg *CommitBoostPbsConfig) GetParameters() []config.IParameter { + return []config.IParameter{ + &cfg.ContainerTag, + &cfg.AdditionalFlags, + } +} + +// Get the sections underneath this one +func (cfg *CommitBoostPbsConfig) GetSubconfigs() map[string]config.IConfigSection { + return map[string]config.IConfigSection{} +} + +// Get the filename for the Commit-Boost PBS config +func (cfg *CommitBoostPbsConfig) GetCommitBoostConfigFilename() string { + return CommitBoostConfigFile +} + +// Get the chain name for the Commit-Boost config file +func (cfg *CommitBoostPbsConfig) GetChainName(ethNetworkName string) (string, error) { + switch ethNetworkName { + case config.EthNetwork_Mainnet: + return "Mainnet", nil + case config.EthNetwork_Holesky: + return "Holesky", nil + case config.EthNetwork_Hoodi: + return "Hoodi", nil + default: + return "", fmt.Errorf("unsupported network %s for Commit-Boost PBS config", ethNetworkName) + } +} diff --git a/shared/config/pbs/enums.go b/shared/config/pbs/enums.go new file mode 100644 index 0000000..1176878 --- /dev/null +++ b/shared/config/pbs/enums.go @@ -0,0 +1,34 @@ +package pbs + +import "github.com/rocket-pool/node-manager-core/config" + +type PbsRelayID string + +// Enum to identify MEV-boost relays +const ( + MevRelayID_Unknown PbsRelayID = "" + PbsRelayID_Flashbots PbsRelayID = "flashbots" + PbsRelayID_BloxrouteMaxProfit PbsRelayID = "bloxrouteMaxProfit" + PbsRelayID_BloxrouteRegulated PbsRelayID = "bloxrouteRegulated" + PbsRelayID_TitanRegional PbsRelayID = "titanRegional" +) + +type PbsClient string + +// Enum to identify PBS clients +const ( + PbsClient_CommitBoost PbsClient = "commitBoost" + PbsClient_MevBoost PbsClient = "mevBoost" +) + +type PbsRelaySelectionMode string + +// Enum to describe PBS relay selection mode +const ( + PbsRelaySelectionMode_All PbsRelaySelectionMode = "all" + PbsRelaySelectionMode_Manual PbsRelaySelectionMode = "manual" +) + +const ( + ContainerID_Pbs config.ContainerID = "pbs" +) diff --git a/shared/config/pbs/external-pbs.go b/shared/config/pbs/external-pbs.go new file mode 100644 index 0000000..dd1417b --- /dev/null +++ b/shared/config/pbs/external-pbs.go @@ -0,0 +1,48 @@ +package pbs + +import ( + ids "github.com/nodeset-org/hyperdrive-daemon/shared/config/ids" + "github.com/rocket-pool/node-manager-core/config" +) + +// Configuration for locally managed PBS services +type ExternalPbsClientConfig struct { + // The URL of an external MEV-Boost client + ExternalUrl config.Parameter[string] +} + +// Generates a new external PBS service configuration +func NewExternalPbsServiceConfig() *ExternalPbsClientConfig { + return &ExternalPbsClientConfig{ + ExternalUrl: config.Parameter[string]{ + ParameterCommon: &config.ParameterCommon{ + ID: ids.PbsExternalUrlID, + Name: "External URL", + Description: "The URL of the external PBS service.\nNOTE: If you are running it on the same machine as this node, addresses like `localhost` and `127.0.0.1` will not work due to Docker limitations. Enter your machine's LAN IP address instead, for example 'http://192.168.1.100:18550'.", + AffectsContainers: []config.ContainerID{config.ContainerID_BeaconNode}, + CanBeBlank: true, + OverwriteOnUpgrade: false, + }, + Default: map[config.Network]string{ + config.Network_All: "", + }, + }, + } +} + +// The title for the config +func (cfg *ExternalPbsClientConfig) GetTitle() string { + return "External PBS Service" +} + +// Get the Parameters for this config +func (cfg *ExternalPbsClientConfig) GetParameters() []config.IParameter { + return []config.IParameter{ + &cfg.ExternalUrl, + } +} + +// Get the sections underneath this one +func (cfg *ExternalPbsClientConfig) GetSubconfigs() map[string]config.IConfigSection { + return map[string]config.IConfigSection{} +} diff --git a/shared/config/pbs/local-pbs.go b/shared/config/pbs/local-pbs.go new file mode 100644 index 0000000..cbf5f7f --- /dev/null +++ b/shared/config/pbs/local-pbs.go @@ -0,0 +1,414 @@ +package pbs + +import ( + "fmt" + "strings" + + "github.com/nodeset-org/hyperdrive-daemon/shared/config/ids" + "github.com/rocket-pool/node-manager-core/config" + nmc_ids "github.com/rocket-pool/node-manager-core/config/ids" +) + +// A MEV relay +type PbsRelay struct { + ID PbsRelayID + Name string + Description string + Urls map[string]string +} + +// Configuration for locally managed PBS services +type LocalPbsClientConfig struct { + // The PBS client to use + Client config.Parameter[PbsClient] + + // The mode for relay selection + RelaySelectionMode config.Parameter[PbsRelaySelectionMode] + + // Flashbots relay + FlashbotsRelay config.Parameter[bool] + + // bloXroute max profit relay + BloxRouteMaxProfitRelay config.Parameter[bool] + + // bloXroute regulated relay + BloxRouteRegulatedRelay config.Parameter[bool] + + // Titan regional relay + TitanRegionalRelay config.Parameter[bool] + + // Custom relays provided by the user + CustomRelays config.Parameter[string] + + // The RPC port + Port config.Parameter[uint16] + + // Toggle for forwarding the HTTP port outside of Docker + OpenRpcPort config.Parameter[config.RpcPortMode] + + CommitBoostPbsConfig *CommitBoostPbsConfig + + MevBoostConfig *MevBoostConfig + + /////////////////////////// + // Non-editable settings // + /////////////////////////// + + relays []PbsRelay + relayMap map[PbsRelayID]PbsRelay +} + +// Generates a new local PBS service configuration +func NewLocalPbsServiceConfig() *LocalPbsClientConfig { + // Generate the relays + relays := createDefaultRelays() + relayMap := map[PbsRelayID]PbsRelay{} + for _, relay := range relays { + relayMap[relay.ID] = relay + } + + rpcPortModes := config.GetPortModes("") + + return &LocalPbsClientConfig{ + Client: config.Parameter[PbsClient]{ + ParameterCommon: &config.ParameterCommon{ + ID: ids.PbsClientID, + Name: "PBS Client", + Description: "Select the PBS client to use.", + AffectsContainers: []config.ContainerID{ContainerID_Pbs}, + CanBeBlank: false, + OverwriteOnUpgrade: false, + }, + Options: []*config.ParameterOption[PbsClient]{{ + ParameterOptionCommon: &config.ParameterOptionCommon{ + Name: "Commit-Boost", + Description: "Commit-Boost is a powerful PBS client that offers detailed reporting and transparency around block building, very low latency, the ability to specify relays on a per-validator basis, and a responsive development team with a proven track record of quickly addressing feedback. It is fully open source and written in Rust. Visit https://github.com/commit-boost/commit-boost-client/ to learn more.", + }, + Value: PbsClient_CommitBoost, + }, { + ParameterOptionCommon: &config.ParameterOptionCommon{ + Name: "MEV-Boost", + Description: "MEV-Boost is the oldest public implementation of a client for the PBS marketplace. It is developed by Flashbots and is completely open source and written in Go. Visit https://github.com/flashbots/mev-boost to learn more.", + }, + Value: PbsClient_MevBoost, + }}, + Default: map[config.Network]PbsClient{ + config.Network_All: PbsClient_CommitBoost, + }, + }, + + RelaySelectionMode: config.Parameter[PbsRelaySelectionMode]{ + ParameterCommon: &config.ParameterCommon{ + ID: ids.PbsRelaySelectionModeID, + Name: "Selection Mode", + Description: "Select how the TUI shows you the options for which PBS relays to enable.", + AffectsContainers: []config.ContainerID{ContainerID_Pbs}, + CanBeBlank: false, + OverwriteOnUpgrade: false, + }, + Options: []*config.ParameterOption[PbsRelaySelectionMode]{{ + ParameterOptionCommon: &config.ParameterOptionCommon{ + Name: "Use All Relays", + Description: "Use this if you simply want to enable all of the built-in relays without needing to read about each individual relay. If new relays get added to Hyperdrive, you'll automatically start using those too.\n\nNote that all of Hyperdrive's built-in relays support regional sanction lists (such as the US OFAC list) and are compliant with regulations. To learn more, please visit https://medium.com/coinmonks/understanding-the-impact-of-the-ofac-sanctions-on-block-builders-9c0e02b7e450.", + }, + Value: PbsRelaySelectionMode_All, + }, { + ParameterOptionCommon: &config.ParameterOptionCommon{ + Name: "Manual Mode", + Description: "Each relay will be shown, and you can enable each one individually as you see fit.\nUse this if you already know about the relays and want to customize the ones you will use.\n\nNote that all of Hyperdrive's built-in relays support regional sanction lists (such as the US OFAC list) and are compliant with regulations. To learn more, please visit https://medium.com/coinmonks/understanding-the-impact-of-the-ofac-sanctions-on-block-builders-9c0e02b7e450.", + }, + Value: PbsRelaySelectionMode_Manual, + }}, + Default: map[config.Network]PbsRelaySelectionMode{ + config.Network_All: PbsRelaySelectionMode_All, + }, + }, + + // Explicit relay params + FlashbotsRelay: generateRelayParameter(ids.PbsFlashbotsID, relayMap[PbsRelayID_Flashbots]), + BloxRouteMaxProfitRelay: generateRelayParameter(ids.PbsBloxRouteMaxProfitID, relayMap[PbsRelayID_BloxrouteMaxProfit]), + BloxRouteRegulatedRelay: generateRelayParameter(ids.PbsBloxRouteRegulatedID, relayMap[PbsRelayID_BloxrouteRegulated]), + TitanRegionalRelay: generateRelayParameter(ids.PbsTitanRegionalID, relayMap[PbsRelayID_TitanRegional]), + + CustomRelays: config.Parameter[string]{ + ParameterCommon: &config.ParameterCommon{ + ID: ids.PbsCustomRelaysID, + Name: "Custom Relays", + Description: "Add custom relay URLs to the PBS client that aren't part of the built-in set. You can add multiple relays by separating each one with a comma. Any relay URLs can be used as long as they match your selected Ethereum network.\n\nFor a comprehensive list of available relays, we recommend the list maintained by ETHStaker:\nhttps://github.com/eth-educators/ethstaker-guides/blob/main/MEV-relay-list.md", + AffectsContainers: []config.ContainerID{ContainerID_Pbs}, + CanBeBlank: true, + OverwriteOnUpgrade: false, + }, + Default: map[config.Network]string{ + config.Network_All: "", + }, + }, + + Port: config.Parameter[uint16]{ + ParameterCommon: &config.ParameterCommon{ + ID: nmc_ids.PortID, + Name: "Port", + Description: "The port that the PBS client should serve its API on.", + AffectsContainers: []config.ContainerID{config.ContainerID_BeaconNode, ContainerID_Pbs}, + CanBeBlank: false, + OverwriteOnUpgrade: false, + }, + Default: map[config.Network]uint16{ + config.Network_All: uint16(18550), + }, + }, + + OpenRpcPort: config.Parameter[config.RpcPortMode]{ + ParameterCommon: &config.ParameterCommon{ + ID: nmc_ids.OpenPortID, + Name: "Expose API Port", + Description: "Expose the API port to other processes on your machine, or to your local network so other local machines can access the PBS client's API.", + AffectsContainers: []config.ContainerID{ContainerID_Pbs}, + CanBeBlank: false, + OverwriteOnUpgrade: false, + }, + Options: rpcPortModes, + Default: map[config.Network]config.RpcPortMode{ + config.Network_All: config.RpcPortMode_Closed, + }, + }, + + CommitBoostPbsConfig: NewCommitBoostPbsConfig(), + MevBoostConfig: NewMevBoostConfig(), + + relays: relays, + relayMap: relayMap, + } +} + +// The title for the config +func (cfg *LocalPbsClientConfig) GetTitle() string { + return "Local PBS Service" +} + +// Get the Parameters for this config +func (cfg *LocalPbsClientConfig) GetParameters() []config.IParameter { + return []config.IParameter{ + &cfg.Client, + &cfg.RelaySelectionMode, + &cfg.FlashbotsRelay, + &cfg.BloxRouteMaxProfitRelay, + &cfg.BloxRouteRegulatedRelay, + &cfg.TitanRegionalRelay, + &cfg.CustomRelays, + &cfg.Port, + &cfg.OpenRpcPort, + } +} + +// Get the sections underneath this one +func (cfg *LocalPbsClientConfig) GetSubconfigs() map[string]config.IConfigSection { + return map[string]config.IConfigSection{ + ids.CommitBoostPbsID: cfg.CommitBoostPbsConfig, + ids.MevBoostPbsID: cfg.MevBoostConfig, + } +} + +// Checks if any relays are available for the current network +func (cfg *LocalPbsClientConfig) HasRelays(networkName string) bool { + if networkName == "" { + return false + } + + // Check if any of the relays are available for that Eth network + for _, relay := range cfg.relays { + _, exists := relay.Urls[networkName] + if !exists { + continue + } + return true + } + + return false +} + +// Get the relays that are available for the current network +func (cfg *LocalPbsClientConfig) GetAvailableRelays(networkName string) []PbsRelay { + relays := []PbsRelay{} + if networkName == "" { + return relays + } + + for _, relay := range cfg.relays { + _, exists := relay.Urls[networkName] + if !exists { + continue + } + relays = append(relays, relay) + } + return relays +} + +// Get which PBS relays are enabled +func (cfg *LocalPbsClientConfig) GetEnabledPbsRelays(networkName string) []PbsRelay { + relays := []PbsRelay{} + if networkName == "" { + return relays + } + + switch cfg.RelaySelectionMode.Value { + case PbsRelaySelectionMode_All: + for _, relay := range cfg.relays { + _, exists := relay.Urls[networkName] + if !exists { + // Skip relays that don't exist on the current network + continue + } + relays = append(relays, relay) + } + + case PbsRelaySelectionMode_Manual: + if cfg.FlashbotsRelay.Value { + _, exists := cfg.relayMap[PbsRelayID_Flashbots].Urls[networkName] + if exists { + relays = append(relays, cfg.relayMap[PbsRelayID_Flashbots]) + } + } + if cfg.BloxRouteMaxProfitRelay.Value { + _, exists := cfg.relayMap[PbsRelayID_BloxrouteMaxProfit].Urls[networkName] + if exists { + relays = append(relays, cfg.relayMap[PbsRelayID_BloxrouteMaxProfit]) + } + } + if cfg.BloxRouteRegulatedRelay.Value { + _, exists := cfg.relayMap[PbsRelayID_BloxrouteRegulated].Urls[networkName] + if exists { + relays = append(relays, cfg.relayMap[PbsRelayID_BloxrouteRegulated]) + } + } + if cfg.TitanRegionalRelay.Value { + _, exists := cfg.relayMap[PbsRelayID_TitanRegional].Urls[networkName] + if exists { + relays = append(relays, cfg.relayMap[PbsRelayID_TitanRegional]) + } + } + } + + return relays +} + +func (cfg *LocalPbsClientConfig) GetRelayString(networkName string) string { + relayUrls := []string{} + if networkName == "" { + return "" + } + + relays := cfg.GetEnabledPbsRelays(networkName) + for _, relay := range relays { + relayUrls = append(relayUrls, relay.Urls[networkName]) + } + if cfg.CustomRelays.Value != "" { + relayUrls = append(relayUrls, cfg.CustomRelays.Value) + } + + relayString := strings.Join(relayUrls, ",") + return relayString +} + +// Create the default PBS relays +func createDefaultRelays() []PbsRelay { + relays := []PbsRelay{ + // Flashbots + { + ID: PbsRelayID_Flashbots, + Name: "Flashbots", + Description: "Flashbots is the developer of MEV-Boost, and one of the best-known and most trusted relays in the space.", + Urls: map[string]string{ + config.EthNetwork_Mainnet: "https://0xac6e77dfe25ecd6110b8e780608cce0dab71fdd5ebea22a16c0205200f2f8e2e3ad3b71d3499c54ad14d6c21b41a37ae@boost-relay.flashbots.net?id=hyperdrive", + config.EthNetwork_Hoodi: "https://0xafa4c6985aa049fb79dd37010438cfebeb0f2bd42b115b89dd678dab0670c1de38da0c4e9138c9290a398ecd9a0b3110@boost-relay-hoodi.flashbots.net", + }, + }, + + // bloXroute Max Profit + { + ID: PbsRelayID_BloxrouteMaxProfit, + Name: "bloXroute Max Profit", + Description: "Select this to enable the \"max profit\" relay from bloXroute.", + Urls: map[string]string{ + config.EthNetwork_Mainnet: "https://0x8b5d2e73e2a3a55c6c87b8b6eb92e0149a125c852751db1422fa951e42a09b82c142c3ea98d0d9930b056a3bc9896b8f@bloxroute.max-profit.blxrbdn.com?id=hyperdrive", + config.EthNetwork_Hoodi: "https://0x821f2a65afb70e7f2e820a925a9b4c80a159620582c1766b1b09729fec178b11ea22abb3a51f07b288be815a1a2ff516@bloxroute.hoodi.blxrbdn.com", + }, + }, + + // bloXroute Regulated + { + ID: PbsRelayID_BloxrouteRegulated, + Name: "bloXroute Regulated", + Description: "Select this to enable the \"regulated\" relay from bloXroute.", + Urls: map[string]string{ + config.EthNetwork_Mainnet: "https://0xb0b07cd0abef743db4260b0ed50619cf6ad4d82064cb4fbec9d3ec530f7c5e6793d9f286c4e082c0244ffb9f2658fe88@bloxroute.regulated.blxrbdn.com?id=hyperdrive", + }, + }, + + // Titan Regional + { + ID: PbsRelayID_TitanRegional, + Name: "Titan Regional", + Description: "Titan Relay is a neutral, Rust-based PBS Relay optimized for low latency through put, geographical distribution, and robustness. This is the regulated (censoring) version.", + Urls: map[string]string{ + config.EthNetwork_Mainnet: "https://0x8c4ed5e24fe5c6ae21018437bde147693f68cda427cd1122cf20819c30eda7ed74f72dece09bb313f2a1855595ab677d@regional.titanrelay.xyz", + config.EthNetwork_Hoodi: "https://0xaa58208899c6105603b74396734a6263cc7d947f444f396a90f7b7d3e65d102aec7e5e5291b27e08d02c50a050825c2f@hoodi.titanrelay.xyz", + }, + }, + } + + return relays +} + +// Generate one of the relay parameters +func generateRelayParameter(id string, relay PbsRelay) config.Parameter[bool] { + description := fmt.Sprintf("[lime]NOTE: You can enable multiple options.\n\n[white]%s\n\n", relay.Description) + + return config.Parameter[bool]{ + ParameterCommon: &config.ParameterCommon{ + ID: id, + Name: fmt.Sprintf("Enable %s", relay.Name), + Description: description, + AffectsContainers: []config.ContainerID{ContainerID_Pbs}, + CanBeBlank: false, + OverwriteOnUpgrade: false, + }, + Default: map[config.Network]bool{ + config.Network_All: false, + }, + } +} + +// Get the container tag for the currently selected PBS client +func (cfg *LocalPbsClientConfig) GetContainerTag() string { + switch cfg.Client.Value { + case PbsClient_CommitBoost: + return cfg.CommitBoostPbsConfig.ContainerTag.Value + case PbsClient_MevBoost: + return cfg.MevBoostConfig.ContainerTag.Value + default: + return "" + } +} + +// Get the additional flags for the currently selected PBS client +func (cfg *LocalPbsClientConfig) GetAdditionalFlags() string { + switch cfg.Client.Value { + case PbsClient_CommitBoost: + return cfg.CommitBoostPbsConfig.AdditionalFlags.Value + case PbsClient_MevBoost: + return cfg.MevBoostConfig.AdditionalFlags.Value + default: + return "" + } +} + +// Used by text/template to format pbs.yml +func (cfg *LocalPbsClientConfig) GetOpenPorts() string { + portMode := cfg.OpenRpcPort.Value + if !portMode.IsOpen() { + return "" + } + port := cfg.Port.Value + return fmt.Sprintf("\"%s\"", portMode.DockerPortMapping(port)) +} diff --git a/shared/config/pbs/mev-boost-config.go b/shared/config/pbs/mev-boost-config.go new file mode 100644 index 0000000..4b7e936 --- /dev/null +++ b/shared/config/pbs/mev-boost-config.go @@ -0,0 +1,73 @@ +package pbs + +import ( + "github.com/rocket-pool/node-manager-core/config" + nmc_ids "github.com/rocket-pool/node-manager-core/config/ids" +) + +// Constants +const ( + mevBoostProdTag string = "flashbots/mev-boost:1.9" + mevBoostTestTag string = "flashbots/mev-boost:1.9" +) + +// Configuration for MEV-Boost +type MevBoostConfig struct { + // The Docker Hub tag for MEV-Boost + ContainerTag config.Parameter[string] + + // Custom command line flags + AdditionalFlags config.Parameter[string] +} + +// Generates a new MEV-Boost configuration +func NewMevBoostConfig() *MevBoostConfig { + return &MevBoostConfig{ + ContainerTag: config.Parameter[string]{ + ParameterCommon: &config.ParameterCommon{ + ID: nmc_ids.ContainerTagID, + Name: "Container Tag", + Description: "The tag name of the MEV-Boost container you want to use on Docker Hub.", + AffectsContainers: []config.ContainerID{ContainerID_Pbs}, + CanBeBlank: false, + OverwriteOnUpgrade: true, + }, + Default: map[config.Network]string{ + config.Network_Hoodi: mevBoostTestTag, + config.Network_All: mevBoostProdTag, + }, + }, + + AdditionalFlags: config.Parameter[string]{ + ParameterCommon: &config.ParameterCommon{ + ID: nmc_ids.AdditionalFlagsID, + Name: "Additional Flags", + Description: "Additional custom command line flags you want to pass to MEV-Boost, to take advantage of other settings that Hyperdrive's configuration doesn't cover.", + AffectsContainers: []config.ContainerID{ContainerID_Pbs}, + CanBeBlank: true, + OverwriteOnUpgrade: false, + }, + Default: map[config.Network]string{ + config.Network_All: "", + }, + }, + } +} + +// The title for the config +func (cfg *MevBoostConfig) GetTitle() string { + return "MEV-Boost" +} + +// Get the Parameters for this config +func (cfg *MevBoostConfig) GetParameters() []config.IParameter { + return []config.IParameter{ + &cfg.ContainerTag, + &cfg.AdditionalFlags, + } +} + +// Get the sections underneath this one +func (cfg *MevBoostConfig) GetSubconfigs() map[string]config.IConfigSection { + return map[string]config.IConfigSection{} +} diff --git a/shared/config/pbs/pbs-config.go b/shared/config/pbs/pbs-config.go new file mode 100644 index 0000000..ed2911c --- /dev/null +++ b/shared/config/pbs/pbs-config.go @@ -0,0 +1,91 @@ +package pbs + +import ( + ids "github.com/nodeset-org/hyperdrive-daemon/shared/config/ids" + "github.com/rocket-pool/node-manager-core/config" +) + +// Configuration for PBS clients +type PbsConfig struct { + // Toggle to enable / disable + Enable config.Parameter[bool] + + // Ownership mode + Mode config.Parameter[config.ClientMode] + + // Local PBS client configuration + LocalPbsClientConfig *LocalPbsClientConfig + + // External PBS client configuration + ExternalPbsClientConfig *ExternalPbsClientConfig +} + +// Generates a new PBS configuration +func NewPbsConfig() *PbsConfig { + return &PbsConfig{ + Enable: config.Parameter[bool]{ + ParameterCommon: &config.ParameterCommon{ + ID: ids.PbsEnableID, + Name: "Enable PBS Client", + Description: "Enable support for a PBS client. When one of your validators needs to propose a Beacon chain block, this client lets other professional services build it for you instead of building your own. These block builders find and extract extra MEV opportunities, giving you a healthy tip in return (which tends to be worth more than blocks you built on your own).", + AffectsContainers: []config.ContainerID{config.ContainerID_BeaconNode, ContainerID_Pbs, config.ContainerID_ValidatorClient}, + CanBeBlank: false, + OverwriteOnUpgrade: false, + }, + Default: map[config.Network]bool{ + config.Network_All: true, + }, + }, + + Mode: config.Parameter[config.ClientMode]{ + ParameterCommon: &config.ParameterCommon{ + ID: ids.PbsModeID, + Name: "PBS Client Mode", + Description: "Choose whether to let Hyperdrive manage your PBS client (Locally Managed), or if you manage your own outside of Hyperdrive (Externally Managed).", + AffectsContainers: []config.ContainerID{config.ContainerID_BeaconNode, ContainerID_Pbs}, + CanBeBlank: false, + OverwriteOnUpgrade: false, + }, + Options: []*config.ParameterOption[config.ClientMode]{{ + ParameterOptionCommon: &config.ParameterOptionCommon{ + Name: "Locally Managed", + Description: "Allow Hyperdrive to manage a PBS client for you", + }, + Value: config.ClientMode_Local, + }, { + ParameterOptionCommon: &config.ParameterOptionCommon{ + Name: "Externally Managed", + Description: "Use an existing PBS client that you manage on your own", + }, + Value: config.ClientMode_External, + }}, + Default: map[config.Network]config.ClientMode{ + config.Network_All: config.ClientMode_Local, + }, + }, + + LocalPbsClientConfig: NewLocalPbsServiceConfig(), + ExternalPbsClientConfig: NewExternalPbsServiceConfig(), + } +} + +// The title for the config +func (cfg *PbsConfig) GetTitle() string { + return "PBS Configuration" +} + +// Get the Parameters for this config +func (cfg *PbsConfig) GetParameters() []config.IParameter { + return []config.IParameter{ + &cfg.Enable, + &cfg.Mode, + } +} + +// Get the sections underneath this one +func (cfg *PbsConfig) GetSubconfigs() map[string]config.IConfigSection { + return map[string]config.IConfigSection{ + ids.PbsLocalID: cfg.LocalPbsClientConfig, + ids.PbsExternalID: cfg.ExternalPbsClientConfig, + } +} diff --git a/shared/config/settings.go b/shared/config/settings.go index 5297913..43bb407 100644 --- a/shared/config/settings.go +++ b/shared/config/settings.go @@ -14,10 +14,10 @@ const ( UserPasswordFilename string = "password" // Scripts - EcStartScript string = "start-ec.sh" - BnStartScript string = "start-bn.sh" - VcStartScript string = "start-vc.sh" - MevBoostStartScript string = "start-mev-boost.sh" + EcStartScript string = "start-ec.sh" + BnStartScript string = "start-bn.sh" + VcStartScript string = "start-vc.sh" + PbsStartScript string = "start-pbs.sh" // Volumes ExecutionClientDataVolume string = "ecdata" @@ -31,4 +31,7 @@ const ( // API Keys SecretsDir string = "secrets" DaemonKeyFilename string = "daemon.key" + + // PBS + PbsDir string = "pbs" ) diff --git a/shared/config/templating.go b/shared/config/templating.go index 99add2b..6a2bacf 100644 --- a/shared/config/templating.go +++ b/shared/config/templating.go @@ -3,9 +3,11 @@ package config import ( "fmt" "net/url" + "path/filepath" "strings" "github.com/nodeset-org/hyperdrive-daemon/shared" + "github.com/nodeset-org/hyperdrive-daemon/shared/config/pbs" "github.com/rocket-pool/node-manager-core/config" ) @@ -37,8 +39,8 @@ func (c *HyperdriveConfig) PrometheusContainerName() string { return string(config.ContainerID_Prometheus) } -func (c *HyperdriveConfig) MevBoostContainerName() string { - return string(config.ContainerID_MevBoost) +func (c *HyperdriveConfig) PbsClientContainerName() string { + return string(pbs.ContainerID_Pbs) } func (c *HyperdriveConfig) ExecutionClientDataVolume() string { @@ -384,33 +386,28 @@ func (cfg *HyperdriveConfig) GraffitiPrefix() string { } // Used by text/template to format validator.yml -func (cfg *HyperdriveConfig) MevBoostUrl() string { - if !cfg.MevBoost.Enable.Value { +func (cfg *HyperdriveConfig) PbsUrl() string { + if !cfg.Pbs.Enable.Value { return "" } - if cfg.MevBoost.Mode.Value == config.ClientMode_Local { - return fmt.Sprintf("http://%s:%d", config.ContainerID_MevBoost, cfg.MevBoost.Port.Value) + if cfg.Pbs.Mode.Value == config.ClientMode_Local { + return fmt.Sprintf("http://%s:%d", pbs.ContainerID_Pbs, cfg.Pbs.LocalPbsClientConfig.Port.Value) } - return cfg.MevBoost.ExternalUrl.Value + return cfg.Pbs.ExternalPbsClientConfig.ExternalUrl.Value } -// ================= -// === MEV-Boost === -// ================= +// =========== +// === PBS === +// =========== -// Gets the name of the MEV-Boost start script -func (cfg *HyperdriveConfig) GetMevBoostStartScript() string { - return MevBoostStartScript +// Gets the name of the PBS start script +func (cfg *HyperdriveConfig) GetPbsStartScript() string { + return PbsStartScript } -// Used by text/template to format mev-boost.yml -func (cfg *HyperdriveConfig) GetMevBoostOpenPorts() string { - portMode := cfg.MevBoost.OpenRpcPort.Value - if !portMode.IsOpen() { - return "" - } - port := cfg.MevBoost.Port.Value - return fmt.Sprintf("\"%s\"", portMode.DockerPortMapping(port)) +// Get the path within the user dir that stores PBS config data +func (cfg *HyperdriveConfig) GetPbsConfigPath() string { + return filepath.Join(cfg.GetUserDirectory(), PbsDir) } diff --git a/shared/version.go b/shared/version.go index bb6b424..3d7547b 100644 --- a/shared/version.go +++ b/shared/version.go @@ -1,5 +1,5 @@ package shared const ( - HyperdriveVersion string = "1.2.2" + HyperdriveVersion string = "1.3.0-b1" )