From fab7ea6ca15dbd32e128434051de32269736db9d Mon Sep 17 00:00:00 2001 From: Aayush Date: Thu, 16 Feb 2023 16:19:07 -0500 Subject: [PATCH 1/5] feat: shed: test the nv18 migration --- chain/consensus/filcns/upgrades.go | 4 +-- cmd/lotus-shed/migrations.go | 58 ++++++++++++++++++++---------- 2 files changed, 41 insertions(+), 21 deletions(-) diff --git a/chain/consensus/filcns/upgrades.go b/chain/consensus/filcns/upgrades.go index 5a268c8a69b..617d44fb579 100644 --- a/chain/consensus/filcns/upgrades.go +++ b/chain/consensus/filcns/upgrades.go @@ -240,8 +240,8 @@ func DefaultUpgradeSchedule() stmgr.UpgradeSchedule { Migration: UpgradeActorsV10, PreMigrations: []stmgr.PreMigration{{ PreMigration: PreUpgradeActorsV10, - StartWithin: 180, - DontStartWithin: 60, + StartWithin: 60, + DontStartWithin: 10, StopWithin: 5, }}, Expensive: true, diff --git a/cmd/lotus-shed/migrations.go b/cmd/lotus-shed/migrations.go index a7e0ee34fa7..8a100788202 100644 --- a/cmd/lotus-shed/migrations.go +++ b/cmd/lotus-shed/migrations.go @@ -17,6 +17,7 @@ import ( "github.com/filecoin-project/go-state-types/abi" actorstypes "github.com/filecoin-project/go-state-types/actors" "github.com/filecoin-project/go-state-types/builtin" + v10 "github.com/filecoin-project/go-state-types/builtin/v10" market8 "github.com/filecoin-project/go-state-types/builtin/v8/market" adt8 "github.com/filecoin-project/go-state-types/builtin/v8/util/adt" v9 "github.com/filecoin-project/go-state-types/builtin/v9" @@ -151,7 +152,7 @@ var migrationsCmd = &cli.Command{ if !cctx.IsSet("skip-pre-migration") { cache := mutil.NewMemMigrationCache() - ts1, err := cs.GetTipsetByHeight(ctx, blk.Height-240, migrationTs, false) + ts1, err := cs.GetTipsetByHeight(ctx, blk.Height-60, migrationTs, false) if err != nil { return err } @@ -163,21 +164,7 @@ var migrationsCmd = &cli.Command{ return err } - preMigration1Time := time.Since(startTime) - - ts2, err := cs.GetTipsetByHeight(ctx, blk.Height-15, migrationTs, false) - if err != nil { - return err - } - - startTime = time.Now() - - err = preUpgradeActorsFunc(ctx, sm, cache, ts2.ParentState(), ts2.Height()-1, ts2) - if err != nil { - return err - } - - preMigration2Time := time.Since(startTime) + preMigrationTime := time.Since(startTime) startTime = time.Now() @@ -192,8 +179,7 @@ var migrationsCmd = &cli.Command{ return xerrors.Errorf("got different results with and without the cache: %s, %s", newCid1, newCid2) } - fmt.Println("completed premigration 1, took ", preMigration1Time) - fmt.Println("completed premigration 2, took ", preMigration2Time) + fmt.Println("completed premigration, took ", preMigrationTime) fmt.Println("completed round actual (with cache), took ", cachedMigrationTime) } @@ -216,7 +202,7 @@ func getMigrationFuncsForNetwork(nv network.Version) (UpgradeActorsFunc, PreUpgr case network.Version17: return filcns.UpgradeActorsV9, filcns.PreUpgradeActorsV9, checkNv17Invariants, nil case network.Version18: - return filcns.UpgradeActorsV10, filcns.PreUpgradeActorsV10, nil, nil + return filcns.UpgradeActorsV10, filcns.PreUpgradeActorsV10, checkNv18Invariants, nil default: return nil, nil, nil, xerrors.Errorf("migration not implemented for nv%d", nv) } @@ -226,6 +212,40 @@ type UpgradeActorsFunc = func(context.Context, *stmgr.StateManager, stmgr.Migrat type PreUpgradeActorsFunc = func(context.Context, *stmgr.StateManager, stmgr.MigrationCache, cid.Cid, abi.ChainEpoch, *types.TipSet) error type CheckInvariantsFunc = func(context.Context, cid.Cid, cid.Cid, blockstore.Blockstore, abi.ChainEpoch) error +func checkNv18Invariants(ctx context.Context, oldStateRootCid cid.Cid, newStateRootCid cid.Cid, bs blockstore.Blockstore, epoch abi.ChainEpoch) error { + actorStore := store.ActorStore(ctx, bs) + startTime := time.Now() + + // Load the new state root. + var newStateRoot types.StateRoot + if err := actorStore.Get(ctx, newStateRootCid, &newStateRoot); err != nil { + return xerrors.Errorf("failed to decode state root: %w", err) + } + + actorCodeCids, err := actors.GetActorCodeIDs(actorstypes.Version10) + if err != nil { + return err + } + newActorTree, err := builtin.LoadTree(actorStore, newStateRoot.Actors) + if err != nil { + return err + } + messages, err := v10.CheckStateInvariants(newActorTree, epoch, actorCodeCids) + if err != nil { + return xerrors.Errorf("checking state invariants: %w", err) + } + + for _, message := range messages.Messages() { + fmt.Println("got the following error: ", message) + } + + fmt.Println("completed invariant checks, took ", time.Since(startTime)) + + return nil +} + +/// NV17 and earlier stuff + func checkNv17Invariants(ctx context.Context, v8StateRootCid cid.Cid, v9StateRootCid cid.Cid, bs blockstore.Blockstore, epoch abi.ChainEpoch) error { actorStore := store.ActorStore(ctx, bs) startTime := time.Now() From bad41c247a51916b096b93ade2bffe21e8a5255c Mon Sep 17 00:00:00 2001 From: Steven Allen Date: Fri, 17 Feb 2023 12:02:00 -0800 Subject: [PATCH 2/5] fix: eth: cleanup error cases 1. Return an error on gas estimation failure instead of logging. 2. Return early when processing signed messages on failure instead of continuing. --- node/impl/full/eth.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/node/impl/full/eth.go b/node/impl/full/eth.go index 454b3eca538..5e18e7e77d9 100644 --- a/node/impl/full/eth.go +++ b/node/impl/full/eth.go @@ -895,7 +895,7 @@ func (a *EthModule) EthEstimateGas(ctx context.Context, tx ethtypes.EthCall) (et expectedGas, err := ethGasSearch(ctx, a.Chain, a.Stmgr, a.Mpool, msg, ts) if err != nil { - log.Errorw("expected gas", "err", err) + return 0, xerrors.Errorf("gas search failed: %w", err) } return ethtypes.EthUint64(expectedGas), nil @@ -2157,11 +2157,13 @@ func (m *EthTxHashManager) ProcessSignedMessage(ctx context.Context, msg *types. ethTx, err := newEthTxFromSignedMessage(ctx, msg, m.StateAPI) if err != nil { log.Errorf("error converting filecoin message to eth tx: %s", err) + return } err = m.TransactionHashLookup.UpsertHash(ethTx.Hash, msg.Cid()) if err != nil { log.Errorf("error inserting tx mapping to db: %s", err) + return } } From 510f980348e44a62a582abcd0ef470349befd2d6 Mon Sep 17 00:00:00 2001 From: snissn Date: Fri, 17 Feb 2023 15:32:54 -0700 Subject: [PATCH 3/5] tests: itests: blocktest properties (#10304) * add itests for various fevm block properties and assert correct chain id * add value checks to the block property solidity itests * move get block function to kit --- itests/contracts/Blocktest.hex | 1 + itests/contracts/Blocktest.sol | 24 +++++++++ itests/fevm_test.go | 90 ++++++++++++++++++++++++++++++++++ itests/kit/evm.go | 16 ++++++ 4 files changed, 131 insertions(+) create mode 100644 itests/contracts/Blocktest.hex create mode 100644 itests/contracts/Blocktest.sol diff --git a/itests/contracts/Blocktest.hex b/itests/contracts/Blocktest.hex new file mode 100644 index 00000000000..2d477b3ffaf --- /dev/null +++ b/itests/contracts/Blocktest.hex @@ -0,0 +1 @@ +608060405234801561001057600080fd5b5061024d806100206000396000f3fe608060405234801561001057600080fd5b50600436106100625760003560e01c806311dcda5214610067578063188ec356146100715780633e64a6961461008f57806342cbb15c146100ad578063564b81ef146100cb578063bfc6ac54146100e9575b600080fd5b61006f610107565b005b610079610117565b6040516100869190610165565b60405180910390f35b61009761011f565b6040516100a49190610165565b60405180910390f35b6100b5610127565b6040516100c29190610165565b60405180910390f35b6100d361012f565b6040516100e09190610165565b60405180910390f35b6100f1610137565b6040516100fe9190610199565b60405180910390f35b61013a461461011557600080fd5b565b600042905090565b600048905090565b600043905090565b600046905090565b600060014361014691906101e3565b40905090565b6000819050919050565b61015f8161014c565b82525050565b600060208201905061017a6000830184610156565b92915050565b6000819050919050565b61019381610180565b82525050565b60006020820190506101ae600083018461018a565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006101ee8261014c565b91506101f98361014c565b9250828203905081811115610211576102106101b4565b5b9291505056fea264697066735822122015a2d5fbebc013a5c3ece3d5bbf98707100b155793f6d340c3df6a736a3f1dfa64736f6c63430008110033 \ No newline at end of file diff --git a/itests/contracts/Blocktest.sol b/itests/contracts/Blocktest.sol new file mode 100644 index 00000000000..3fde0d56b13 --- /dev/null +++ b/itests/contracts/Blocktest.sol @@ -0,0 +1,24 @@ +// SPDX-License-Identifier: MIT +pragma solidity >=0.8.17; + +contract BlockTest { + + function testChainID() public view{ + require(block.chainid == 314); + } + + function getBlockhashPrevious() public view returns (bytes32) { + return blockhash(block.number-1); + } + + function getBasefee() public view returns (uint256){ + return block.basefee; + } + + function getBlockNumber() public view returns (uint256){ + return block.number; + } + function getTimestamp() public view returns (uint256){ + return block.timestamp; + } +} diff --git a/itests/fevm_test.go b/itests/fevm_test.go index 940d56ef140..b93cc824dd2 100644 --- a/itests/fevm_test.go +++ b/itests/fevm_test.go @@ -883,6 +883,96 @@ func TestFEVMGetBlockDifficulty(t *testing.T) { require.Equal(t, len(ret), 32) } +func TestFEVMTestCorrectChainID(t *testing.T) { + ctx, cancel, client := kit.SetupFEVMTest(t) + defer cancel() + + //install contract + filenameActor := "contracts/Blocktest.hex" + fromAddr, contractAddr := client.EVM().DeployContractFromFilename(ctx, filenameActor) + + //run test + _, _, err := client.EVM().InvokeContractByFuncName(ctx, fromAddr, contractAddr, "testChainID()", []byte{}) + require.NoError(t, err) +} + +func TestFEVMGetChainPropertiesBlockTimestamp(t *testing.T) { + ctx, cancel, client := kit.SetupFEVMTest(t) + defer cancel() + + //install contract + filenameActor := "contracts/Blocktest.hex" + fromAddr, contractAddr := client.EVM().DeployContractFromFilename(ctx, filenameActor) + + // block number check + ret, wait, err := client.EVM().InvokeContractByFuncName(ctx, fromAddr, contractAddr, "getTimestamp()", []byte{}) + require.NoError(t, err) + + timestampFromSolidity, err := decodeOutputToUint64(ret) + require.NoError(t, err) + + ethBlock := client.EVM().GetEthBlockFromWait(ctx, wait) + + require.Equal(t, ethBlock.Timestamp, ethtypes.EthUint64(timestampFromSolidity)) +} + +func TestFEVMGetChainPropertiesBlockNumber(t *testing.T) { + ctx, cancel, client := kit.SetupFEVMTest(t) + defer cancel() + + //install contract + filenameActor := "contracts/Blocktest.hex" + fromAddr, contractAddr := client.EVM().DeployContractFromFilename(ctx, filenameActor) + + // block number check + ret, wait, err := client.EVM().InvokeContractByFuncName(ctx, fromAddr, contractAddr, "getBlockNumber()", []byte{}) + require.NoError(t, err) + + blockHeightFromSolidity, err := decodeOutputToUint64(ret) + require.NoError(t, err) + + ethBlock := client.EVM().GetEthBlockFromWait(ctx, wait) + + require.Equal(t, ethBlock.Number, ethtypes.EthUint64(blockHeightFromSolidity)) +} + +func TestFEVMGetChainPropertiesBlockHash(t *testing.T) { + ctx, cancel, client := kit.SetupFEVMTest(t) + defer cancel() + + //install contract + filenameActor := "contracts/Blocktest.hex" + fromAddr, contractAddr := client.EVM().DeployContractFromFilename(ctx, filenameActor) + + //block hash check + ret, wait, err := client.EVM().InvokeContractByFuncName(ctx, fromAddr, contractAddr, "getBlockhashPrevious()", []byte{}) + expectedBlockHash := hex.EncodeToString(ret) + require.NoError(t, err) + + ethBlock := client.EVM().GetEthBlockFromWait(ctx, wait) + //in solidity we get the parent block hash because the current block hash doesnt exist at that execution context yet + //so we compare the parent hash here in the test + require.Equal(t, "0x"+expectedBlockHash, ethBlock.ParentHash.String()) +} + +func TestFEVMGetChainPropertiesBaseFee(t *testing.T) { + ctx, cancel, client := kit.SetupFEVMTest(t) + defer cancel() + + //install contract + filenameActor := "contracts/Blocktest.hex" + fromAddr, contractAddr := client.EVM().DeployContractFromFilename(ctx, filenameActor) + + ret, wait, err := client.EVM().InvokeContractByFuncName(ctx, fromAddr, contractAddr, "getBasefee()", []byte{}) + require.NoError(t, err) + baseFeeRet, err := decodeOutputToUint64(ret) + require.NoError(t, err) + + ethBlock := client.EVM().GetEthBlockFromWait(ctx, wait) + + require.Equal(t, ethBlock.BaseFeePerGas, ethtypes.EthBigInt(big.NewInt(int64(baseFeeRet)))) +} + func TestFEVMErrorParsing(t *testing.T) { ctx, cancel, client := kit.SetupFEVMTest(t) defer cancel() diff --git a/itests/kit/evm.go b/itests/kit/evm.go index 3cbfcd5f23f..a2ab5bb6fd1 100644 --- a/itests/kit/evm.go +++ b/itests/kit/evm.go @@ -247,6 +247,22 @@ func (e *EVM) ComputeContractAddress(deployer ethtypes.EthAddress, nonce uint64) return *(*ethtypes.EthAddress)(hasher.Sum(nil)[12:]) } +// return eth block from a wait return +// this necessarily goes back one parent in the chain because wait is one block ahead of execution +func (e *EVM) GetEthBlockFromWait(ctx context.Context, wait *api.MsgLookup) ethtypes.EthBlock { + c, err := wait.TipSet.Cid() + require.NoError(e.t, err) + hash, err := ethtypes.EthHashFromCid(c) + require.NoError(e.t, err) + + ethBlockParent, err := e.EthGetBlockByHash(ctx, hash, true) + require.NoError(e.t, err) + ethBlock, err := e.EthGetBlockByHash(ctx, ethBlockParent.ParentHash, true) + require.NoError(e.t, err) + + return ethBlock +} + func (e *EVM) InvokeContractByFuncName(ctx context.Context, fromAddr address.Address, idAddr address.Address, funcSignature string, inputData []byte) ([]byte, *api.MsgLookup, error) { entryPoint := CalcFuncSignature(funcSignature) wait, err := e.InvokeSolidity(ctx, fromAddr, idAddr, entryPoint, inputData) From 2ef5a742e955f9a85f7f77aa467b48628fc91752 Mon Sep 17 00:00:00 2001 From: Aayush Date: Fri, 17 Feb 2023 17:54:20 -0500 Subject: [PATCH 4/5] chore: release v1.20.0-rc2 --- CHANGELOG.md | 19 +++++++++++++------ build/openrpc/full.json.gz | Bin 33201 -> 33201 bytes build/openrpc/gateway.json.gz | Bin 8483 -> 8482 bytes build/openrpc/miner.json.gz | Bin 16046 -> 16046 bytes build/openrpc/worker.json.gz | Bin 5223 -> 5223 bytes build/version.go | 2 +- documentation/en/cli-lotus-miner.md | 2 +- documentation/en/cli-lotus-worker.md | 2 +- documentation/en/cli-lotus.md | 2 +- 9 files changed, 17 insertions(+), 10 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b77b86ee31c..94ef2aba312 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,8 +1,8 @@ # Lotus changelog -# 1.20.0-rc1 / 2023-02-14 +# 1.20.0-rc2 / 2023-02-17 -This is the first release candidate for the upcoming MANDATORY 1.20.0 release of Lotus. This release will deliver the Hygge network upgrade, introducing Filecoin network version 18. The centerpiece of the upgrade is the introduction of the [Filecoin Virtual Machine (FVM)’s Milestone 2.1](https://fvm.filecoin.io/), which will allow for EVM-compatible contracts to be deployed on the Filecoin network. This upgrade delivers user-programmablity to the Filecoin network for the first time! +This is the second release candidate for the upcoming MANDATORY 1.20.0 release of Lotus. This release will deliver the Hygge network upgrade, introducing Filecoin network version 18. The centerpiece of the upgrade is the introduction of the [Filecoin Virtual Machine (FVM)’s Milestone 2.1](https://fvm.filecoin.io/), which will allow for EVM-compatible contracts to be deployed on the Filecoin network. This upgrade delivers user-programmablity to the Filecoin network for the first time! Note that this release candidate does NOT set the epoch at which mainnet will upgrade; that detail will be finalized in the 1.20.0 release. @@ -15,6 +15,14 @@ The Hygge upgrade introduces the following Filecoin Improvement Proposals (FIPs) - [FIP-0055](https://github.com/filecoin-project/FIPs/blob/master/FIPS/fip-0055.md): Supporting Ethereum Accounts, Addresses, and Transactions - [FIP-0057](https://github.com/filecoin-project/FIPs/blob/master/FIPS/fip-0057.md): Update gas charging schedule and system limits for FEVM +## Changes since v1.20.0-rc1 + +- feat: API: Add an endpoint to convert Ethereum-like addresses to Filecoin (f410) addresses (#10286) +- fix: EthAPI: correctly decode EthGetStorageAt output (#10284) +- feat: EthAPI: parse revert data in EthCall (#10295) +- chore: deps: bump go-libipfs to v0.4.1 +- feat: EthAPI: return revert data on failed gas estimation #10298 + ## Filecoin Ethereum Virtual Machine (FEVM) The Filecoin Ethereum Virtual Machine (FEVM) is built on top of the WASM-based execution environment introduced in the Skyr v16 upgrade. The chief feature introduced is the ability for anyone participating in the Filecoin network to deploy their own EVM-compatible contracts onto the blockchain, and invoke them as appropriate. @@ -27,8 +35,8 @@ The creation of EVM actors is managed by **the new** [Ethereum Address Manager a ## Calibration nv18 Hygge Upgrade -This release candidate sets the calibration-net nv18 Hygge upgrade at epoch 322354, 22023-02-21T16:30:00Z. The bundle the network will be using is [v10.0.0 actors](https://github.com/filecoin-project/builtin-actors/releases/tag/v10.0.0-rc.1) -(located at `build/actors/v10.tar.zst`) upon/post migration, manifest CID `bafy2bzaced25ta3j6ygs34roprilbtb3f6mxifyfnm7z7ndquaruxzdq3y7lo`. +This release candidate sets the calibration-net nv18 Hygge upgrade at epoch 322354, 2023-02-21T16:30:00Z. The bundle the network will be using is [v10.0.0 actors](https://github.com/filecoin-project/builtin-actors/releases/tag/v10.0.0-rc.1) +(located at `build/actors/v10.tar.zst`) upon/post migration, manifest CID `bafy2bzaced25ta3j6ygs34roprilbtb3f6mxifyfnm7z7ndquaruxzdq3y7lo`. ## Node Operators @@ -44,12 +52,11 @@ Note that Ethereum APIs are only supported in the lotus v1 API, meaning that any Most of the Eth APIs take Eth accounts and tx has as an input, and they start with `0x` , and that is what Ethereum tooling support. However, in Filecoin, we have Filecoin account formats where things start with `f` (`f410` specifically for eth accounts on Filecoin) and the messages are in the format of CIDs. To enable a smooth developer experience, Lotus internally converts between Ethereum address and Filecoin account address as needed. In addition, lotus also keeps a Eth tx hash <> Filecoin message CID map and stores them in a SQLite database as node sees a FEVM messages. The database is initiated and the maps are populated automatically in `~//sqlite/txhash.db` for any node that as Eth RPC enabled. Node operators can configure how many historical mappings they wanna store by configuring `EthTxHashMappingLifetimeDays` . -**Events*** +**Events** [FIP-0049 introduces actor events](https://github.com/filecoin-project/FIPs/blob/master/FIPS/fip-0049.md) that can be emitted and externally observable during message execution. An `events.db` is created automatically under `~//sqlite` to store these events if the node has Eth RPC enabled. Node operators can configure the events support base on their needs by configuration `Events` configurations. Note: All three features are new and we welcome user feedbacks, create an issue if you have any enhancements that you’d like to see! - # 1.19.0 / 2022-12-07 This is an optional feature release of Lotus. This feature release includes the SplitStore beta, the experimental Lotus node cluster feature, as well as numerous enhancments and bugfixes. diff --git a/build/openrpc/full.json.gz b/build/openrpc/full.json.gz index 06e43869da8a7952e093c3dccc9c1bdc726af3e1..a169a93655a37ab79454b0493e60ac45066560c0 100644 GIT binary patch delta 23 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 Q7XSeN|2>h70a4Te0JVd;MF0Q* literal 8483 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 delta 5136 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 diff --git a/build/version.go b/build/version.go index 7ae30bba882..0fb6d83fd17 100644 --- a/build/version.go +++ b/build/version.go @@ -37,7 +37,7 @@ func BuildTypeString() string { } // BuildVersion is the local build version -const BuildVersion = "1.20.0-rc1" +const BuildVersion = "1.20.0-rc2" func UserVersion() string { if os.Getenv("LOTUS_VERSION_IGNORE_COMMIT") == "1" { diff --git a/documentation/en/cli-lotus-miner.md b/documentation/en/cli-lotus-miner.md index 41ea959bcd7..e345c71c17c 100644 --- a/documentation/en/cli-lotus-miner.md +++ b/documentation/en/cli-lotus-miner.md @@ -7,7 +7,7 @@ USAGE: lotus-miner [global options] command [command options] [arguments...] VERSION: - 1.20.0-rc1 + 1.20.0-rc2 COMMANDS: init Initialize a lotus miner repo diff --git a/documentation/en/cli-lotus-worker.md b/documentation/en/cli-lotus-worker.md index f5cf911927f..eb08e14e5cf 100644 --- a/documentation/en/cli-lotus-worker.md +++ b/documentation/en/cli-lotus-worker.md @@ -7,7 +7,7 @@ USAGE: lotus-worker [global options] command [command options] [arguments...] VERSION: - 1.20.0-rc1 + 1.20.0-rc2 COMMANDS: run Start lotus worker diff --git a/documentation/en/cli-lotus.md b/documentation/en/cli-lotus.md index b3348a61e7f..95209b8d702 100644 --- a/documentation/en/cli-lotus.md +++ b/documentation/en/cli-lotus.md @@ -7,7 +7,7 @@ USAGE: lotus [global options] command [command options] [arguments...] VERSION: - 1.20.0-rc1 + 1.20.0-rc2 COMMANDS: daemon Start a lotus daemon process From 1706a9fd6dd1466596864c8f1fc79364d9c9123e Mon Sep 17 00:00:00 2001 From: "Masih H. Derkani" Date: Tue, 10 Jan 2023 13:04:11 +0000 Subject: [PATCH 5/5] Upgrade to index-provider 0.10.0 Upgrade to the latest index-provider and as a result also upgrade go-fil-markets. Note that the index-provider go module is renamed and moved to `ipni` GitHub org. --- go.mod | 6 +++--- go.sum | 12 ++++++------ itests/deals_concurrent_test.go | 2 +- node/builder_miner.go | 2 +- node/modules/storageminer.go | 2 +- node/modules/storageminer_idxprov.go | 4 ++-- node/modules/storageminer_idxprov_test.go | 2 +- 7 files changed, 15 insertions(+), 15 deletions(-) diff --git a/go.mod b/go.mod index 784035ed7cb..7a8713a5235 100644 --- a/go.mod +++ b/go.mod @@ -39,7 +39,7 @@ require ( github.com/filecoin-project/go-data-transfer v1.15.2 github.com/filecoin-project/go-fil-commcid v0.1.0 github.com/filecoin-project/go-fil-commp-hashhash v0.1.0 - github.com/filecoin-project/go-fil-markets v1.25.2 + github.com/filecoin-project/go-fil-markets v1.25.3 github.com/filecoin-project/go-jsonrpc v0.2.1 github.com/filecoin-project/go-legs v0.4.4 github.com/filecoin-project/go-padreader v0.0.1 @@ -48,7 +48,6 @@ require ( github.com/filecoin-project/go-statemachine v1.0.2 github.com/filecoin-project/go-statestore v0.2.0 github.com/filecoin-project/go-storedcounter v0.1.0 - github.com/filecoin-project/index-provider v0.9.1 github.com/filecoin-project/pubsub v1.0.0 github.com/filecoin-project/specs-actors v0.9.15 github.com/filecoin-project/specs-actors/v2 v2.3.6 @@ -111,6 +110,7 @@ require ( github.com/ipld/go-codec-dagpb v1.5.0 github.com/ipld/go-ipld-prime v0.20.0 github.com/ipld/go-ipld-selector-text-lite v0.0.1 + github.com/ipni/index-provider v0.10.0 github.com/kelseyhightower/envconfig v1.4.0 github.com/koalacxr/quantile v0.0.1 github.com/libp2p/go-buffer-pool v0.1.0 @@ -204,7 +204,6 @@ require ( github.com/filecoin-project/go-hamt-ipld v0.1.5 // indirect github.com/filecoin-project/go-hamt-ipld/v2 v2.0.0 // indirect github.com/filecoin-project/go-hamt-ipld/v3 v3.1.0 // indirect - github.com/filecoin-project/storetheindex v0.4.30-0.20221114113647-683091f8e893 // indirect github.com/flynn/noise v1.0.0 // indirect github.com/francoispqt/gojay v1.2.13 // indirect github.com/fsnotify/fsnotify v1.5.4 // indirect @@ -248,6 +247,7 @@ require ( github.com/ipfs/go-peertaskqueue v0.8.1 // indirect github.com/ipfs/go-verifcid v0.0.2 // indirect github.com/ipld/go-ipld-adl-hamt v0.0.0-20220616142416-9004dbd839e0 // indirect + github.com/ipni/storetheindex v0.5.3-0.20221203123030-16745cb63f15 // indirect github.com/ipsn/go-secp256k1 v0.0.0-20180726113642-9d62b9f0bc52 // indirect github.com/jackpal/go-nat-pmp v1.0.2 // indirect github.com/jbenet/go-random v0.0.0-20190219211222-123a90aedc0c // indirect diff --git a/go.sum b/go.sum index 64763d33339..7b1da38097b 100644 --- a/go.sum +++ b/go.sum @@ -331,8 +331,8 @@ github.com/filecoin-project/go-fil-commcid v0.1.0 h1:3R4ds1A9r6cr8mvZBfMYxTS88Oq github.com/filecoin-project/go-fil-commcid v0.1.0/go.mod h1:Eaox7Hvus1JgPrL5+M3+h7aSPHc0cVqpSxA+TxIEpZQ= github.com/filecoin-project/go-fil-commp-hashhash v0.1.0 h1:imrrpZWEHRnNqqv0tN7LXep5bFEVOVmQWHJvl2mgsGo= github.com/filecoin-project/go-fil-commp-hashhash v0.1.0/go.mod h1:73S8WSEWh9vr0fDJVnKADhfIv/d6dCbAGaAGWbdJEI8= -github.com/filecoin-project/go-fil-markets v1.25.2 h1:kVfgaamTC7dkn8KwS5zRJBNEBSNvVqdG3BCoDaUYuCI= -github.com/filecoin-project/go-fil-markets v1.25.2/go.mod h1:dc2oTPU6GH3Qk1nA+Er+hSX64rg+NVykkPIWFBYxcZU= +github.com/filecoin-project/go-fil-markets v1.25.3 h1:50kK+2VBmyh9SuuS/MgcTRaWlVdBdTZLPCzMxw8ONBg= +github.com/filecoin-project/go-fil-markets v1.25.3/go.mod h1:eOIYHfPwyqc64O1HiapvcelfnrTfU7gLQgBf55IYleQ= github.com/filecoin-project/go-hamt-ipld v0.1.5 h1:uoXrKbCQZ49OHpsTCkrThPNelC4W3LPEk0OrS/ytIBM= github.com/filecoin-project/go-hamt-ipld v0.1.5/go.mod h1:6Is+ONR5Cd5R6XZoCse1CWaXZc0Hdb/JeX+EQCQzX24= github.com/filecoin-project/go-hamt-ipld/v2 v2.0.0 h1:b3UDemBYN2HNfk3KOXNuxgTTxlWi3xVvbQP0IT38fvM= @@ -366,8 +366,6 @@ github.com/filecoin-project/go-statestore v0.2.0 h1:cRRO0aPLrxKQCZ2UOQbzFGn4WDNd github.com/filecoin-project/go-statestore v0.2.0/go.mod h1:8sjBYbS35HwPzct7iT4lIXjLlYyPor80aU7t7a/Kspo= github.com/filecoin-project/go-storedcounter v0.1.0 h1:Mui6wSUBC+cQGHbDUBcO7rfh5zQkWJM/CpAZa/uOuus= github.com/filecoin-project/go-storedcounter v0.1.0/go.mod h1:4ceukaXi4vFURIoxYMfKzaRF5Xv/Pinh2oTnoxpv+z8= -github.com/filecoin-project/index-provider v0.9.1 h1:Jnh9dviIHvQxZ2baNoYu3n8z6F9O62ksnVlyREgPyyM= -github.com/filecoin-project/index-provider v0.9.1/go.mod h1:NlHxQcy2iMGfUoUGUzrRxntcpiC50QSnvp68u2VTT40= github.com/filecoin-project/pubsub v1.0.0 h1:ZTmT27U07e54qV1mMiQo4HDr0buo8I1LDHBYLXlsNXM= github.com/filecoin-project/pubsub v1.0.0/go.mod h1:GkpB33CcUtUNrLPhJgfdy4FDx4OMNR9k+46DHx/Lqrg= github.com/filecoin-project/specs-actors v0.9.13/go.mod h1:TS1AW/7LbG+615j4NsjMK1qlpAwaFsG9w0V2tg2gSao= @@ -388,8 +386,6 @@ github.com/filecoin-project/specs-actors/v7 v7.0.1 h1:w72xCxijK7xs1qzmJiw+WYJaVt github.com/filecoin-project/specs-actors/v7 v7.0.1/go.mod h1:tPLEYXoXhcpyLh69Ccq91SOuLXsPWjHiY27CzawjUEk= github.com/filecoin-project/specs-actors/v8 v8.0.1 h1:4u0tIRJeT5G7F05lwLRIsDnsrN+bJ5Ixj6h49Q7uE2Y= github.com/filecoin-project/specs-actors/v8 v8.0.1/go.mod h1:UYIPg65iPWoFw5NEftREdJwv9b/5yaLKdCgTvNI/2FA= -github.com/filecoin-project/storetheindex v0.4.30-0.20221114113647-683091f8e893 h1:6GCuzxLVHBzlz7y+FkbHh6n0UyoEGWqDwJKQPJoz7bE= -github.com/filecoin-project/storetheindex v0.4.30-0.20221114113647-683091f8e893/go.mod h1:S7590oDimBvXMUtzWsBXoshu9HtYKwtXl47zAK9rcP8= github.com/filecoin-project/test-vectors/schema v0.0.5 h1:w3zHQhzM4pYxJDl21avXjOKBLF8egrvwUwjpT8TquDg= github.com/filecoin-project/test-vectors/schema v0.0.5/go.mod h1:iQ9QXLpYWL3m7warwvK1JC/pTri8mnfEmKygNDqqY6E= github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= @@ -910,6 +906,10 @@ github.com/ipld/go-ipld-prime/storage/bsadapter v0.0.0-20211210234204-ce2a1c70cd github.com/ipld/go-ipld-prime/storage/bsadapter v0.0.0-20211210234204-ce2a1c70cd73/go.mod h1:2PJ0JgxyB08t0b2WKrcuqI3di0V+5n6RS/LTUJhkoxY= github.com/ipld/go-ipld-selector-text-lite v0.0.1 h1:lNqFsQpBHc3p5xHob2KvEg/iM5dIFn6iw4L/Hh+kS1Y= github.com/ipld/go-ipld-selector-text-lite v0.0.1/go.mod h1:U2CQmFb+uWzfIEF3I1arrDa5rwtj00PrpiwwCO+k1RM= +github.com/ipni/index-provider v0.10.0 h1:nu8YBxzRopdjwZHsgCUuC4AHpq88VVHJYrbkqUDx7eg= +github.com/ipni/index-provider v0.10.0/go.mod h1:InSXbZp2p/ZhAwiDElG/wzjnA1ea1iJ3hhyiAHrD+Vo= +github.com/ipni/storetheindex v0.5.3-0.20221203123030-16745cb63f15 h1:qJq6QtLk+9nQi3CDBhNfJ1cjZ4pghjCHcQUZ1mWbF0k= +github.com/ipni/storetheindex v0.5.3-0.20221203123030-16745cb63f15/go.mod h1:c/NS640Iu2NrCCIErnUhsUM5KVEyeXymgtNnx6eDwMU= github.com/ipsn/go-secp256k1 v0.0.0-20180726113642-9d62b9f0bc52 h1:QG4CGBqCeuBo6aZlGAamSkxWdgWfZGeE49eUOWJPA4c= github.com/ipsn/go-secp256k1 v0.0.0-20180726113642-9d62b9f0bc52/go.mod h1:fdg+/X9Gg4AsAIzWpEHwnqd+QY3b7lajxyjE1m4hkq4= github.com/jackpal/gateway v1.0.5/go.mod h1:lTpwd4ACLXmpyiCTRtfiNyVnUmqT9RivzCDQetPfnjA= diff --git a/itests/deals_concurrent_test.go b/itests/deals_concurrent_test.go index e36bde773a8..0fee8da01df 100644 --- a/itests/deals_concurrent_test.go +++ b/itests/deals_concurrent_test.go @@ -8,12 +8,12 @@ import ( "testing" "time" + provider "github.com/ipni/index-provider" "github.com/stretchr/testify/require" datatransfer "github.com/filecoin-project/go-data-transfer" "github.com/filecoin-project/go-fil-markets/shared_testutil" "github.com/filecoin-project/go-state-types/abi" - provider "github.com/filecoin-project/index-provider" "github.com/filecoin-project/lotus/api" "github.com/filecoin-project/lotus/itests/kit" diff --git a/node/builder_miner.go b/node/builder_miner.go index 2d33727f804..68d5a32f891 100644 --- a/node/builder_miner.go +++ b/node/builder_miner.go @@ -4,6 +4,7 @@ import ( "errors" "time" + provider "github.com/ipni/index-provider" "go.uber.org/fx" "golang.org/x/xerrors" @@ -12,7 +13,6 @@ import ( "github.com/filecoin-project/go-fil-markets/storagemarket" "github.com/filecoin-project/go-fil-markets/storagemarket/impl/storedask" "github.com/filecoin-project/go-state-types/abi" - provider "github.com/filecoin-project/index-provider" "github.com/filecoin-project/lotus/api" "github.com/filecoin-project/lotus/api/v1api" diff --git a/node/modules/storageminer.go b/node/modules/storageminer.go index dff9c14153a..7f6ccf60a99 100644 --- a/node/modules/storageminer.go +++ b/node/modules/storageminer.go @@ -18,6 +18,7 @@ import ( graphsync "github.com/ipfs/go-graphsync/impl" gsnet "github.com/ipfs/go-graphsync/network" "github.com/ipfs/go-graphsync/storeutil" + provider "github.com/ipni/index-provider" "github.com/libp2p/go-libp2p/core/host" "go.uber.org/fx" "go.uber.org/multierr" @@ -42,7 +43,6 @@ import ( "github.com/filecoin-project/go-state-types/abi" "github.com/filecoin-project/go-state-types/big" "github.com/filecoin-project/go-statestore" - provider "github.com/filecoin-project/index-provider" "github.com/filecoin-project/lotus/api" "github.com/filecoin-project/lotus/api/v0api" diff --git a/node/modules/storageminer_idxprov.go b/node/modules/storageminer_idxprov.go index 92a6a6a548f..dc4e608780a 100644 --- a/node/modules/storageminer_idxprov.go +++ b/node/modules/storageminer_idxprov.go @@ -5,14 +5,14 @@ import ( "github.com/ipfs/go-datastore" "github.com/ipfs/go-datastore/namespace" + provider "github.com/ipni/index-provider" + "github.com/ipni/index-provider/engine" pubsub "github.com/libp2p/go-libp2p-pubsub" "github.com/libp2p/go-libp2p/core/host" "go.uber.org/fx" "golang.org/x/xerrors" "github.com/filecoin-project/go-address" - provider "github.com/filecoin-project/index-provider" - "github.com/filecoin-project/index-provider/engine" "github.com/filecoin-project/lotus/build" "github.com/filecoin-project/lotus/node/config" diff --git a/node/modules/storageminer_idxprov_test.go b/node/modules/storageminer_idxprov_test.go index 8d5717b66f5..434577bab64 100644 --- a/node/modules/storageminer_idxprov_test.go +++ b/node/modules/storageminer_idxprov_test.go @@ -7,6 +7,7 @@ import ( "time" "github.com/ipfs/go-datastore" + provider "github.com/ipni/index-provider" "github.com/libp2p/go-libp2p" pubsub "github.com/libp2p/go-libp2p-pubsub" "github.com/libp2p/go-libp2p/core/host" @@ -14,7 +15,6 @@ import ( "go.uber.org/fx" "github.com/filecoin-project/go-address" - provider "github.com/filecoin-project/index-provider" "github.com/filecoin-project/lotus/node/config" "github.com/filecoin-project/lotus/node/modules"