Merge pull request #8509 from filecoin-project/feat/actor-bundles
This commit is contained in:
commit
3e5037d196
@ -86,22 +86,10 @@ commands:
|
|||||||
git fetch --all
|
git fetch --all
|
||||||
fetch_builtin_actors:
|
fetch_builtin_actors:
|
||||||
steps:
|
steps:
|
||||||
- restore_cache:
|
|
||||||
name: restore builtin actors bundle cache
|
|
||||||
keys:
|
|
||||||
- 'builtin-actors-v8.car'
|
|
||||||
paths:
|
|
||||||
- build/builtin-actors/
|
|
||||||
- run:
|
- run:
|
||||||
name: fetch builtin actor bundles
|
name: fetch builtin actor bundles
|
||||||
command: |
|
command: |
|
||||||
build/builtin-actors/fetch-bundles.sh
|
build/builtin-actors/fetch-bundles.sh
|
||||||
- save_cache:
|
|
||||||
name: save builtin actors bundle cache
|
|
||||||
key: 'builtin-actors-v8.car'
|
|
||||||
paths:
|
|
||||||
- build/builtin-actors/
|
|
||||||
|
|
||||||
packer_build:
|
packer_build:
|
||||||
description: "Run a packer build"
|
description: "Run a packer build"
|
||||||
parameters:
|
parameters:
|
||||||
@ -214,6 +202,7 @@ jobs:
|
|||||||
environment:
|
environment:
|
||||||
TEST_RUSTPROOFS_LOGS: << parameters.proofs-log-test >>
|
TEST_RUSTPROOFS_LOGS: << parameters.proofs-log-test >>
|
||||||
SKIP_CONFORMANCE: "1"
|
SKIP_CONFORMANCE: "1"
|
||||||
|
LOTUS_SRC_DIR: /home/circleci/project
|
||||||
command: |
|
command: |
|
||||||
mkdir -p /tmp/test-reports/<< parameters.suite >>
|
mkdir -p /tmp/test-reports/<< parameters.suite >>
|
||||||
mkdir -p /tmp/test-artifacts
|
mkdir -p /tmp/test-artifacts
|
||||||
|
@ -86,22 +86,10 @@ commands:
|
|||||||
git fetch --all
|
git fetch --all
|
||||||
fetch_builtin_actors:
|
fetch_builtin_actors:
|
||||||
steps:
|
steps:
|
||||||
- restore_cache:
|
|
||||||
name: restore builtin actors bundle cache
|
|
||||||
keys:
|
|
||||||
- 'builtin-actors-v8.car'
|
|
||||||
paths:
|
|
||||||
- build/builtin-actors/
|
|
||||||
- run:
|
- run:
|
||||||
name: fetch builtin actor bundles
|
name: fetch builtin actor bundles
|
||||||
command: |
|
command: |
|
||||||
build/builtin-actors/fetch-bundles.sh
|
build/builtin-actors/fetch-bundles.sh
|
||||||
- save_cache:
|
|
||||||
name: save builtin actors bundle cache
|
|
||||||
key: 'builtin-actors-v8.car'
|
|
||||||
paths:
|
|
||||||
- build/builtin-actors/
|
|
||||||
|
|
||||||
packer_build:
|
packer_build:
|
||||||
description: "Run a packer build"
|
description: "Run a packer build"
|
||||||
parameters:
|
parameters:
|
||||||
@ -214,6 +202,7 @@ jobs:
|
|||||||
environment:
|
environment:
|
||||||
TEST_RUSTPROOFS_LOGS: << parameters.proofs-log-test >>
|
TEST_RUSTPROOFS_LOGS: << parameters.proofs-log-test >>
|
||||||
SKIP_CONFORMANCE: "1"
|
SKIP_CONFORMANCE: "1"
|
||||||
|
LOTUS_SRC_DIR: /home/circleci/project
|
||||||
command: |
|
command: |
|
||||||
mkdir -p /tmp/test-reports/<< parameters.suite >>
|
mkdir -p /tmp/test-reports/<< parameters.suite >>
|
||||||
mkdir -p /tmp/test-artifacts
|
mkdir -p /tmp/test-artifacts
|
||||||
|
2
.gitignore
vendored
2
.gitignore
vendored
@ -49,4 +49,4 @@ bin/tmp/*
|
|||||||
.idea
|
.idea
|
||||||
scratchpad
|
scratchpad
|
||||||
|
|
||||||
build/builtin-actors/*.car
|
build/builtin-actors/v*
|
||||||
|
2
build/builtin-actors/bundles.env
Normal file
2
build/builtin-actors/bundles.env
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
actors7_release=""
|
||||||
|
actors8_release=a9635268e3b359bd
|
@ -3,50 +3,83 @@ set -e
|
|||||||
|
|
||||||
cd "$(dirname "$0")"
|
cd "$(dirname "$0")"
|
||||||
|
|
||||||
# gateway to use
|
. bundles.env
|
||||||
dweb="dweb.link"
|
|
||||||
|
|
||||||
actors7_cid=""
|
|
||||||
actors7_hash=""
|
|
||||||
actors8_cid="bafybeictmywrut5tprz5fnoti6adfwuvixvrfardhqwldxosmdsfavc56e"
|
|
||||||
actors8_hash="687b38f59b0c32800f55a8f1f303de214ec173c90e653984d67f393bc41c1416"
|
|
||||||
|
|
||||||
die() {
|
die() {
|
||||||
echo "$1"
|
echo "$1"
|
||||||
exit 1
|
exit 1
|
||||||
}
|
}
|
||||||
|
|
||||||
check() {
|
|
||||||
file=$1
|
|
||||||
hash=$2
|
|
||||||
if [ -e "$file" ]; then
|
|
||||||
echo "$hash $file" | shasum -a 256 --check
|
|
||||||
else
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
fetch() {
|
fetch() {
|
||||||
output=$1
|
ver=$1
|
||||||
cid=$2
|
rel=$2
|
||||||
hash=$3
|
|
||||||
if (check "$output" "$hash"); then
|
if [ ! -e $ver ]; then
|
||||||
return 0
|
mkdir $ver
|
||||||
else
|
|
||||||
echo "fetching $cid to $output"
|
|
||||||
curl --retry 3 -k "https://$dweb/ipfs/$cid" -o "$output"
|
|
||||||
check "$output" "$hash" || die "hash mismatch"
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [ -e $ver/release ]; then
|
||||||
|
cur=$(cat $ver/release)
|
||||||
|
if [ $cur == $rel ]; then
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
for net in mainnet caterpillarnet butterflynet calibrationnet devnet testing; do
|
||||||
|
fetch_bundle $ver $rel $net
|
||||||
|
done
|
||||||
|
|
||||||
|
# remember the current release so that we don't have to hit github unless we have modified it
|
||||||
|
echo $rel > $ver/release
|
||||||
}
|
}
|
||||||
|
|
||||||
if [ -n "$actors7_cid" ]; then
|
fetch_bundle() {
|
||||||
fetch builtin-actors-v7.car "$actors7_cid" "$actors7_hash"
|
ver=$1
|
||||||
else
|
rel=$2
|
||||||
touch builtin-actors-v7.car
|
net=$3
|
||||||
|
|
||||||
|
target=builtin-actors-$net.car
|
||||||
|
hash=builtin-actors-$net.sha256
|
||||||
|
|
||||||
|
pushd $ver
|
||||||
|
|
||||||
|
# fetch the hash first and check if it matches what we (may) already have
|
||||||
|
curl -L --retry 3 https://github.com/filecoin-project/builtin-actors/releases/download/$rel/$hash -o $hash || die "error fetching hash for $ver/$net"
|
||||||
|
if [ -e $target ]; then
|
||||||
|
if (shasum -a 256 --check $hash); then
|
||||||
|
popd
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ -n "$actors8_cid" ]; then
|
# we don't have the (correct) bundle, fetch it
|
||||||
fetch builtin-actors-v8.car "$actors8_cid" "$actors8_hash"
|
curl -L --retry 3 https://github.com/filecoin-project/builtin-actors/releases/download/$rel/$target -o $target || die "error fetching bundle for $ver/$net"
|
||||||
else
|
# verify
|
||||||
touch builtin-actors-v8.car
|
shasum -a 256 --check $hash || die "hash mismatch"
|
||||||
|
# all good
|
||||||
|
popd
|
||||||
|
}
|
||||||
|
|
||||||
|
touch_bundles() {
|
||||||
|
ver=$1
|
||||||
|
|
||||||
|
if [ ! -e $ver ]; then
|
||||||
|
mkdir $ver
|
||||||
|
fi
|
||||||
|
|
||||||
|
for net in mainnet caterpillarnet butterflynet calibrationnet devnet testing; do
|
||||||
|
touch $ver/builtin-actors-$net.car
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
if [ -n "$actors7_release" ]; then
|
||||||
|
fetch v7 "$actors7_release"
|
||||||
|
else
|
||||||
|
touch_bundles v7
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -n "$actors8_release" ]; then
|
||||||
|
fetch v8 "$actors8_release"
|
||||||
|
else
|
||||||
|
touch_bundles v8
|
||||||
fi
|
fi
|
||||||
|
22
build/builtin_actors_2k.go
Normal file
22
build/builtin_actors_2k.go
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
//go:build debug || 2k || testground
|
||||||
|
// +build debug 2k testground
|
||||||
|
|
||||||
|
package build
|
||||||
|
|
||||||
|
import (
|
||||||
|
_ "embed"
|
||||||
|
)
|
||||||
|
|
||||||
|
//go:embed builtin-actors/v8/builtin-actors-devnet.car
|
||||||
|
var actorsv8 []byte
|
||||||
|
|
||||||
|
func BuiltinActorsV8Bundle() []byte {
|
||||||
|
return actorsv8
|
||||||
|
}
|
||||||
|
|
||||||
|
//go:embed builtin-actors/v7/builtin-actors-devnet.car
|
||||||
|
var actorsv7 []byte
|
||||||
|
|
||||||
|
func BuiltinActorsV7Bundle() []byte {
|
||||||
|
return actorsv7
|
||||||
|
}
|
22
build/builtin_actors_butterfly.go
Normal file
22
build/builtin_actors_butterfly.go
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
//go:build butterflynet
|
||||||
|
// +build butterflynet
|
||||||
|
|
||||||
|
package build
|
||||||
|
|
||||||
|
import (
|
||||||
|
_ "embed"
|
||||||
|
)
|
||||||
|
|
||||||
|
//go:embed builtin-actors/v8/builtin-actors-butterflynet.car
|
||||||
|
var actorsv8 []byte
|
||||||
|
|
||||||
|
func BuiltinActorsV8Bundle() []byte {
|
||||||
|
return actorsv8
|
||||||
|
}
|
||||||
|
|
||||||
|
//go:embed builtin-actors/v7/builtin-actors-butterflynet.car
|
||||||
|
var actorsv7 []byte
|
||||||
|
|
||||||
|
func BuiltinActorsV7Bundle() []byte {
|
||||||
|
return actorsv7
|
||||||
|
}
|
@ -1,17 +1,20 @@
|
|||||||
|
//go:build calibnet
|
||||||
|
// +build calibnet
|
||||||
|
|
||||||
package build
|
package build
|
||||||
|
|
||||||
import (
|
import (
|
||||||
_ "embed"
|
_ "embed"
|
||||||
)
|
)
|
||||||
|
|
||||||
//go:embed builtin-actors/builtin-actors-v8.car
|
//go:embed builtin-actors/v8/builtin-actors-calibrationnet.car
|
||||||
var actorsv8 []byte
|
var actorsv8 []byte
|
||||||
|
|
||||||
func BuiltinActorsV8Bundle() []byte {
|
func BuiltinActorsV8Bundle() []byte {
|
||||||
return actorsv8
|
return actorsv8
|
||||||
}
|
}
|
||||||
|
|
||||||
//go:embed builtin-actors/builtin-actors-v7.car
|
//go:embed builtin-actors/v7/builtin-actors-calibrationnet.car
|
||||||
var actorsv7 []byte
|
var actorsv7 []byte
|
||||||
|
|
||||||
func BuiltinActorsV7Bundle() []byte {
|
func BuiltinActorsV7Bundle() []byte {
|
22
build/builtin_actors_interop.go
Normal file
22
build/builtin_actors_interop.go
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
//go:build interopnet
|
||||||
|
// +build interopnet
|
||||||
|
|
||||||
|
package build
|
||||||
|
|
||||||
|
import (
|
||||||
|
_ "embed"
|
||||||
|
)
|
||||||
|
|
||||||
|
//go:embed builtin-actors/v8/builtin-actors-caterpillarnet.car
|
||||||
|
var actorsv8 []byte
|
||||||
|
|
||||||
|
func BuiltinActorsV8Bundle() []byte {
|
||||||
|
return actorsv8
|
||||||
|
}
|
||||||
|
|
||||||
|
//go:embed builtin-actors/v7/builtin-actors-caterpillarnet.car
|
||||||
|
var actorsv7 []byte
|
||||||
|
|
||||||
|
func BuiltinActorsV7Bundle() []byte {
|
||||||
|
return actorsv7
|
||||||
|
}
|
22
build/builtin_actors_mainnet.go
Normal file
22
build/builtin_actors_mainnet.go
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
//go:build !debug && !2k && !testground && !calibnet && !nerpanet && !butterflynet && !interopnet
|
||||||
|
// +build !debug,!2k,!testground,!calibnet,!nerpanet,!butterflynet,!interopnet
|
||||||
|
|
||||||
|
package build
|
||||||
|
|
||||||
|
import (
|
||||||
|
_ "embed"
|
||||||
|
)
|
||||||
|
|
||||||
|
//go:embed builtin-actors/v8/builtin-actors-mainnet.car
|
||||||
|
var actorsv8 []byte
|
||||||
|
|
||||||
|
func BuiltinActorsV8Bundle() []byte {
|
||||||
|
return actorsv8
|
||||||
|
}
|
||||||
|
|
||||||
|
//go:embed builtin-actors/v7/builtin-actors-mainnet.car
|
||||||
|
var actorsv7 []byte
|
||||||
|
|
||||||
|
func BuiltinActorsV7Bundle() []byte {
|
||||||
|
return actorsv7
|
||||||
|
}
|
@ -1,6 +1,7 @@
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"context"
|
||||||
"encoding/csv"
|
"encoding/csv"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
@ -12,9 +13,11 @@ import (
|
|||||||
"github.com/filecoin-project/go-state-types/network"
|
"github.com/filecoin-project/go-state-types/network"
|
||||||
|
|
||||||
"github.com/filecoin-project/lotus/blockstore"
|
"github.com/filecoin-project/lotus/blockstore"
|
||||||
|
"github.com/filecoin-project/lotus/chain/actors"
|
||||||
"github.com/filecoin-project/lotus/chain/vm"
|
"github.com/filecoin-project/lotus/chain/vm"
|
||||||
"github.com/filecoin-project/lotus/extern/sector-storage/ffiwrapper"
|
"github.com/filecoin-project/lotus/extern/sector-storage/ffiwrapper"
|
||||||
"github.com/filecoin-project/lotus/journal"
|
"github.com/filecoin-project/lotus/journal"
|
||||||
|
"github.com/filecoin-project/lotus/node/modules/dtypes"
|
||||||
"github.com/filecoin-project/lotus/node/modules/testing"
|
"github.com/filecoin-project/lotus/node/modules/testing"
|
||||||
"github.com/google/uuid"
|
"github.com/google/uuid"
|
||||||
"github.com/mitchellh/go-homedir"
|
"github.com/mitchellh/go-homedir"
|
||||||
@ -577,7 +580,12 @@ var genesisCarCmd = &cli.Command{
|
|||||||
jrnl := journal.NilJournal()
|
jrnl := journal.NilJournal()
|
||||||
bstor := blockstore.WrapIDStore(blockstore.NewMemorySync())
|
bstor := blockstore.WrapIDStore(blockstore.NewMemorySync())
|
||||||
sbldr := vm.Syscalls(ffiwrapper.ProofVerifier)
|
sbldr := vm.Syscalls(ffiwrapper.ProofVerifier)
|
||||||
_, err := testing.MakeGenesis(ofile, c.Args().First())(bstor, sbldr, jrnl)()
|
if len(build.BuiltinActorsV8Bundle()) > 0 {
|
||||||
|
if err := actors.LoadManifestFromBundle(context.TODO(), bstor, actors.Version8, build.BuiltinActorsV8Bundle()); err != nil {
|
||||||
|
return xerrors.Errorf("error loading actor manifest: %w", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
_, err := testing.MakeGenesis(ofile, c.Args().First())(bstor, sbldr, jrnl, dtypes.BuiltinActorsLoaded{})()
|
||||||
return err
|
return err
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
2
extern/filecoin-ffi
vendored
2
extern/filecoin-ffi
vendored
@ -1 +1 @@
|
|||||||
Subproject commit 0c6d698610a98c9efcefc58d5277ee8813d80033
|
Subproject commit 4ff4fec93f1b40e1351af978b8df5de1156f389d
|
@ -384,6 +384,9 @@ func Test() Option {
|
|||||||
Unset(new(*peermgr.PeerMgr)),
|
Unset(new(*peermgr.PeerMgr)),
|
||||||
Override(new(beacon.Schedule), testing.RandomBeacon),
|
Override(new(beacon.Schedule), testing.RandomBeacon),
|
||||||
Override(new(*storageadapter.DealPublisher), storageadapter.NewDealPublisher(nil, storageadapter.PublishMsgConfig{})),
|
Override(new(*storageadapter.DealPublisher), storageadapter.NewDealPublisher(nil, storageadapter.PublishMsgConfig{})),
|
||||||
|
// use the testing bundles
|
||||||
|
Unset(new(dtypes.BuiltinActorsLoaded)),
|
||||||
|
Override(new(dtypes.BuiltinActorsLoaded), modules.LoadBuiltinActorsTesting),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,6 +1,10 @@
|
|||||||
package modules
|
package modules
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
|
"io"
|
||||||
|
"os"
|
||||||
|
|
||||||
"go.uber.org/fx"
|
"go.uber.org/fx"
|
||||||
"golang.org/x/xerrors"
|
"golang.org/x/xerrors"
|
||||||
|
|
||||||
@ -39,3 +43,38 @@ func LoadBultinActors(lc fx.Lifecycle, mctx helpers.MetricsCtx, bs dtypes.Univer
|
|||||||
|
|
||||||
return result, nil
|
return result, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// for itests
|
||||||
|
func LoadBuiltinActorsTesting(lc fx.Lifecycle, mctx helpers.MetricsCtx, bs dtypes.UniversalBlockstore) (result dtypes.BuiltinActorsLoaded, err error) {
|
||||||
|
ctx := helpers.LifecycleCtx(mctx, lc)
|
||||||
|
|
||||||
|
base := os.Getenv("LOTUS_SRC_DIR")
|
||||||
|
if base == "" {
|
||||||
|
base = "."
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, ver := range []actors.Version{actors.Version8} {
|
||||||
|
path := fmt.Sprintf("%s/build/builtin-actors/v%d/builtin-actors-testing.car", base, ver)
|
||||||
|
|
||||||
|
file, err := os.Open(path)
|
||||||
|
if err != nil {
|
||||||
|
return result, xerrors.Errorf("error opening v%d bundle: %w", ver, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
bundle, err := io.ReadAll(file)
|
||||||
|
if err != nil {
|
||||||
|
return result, xerrors.Errorf("error reading v%d bundle: %w", ver, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := actors.LoadBundle(ctx, bs, actors.Version8, bundle); err != nil {
|
||||||
|
return result, xerrors.Errorf("error loading v%d bundle: %w", ver, err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
cborStore := cbor.NewCborStore(bs)
|
||||||
|
if err := actors.LoadManifests(ctx, cborStore); err != nil {
|
||||||
|
return result, xerrors.Errorf("error loading actor manifests: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
return result, nil
|
||||||
|
}
|
||||||
|
@ -30,8 +30,8 @@ import (
|
|||||||
|
|
||||||
var glog = logging.Logger("genesis")
|
var glog = logging.Logger("genesis")
|
||||||
|
|
||||||
func MakeGenesisMem(out io.Writer, template genesis.Template) func(bs dtypes.ChainBlockstore, syscalls vm.SyscallBuilder, j journal.Journal) modules.Genesis {
|
func MakeGenesisMem(out io.Writer, template genesis.Template) func(bs dtypes.ChainBlockstore, syscalls vm.SyscallBuilder, j journal.Journal, _ dtypes.BuiltinActorsLoaded) modules.Genesis {
|
||||||
return func(bs dtypes.ChainBlockstore, syscalls vm.SyscallBuilder, j journal.Journal) modules.Genesis {
|
return func(bs dtypes.ChainBlockstore, syscalls vm.SyscallBuilder, j journal.Journal, _ dtypes.BuiltinActorsLoaded) modules.Genesis {
|
||||||
return func() (*types.BlockHeader, error) {
|
return func() (*types.BlockHeader, error) {
|
||||||
glog.Warn("Generating new random genesis block, note that this SHOULD NOT happen unless you are setting up new network")
|
glog.Warn("Generating new random genesis block, note that this SHOULD NOT happen unless you are setting up new network")
|
||||||
b, err := genesis2.MakeGenesisBlock(context.TODO(), j, bs, syscalls, template)
|
b, err := genesis2.MakeGenesisBlock(context.TODO(), j, bs, syscalls, template)
|
||||||
@ -51,8 +51,8 @@ func MakeGenesisMem(out io.Writer, template genesis.Template) func(bs dtypes.Cha
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func MakeGenesis(outFile, genesisTemplate string) func(bs dtypes.ChainBlockstore, syscalls vm.SyscallBuilder, j journal.Journal) modules.Genesis {
|
func MakeGenesis(outFile, genesisTemplate string) func(bs dtypes.ChainBlockstore, syscalls vm.SyscallBuilder, j journal.Journal, _ dtypes.BuiltinActorsLoaded) modules.Genesis {
|
||||||
return func(bs dtypes.ChainBlockstore, syscalls vm.SyscallBuilder, j journal.Journal) modules.Genesis {
|
return func(bs dtypes.ChainBlockstore, syscalls vm.SyscallBuilder, j journal.Journal, _ dtypes.BuiltinActorsLoaded) modules.Genesis {
|
||||||
return func() (*types.BlockHeader, error) {
|
return func() (*types.BlockHeader, error) {
|
||||||
glog.Warn("Generating new random genesis block, note that this SHOULD NOT happen unless you are setting up new network")
|
glog.Warn("Generating new random genesis block, note that this SHOULD NOT happen unless you are setting up new network")
|
||||||
genesisTemplate, err := homedir.Expand(genesisTemplate)
|
genesisTemplate, err := homedir.Expand(genesisTemplate)
|
||||||
|
Loading…
Reference in New Issue
Block a user