From 4ff02252f8caf3be9ca527cb28b638d20bdd9c3a Mon Sep 17 00:00:00 2001 From: Edmund Noble Date: Mon, 5 May 2025 17:30:59 -0400 Subject: [PATCH 1/2] Delete freeze Change-Id: Id000000075e199b0cd2fa975ec515a46a9f57f99 --- cabal.project.freeze | 525 ------------------------------------------- 1 file changed, 525 deletions(-) delete mode 100644 cabal.project.freeze diff --git a/cabal.project.freeze b/cabal.project.freeze deleted file mode 100644 index 38573a25a5..0000000000 --- a/cabal.project.freeze +++ /dev/null @@ -1,525 +0,0 @@ -active-repositories: hackage.haskell.org:merge -constraints: any.Cabal ==3.14.1.0, - any.Cabal-syntax ==3.14.2.0, - any.Decimal ==0.5.2, - any.Diff ==1.0.2, - any.Glob ==0.10.2, - any.HUnit ==1.6.2.0, - any.JuicyPixels ==3.3.9, - JuicyPixels -mmap, - any.OneTuple ==0.4.2, - any.Only ==0.1, - any.QuickCheck ==2.15.0.1, - QuickCheck -old-random +templatehaskell, - any.RSA ==2.4.1, - any.SHA ==1.6.4.4, - SHA -exe, - any.StateVar ==1.2.2, - any.adjunctions ==4.4.3, - any.aeson ==2.2.3.0, - aeson +ordered-keymap, - any.aeson-pretty ==0.8.10, - aeson-pretty -lib-only, - any.alex ==3.5.3.0, - any.ansi-terminal ==1.1.2, - ansi-terminal -example, - any.ansi-terminal-types ==1.1, - any.ap-normalize ==0.1.0.1, - ap-normalize -test-with-clang, - any.appar ==0.1.8, - any.array ==0.5.6.0, - any.asn1-encoding ==0.9.6, - any.asn1-parse ==0.9.5, - any.asn1-types ==0.3.4, - any.assoc ==1.1.1, - assoc -tagged, - any.async ==2.2.5, - async -bench, - any.atomic-primops ==0.8.8, - atomic-primops -debug, - any.attoparsec ==0.14.4, - attoparsec -developer, - any.attoparsec-aeson ==2.2.2.0, - any.authenticate-oauth ==1.7, - any.auto-update ==0.2.6, - any.barbies ==2.1.1.0, - any.base ==4.19.1.0, - any.base-compat ==0.14.1, - any.base-compat-batteries ==0.14.1, - any.base-orphans ==0.9.3, - any.base-unicode-symbols ==0.2.4.2, - base-unicode-symbols +base-4-8 -old-base, - any.base16 ==1.0, - any.base16-bytestring ==1.0.2.0, - any.base64-bytestring ==1.2.1.0, - any.base64-bytestring-kadena ==0.1, - any.basement ==0.0.16, - any.bifunctors ==5.6.2, - bifunctors +tagged, - any.binary ==0.8.9.1, - any.binary-orphans ==1.0.5, - any.bitvec ==1.1.5.0, - bitvec +simd, - any.blaze-builder ==0.4.2.3, - any.blaze-html ==0.9.2.0, - any.blaze-markup ==0.8.3.0, - any.boring ==0.2.2, - boring +tagged, - any.bound ==2.0.7, - bound +template-haskell, - any.bsb-http-chunked ==0.0.0.4, - any.bytebuild ==0.3.16.3, - bytebuild -checked, - any.byteorder ==1.0.4, - any.bytes ==0.17.4, - any.byteslice ==0.2.14.0, - byteslice +avoid-rawmemchr, - any.bytesmith ==0.3.11.1, - any.bytestring ==0.12.1.0, - any.bytestring-builder ==0.10.8.2.0, - bytestring-builder +bytestring_has_builder, - any.cabal-doctest ==1.0.11, - any.cache ==0.1.3.0, - any.call-stack ==0.4.0, - any.case-insensitive ==1.2.1.0, - any.cassava ==0.5.3.2, - any.cborg ==0.2.10.0, - cborg +optimize-gmp, - any.cereal ==0.5.8.3, - cereal -bytestring-builder, - chainweb -debug -ed25519 -ghc-flags, - chainweb-node -debug -ed25519 -ghc-flags, - any.character-ps ==0.1, - any.charset ==0.3.12, - any.chronos ==1.1.6.2, - any.citeproc ==0.8.1.3, - citeproc -executable -icu, - any.clock ==0.8.4, - clock -llvm, - any.cmdargs ==0.10.22, - cmdargs +quotation -testprog, - any.co-log-core ==0.3.2.5, - any.code-page ==0.2.1, - any.colour ==2.3.6, - any.commonmark ==0.2.6.1, - any.commonmark-extensions ==0.2.6, - any.commonmark-pandoc ==0.2.3, - any.comonad ==5.0.9, - comonad +containers +distributive +indexed-traversable, - any.concurrent-output ==1.10.21, - any.conduit ==1.3.6.1, - any.conduit-extra ==1.3.7, - any.configuration-tools ==0.7.1, - configuration-tools -remote-configs, - any.constraints ==0.14.2, - any.containers ==0.6.8, - any.contiguous ==0.6.4.2, - any.contravariant ==1.5.5, - contravariant +semigroups +statevar +tagged, - any.cookie ==0.5.1, - any.criterion ==1.6.4.0, - criterion -embed-data-files -fast, - any.criterion-measurement ==0.2.3.0, - criterion-measurement -fast, - any.crypto-api ==0.13.3, - crypto-api -all_cpolys, - any.crypto-pubkey-types ==0.4.3, - any.crypto-token ==0.1.2, - any.cryptohash-md5 ==0.11.101.0, - any.cryptohash-sha1 ==0.11.101.0, - any.crypton ==1.0.4, - crypton -check_alignment +integer-gmp -old_toolchain_inliner +support_aesni +support_deepseq +support_pclmuldq +support_rdrand -support_sse +use_target_attributes, - any.crypton-connection ==0.4.4, - any.crypton-x509 ==1.7.7, - any.crypton-x509-store ==1.6.10, - any.crypton-x509-system ==1.6.7, - any.crypton-x509-validation ==1.6.14, - any.cryptonite ==0.30, - cryptonite -check_alignment +integer-gmp -old_toolchain_inliner +support_aesni +support_deepseq -support_pclmuldq +support_rdrand -support_sse +use_target_attributes, - cwtools -debug -ed25519 -ghc-flags -remote-db, - any.data-bword ==0.1.0.2, - any.data-default ==0.8.0.1, - any.data-default-class ==0.2.0.0, - any.data-dword ==0.3.2.1, - any.data-fix ==0.3.4, - any.data-ordlist ==0.4.7.0, - any.dec ==0.0.6, - any.deepseq ==1.5.0.0, - any.dense-linear-algebra ==0.1.0.0, - any.deriving-compat ==0.6.7, - any.digest ==0.0.2.1, - digest -have_arm64_crc32c -have_builtin_prefetch -have_mm_prefetch -have_sse42 -have_strong_getauxval -have_weak_getauxval +pkg-config, - any.digraph ==0.3.2, - any.direct-sqlite ==2.3.29, - direct-sqlite +dbstat +fulltextsearch +haveusleep +json1 -mathfunctions -systemlib +urifilenames, - any.directory ==1.3.8.1, - any.distributive ==0.6.2.1, - distributive +semigroups +tagged, - any.djot ==0.1.2.2, - any.dlist ==1.0, - dlist -werror, - any.doclayout ==0.5, - any.doctemplates ==0.11.0.1, - any.easy-file ==0.2.5, - any.ech-config ==0.0.1, - ech-config -devel, - any.emojis ==0.1.4.1, - any.enclosed-exceptions ==1.0.3, - any.entropy ==0.4.1.11, - entropy -donotgetentropy, - any.erf ==2.0.0.0, - any.errors ==2.3.0, - any.ethereum ==0.1.0.2, - ethereum -ethhash -openssl-use-pkg-config, - any.exceptions ==0.10.7, - any.extra ==1.8, - any.fast-logger ==3.2.5, - any.file-embed ==0.0.16.0, - any.filepath ==1.4.200.1, - any.fingertree ==0.1.5.0, - any.finite-typelits ==0.2.1.0, - any.free ==5.2, - any.generic-arbitrary ==1.0.1.2, - any.generic-data ==1.1.0.2, - generic-data -enable-inspect, - any.generic-lens ==2.2.2.0, - any.generic-lens-core ==2.2.1.0, - any.generically ==0.1.1, - any.ghc-bignum ==1.3, - any.ghc-boot-th ==9.8.2, - any.ghc-compact ==0.1.0.0, - any.ghc-heap ==9.8.2, - any.ghc-prim ==0.11.0, - any.gridtables ==0.1.0.0, - any.groups ==0.5.3, - any.growable-vector ==0.1, - any.haddock-library ==1.11.0, - any.half ==0.3.2, - any.happy ==2.1.5, - any.happy-lib ==2.1.5, - any.hashable ==1.5.0.0, - hashable -arch-native -random-initial-seed, - any.hashes ==0.3.0.1, - hashes -benchmark-cryptonite -openssl-use-pkg-config -test-cryptonite +with-openssl, - any.haskeline ==0.8.2.1, - any.haskell-lexer ==1.2.1, - any.haskell-src-exts ==1.23.1, - any.haskell-src-meta ==0.8.15, - any.heaps ==0.4.1, - any.hedgehog ==1.5, - any.hourglass ==0.2.12, - any.hpke ==0.0.0, - any.hsc2hs ==0.68.10, - hsc2hs -in-ghc-tree, - any.http-api-data ==0.6.2, - http-api-data -use-text-show, - any.http-client ==0.7.19, - http-client +network-uri, - any.http-client-tls ==0.3.6.4, - any.http-date ==0.0.11, - any.http-media ==0.8.1.1, - any.http-semantics ==0.3.0, - any.http-types ==0.12.4, - any.http2 ==5.3.9, - http2 -devel -h2spec, - any.indexed-list-literals ==0.2.1.3, - any.indexed-profunctors ==0.1.1.1, - any.indexed-traversable ==0.1.4, - any.indexed-traversable-instances ==0.1.2, - any.integer-conversion ==0.1.1, - any.integer-gmp ==1.1, - any.integer-logarithms ==1.0.4, - integer-logarithms -check-bounds +integer-gmp, - any.invariant ==0.6.4, - any.iproute ==1.7.15, - any.ipynb ==0.2, - any.ixset-typed ==0.5.1.0, - any.jira-wiki-markup ==1.5.1, - any.js-chart ==2.9.4.1, - any.kan-extensions ==5.2.6, - any.lens ==5.3.4, - lens -benchmark-uniplate -dump-splices +inlining -j +test-hunit +test-properties +test-templates +trustworthy, - any.lens-aeson ==1.2.3, - any.libyaml ==0.1.4, - libyaml -no-unicode -system-libyaml, - any.libyaml-clib ==0.2.5, - any.lifted-async ==0.10.2.7, - any.lifted-base ==0.2.3.12, - any.loglevel ==0.1.0.0, - any.lrucaching ==0.3.4, - any.lsp ==2.7.0.1, - lsp -demo, - any.lsp-types ==2.3.0.1, - lsp-types -force-ospath, - any.managed ==1.0.10, - any.massiv ==1.0.4.1, - massiv -unsafe-checks, - any.math-functions ==0.3.4.4, - math-functions +system-erf +system-expm1, - any.megaparsec ==9.7.0, - megaparsec -dev, - any.memory ==0.18.0, - memory +support_bytestring +support_deepseq, - any.merkle-log ==0.2.0, - any.microlens ==0.4.14.0, - any.microstache ==1.0.3, - any.mime-types ==0.1.2.0, - any.mmorph ==1.2.0, - any.mod ==0.2.0.1, - mod +semirings +vector, - any.monad-control ==1.0.3.1, - any.mono-traversable ==1.0.21.0, - any.mtl ==2.3.1, - any.mtl-compat ==0.2.2, - mtl-compat -two-point-one -two-point-two, - any.mwc-probability ==2.3.1, - any.mwc-random ==0.15.2.0, - mwc-random -benchpapi, - any.natural-arithmetic ==0.2.2.0, - any.neat-interpolation ==0.5.1.4, - any.network ==3.2.7.0, - network -devel, - any.network-byte-order ==0.1.7, - any.network-control ==0.1.6, - any.network-info ==0.2.1, - any.network-uri ==2.6.4.2, - any.nothunks ==0.3.0.0, - nothunks +bytestring +text +vector, - any.old-locale ==1.0.0.7, - any.old-time ==1.1.0.4, - any.optparse-applicative ==0.18.1.0, - optparse-applicative +process, - any.ordered-containers ==0.2.4, - any.os-string ==2.0.7, - any.pact ==4.13.2, - pact -build-tool +cryptonite-ed25519 -tests-in-lib, - any.pact-json ==0.1.0.0, - any.pact-time ==0.3.0.1, - pact-time -with-time, - any.pact-tng ==5.2, - pact-tng +with-crypto +with-funcall-tracing +with-native-tracing, - any.pandoc ==3.6.4, - pandoc -embed_data_files, - any.pandoc-types ==1.23.1, - any.parallel ==3.2.2.0, - any.parsec ==3.1.17.0, - any.parser-combinators ==1.3.0, - parser-combinators -dev, - any.parsers ==0.12.12, - parsers +attoparsec +binary +parsec, - any.patience ==0.3, - any.pem ==0.2.4, - any.poly ==0.5.1.0, - poly +sparse, - any.pretty ==1.1.3.6, - any.pretty-show ==1.10, - any.pretty-simple ==4.1.3.0, - pretty-simple -buildexample +buildexe, - any.prettyprinter ==1.7.1, - prettyprinter -buildreadme +text, - any.prettyprinter-ansi-terminal ==1.1.3, - any.primitive ==0.9.1.0, - any.primitive-addr ==0.1.0.3, - any.primitive-offset ==0.2.0.1, - any.primitive-unlifted ==2.1.0.0, - any.process ==1.6.18.0, - any.profunctors ==5.6.2, - any.property-matchers ==0.7.0.0, - any.psqueues ==0.2.8.1, - any.pvar ==1.0.0.0, - any.quickcheck-instances ==0.3.32, - any.ralist ==0.4.0.0, - any.random ==1.3.1, - any.raw-strings-qq ==1.1, - any.recover-rtti ==0.5.0, - any.recv ==0.1.1, - any.reducers ==3.12.5, - any.reflection ==2.1.9, - reflection -slow +template-haskell, - any.regex ==1.1.0.2, - any.regex-base ==0.94.0.3, - any.regex-pcre-builtin ==0.95.2.3.8.44, - any.regex-tdfa ==1.3.2.3, - regex-tdfa +doctest -force-o2, - any.resource-pool ==0.4.0.0, - any.resourcet ==1.3.0, - any.retry ==0.9.3.1, - retry -lib-werror, - any.rocksdb-haskell-kadena ==1.1.0, - rocksdb-haskell-kadena -with-tbb, - any.row-types ==1.0.1.2, - any.rts ==1.0.2, - any.run-st ==0.1.3.3, - any.safe ==0.3.21, - any.safe-exceptions ==0.1.7.4, - any.safecopy ==0.10.4.2, - any.scheduler ==2.0.1.0, - any.scientific ==0.3.8.0, - scientific -integer-simple, - any.semialign ==1.3.1, - semialign +semigroupoids, - any.semigroupoids ==6.0.1, - semigroupoids +comonad +containers +contravariant +distributive +tagged +unordered-containers, - any.semigroups ==0.20, - semigroups +binary +bytestring -bytestring-builder +containers +deepseq +hashable +tagged +template-haskell +text +transformers +unordered-containers, - any.semirings ==0.7, - semirings +containers +unordered-containers, - any.serialise ==0.2.6.1, - serialise +newtime15, - any.servant ==0.20.2, - any.servant-client ==0.20.2, - any.servant-client-core ==0.20.2, - any.servant-server ==0.20.2, - any.sha-validation ==0.1.0.1, - any.show-combinators ==0.2.0.0, - any.simple-sendfile ==0.2.32, - simple-sendfile +allow-bsd -fallback, - any.singleton-bool ==0.1.8, - any.skylighting ==0.14.6, - skylighting -executable, - any.skylighting-core ==0.14.6, - skylighting-core -executable, - any.skylighting-format-ansi ==0.1, - any.skylighting-format-blaze-html ==0.1.1.3, - any.skylighting-format-context ==0.1.0.2, - any.skylighting-format-latex ==0.1, - any.skylighting-format-typst ==0.1, - any.socks ==0.6.1, - any.some ==1.0.6, - some +newtype-unsafe, - any.sop-core ==0.5.0.2, - any.sorted-list ==0.2.3.1, - any.split ==0.2.5, - any.splitmix ==0.1.1, - splitmix -optimised-mixer, - any.statistics ==0.16.3.0, - statistics -benchpapi, - any.stm ==2.5.2.1, - any.stm-chans ==3.0.0.9, - any.stopwatch ==0.1.0.6, - stopwatch -test_delay_upper_bound -test_threaded, - any.streaming ==0.2.4.0, - any.streaming-commons ==0.2.3.0, - streaming-commons -use-bytestring-builder, - any.strict ==0.5.1, - any.strict-concurrency ==0.2.4.3, - any.syb ==0.7.2.4, - any.tagged ==0.8.9, - tagged +deepseq +transformers, - any.tagsoup ==0.14.8, - any.tasty ==1.5.3, - tasty +unix, - any.tasty-golden ==2.3.5, - tasty-golden -build-example, - any.tasty-hedgehog ==1.4.0.2, - any.tasty-hunit ==0.10.2, - any.tasty-json ==0.1.0.0, - any.tasty-quickcheck ==0.11.1, - any.template-haskell ==2.21.0.0, - any.temporary ==1.3, - any.terminal-progress-bar ==0.4.2, - any.terminal-size ==0.3.4, - any.terminfo ==0.4.1.6, - any.texmath ==0.12.10, - texmath -executable -server, - any.text ==2.1.1, - any.text-conversions ==0.3.1.1, - any.text-iso8601 ==0.1.1, - any.text-rope ==0.3, - text-rope -debug, - any.text-short ==0.1.6, - text-short -asserts, - any.th-abstraction ==0.7.1.0, - any.th-compat ==0.1.6, - any.th-expand-syns ==0.4.12.0, - any.th-lift ==0.8.6, - any.th-lift-instances ==0.1.20, - any.th-orphans ==0.13.16, - any.th-reify-many ==0.1.10, - any.these ==1.2.1, - any.time ==1.12.2, - any.time-compat ==1.9.8, - any.time-locale-compat ==0.1.1.5, - time-locale-compat +old-locale, - any.time-manager ==0.2.2, - any.tls ==2.1.9, - tls -devel, - any.tls-session-manager ==0.0.8, - any.token-bucket ==0.1.0.1, - token-bucket +use-cbits, - any.toml-parser ==2.0.1.2, - any.torsor ==0.1.0.1, - any.transformers ==0.6.1.0, - any.transformers-base ==0.4.6, - transformers-base +orphaninstances, - any.transformers-compat ==0.7.2, - transformers-compat -five +five-three -four +generic-deriving +mtl -three -two, - any.trifecta ==2.1.4, - any.tuples ==0.1.0.0, - any.typed-process ==0.2.13.0, - any.typst ==0.7, - typst -executable, - any.typst-symbols ==0.1.7, - any.unicode-collation ==0.1.3.6, - unicode-collation -doctests -executable, - any.unicode-data ==0.6.0, - unicode-data -dev-has-icu, - any.unicode-transforms ==0.4.0.1, - unicode-transforms -bench-show -dev -has-icu -has-llvm -use-gauge, - any.uniplate ==1.6.13, - any.unix ==2.8.4.0, - any.unix-compat ==0.7.4, - any.unix-time ==0.4.16, - any.unlifted ==0.2.3.0, - any.unliftio ==0.2.25.1, - any.unliftio-core ==0.2.1.0, - any.unordered-containers ==0.2.20, - unordered-containers -debug, - any.utf8-string ==1.0.2, - any.uuid ==1.3.16, - any.uuid-types ==1.0.6, - any.validation ==1.1.3, - any.vault ==0.3.1.5, - vault +useghc, - any.vector ==0.13.2.0, - vector +boundschecks -internalchecks -unsafechecks -wall, - any.vector-algorithms ==0.9.1.0, - vector-algorithms +bench +boundschecks -internalchecks -llvm -unsafechecks, - any.vector-binary-instances ==0.2.5.2, - any.vector-sized ==1.6.1, - any.vector-stream ==0.1.0.1, - any.vector-th-unbox ==0.2.2, - any.void ==0.7.3, - void -safe, - any.wai ==3.2.4, - any.wai-app-static ==3.1.9, - wai-app-static +crypton -print, - any.wai-cors ==0.2.7, - any.wai-extra ==3.1.17, - wai-extra -build-example, - any.wai-logger ==2.5.0, - any.wai-middleware-throttle ==0.3.0.1, - any.wai-middleware-validation ==0.1.0.2, - any.warp ==3.4.7, - warp +allow-sendfilefd -network-bytestring -warp-debug +x509, - any.warp-tls ==3.4.13, - any.wherefrom-compat ==0.1.1.1, - any.wide-word ==0.1.7.0, - any.witherable ==0.5, - any.wl-pprint-annotated ==0.1.0.1, - any.word8 ==0.1.3, - any.wreq ==0.5.4.3, - wreq -aws -developer +doctest -httpbin, - any.xml ==1.3.14, - any.xml-conduit ==1.10.0.0, - any.xml-types ==0.3.8, - any.yaml ==0.11.11.2, - yaml +no-examples +no-exe, - any.yet-another-logger ==0.4.2, - yet-another-logger -tbmqueue, - any.zigzag ==0.1.0.0, - any.zip-archive ==0.4.3.2, - zip-archive -executable, - any.zlib ==0.7.1.0, - zlib -bundled-c-zlib +non-blocking-ffi +pkg-config -index-state: hackage.haskell.org 2025-05-02T15:38:56Z From 03eb57918db82aa91527474164df933be9ee313c Mon Sep 17 00:00:00 2001 From: Edmund Noble Date: Mon, 5 May 2025 21:20:56 -0400 Subject: [PATCH 2/2] Pact payload provider initialization --- src/Chainweb/BlockHeaderDB/Internal.hs | 9 +- src/Chainweb/Chainweb/ChainResources.hs | 180 +++++++++++------- src/Chainweb/Mempool/InMem.hs | 21 +- src/Chainweb/PayloadProvider/EVM.hs | 37 ++-- src/Chainweb/PayloadProvider/Pact.hs | 5 +- .../PayloadProvider/Pact/Configuration.hs | 8 +- src/Chainweb/PayloadProvider/Pact/Genesis.hs | 9 +- src/Chainweb/Version/EvmDevelopment.hs | 44 ++--- 8 files changed, 187 insertions(+), 126 deletions(-) diff --git a/src/Chainweb/BlockHeaderDB/Internal.hs b/src/Chainweb/BlockHeaderDB/Internal.hs index f272bb8b7a..727ec26813 100644 --- a/src/Chainweb/BlockHeaderDB/Internal.hs +++ b/src/Chainweb/BlockHeaderDB/Internal.hs @@ -44,11 +44,12 @@ module Chainweb.BlockHeaderDB.Internal ) where import Control.Arrow +import Control.Exception.Safe import Control.DeepSeq import Control.Lens hiding (children) import Control.Monad -import Control.Monad.Catch import Control.Monad.Trans.Maybe +import Control.Monad.Trans.Resource hiding (throwM) import Data.Aeson import Data.Function @@ -249,9 +250,8 @@ withBlockHeaderDb :: RocksDb -> ChainwebVersion -> ChainId - -> (BlockHeaderDb -> IO b) - -> IO b -withBlockHeaderDb db v cid = bracket start closeBlockHeaderDb + -> ResourceT IO BlockHeaderDb +withBlockHeaderDb db v cid = snd <$> allocate start closeBlockHeaderDb where start = initBlockHeaderDb Configuration { _configRoot = genesisBlockHeader v cid @@ -381,4 +381,3 @@ insertBlockHeaderDb db = dbAddChecked db . _validatedHeader unsafeInsertBlockHeaderDb :: BlockHeaderDb -> BlockHeader -> IO () unsafeInsertBlockHeaderDb = dbAddChecked {-# INLINE unsafeInsertBlockHeaderDb #-} - diff --git a/src/Chainweb/Chainweb/ChainResources.hs b/src/Chainweb/Chainweb/ChainResources.hs index d39520eb7f..a874f7f500 100644 --- a/src/Chainweb/Chainweb/ChainResources.hs +++ b/src/Chainweb/Chainweb/ChainResources.hs @@ -15,6 +15,7 @@ {-# LANGUAGE TypeFamilies #-} {-# LANGUAGE ViewPatterns #-} {-# LANGUAGE NumericUnderscores #-} +{-# LANGUAGE RecursiveDo #-} -- | -- Module: Chainweb.Chainweb.ChainResources @@ -55,44 +56,57 @@ module Chainweb.Chainweb.ChainResources , payloadServiceApiResources ) where +import Control.Exception(evaluate) +import Control.Lens hiding ((.=), (<.>)) +import Control.Monad.IO.Class +import Control.Monad.Trans.Resource +import Data.Foldable +import Data.HashMap.Strict qualified as HM +import Data.Maybe +import Data.PQueue (PQueue) +import Data.Singletons +import Data.Text qualified as T +import Network.HTTP.Client qualified as HTTP +import P2P.Node +import P2P.Node.Configuration +import P2P.Node.PeerDB (PeerDb) +import P2P.Peer (PeerInfo) +import P2P.Session +import P2P.TaskQueue +import Prelude hiding (log) +import System.LogLevel + import Chainweb.BlockHeaderDB import Chainweb.BlockPayloadHash import Chainweb.ChainId import Chainweb.Chainweb.Configuration -- FIXME this module should not depend on the global configuration import Chainweb.Logger +import Chainweb.Mempool.InMem qualified as Mempool +import Chainweb.Mempool.InMem.ValidatingConfig qualified as Mempool +import Chainweb.Pact.PactService qualified as Pact +import Chainweb.Pact.RestAPI qualified as Pact +import Chainweb.Pact.RestAPI.Server qualified as Pact import Chainweb.Pact.Types +import Chainweb.Payload.PayloadStore.RocksDB import Chainweb.PayloadProvider import Chainweb.PayloadProvider.EVM import Chainweb.PayloadProvider.Minimal +import Chainweb.PayloadProvider.P2P import Chainweb.PayloadProvider.P2P.RestAPI import Chainweb.PayloadProvider.P2P.RestAPI.Server +import Chainweb.PayloadProvider.Pact import Chainweb.PayloadProvider.Pact.Configuration +import Chainweb.PayloadProvider.Pact.Genesis qualified as Pact import Chainweb.RestAPI.NetworkID import Chainweb.RestAPI.Utils import Chainweb.Storage.Table import Chainweb.Storage.Table.RocksDB +import Chainweb.Time import Chainweb.Utils import Chainweb.Version -import Control.Lens hiding ((.=), (<.>)) -import Data.Foldable -import Data.HashMap.Strict qualified as HM -import Data.Maybe -import Data.PQueue (PQueue) -import Data.Singletons -import Data.Text qualified as T -import Network.HTTP.Client qualified as HTTP -import P2P.Node -import P2P.Node.Configuration -import P2P.Node.PeerDB (PeerDb) -import P2P.Peer (PeerInfo) -import P2P.Session -import P2P.TaskQueue -import Prelude hiding (log) import Chainweb.Version.Guards (maxBlockGasLimit) import Pact.Core.Gas qualified as Pact -import System.LogLevel -import Chainweb.Time -- -------------------------------------------------------------------------- -- -- Payload P2P Network Resources @@ -208,11 +222,9 @@ makeLenses ''ProviderResources withPayloadProviderResources :: Logger logger - => HasChainwebVersion v - => HasChainId c => logger - -> v - -> c + -> ChainwebVersion + -> ChainId -> P2pConfiguration -> PeerInfo -> PeerDb @@ -223,11 +235,10 @@ withPayloadProviderResources -> Bool -- ^ whether to allow unlimited rewind on startup -> PayloadProviderConfig - -> (ProviderResources -> IO a) - -> IO a -withPayloadProviderResources logger v c p2pConfig myInfo peerDb rdb mgr rewindLimit initialUnlimitedRewind configs inner = do + -> ResourceT IO ProviderResources +withPayloadProviderResources logger v cid p2pConfig myInfo peerDb rdb mgr rewindLimit initialUnlimitedRewind configs = do SomeChainwebVersionT @v' _ <- return $ someChainwebVersionVal v - SomeChainIdT @c' _ <- return $ someChainIdVal c + SomeChainIdT @c' _ <- return $ someChainIdVal cid withSomeSing provider $ \case SMinimalProvider -> do @@ -240,12 +251,12 @@ withPayloadProviderResources logger v c p2pConfig myInfo peerDb rdb mgr rewindLi -- provider. let config = _payloadProviderConfigMinimal configs - p <- newMinimalPayloadProvider logger v c rdb (Just mgr) config + p <- liftIO $ newMinimalPayloadProvider logger v cid rdb (Just mgr) config let pdb = view minimalPayloadDb p let queue = view minimalPayloadQueue p - p2pRes <- payloadP2pResources @v' @c' @'MinimalProvider + p2pRes <- liftIO $ payloadP2pResources @v' @c' @'MinimalProvider logger p2pConfig myInfo peerDb pdb queue mgr - inner ProviderResources + return ProviderResources { _providerResPayloadProvider = ConfiguredPayloadProvider p , _providerResServiceApi = Nothing , _providerResP2pApiResources = Just p2pRes @@ -259,11 +270,11 @@ withPayloadProviderResources logger v c p2pConfig myInfo peerDb rdb mgr rewindLi -- FIXME move the following to the pact provider initialization - let maxGasLimit = Pact.GasLimit . Pact.Gas . fromIntegral <$> maxBlockGasLimit ver maxBound + let maxGasLimit = Pact.GasLimit . Pact.Gas . fromIntegral <$> maxBlockGasLimit v maxBound case maxGasLimit of Just maxGasLimit' | _pactConfigBlockGasLimit conf > maxGasLimit' -> - logFunction logger Warn $ T.unwords + liftIO $ logFunction logger Warn $ T.unwords [ "configured block gas limit is greater than the" , "maximum for this chain; the maximum will be used instead" ] @@ -283,9 +294,55 @@ withPayloadProviderResources logger v c p2pConfig myInfo peerDb rdb mgr rewindLi , _pactBlockRefreshInterval = Micros 5_000_000 } - error "Chainweb.PayloadProvider.P2P.RestAPI.somePayloadApi: providerResources not implemented for Pact" + let pdb = newPayloadDb rdb + pactDbDir <- liftIO $ evaluate $ fromJuste $ _pactConfigDatabaseDirectory conf + rec + pp <- + withPactPayloadProvider + (_chainwebVersion v) cid + (Just mgr) + logger + Nothing + mempool + pdb + pactDbDir + pactConfig + (Pact.genesisPayload (_chainwebVersion v) ^? atChain cid) + let mempoolConfig = + Mempool.validatingMempoolConfig + cid (_chainwebVersion v) + (_pactNewBlockGasLimit pactConfig) + (_pactConfigMinGasPrice conf) + (\txs -> + Pact.execPreInsertCheckReq + (pactPayloadProviderLogger pp) + (pactPayloadProviderServiceEnv pp) txs + ) + mempool <- Mempool.withInMemoryMempool (setComponent "mempool" logger) mempoolConfig v + let queue = _payloadStoreQueue $ _psPdb $ pactPayloadProviderServiceEnv pp + p2pRes <- liftIO $ payloadP2pResources @v' @c' @'PactProvider + logger p2pConfig myInfo peerDb pdb queue mgr + let pactServerData = Pact.PactServerData + { Pact._pactServerDataLogger = + pactPayloadProviderLogger pp + , Pact._pactServerDataMempool = + mempool + , Pact._pactServerDataPact = + pactPayloadProviderServiceEnv pp + } + let pactServer = Pact.somePactServer (Pact.somePactServerData v cid pactServerData) + return ProviderResources + { _providerResPayloadProvider = ConfiguredPayloadProvider pp + , _providerResServiceApi = Just $ PayloadServiceApiResources + -- TODO: I think this isn't what was in mind for this... + -- this seems to really just be for the payload API + { _payloadResServiceApi = Pact.somePactServiceApi v cid + , _payloadResServiceServer = pactServer + } + , _providerResP2pApiResources = Just p2pRes + } - _ -> inner $ ProviderResources DisabledPayloadProvider Nothing Nothing + _ -> return $ ProviderResources DisabledPayloadProvider Nothing Nothing SEvmProvider @n _ -> case HM.lookup cid (_payloadProviderConfigEvm configs) of Just config -> do @@ -293,23 +350,21 @@ withPayloadProviderResources logger v c p2pConfig myInfo peerDb rdb mgr rewindLi -- and answering API requests. -- It also starts to awaiting and devlivering new payloads if mining -- is enabled. - withEvmPayloadProvider logger v c rdb (Just mgr) config $ \p -> do - let pdb = view evmPayloadDb p - let queue = view evmPayloadQueue p - p2pRes <- payloadP2pResources @v' @c' @('EvmProvider n) - logger p2pConfig myInfo peerDb pdb queue mgr - inner ProviderResources - { _providerResPayloadProvider = ConfiguredPayloadProvider p - , _providerResServiceApi = Nothing - , _providerResP2pApiResources = Just p2pRes - } - _ -> inner $ ProviderResources DisabledPayloadProvider Nothing Nothing + p <- withEvmPayloadProvider logger v cid rdb (Just mgr) config + let pdb = view evmPayloadDb p + let queue = view evmPayloadQueue p + p2pRes <- liftIO $ payloadP2pResources @v' @c' @('EvmProvider n) + logger p2pConfig myInfo peerDb pdb queue mgr + return ProviderResources + { _providerResPayloadProvider = ConfiguredPayloadProvider p + , _providerResServiceApi = Nothing + , _providerResP2pApiResources = Just p2pRes + } + _ -> return $ ProviderResources DisabledPayloadProvider Nothing Nothing where - ver = _chainwebVersion v - cid = _chainId c provider :: PayloadProviderType - provider = payloadProviderTypeForChain v c + provider = payloadProviderTypeForChain v cid -- -------------------------------------------------------------------------- -- -- Single Chain Resources @@ -344,11 +399,9 @@ instance HasChainId (ChainResources logger) where withChainResources :: Logger logger - => HasChainwebVersion v - => HasChainId c => logger - -> v - -> c + -> ChainwebVersion + -> ChainId -> RocksDb -> HTTP.Manager -> FilePath @@ -361,25 +414,24 @@ withChainResources -> Bool -- ^ whether to allow unlimited rewind on startup -> PayloadProviderConfig - -> (ChainResources logger -> IO a) - -> IO a -withChainResources logger v c rdb mgr _pactDbDir p2pConf myInfo peerDb rewindLimit initialUnlimitedRewind configs inner = + -> ResourceT IO (ChainResources logger) +withChainResources logger v cid rdb mgr _pactDbDir p2pConf myInfo peerDb rewindLimit initialUnlimitedRewind configs = do -- This uses the the CutNetwork for fetching block headers. - withBlockHeaderDb rdb (_chainwebVersion v) (_chainId c) $ \cdb -> do + cdb <- withBlockHeaderDb rdb v cid - -- Payload Providers are using per chain payload networks for fetching - -- block headers. - withPayloadProviderResources - providerLogger v c p2pConf myInfo peerDb rdb mgr rewindLimit initialUnlimitedRewind configs $ \provider -> do + -- Payload Providers are using per chain payload networks for fetching + -- block headers. + provider <- withPayloadProviderResources + providerLogger v cid p2pConf myInfo peerDb rdb mgr rewindLimit initialUnlimitedRewind configs - inner ChainResources - { _chainResBlockHeaderDb = cdb - , _chainResPayloadProvider = provider - , _chainResLogger = logger - } + return ChainResources + { _chainResBlockHeaderDb = cdb + , _chainResPayloadProvider = provider + , _chainResLogger = logger + } where - providerType = payloadProviderTypeForChain v c + providerType = payloadProviderTypeForChain v cid providerLogger = logger & setComponent "payload-provider" & addLabel ("provider", toText providerType) diff --git a/src/Chainweb/Mempool/InMem.hs b/src/Chainweb/Mempool/InMem.hs index 2374584a83..7b17a97e10 100644 --- a/src/Chainweb/Mempool/InMem.hs +++ b/src/Chainweb/Mempool/InMem.hs @@ -34,8 +34,10 @@ import Control.Concurrent.Async import Control.Concurrent.MVar import Control.DeepSeq import Control.Error.Util (hush) -import Control.Exception (evaluate, mask_, throw) +import Control.Exception (evaluate, mask_) import Control.Monad +import Control.Monad.IO.Class +import Control.Monad.Trans.Resource import qualified Data.ByteString.Short as SB import Data.Decimal @@ -163,17 +165,12 @@ withInMemoryMempool => logger -> InMemConfig t -> ChainwebVersion - -> (MempoolBackend t -> IO a) - -> IO a -withInMemoryMempool l cfg _v f = do - let action inMem = do - r <- race (monitor inMem) $ do - back <- toMempoolBackend l inMem - f $! back - case r of - Left () -> throw $ InternalInvariantViolation "mempool monitor exited unexpectedly" - Right result -> return result - action =<< makeInMemPool cfg + -> ResourceT IO (MempoolBackend t) +withInMemoryMempool l cfg _v = do + inMem <- liftIO $ makeInMemPool cfg + monitorAsync <- withAsyncR (monitor inMem) + liftIO $ link monitorAsync + liftIO $ toMempoolBackend l inMem where monitor m = do let lf = logFunction l diff --git a/src/Chainweb/PayloadProvider/EVM.hs b/src/Chainweb/PayloadProvider/EVM.hs index 692ba48e56..71b045ef12 100644 --- a/src/Chainweb/PayloadProvider/EVM.hs +++ b/src/Chainweb/PayloadProvider/EVM.hs @@ -90,6 +90,7 @@ import Control.Concurrent.STM import Control.Exception.Safe import Control.Lens hiding ((.=)) import Control.Monad +import Control.Monad.Trans.Resource hiding (throwM) import Control.Monad.Writer import Data.ByteString.Short qualified as BS import Data.List qualified as L @@ -493,26 +494,25 @@ withEvmPayloadProvider -- -- It is /not/ used for communication with the execution engine client. -> EvmProviderConfig - -> (EvmPayloadProvider logger -> IO a) - -> IO a -withEvmPayloadProvider logger v c rdb mgr conf f + -> ResourceT IO (EvmPayloadProvider logger) +withEvmPayloadProvider logger v c rdb mgr conf | FromSing @_ @p (SEvmProvider ecid) <- payloadProviderTypeForChain v c = do - engineCtx <- mkEngineCtx (_evmConfEngineJwtSecret conf) (_engineUri $ _evmConfEngineUri conf) + engineCtx <- liftIO $ mkEngineCtx (_evmConfEngineJwtSecret conf) (_engineUri $ _evmConfEngineUri conf) SomeChainwebVersionT @v _ <- return $ someChainwebVersionVal v SomeChainIdT @c _ <- return $ someChainIdVal c let pldCli h = Rest.payloadClient @v @c @p h - genPld <- checkExecutionClient logger v c engineCtx (EVM.ChainId (fromSNat ecid)) - logFunctionText logger Info $ "genesis payload block hash: " <> sshow (EVM._hdrPayloadHash genPld) - logFunctionText logger Debug $ "genesis payload from execution client: " <> sshow genPld - pdb <- initPayloadDb $ payloadDbConfiguration v c rdb genPld - store <- newPayloadStore mgr (logFunction pldStoreLogger) pdb pldCli - pldVar <- newEmptyTMVarIO - pldIdVar <- newEmptyTMVarIO - candidates <- emptyTable - stateVar <- newTVarIO (T2 (genesisState v c) Nothing) - lock <- newMVar () + genPld <- liftIO $ checkExecutionClient logger v c engineCtx (EVM.ChainId (fromSNat ecid)) + liftIO $ logFunctionText logger Info $ "genesis payload block hash: " <> sshow (EVM._hdrPayloadHash genPld) + liftIO $ logFunctionText logger Debug $ "genesis payload from execution client: " <> sshow genPld + pdb <- liftIO $ initPayloadDb $ payloadDbConfiguration v c rdb genPld + store <- liftIO $ newPayloadStore mgr (logFunction pldStoreLogger) pdb pldCli + pldVar <- liftIO newEmptyTMVarIO + pldIdVar <- liftIO newEmptyTMVarIO + candidates <- liftIO $ emptyTable + stateVar <- liftIO $ newTVarIO (T2 (genesisState v c) Nothing) + lock <- liftIO $ newMVar () let p = EvmPayloadProvider { _evmChainwebVersion = _chainwebVersion v , _evmChainId = _chainId c @@ -527,13 +527,12 @@ withEvmPayloadProvider logger v c rdb mgr conf f , _evmLock = lock } - result <- race (payloadListener p) $ do + listenerAsync <- withAsyncR (payloadListener p) + liftIO $ link listenerAsync + liftIO $ logg p Info $ "EVM payload provider started for Ethereum network id " <> sshow ecid - f p - case result of - Left () -> error "Chainweb.PayloadProvider.EVM.withEvmPayloadProvider: runForever (payloadListener p) exited unexpectedly" - Right x -> return x + return p | otherwise = error "Chainweb.PayloadProvider.Evm.configuration: chain does not use EVM provider" diff --git a/src/Chainweb/PayloadProvider/Pact.hs b/src/Chainweb/PayloadProvider/Pact.hs index b1b2240d56..9a108e29ad 100644 --- a/src/Chainweb/PayloadProvider/Pact.hs +++ b/src/Chainweb/PayloadProvider/Pact.hs @@ -46,7 +46,10 @@ import qualified Data.Pool as Pool import Control.Monad.Trans.Resource (ResourceT, allocate) import Chainweb.Core.Brief -data PactPayloadProvider logger tbl = PactPayloadProvider logger (ServiceEnv tbl) +data PactPayloadProvider logger tbl = PactPayloadProvider + { pactPayloadProviderLogger :: logger + , pactPayloadProviderServiceEnv :: ServiceEnv tbl + } makePrisms ''PactPayloadProvider diff --git a/src/Chainweb/PayloadProvider/Pact/Configuration.hs b/src/Chainweb/PayloadProvider/Pact/Configuration.hs index c0d32b8d19..d72e2c6ff7 100644 --- a/src/Chainweb/PayloadProvider/Pact/Configuration.hs +++ b/src/Chainweb/PayloadProvider/Pact/Configuration.hs @@ -89,6 +89,7 @@ data PactProviderConfig = PactProviderConfig , _pactConfigEnableLocalTimeout :: !Bool , _pactConfigMiner :: !(Maybe Miner) + , _pactConfigDatabaseDirectory :: !(Maybe FilePath) } deriving (Show, Eq, Generic) @@ -107,6 +108,7 @@ instance ToJSON PactProviderConfig where , "fullHistoricPactState" .= _pactConfigFullHistoricPactState o , "enableLocalTimeout" .= _pactConfigEnableLocalTimeout o , "miner" .= J.toJsonViaEncode (_pactConfigMiner o) + , "databaseDirectory" .= _pactConfigDatabaseDirectory o ] instance FromJSON (PactProviderConfig -> PactProviderConfig) where @@ -122,6 +124,7 @@ instance FromJSON (PactProviderConfig -> PactProviderConfig) where <*< pactConfigFullHistoricPactState ..: "fullHistoricPactState" % o <*< pactConfigEnableLocalTimeout ..: "enableLocalTimeout" % o <*< pactConfigMiner ..: "miner" % o + <*< pactConfigDatabaseDirectory ..: "databaseDirectory" % o defaultPactProviderConfig :: PactProviderConfig defaultPactProviderConfig = PactProviderConfig @@ -136,6 +139,7 @@ defaultPactProviderConfig = PactProviderConfig , _pactConfigFullHistoricPactState = True , _pactConfigEnableLocalTimeout = False , _pactConfigMiner = Nothing + , _pactConfigDatabaseDirectory = Nothing } pPactProviderConfig :: ChainId -> MParser PactProviderConfig @@ -169,4 +173,6 @@ pPactProviderConfig cid = id % prefixLongCid cid "pact-enable-local-timeout" <> helpCid cid "Enable timeout support on /local endpoints" <*< pactConfigMiner .:: fmap Just % pMiner cid - + <*< pactConfigDatabaseDirectory .:: fmap Just % fileOption + % prefixLongCid cid "pact-database-directory" + <> helpCid cid "the directory to store the pact database" diff --git a/src/Chainweb/PayloadProvider/Pact/Genesis.hs b/src/Chainweb/PayloadProvider/Pact/Genesis.hs index bda9c5b0e9..51c1c8cae3 100644 --- a/src/Chainweb/PayloadProvider/Pact/Genesis.hs +++ b/src/Chainweb/PayloadProvider/Pact/Genesis.hs @@ -12,10 +12,11 @@ module Chainweb.PayloadProvider.Pact.Genesis ) where import Chainweb.Version -import Chainweb.Version.Mainnet -import Chainweb.Version.Testnet04 import Chainweb.Version.Development +import Chainweb.Version.EvmDevelopment +import Chainweb.Version.Mainnet import Chainweb.Version.RecapDevelopment +import Chainweb.Version.Testnet04 import Chainweb.Payload import Data.HashMap.Strict qualified as HM @@ -69,5 +70,9 @@ genesisPayload v , [(unsafeChainId i, RDNN.payloadBlock) | i <- [1..9]] , [(unsafeChainId i, RDNKAD.payloadBlock) | i <- [10..19]] ] + | _versionCode v == _versionCode EvmDevelopment = ChainMap $ HM.fromList $ concat + [ [(unsafeChainId 0, DN0.payloadBlock)] + , [(unsafeChainId i, DNN.payloadBlock) | i <- [1..19]] + ] genesisPayload v = error $ "Chainweb.PayloadProvider.Pact.Genesis.genesisPayload: unsupported chainweb version: " <> sshow v diff --git a/src/Chainweb/Version/EvmDevelopment.hs b/src/Chainweb/Version/EvmDevelopment.hs index 64756e5cff..56b743e8df 100644 --- a/src/Chainweb/Version/EvmDevelopment.hs +++ b/src/Chainweb/Version/EvmDevelopment.hs @@ -73,27 +73,27 @@ evmDevnet = ChainwebVersion <> [ (unsafeChainId i, BlockCreationTime (Time (secondsToTimeSpan 1687223762))) | i <- [20..39] ] <> [ (unsafeChainId i, BlockCreationTime [timeMicrosQQ| 2025-01-01T00:00:00.000000 |]) | i <- [40..97] ] , _genesisBlockPayload = onChains $ - -- Minimal Payload Provider - [ (unsafeChainId 0, unsafeFromText "rXG-6Jg02UjBYZt0OIwxZ3QtdnwH-C7pX4cX5FHmGE8") - , (unsafeChainId 1, unsafeFromText "xeJGd3yT9SII6Uzm7AwOjoyTSjRGJUI-hC5gBWKLGkw") - , (unsafeChainId 2, unsafeFromText "lXQTK0XTngWwc-POGHOg9_MBqiObaZCXDKR08WfWfL8") - , (unsafeChainId 3, unsafeFromText "GD4-7rjII-MGkVBnXurpn0Pb4aMolNnKDvmlKGMaPRA") - , (unsafeChainId 4, unsafeFromText "iZRTSTlKtzqpgMb0LDukvb9U55RlAJuxXVDWIVYXTIU") - , (unsafeChainId 5, unsafeFromText "B0AotFJgnzdUZo3pHBTT2E9LItJevMGKlYDK4mF9ZzQ") - , (unsafeChainId 6, unsafeFromText "X-TifEHiGkavUAbHgQ0AwtAm6ctCHTkKqg4FVFIzFHQ") - , (unsafeChainId 7, unsafeFromText "WWxH5-JZYdNgRo1KIVzts6YyW8Df1eP8fin4bx4QAM4") - , (unsafeChainId 8, unsafeFromText "TugVzxHnoOEO1nLjsd2IDTHXE1Z2E83sG-OrFgogaBE") - , (unsafeChainId 9, unsafeFromText "2k748hkHJZgRvwJAsc1bxTvWzbbo4d2oSW719NrcS9g") - , (unsafeChainId 10, unsafeFromText "TCfeZhl_v8YJr77HIbxNkWB-j0KQXwmJQx_lkJSpB0w") - , (unsafeChainId 11, unsafeFromText "ZQ7__f2OWthXBnzSWNp80HM5dEz9AyYQ_VCaNKwiX_c") - , (unsafeChainId 12, unsafeFromText "aY5Mc9L2FrkrN6-z-gDBJbuPO5I7B5Cz6giyGSiMzKk") - , (unsafeChainId 13, unsafeFromText "XtZwHbCPrs0ByLZ-1a-hvC_u8GE93tHk-e0uCPqXUz8") - , (unsafeChainId 14, unsafeFromText "A97xRHSsEO9Hn0WdVwZPVNHClzDj-4KXr4Heqf0x36A") - , (unsafeChainId 15, unsafeFromText "iU54vz0G3eiWwXiyeK9FAiqMGV0dqD7TfdgQRLVrVg0") - , (unsafeChainId 16, unsafeFromText "hh_No_CZO9S28lQvU9SQin-ZsxjfIedX_zuYABfoYGQ") - , (unsafeChainId 17, unsafeFromText "tQ0TWds1dMFX9E8EtEXndtmhEDDYtWrgpkv6NmVmJaY") - , (unsafeChainId 18, unsafeFromText "gMs-6QtsYgghAZqTNZ7DBlyOHR2XryNIE4n9rpn-h_I") - , (unsafeChainId 19, unsafeFromText "Evv6R7db1V3t2mrDTosjpL4fjrN9Cn2vdr8tE34hPUY") + -- Pact Payload Provider + [ (unsafeChainId 0, unsafeFromText "QzxVHFZ5go4PYd3QeAZhxP61hsVnICPw4BB9h-T3PDM") + , (unsafeChainId 1, unsafeFromText "66JSEmDIl6AqWTKN29LprukaeUmK0OOd4RufVO8e6-4") + , (unsafeChainId 2, unsafeFromText "66JSEmDIl6AqWTKN29LprukaeUmK0OOd4RufVO8e6-4") + , (unsafeChainId 3, unsafeFromText "66JSEmDIl6AqWTKN29LprukaeUmK0OOd4RufVO8e6-4") + , (unsafeChainId 4, unsafeFromText "66JSEmDIl6AqWTKN29LprukaeUmK0OOd4RufVO8e6-4") + , (unsafeChainId 5, unsafeFromText "66JSEmDIl6AqWTKN29LprukaeUmK0OOd4RufVO8e6-4") + , (unsafeChainId 6, unsafeFromText "66JSEmDIl6AqWTKN29LprukaeUmK0OOd4RufVO8e6-4") + , (unsafeChainId 7, unsafeFromText "66JSEmDIl6AqWTKN29LprukaeUmK0OOd4RufVO8e6-4") + , (unsafeChainId 8, unsafeFromText "66JSEmDIl6AqWTKN29LprukaeUmK0OOd4RufVO8e6-4") + , (unsafeChainId 9, unsafeFromText "66JSEmDIl6AqWTKN29LprukaeUmK0OOd4RufVO8e6-4") + , (unsafeChainId 10, unsafeFromText "66JSEmDIl6AqWTKN29LprukaeUmK0OOd4RufVO8e6-4") + , (unsafeChainId 11, unsafeFromText "66JSEmDIl6AqWTKN29LprukaeUmK0OOd4RufVO8e6-4") + , (unsafeChainId 12, unsafeFromText "66JSEmDIl6AqWTKN29LprukaeUmK0OOd4RufVO8e6-4") + , (unsafeChainId 13, unsafeFromText "66JSEmDIl6AqWTKN29LprukaeUmK0OOd4RufVO8e6-4") + , (unsafeChainId 14, unsafeFromText "66JSEmDIl6AqWTKN29LprukaeUmK0OOd4RufVO8e6-4") + , (unsafeChainId 15, unsafeFromText "66JSEmDIl6AqWTKN29LprukaeUmK0OOd4RufVO8e6-4") + , (unsafeChainId 16, unsafeFromText "66JSEmDIl6AqWTKN29LprukaeUmK0OOd4RufVO8e6-4") + , (unsafeChainId 17, unsafeFromText "66JSEmDIl6AqWTKN29LprukaeUmK0OOd4RufVO8e6-4") + , (unsafeChainId 18, unsafeFromText "66JSEmDIl6AqWTKN29LprukaeUmK0OOd4RufVO8e6-4") + , (unsafeChainId 19, unsafeFromText "66JSEmDIl6AqWTKN29LprukaeUmK0OOd4RufVO8e6-4") -- EVM Payload Provider , (unsafeChainId 20, unsafeFromText "FAxLDjtb8r_0S0Rfr8rD47EQwO-Ma-fmEynZccHvn5o") , (unsafeChainId 21, unsafeFromText "RYPcKnqXKzSneT9zLC6OSGpQah48AeRWIVrSMbEYfcE") @@ -196,7 +196,7 @@ evmDevnet = ChainwebVersion -- FIXME make this safe for graph changes , _versionPayloadProviderTypes = onChains - $ [ (unsafeChainId i, MinimalProvider) | i <- [0..19] ] + $ [ (unsafeChainId i, PactProvider) | i <- [0..19] ] <> [ (unsafeChainId i, EvmProvider (1789 - 20 + int i)) | i <- [20..39] ] <> [ (unsafeChainId i, MinimalProvider) | i <- [40..97] ] }