diff --git a/pkg/eth/api_test.go b/pkg/eth/api_test.go index 38c42161..62d77140 100644 --- a/pkg/eth/api_test.go +++ b/pkg/eth/api_test.go @@ -38,6 +38,7 @@ import ( "github.com/vulcanize/ipld-eth-server/pkg/eth" "github.com/vulcanize/ipld-eth-server/pkg/eth/test_helpers" + "github.com/vulcanize/ipld-eth-server/pkg/shared" ethServerShared "github.com/vulcanize/ipld-eth-server/pkg/shared" ) @@ -195,7 +196,7 @@ var _ = Describe("API", func() { tx interfaces.Batch ) - db = eth.SetupTestDB() + db = shared.SetupDB() indexAndPublisher := eth.SetupTestStateDiffIndexer(ctx, chainConfig, test_helpers.Genesis.Hash()) backend, err := eth.NewEthBackend(db, ð.Config{ @@ -251,7 +252,7 @@ var _ = Describe("API", func() { }) // Single test db tear down at end of all tests - defer It("test teardown", func() { eth.TearDownTestDB(db) }) + defer It("test teardown", func() { shared.TearDownDB(db) }) /* Headers and blocks diff --git a/pkg/eth/cid_retriever_test.go b/pkg/eth/cid_retriever_test.go index ff8d0698..1aa62ad3 100644 --- a/pkg/eth/cid_retriever_test.go +++ b/pkg/eth/cid_retriever_test.go @@ -31,6 +31,7 @@ import ( "github.com/vulcanize/ipld-eth-server/pkg/eth" "github.com/vulcanize/ipld-eth-server/pkg/eth/test_helpers" + "github.com/vulcanize/ipld-eth-server/pkg/shared" ) var ( @@ -215,13 +216,13 @@ var _ = Describe("Retriever", func() { retriever *eth.CIDRetriever ) BeforeEach(func() { - db = eth.SetupTestDB() + db = shared.SetupDB() diffIndexer = eth.SetupTestStateDiffIndexer(ctx, params.TestChainConfig, test_helpers.Genesis.Hash()) retriever = eth.NewCIDRetriever(db) }) AfterEach(func() { - eth.TearDownTestDB(db) + shared.TearDownDB(db) }) Describe("Retrieve", func() { diff --git a/pkg/eth/eth_state_test.go b/pkg/eth/eth_state_test.go index 17d0434f..362089c9 100644 --- a/pkg/eth/eth_state_test.go +++ b/pkg/eth/eth_state_test.go @@ -39,6 +39,7 @@ import ( "github.com/vulcanize/ipld-eth-server/pkg/eth" "github.com/vulcanize/ipld-eth-server/pkg/eth/test_helpers" + "github.com/vulcanize/ipld-eth-server/pkg/shared" ethServerShared "github.com/vulcanize/ipld-eth-server/pkg/shared" ) @@ -74,7 +75,7 @@ var _ = Describe("eth state reading tests", func() { It("test init", func() { // db and type initializations var err error - db = eth.SetupTestDB() + db = shared.SetupDB() transformer := eth.SetupTestStateDiffIndexer(ctx, chainConfig, test_helpers.Genesis.Hash()) backend, err = eth.NewEthBackend(db, ð.Config{ @@ -181,7 +182,7 @@ var _ = Describe("eth state reading tests", func() { Expect(err).ToNot(HaveOccurred()) }) defer It("test teardown", func() { - eth.TearDownTestDB(db) + shared.TearDownDB(db) chain.Stop() }) diff --git a/pkg/eth/ipld_fetcher_test.go b/pkg/eth/ipld_fetcher_test.go index f5521188..668966fb 100644 --- a/pkg/eth/ipld_fetcher_test.go +++ b/pkg/eth/ipld_fetcher_test.go @@ -25,6 +25,7 @@ import ( "github.com/vulcanize/ipld-eth-server/pkg/eth" "github.com/vulcanize/ipld-eth-server/pkg/eth/test_helpers" + "github.com/vulcanize/ipld-eth-server/pkg/shared" ) var _ = Describe("IPLDFetcher", func() { @@ -39,7 +40,7 @@ var _ = Describe("IPLDFetcher", func() { err error tx interfaces.Batch ) - db = eth.SetupTestDB() + db = shared.SetupDB() pubAndIndexer = eth.SetupTestStateDiffIndexer(ctx, params.TestChainConfig, test_helpers.Genesis.Hash()) tx, err = pubAndIndexer.PushBlock(test_helpers.MockBlock, test_helpers.MockReceipts, test_helpers.MockBlock.Difficulty()) @@ -54,7 +55,7 @@ var _ = Describe("IPLDFetcher", func() { }) AfterEach(func() { - eth.TearDownTestDB(db) + shared.TearDownDB(db) }) It("Fetches and returns IPLDs for the CIDs provided in the CIDWrapper", func() { diff --git a/pkg/eth/test_helpers.go b/pkg/eth/test_helpers.go index 621ea6fd..19625adb 100644 --- a/pkg/eth/test_helpers.go +++ b/pkg/eth/test_helpers.go @@ -28,41 +28,9 @@ import ( "github.com/ethereum/go-ethereum/statediff/indexer/interfaces" "github.com/ethereum/go-ethereum/statediff/indexer/models" "github.com/ethereum/go-ethereum/statediff/indexer/node" - "github.com/jmoiron/sqlx" . "github.com/onsi/gomega" - "github.com/vulcanize/ipld-eth-server/pkg/shared" ) -func SetupTestDB() *sqlx.DB { - config := getTestDBConfig() - - db, err := shared.NewDB(config.DbConnectionString(), config) - Expect(err).NotTo(HaveOccurred()) - - return db -} - -// TearDownTestDB is used to tear down the watcher dbs after tests -func TearDownTestDB(db *sqlx.DB) { - tx, err := db.Beginx() - Expect(err).NotTo(HaveOccurred()) - _, err = tx.Exec(`DELETE FROM eth.transaction_cids`) - Expect(err).NotTo(HaveOccurred()) - _, err = tx.Exec(`DELETE FROM eth.receipt_cids`) - Expect(err).NotTo(HaveOccurred()) - _, err = tx.Exec(`DELETE FROM eth.state_cids`) - Expect(err).NotTo(HaveOccurred()) - _, err = tx.Exec(`DELETE FROM eth.storage_cids`) - Expect(err).NotTo(HaveOccurred()) - _, err = tx.Exec(`DELETE FROM blocks`) - Expect(err).NotTo(HaveOccurred()) - _, err = tx.Exec(`DELETE FROM eth.log_cids`) - Expect(err).NotTo(HaveOccurred()) - - err = tx.Commit() - Expect(err).NotTo(HaveOccurred()) -} - func SetupTestStateDiffIndexer(ctx context.Context, chainConfig *params.ChainConfig, genHash common.Hash) interfaces.StateDiffIndexer { testInfo := node.Info{ GenesisBlock: genHash.String(), diff --git a/pkg/fill/fill_suite_test.go b/pkg/fill/fill_suite_test.go new file mode 100644 index 00000000..4b5a9103 --- /dev/null +++ b/pkg/fill/fill_suite_test.go @@ -0,0 +1,29 @@ +// VulcanizeDB +// Copyright © 2022 Vulcanize + +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. + +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +package fill_test + +import ( + "testing" + + . "github.com/onsi/ginkgo" + . "github.com/onsi/gomega" +) + +func TestFill(t *testing.T) { + RegisterFailHandler(Fail) + RunSpecs(t, "ipld eth server fill test suite") +} diff --git a/pkg/fill/service_test.go b/pkg/fill/service_test.go new file mode 100644 index 00000000..7d4b19ae --- /dev/null +++ b/pkg/fill/service_test.go @@ -0,0 +1,412 @@ +// VulcanizeDB +// Copyright © 2022 Vulcanize + +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. + +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +package fill_test + +import ( + "context" + "math/big" + + . "github.com/onsi/ginkgo" + . "github.com/onsi/gomega" + + "github.com/ethereum/go-ethereum/params" + "github.com/ethereum/go-ethereum/statediff/indexer/interfaces" + sdtypes "github.com/ethereum/go-ethereum/statediff/types" + "github.com/jmoiron/sqlx" + + "github.com/vulcanize/ipld-eth-server/pkg/eth" + "github.com/vulcanize/ipld-eth-server/pkg/eth/test_helpers" + fill "github.com/vulcanize/ipld-eth-server/pkg/fill" + "github.com/vulcanize/ipld-eth-server/pkg/serve" + "github.com/vulcanize/ipld-eth-server/pkg/shared" +) + +var _ = Describe("Service", func() { + + var ( + db *sqlx.DB + watchedAddressGapFiller *fill.Service + statediffIndexer interfaces.StateDiffIndexer + err error + + contract1Address = "0x5d663F5269090bD2A7DC2390c911dF6083D7b28F" + contract2Address = "0x6Eb7e5C66DB8af2E96159AC440cbc8CDB7fbD26B" + contract3Address = "0xcfeB164C328CA13EFd3C77E1980d94975aDfedfc" + + chainConfig = params.TestChainConfig + ctx = context.Background() + ) + + It("test init", func() { + // db initialization + db = shared.SetupDB() + + // indexer initialization + // statediffIndexer, err = indexer.NewStateDiffIndexer(nil, db) + statediffIndexer = eth.SetupTestStateDiffIndexer(ctx, chainConfig, test_helpers.Genesis.Hash()) + Expect(err).ToNot(HaveOccurred()) + + // fill service intialization + watchedAddressGapFiller = fill.New(&serve.Config{ + DB: db, + }) + }) + + defer It("test teardown", func() { + shared.TearDownDB(db) + }) + + Describe("GetFillAddresses", func() { + Context("overlapping fill ranges", func() { + It("gives the range to run fill for each address", func() { + // input data + rows := []fill.WatchedAddress{ + { + Address: contract1Address, + CreatedAt: 10, + WatchedAt: 50, + LastFilledAt: 0, + }, + { + Address: contract2Address, + CreatedAt: 40, + WatchedAt: 70, + LastFilledAt: 0, + }, + { + Address: contract3Address, + CreatedAt: 20, + WatchedAt: 30, + LastFilledAt: 0, + }, + } + + // expected output data + expectedOutputAddresses := []fill.WatchedAddress{ + { + Address: contract1Address, + CreatedAt: 10, + WatchedAt: 50, + LastFilledAt: 0, + StartBlock: 10, + EndBlock: 50, + }, + { + Address: contract2Address, + CreatedAt: 40, + WatchedAt: 70, + LastFilledAt: 0, + StartBlock: 40, + EndBlock: 70, + }, + { + Address: contract3Address, + CreatedAt: 20, + WatchedAt: 30, + LastFilledAt: 0, + StartBlock: 20, + EndBlock: 30, + }, + } + expectedOutputStartBlock := uint64(10) + expectedOutputEndBlock := uint64(70) + + fillWatchedAddresses, minStartBlock, maxEndBlock := watchedAddressGapFiller.GetFillAddresses(rows) + + Expect(fillWatchedAddresses).To(Equal(expectedOutputAddresses)) + Expect(minStartBlock).To(Equal(expectedOutputStartBlock)) + Expect(maxEndBlock).To(Equal(expectedOutputEndBlock)) + }) + }) + + Context("non-overlapping fill ranges", func() { + It("gives the range to run fill for each address", func() { + // input data + rows := []fill.WatchedAddress{ + { + Address: contract1Address, + CreatedAt: 10, + WatchedAt: 50, + LastFilledAt: 0, + }, + { + Address: contract2Address, + CreatedAt: 70, + WatchedAt: 90, + LastFilledAt: 0, + }, + } + + // expected output data + expectedOutputAddresses := []fill.WatchedAddress{ + { + Address: contract1Address, + CreatedAt: 10, + WatchedAt: 50, + LastFilledAt: 0, + StartBlock: 10, + EndBlock: 50, + }, + { + Address: contract2Address, + CreatedAt: 70, + WatchedAt: 90, + LastFilledAt: 0, + StartBlock: 70, + EndBlock: 90, + }, + } + expectedOutputStartBlock := uint64(10) + expectedOutputEndBlock := uint64(90) + + fillWatchedAddresses, minStartBlock, maxEndBlock := watchedAddressGapFiller.GetFillAddresses(rows) + + Expect(fillWatchedAddresses).To(Equal(expectedOutputAddresses)) + Expect(minStartBlock).To(Equal(expectedOutputStartBlock)) + Expect(maxEndBlock).To(Equal(expectedOutputEndBlock)) + }) + }) + + Context("a contract watched before it was created", func() { + It("gives no range for an address when it is watched before it's created", func() { + // input data + rows := []fill.WatchedAddress{ + { + Address: contract1Address, + CreatedAt: 10, + WatchedAt: 50, + LastFilledAt: 0, + }, + { + Address: contract2Address, + CreatedAt: 90, + WatchedAt: 70, + LastFilledAt: 0, + }, + } + + // expected output data + expectedOutputAddresses := []fill.WatchedAddress{ + { + Address: contract1Address, + CreatedAt: 10, + WatchedAt: 50, + LastFilledAt: 0, + StartBlock: 10, + EndBlock: 50, + }, + } + expectedOutputStartBlock := uint64(10) + expectedOutputEndBlock := uint64(50) + + fillWatchedAddresses, minStartBlock, maxEndBlock := watchedAddressGapFiller.GetFillAddresses(rows) + + Expect(fillWatchedAddresses).To(Equal(expectedOutputAddresses)) + Expect(minStartBlock).To(Equal(expectedOutputStartBlock)) + Expect(maxEndBlock).To(Equal(expectedOutputEndBlock)) + }) + }) + + Context("a contract having some of the gap filled earlier", func() { + It("gives the remaining range for an address to run fill for", func() { + // input data + rows := []fill.WatchedAddress{ + { + Address: contract1Address, + CreatedAt: 10, + WatchedAt: 50, + LastFilledAt: 0, + }, + { + Address: contract2Address, + CreatedAt: 40, + WatchedAt: 70, + LastFilledAt: 50, + }, + } + + // expected output data + expectedOutputAddresses := []fill.WatchedAddress{ + { + Address: contract1Address, + CreatedAt: 10, + WatchedAt: 50, + LastFilledAt: 0, + StartBlock: 10, + EndBlock: 50, + }, + { + Address: contract2Address, + CreatedAt: 40, + WatchedAt: 70, + LastFilledAt: 50, + StartBlock: 51, + EndBlock: 70, + }, + } + expectedOutputStartBlock := uint64(10) + expectedOutputEndBlock := uint64(70) + + fillWatchedAddresses, minStartBlock, maxEndBlock := watchedAddressGapFiller.GetFillAddresses(rows) + + Expect(fillWatchedAddresses).To(Equal(expectedOutputAddresses)) + Expect(minStartBlock).To(Equal(expectedOutputStartBlock)) + Expect(maxEndBlock).To(Equal(expectedOutputEndBlock)) + }) + + It("gives no range for an address when the gap is already filled", func() { + // input data + rows := []fill.WatchedAddress{ + { + Address: contract1Address, + CreatedAt: 10, + WatchedAt: 50, + LastFilledAt: 0, + }, + { + Address: contract2Address, + CreatedAt: 40, + WatchedAt: 70, + LastFilledAt: 70, + }, + } + + // expected output data + expectedOutputAddresses := []fill.WatchedAddress{ + { + Address: contract1Address, + CreatedAt: 10, + WatchedAt: 50, + LastFilledAt: 0, + StartBlock: 10, + EndBlock: 50, + }, + } + expectedOutputStartBlock := uint64(10) + expectedOutputEndBlock := uint64(50) + + fillWatchedAddresses, minStartBlock, maxEndBlock := watchedAddressGapFiller.GetFillAddresses(rows) + + Expect(fillWatchedAddresses).To(Equal(expectedOutputAddresses)) + Expect(minStartBlock).To(Equal(expectedOutputStartBlock)) + Expect(maxEndBlock).To(Equal(expectedOutputEndBlock)) + }) + }) + }) + + Describe("UpdateLastFilledAt", func() { + pgStr := "SELECT * FROM eth_meta.watched_addresses" + + BeforeEach(func() { + shared.TearDownDB(db) + }) + + It("updates last filled at for a single address", func() { + // fill db with watched addresses + watchedAddresses := []sdtypes.WatchAddressArg{ + { + Address: contract1Address, + CreatedAt: 10, + }, + } + watchedAt := uint64(50) + err = statediffIndexer.InsertWatchedAddresses(watchedAddresses, big.NewInt(int64(watchedAt))) + Expect(err).ToNot(HaveOccurred()) + + // update last filled at block in the db + fillAddresses := []interface{}{ + contract1Address, + } + fillAt := uint64(12) + watchedAddressGapFiller.UpdateLastFilledAt(fillAt, fillAddresses) + + // expected data + expectedData := []fill.WatchedAddress{ + { + Address: contract1Address, + CreatedAt: 10, + WatchedAt: watchedAt, + LastFilledAt: fillAt, + }, + } + + rows := []fill.WatchedAddress{} + err = db.Select(&rows, pgStr) + Expect(err).ToNot(HaveOccurred()) + + Expect(rows).To(Equal(expectedData)) + }) + + It("updates last filled at for multiple address", func() { + // fill db with watched addresses + watchedAddresses := []sdtypes.WatchAddressArg{ + { + Address: contract1Address, + CreatedAt: 10, + }, + { + Address: contract2Address, + CreatedAt: 20, + }, + { + Address: contract3Address, + CreatedAt: 30, + }, + } + watchedAt := uint64(50) + err = statediffIndexer.InsertWatchedAddresses(watchedAddresses, big.NewInt(int64(watchedAt))) + Expect(err).ToNot(HaveOccurred()) + + // update last filled at block in the db + fillAddresses := []interface{}{ + contract1Address, + contract2Address, + contract3Address, + } + fillAt := uint64(50) + watchedAddressGapFiller.UpdateLastFilledAt(fillAt, fillAddresses) + + // expected data + expectedData := []fill.WatchedAddress{ + { + Address: contract1Address, + CreatedAt: 10, + WatchedAt: watchedAt, + LastFilledAt: fillAt, + }, + { + Address: contract2Address, + CreatedAt: 20, + WatchedAt: watchedAt, + LastFilledAt: fillAt, + }, + { + Address: contract3Address, + CreatedAt: 30, + WatchedAt: watchedAt, + LastFilledAt: fillAt, + }, + } + + rows := []fill.WatchedAddress{} + err = db.Select(&rows, pgStr) + Expect(err).ToNot(HaveOccurred()) + + Expect(rows).To(Equal(expectedData)) + }) + }) +}) diff --git a/pkg/graphql/graphql_test.go b/pkg/graphql/graphql_test.go index dec0d0dd..1770ef25 100644 --- a/pkg/graphql/graphql_test.go +++ b/pkg/graphql/graphql_test.go @@ -38,6 +38,7 @@ import ( "github.com/vulcanize/ipld-eth-server/pkg/eth" "github.com/vulcanize/ipld-eth-server/pkg/eth/test_helpers" "github.com/vulcanize/ipld-eth-server/pkg/graphql" + "github.com/vulcanize/ipld-eth-server/pkg/shared" ethServerShared "github.com/vulcanize/ipld-eth-server/pkg/shared" ) @@ -65,7 +66,7 @@ var _ = Describe("GraphQL", func() { It("test init", func() { var err error - db = eth.SetupTestDB() + db = shared.SetupDB() transformer := eth.SetupTestStateDiffIndexer(ctx, chainConfig, test_helpers.Genesis.Hash()) backend, err = eth.NewEthBackend(db, ð.Config{ @@ -166,7 +167,7 @@ var _ = Describe("GraphQL", func() { defer It("test teardown", func() { err := graphQLServer.Stop() Expect(err).ToNot(HaveOccurred()) - eth.TearDownTestDB(db) + shared.TearDownDB(db) chain.Stop() }) diff --git a/pkg/shared/test_helpers.go b/pkg/shared/test_helpers.go index eed5a7f0..d2b0e56d 100644 --- a/pkg/shared/test_helpers.go +++ b/pkg/shared/test_helpers.go @@ -18,8 +18,14 @@ package shared import ( "bytes" + "os" + "strconv" + . "github.com/onsi/gomega" + + "github.com/ethereum/go-ethereum/statediff/indexer/database/sql/postgres" "github.com/ethereum/go-ethereum/statediff/indexer/models" + "github.com/jmoiron/sqlx" ) // IPLDsContainBytes used to check if a list of strings contains a particular string @@ -31,3 +37,50 @@ func IPLDsContainBytes(iplds []models.IPLDModel, b []byte) bool { } return false } + +// SetupDB is use to setup a db for watcher tests +func SetupDB() *sqlx.DB { + config := getTestDBConfig() + + db, err := NewDB(config.DbConnectionString(), config) + Expect(err).NotTo(HaveOccurred()) + + return db +} + +// TearDownDB is used to tear down the watcher dbs after tests +func TearDownDB(db *sqlx.DB) { + tx, err := db.Beginx() + Expect(err).NotTo(HaveOccurred()) + _, err = tx.Exec(`DELETE FROM eth.header_cids`) + Expect(err).NotTo(HaveOccurred()) + _, err = tx.Exec(`DELETE FROM eth.transaction_cids`) + Expect(err).NotTo(HaveOccurred()) + _, err = tx.Exec(`DELETE FROM eth.receipt_cids`) + Expect(err).NotTo(HaveOccurred()) + _, err = tx.Exec(`DELETE FROM eth.state_cids`) + Expect(err).NotTo(HaveOccurred()) + _, err = tx.Exec(`DELETE FROM eth.storage_cids`) + Expect(err).NotTo(HaveOccurred()) + _, err = tx.Exec(`DELETE FROM blocks`) + Expect(err).NotTo(HaveOccurred()) + _, err = tx.Exec(`DELETE FROM eth.log_cids`) + Expect(err).NotTo(HaveOccurred()) + _, err = tx.Exec(`DELETE FROM eth_meta.watched_addresses`) + Expect(err).NotTo(HaveOccurred()) + + err = tx.Commit() + Expect(err).NotTo(HaveOccurred()) +} + +func getTestDBConfig() postgres.Config { + port, _ := strconv.Atoi(os.Getenv("DATABASE_PORT")) + return postgres.Config{ + Hostname: os.Getenv("DATABASE_HOSTNAME"), + DatabaseName: os.Getenv("DATABASE_NAME"), + Username: os.Getenv("DATABASE_USER"), + Password: os.Getenv("DATABASE_PASSWORD"), + Port: port, + Driver: postgres.SQLX, + } +} diff --git a/scripts/run_integration_test.sh b/scripts/run_integration_test.sh index 7e834f89..8548491a 100755 --- a/scripts/run_integration_test.sh +++ b/scripts/run_integration_test.sh @@ -3,9 +3,10 @@ set -o xtrace export ETH_FORWARD_ETH_CALLS=false export DB_WRITE=true -export ETH_HTTP_PATH="" +export ETH_HTTP_PATH="dapptools:8545" export ETH_PROXY_ON_ERROR=false export WATCHED_ADDRESS_GAP_FILLER_ENABLED=false +export WATCHED_ADDRESS_GAP_FILLER_INTERVAL=5 # Clear up existing docker images and volume. docker-compose down --remove-orphans --volumes diff --git a/scripts/run_integration_test_forward_eth_calls.sh b/scripts/run_integration_test_forward_eth_calls.sh index 97985ceb..882c887b 100644 --- a/scripts/run_integration_test_forward_eth_calls.sh +++ b/scripts/run_integration_test_forward_eth_calls.sh @@ -6,6 +6,7 @@ export DB_WRITE=false export ETH_HTTP_PATH="dapptools:8545" export ETH_PROXY_ON_ERROR=false export WATCHED_ADDRESS_GAP_FILLER_ENABLED=false +export WATCHED_ADDRESS_GAP_FILLER_INTERVAL=5 # Clear up existing docker images and volume. docker-compose down --remove-orphans --volumes diff --git a/scripts/run_integration_test_watched_address_gap_filler.sh b/scripts/run_integration_test_watched_address_gap_filler.sh index 1201782e..1e436098 100644 --- a/scripts/run_integration_test_watched_address_gap_filler.sh +++ b/scripts/run_integration_test_watched_address_gap_filler.sh @@ -3,7 +3,7 @@ set -o xtrace export ETH_FORWARD_ETH_CALLS=false export DB_WRITE=true -export ETH_HTTP_PATH="" +export ETH_HTTP_PATH="dapptools:8545" export ETH_PROXY_ON_ERROR=false export WATCHED_ADDRESS_GAP_FILLER_ENABLED=true export WATCHED_ADDRESS_GAP_FILLER_INTERVAL=5 diff --git a/test/contract/src/utils.js b/test/contract/src/utils.js index be7ed0ef..f07e9e41 100644 --- a/test/contract/src/utils.js +++ b/test/contract/src/utils.js @@ -34,3 +34,5 @@ async function getStorageSlotKey(contractName, variableName) { key = utils.hexlify(BigNumber.from(targetState.slot)); return key }; + +module.exports = { getStorageSlotKey }