Only set genesis once
This commit is contained in:
+1
-1
@@ -196,7 +196,7 @@ func Online() Option {
|
||||
Override(new(*chain.Wallet), chain.NewWallet),
|
||||
Override(new(*chain.MessagePool), chain.NewMessagePool),
|
||||
|
||||
Override(new(modules.Genesis), testing.MakeGenesis),
|
||||
Override(new(modules.Genesis), modules.ErrorGenesis),
|
||||
Override(SetGenesisKey, modules.SetGenesis),
|
||||
|
||||
Override(new(*hello.Service), hello.NewHelloService),
|
||||
|
||||
+34
-3
@@ -8,7 +8,6 @@ import (
|
||||
"path/filepath"
|
||||
|
||||
"github.com/gbrlsnchs/jwt/v3"
|
||||
|
||||
"github.com/ipfs/go-bitswap"
|
||||
"github.com/ipfs/go-bitswap/network"
|
||||
"github.com/ipfs/go-blockservice"
|
||||
@@ -37,7 +36,7 @@ import (
|
||||
|
||||
var log = logging.Logger("modules")
|
||||
|
||||
type Genesis *chain.BlockHeader
|
||||
type Genesis func() (*chain.BlockHeader, error)
|
||||
|
||||
// RecordValidator provides namesys compatible routing record validator
|
||||
func RecordValidator(ps peerstore.Peerstore) record.Validator {
|
||||
@@ -58,7 +57,20 @@ func Bitswap(mctx helpers.MetricsCtx, lc fx.Lifecycle, host host.Host, rt routin
|
||||
}
|
||||
|
||||
func SetGenesis(cs *chain.ChainStore, g Genesis) error {
|
||||
return cs.SetGenesis(g)
|
||||
_, err := cs.GetGenesis()
|
||||
if err == nil {
|
||||
return nil // already set, noop
|
||||
}
|
||||
if err != datastore.ErrNotFound {
|
||||
return err
|
||||
}
|
||||
|
||||
genesis, err := g()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return cs.SetGenesis(genesis)
|
||||
}
|
||||
|
||||
func LockedRepo(lr repo.LockedRepo) func(lc fx.Lifecycle) repo.LockedRepo {
|
||||
@@ -176,3 +188,22 @@ func ChainStore(lc fx.Lifecycle, bs blockstore.Blockstore, ds datastore.Batching
|
||||
|
||||
return chain
|
||||
}
|
||||
|
||||
func ErrorGenesis() Genesis {
|
||||
return func() (header *chain.BlockHeader, e error) {
|
||||
return nil, xerrors.New("No genesis block provided")
|
||||
}
|
||||
}
|
||||
|
||||
func LoadGenesis(f string) func() Genesis {
|
||||
return func() Genesis {
|
||||
return func() (header *chain.BlockHeader, e error) {
|
||||
genBytes, err := ioutil.ReadFile(f)
|
||||
if err != nil {
|
||||
return &chain.BlockHeader{}, err
|
||||
}
|
||||
|
||||
return chain.DecodeBlock(genBytes)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,16 +1,47 @@
|
||||
package testing
|
||||
|
||||
import (
|
||||
"os"
|
||||
|
||||
blockstore "github.com/ipfs/go-ipfs-blockstore"
|
||||
logging "github.com/ipfs/go-log"
|
||||
|
||||
"github.com/filecoin-project/go-lotus/chain"
|
||||
"github.com/filecoin-project/go-lotus/node/modules"
|
||||
)
|
||||
|
||||
func MakeGenesis(bs blockstore.Blockstore, w *chain.Wallet) (modules.Genesis, error) {
|
||||
genb, err := chain.MakeGenesisBlock(bs, w)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
var glog = logging.Logger("genesis")
|
||||
|
||||
func MakeGenesis(outFile string) func(bs blockstore.Blockstore, w *chain.Wallet) modules.Genesis {
|
||||
return func(bs blockstore.Blockstore, w *chain.Wallet) modules.Genesis {
|
||||
return func() (*chain.BlockHeader, error) {
|
||||
glog.Warn("Generating new random genesis block, note that this SHOULD NOT happen unless you are setting up new network")
|
||||
b, err := chain.MakeGenesisBlock(bs, w)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
f, err := os.OpenFile(outFile, os.O_CREATE|os.O_WRONLY, 0644)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
genBytes, err := b.Genesis.Serialize()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if _, err := f.Write(genBytes); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
glog.Warnf("WRITING GENESIS FILE AT %s", f.Name())
|
||||
|
||||
if err := f.Close(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return b.Genesis, nil
|
||||
}
|
||||
}
|
||||
return genb.Genesis, nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user