diff --git a/cmd/lotus-seed/main.go b/cmd/lotus-seed/main.go index 2ec30ab38..f17e11bf3 100644 --- a/cmd/lotus-seed/main.go +++ b/cmd/lotus-seed/main.go @@ -1,24 +1,15 @@ package main import ( - "crypto/sha256" - "encoding/json" - "fmt" - "io/ioutil" - "math/rand" "os" - "path/filepath" - badger "github.com/ipfs/go-ds-badger" logging "github.com/ipfs/go-log" "github.com/mitchellh/go-homedir" - "golang.org/x/xerrors" "gopkg.in/urfave/cli.v2" "github.com/filecoin-project/lotus/build" "github.com/filecoin-project/lotus/chain/address" - "github.com/filecoin-project/lotus/genesis" - "github.com/filecoin-project/lotus/lib/sectorbuilder" + "github.com/filecoin-project/lotus/cmd/lotus-seed/seed" ) var log = logging.Logger("lotus-seed") @@ -88,89 +79,6 @@ var preSealCmd = &cli.Command{ return err } - cfg := §orbuilder.Config{ - Miner: maddr, - SectorSize: c.Uint64("sector-size"), - CacheDir: filepath.Join(sbroot, "cache"), - SealedDir: filepath.Join(sbroot, "sealed"), - StagedDir: filepath.Join(sbroot, "staging"), - MetadataDir: filepath.Join(sbroot, "meta"), - WorkerThreads: 2, - } - - for _, d := range []string{cfg.CacheDir, cfg.SealedDir, cfg.StagedDir, cfg.MetadataDir} { - if err := os.MkdirAll(d, 0775); err != nil { - return err - } - } - - mds, err := badger.NewDatastore(filepath.Join(sbroot, "badger"), nil) - if err != nil { - return err - } - - if err := build.GetParams(true, false); err != nil { - return xerrors.Errorf("getting params: %w", err) - } - - sb, err := sectorbuilder.New(cfg, mds) - if err != nil { - return err - } - - r := rand.New(rand.NewSource(101)) - size := sectorbuilder.UserBytesForSectorSize(c.Uint64("sector-size")) - - var sealedSectors []genesis.PreSeal - for i := uint64(1); i <= c.Uint64("num-sectors"); i++ { - sid, err := sb.AcquireSectorId() - if err != nil { - return err - } - - pi, err := sb.AddPiece(size, sid, r, nil) - if err != nil { - return err - } - - trand := sha256.Sum256([]byte(c.String("ticket-preimage"))) - ticket := sectorbuilder.SealTicket{ - TicketBytes: trand, - } - - fmt.Println("Piece info: ", pi) - - pco, err := sb.SealPreCommit(sid, ticket, []sectorbuilder.PublicPieceInfo{pi}) - if err != nil { - return xerrors.Errorf("commit: %w", err) - } - - sealedSectors = append(sealedSectors, genesis.PreSeal{ - CommR: pco.CommR, - CommD: pco.CommD, - SectorID: sid, - }) - } - - output := map[string]genesis.GenesisMiner{ - maddr.String(): genesis.GenesisMiner{ - Sectors: sealedSectors, - }, - } - - out, err := json.MarshalIndent(output, "", " ") - if err != nil { - return err - } - - if err := ioutil.WriteFile("pre-seal-"+maddr.String()+".json", out, 0664); err != nil { - return err - } - - if err := mds.Close(); err != nil { - return xerrors.Errorf("closing datastore: %w", err) - } - - return nil + return seed.PreSeal(maddr, c.Uint64("sector-size"), c.Uint64("num-sectors"), sbroot, []byte(c.String("ticket-preimage"))) }, } diff --git a/cmd/lotus-seed/seed/seed.go b/cmd/lotus-seed/seed/seed.go new file mode 100644 index 000000000..790897800 --- /dev/null +++ b/cmd/lotus-seed/seed/seed.go @@ -0,0 +1,106 @@ +package seed + +import ( + "crypto/sha256" + "encoding/json" + "fmt" + "io/ioutil" + "math/rand" + "os" + "path/filepath" + + badger "github.com/ipfs/go-ds-badger" + "golang.org/x/xerrors" + + "github.com/filecoin-project/lotus/build" + "github.com/filecoin-project/lotus/chain/address" + "github.com/filecoin-project/lotus/genesis" + "github.com/filecoin-project/lotus/lib/sectorbuilder" +) + +func PreSeal(maddr address.Address, ssize uint64, sectors uint64, sbroot string, preimage []byte) error { + cfg := §orbuilder.Config{ + Miner: maddr, + SectorSize: ssize, + CacheDir: filepath.Join(sbroot, "cache"), + SealedDir: filepath.Join(sbroot, "sealed"), + StagedDir: filepath.Join(sbroot, "staging"), + MetadataDir: filepath.Join(sbroot, "meta"), + WorkerThreads: 2, + } + + for _, d := range []string{cfg.CacheDir, cfg.SealedDir, cfg.StagedDir, cfg.MetadataDir} { + if err := os.MkdirAll(d, 0775); err != nil { + return err + } + } + + mds, err := badger.NewDatastore(filepath.Join(sbroot, "badger"), nil) + if err != nil { + return err + } + + if err := build.GetParams(true, false); err != nil { + return xerrors.Errorf("getting params: %w", err) + } + + sb, err := sectorbuilder.New(cfg, mds) + if err != nil { + return err + } + + r := rand.New(rand.NewSource(101)) + size := sectorbuilder.UserBytesForSectorSize(ssize) + + var sealedSectors []genesis.PreSeal + for i := uint64(1); i <= sectors; i++ { + sid, err := sb.AcquireSectorId() + if err != nil { + return err + } + + pi, err := sb.AddPiece(size, sid, r, nil) + if err != nil { + return err + } + + trand := sha256.Sum256(preimage) + ticket := sectorbuilder.SealTicket{ + TicketBytes: trand, + } + + fmt.Println("Piece info: ", pi) + + pco, err := sb.SealPreCommit(sid, ticket, []sectorbuilder.PublicPieceInfo{pi}) + if err != nil { + return xerrors.Errorf("commit: %w", err) + } + + sealedSectors = append(sealedSectors, genesis.PreSeal{ + CommR: pco.CommR, + CommD: pco.CommD, + SectorID: sid, + }) + } + + output := map[string]genesis.GenesisMiner{ + maddr.String(): genesis.GenesisMiner{ + Sectors: sealedSectors, + }, + } + + out, err := json.MarshalIndent(output, "", " ") + if err != nil { + return err + } + + if err := ioutil.WriteFile(filepath.Join(sbroot, "pre-seal-"+maddr.String()+".json"), out, 0664); err != nil { + return err + } + + if err := mds.Close(); err != nil { + return xerrors.Errorf("closing datastore: %w", err) + } + + return nil +} diff --git a/lotuspond/front/src/FullNode.js b/lotuspond/front/src/FullNode.js index 874288261..eb530dee3 100644 --- a/lotuspond/front/src/FullNode.js +++ b/lotuspond/front/src/FullNode.js @@ -45,8 +45,6 @@ class FullNode extends React.Component { return this.props.client.call('Filecoin.PaychVoucherList', [paych]) })) - let minerList = await this.props.client.call('Filecoin.MinerAddresses', []) - let mpoolPending = (await this.props.client.call('Filecoin.MpoolPending', [tipset])).length this.setState(() => ({ @@ -62,8 +60,6 @@ class FullNode extends React.Component { vouchers: vouchers, defaultAddr: defaultAddr, - - minerList: minerList, })) } @@ -110,11 +106,6 @@ class FullNode extends React.Component { ) } - let miners = - if(this.state.minerList.length > 0) { - miners = this.state.minerList.map((a, k) =>
) - } - let storageMine = let addresses = this.state.addrs.map((addr) => { @@ -153,7 +144,6 @@ class FullNode extends React.Component {
Balances: [New [Secp256k1] [BLS]]
{addresses}
-
{miners}
{paychannels}
diff --git a/lotuspond/spawn.go b/lotuspond/spawn.go index a4f4c0b36..5f0faa35c 100644 --- a/lotuspond/spawn.go +++ b/lotuspond/spawn.go @@ -11,6 +11,10 @@ import ( "time" "golang.org/x/xerrors" + + "github.com/filecoin-project/lotus/build" + "github.com/filecoin-project/lotus/chain/address" + "github.com/filecoin-project/lotus/cmd/lotus-seed/seed" ) func (api *api) Spawn() (nodeInfo, error) { @@ -19,9 +23,24 @@ func (api *api) Spawn() (nodeInfo, error) { return nodeInfo{}, err } + params := []string{"daemon", "--bootstrap=false"} genParam := "--genesis=" + api.genesis + id := atomic.AddInt32(&api.cmds, 1) if id == 1 { + // preseal + + genMiner, err := address.NewIDAddress(101) + if err != nil { + return nodeInfo{}, err + } + + err = seed.PreSeal(genMiner, build.SectorSizes[0], 1, filepath.Join(dir, "preseal"), []byte("8")) + if err != nil { + return nodeInfo{}, xerrors.Errorf("preseal failed: %w", err) + } + params = append(params, "--genesis-presealed-sectors="+filepath.Join(dir, "preseal", "pre-seal-t0101.json")) + // make genesis genf, err := ioutil.TempFile(os.TempDir(), "lotus-genesis-") if err != nil { @@ -54,7 +73,7 @@ func (api *api) Spawn() (nodeInfo, error) { return nodeInfo{}, err } - cmd := exec.Command("./lotus", "daemon", "--bootstrap=false", genParam) + cmd := exec.Command("./lotus", append(params, genParam)...) cmd.Stderr = io.MultiWriter(os.Stderr, errlogfile, mux.errpw) cmd.Stdout = io.MultiWriter(os.Stdout, logfile, mux.outpw) @@ -114,7 +133,7 @@ func (api *api) SpawnStorage(fullNodeRepo string) (nodeInfo, error) { initArgs := []string{"init"} if fullNodeRepo == api.running[1].meta.Repo { - initArgs = []string{"init", "--actor=t0101", "--genesis-miner"} + initArgs = []string{"init", "--actor=t0101", "--genesis-miner", "--pre-sealed-sectors=" + filepath.Join(fullNodeRepo, "preseal")} } id := atomic.AddInt32(&api.cmds, 1) diff --git a/miner/miner.go b/miner/miner.go index 6da666002..f8004240a 100644 --- a/miner/miner.go +++ b/miner/miner.go @@ -239,6 +239,8 @@ func (m *Miner) GetBestMiningCandidate(ctx context.Context) (*MiningBase, error) func (m *Miner) mineOne(ctx context.Context, addr address.Address, base *MiningBase) (*types.BlockMsg, error) { log.Debugw("attempting to mine a block", "tipset", types.LogCids(base.ts.Cids())) + start := time.Now() + ticket, err := m.computeTicket(ctx, addr, base) if err != nil { return nil, xerrors.Errorf("scratching ticket failed: %w", err) @@ -260,6 +262,9 @@ func (m *Miner) mineOne(ctx context.Context, addr address.Address, base *MiningB } log.Infow("mined new block", "cid", b.Cid()) + dur := time.Now().Sub(start) + log.Infof("Creating block took %s", dur) + return b, nil } diff --git a/storage/post.go b/storage/post.go index 628f7b94c..22163dfc8 100644 --- a/storage/post.go +++ b/storage/post.go @@ -219,32 +219,32 @@ func (p *post) commitPost(ctx context.Context) (err error) { panic("NYI") /* - params := &actors.SubmitPoStParams{ - //Proof: p.proof, + params := &actors.SubmitPoStParams{ + //Proof: p.proof, + } + + enc, aerr := actors.SerializeParams(params) + if aerr != nil { + return xerrors.Errorf("could not serialize submit post parameters: %w", aerr) + } + + msg := &types.Message{ + To: p.m.maddr, + From: p.m.worker, + Method: actors.MAMethods.SubmitPoSt, + Params: enc, + Value: types.NewInt(1000), // currently hard-coded late fee in actor, returned if not late + GasLimit: types.NewInt(1000000), // i dont know help + GasPrice: types.NewInt(1), + } + + log.Info("mpush") + + p.smsg, err = p.m.api.MpoolPushMessage(ctx, msg) + if err != nil { + return xerrors.Errorf("pushing message to mpool: %w", err) } - - enc, aerr := actors.SerializeParams(params) - if aerr != nil { - return xerrors.Errorf("could not serialize submit post parameters: %w", aerr) - } - - msg := &types.Message{ - To: p.m.maddr, - From: p.m.worker, - Method: actors.MAMethods.SubmitPoSt, - Params: enc, - Value: types.NewInt(1000), // currently hard-coded late fee in actor, returned if not late - GasLimit: types.NewInt(1000000), // i dont know help - GasPrice: types.NewInt(1), - } - - log.Info("mpush") - - p.smsg, err = p.m.api.MpoolPushMessage(ctx, msg) - if err != nil { - return xerrors.Errorf("pushing message to mpool: %w", err) - } - */ + */ return nil }