From 283c4e4194185048658b450bb6636a5dbde1ec58 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Magiera?= Date: Thu, 25 Jul 2019 14:50:34 +0200 Subject: [PATCH] storageminer: Setup actor on init --- cmd/lotus-storage-miner/init.go | 105 ++++++++++++++++++++++++++++++++ 1 file changed, 105 insertions(+) diff --git a/cmd/lotus-storage-miner/init.go b/cmd/lotus-storage-miner/init.go index c997e3062..04a6cd07a 100644 --- a/cmd/lotus-storage-miner/init.go +++ b/cmd/lotus-storage-miner/init.go @@ -1,10 +1,15 @@ package main import ( + "github.com/libp2p/go-libp2p-core/peer" "golang.org/x/xerrors" "gopkg.in/urfave/cli.v2" "github.com/filecoin-project/go-lotus/build" + "github.com/filecoin-project/go-lotus/chain" + "github.com/filecoin-project/go-lotus/chain/actors" + "github.com/filecoin-project/go-lotus/chain/address" + "github.com/filecoin-project/go-lotus/chain/types" lcli "github.com/filecoin-project/go-lotus/cli" "github.com/filecoin-project/go-lotus/node/repo" ) @@ -54,8 +59,108 @@ var initCmd = &cli.Command{ return err } + lr, err := r.Lock() + if err != nil { + return err + } + defer lr.Close() + + log.Info("Initializing wallet") + + ks, err := lr.KeyStore() + if err != nil { + return err + } + + wallet, err := chain.NewWallet(ks) + if err != nil { + return err + } + + log.Info("Initializing libp2p identity") + + p2pSk, err := lr.Libp2pIdentity() + if err != nil { + return err + } + + peerid, err := peer.IDFromPrivateKey(p2pSk) + if err != nil { + return err + } + + log.Info("Creating StorageMarket.CreateStorageMiner message") + + defOwner, err := api.WalletDefaultAddress(ctx) + if err != nil { + return err + } + + nonce, err := api.MpoolGetNonce(ctx, defOwner) + if err != nil { + return err + } + + k, err := wallet.GenerateKey(chain.KTSecp256k1) // TODO: review: is this right? + if err != nil { + return err + } + + collateral := types.NewInt(1000) // TODO: Get this from params + + params, err := actors.SerializeParams(actors.CreateStorageMinerParams{ + Owner: defOwner, + Worker: k, + SectorSize: types.NewInt(actors.SectorSize), + PeerID: peerid, + }) + if err != nil { + return err + } + + createStorageMinerMsg := types.Message{ + To: address.StorageMarketAddress, + From: defOwner, + + Nonce: nonce, + + Value: collateral, + + Method: 1, // TODO: Review: do we have a reverse index with these anywhere? (actor_storageminer.go) + Params: params, + } + + unsigned, err := createStorageMinerMsg.Serialize() + if err != nil { + return err + } + + log.Info("Signing StorageMarket.CreateStorageMiner") + + sig, err := api.WalletSign(ctx, defOwner, unsigned) + if err != nil { + return err + } + + signed := &chain.SignedMessage{ + Message: createStorageMinerMsg, + Signature: *sig, + } + + log.Infof("Pushing %s to Mpool", signed.Cid()) + + err = api.MpoolPush(ctx, signed) + if err != nil { + return err + } + + log.Infof("Waiting for confirmation") + + // TODO: Wait + // create actors and stuff + // TODO: Point to setting storage price, maybe do it interactively or something log.Info("Storage miner successfully created, you can now start it with 'lotus-storage-miner run'") return nil