diff --git a/chain/actors/actor_multisig_test.go b/chain/actors/actor_multisig_test.go deleted file mode 100644 index 88c704140..000000000 --- a/chain/actors/actor_multisig_test.go +++ /dev/null @@ -1,101 +0,0 @@ -package actors_test - -import ( - "testing" - - "github.com/filecoin-project/specs-actors/actors/builtin" - samsig "github.com/filecoin-project/specs-actors/actors/builtin/multisig" - cbor "github.com/ipfs/go-ipld-cbor" - "github.com/stretchr/testify/assert" - cbg "github.com/whyrusleeping/cbor-gen" - - "github.com/filecoin-project/go-address" - - "github.com/filecoin-project/lotus/chain/types" - "github.com/filecoin-project/lotus/chain/vm" - - "github.com/filecoin-project/specs-actors/actors/abi/big" -) - -func TestMultiSigCreate(t *testing.T) { - var creatorAddr, sig1Addr, sig2Addr, outsideAddr address.Address - opts := []HarnessOpt{ - HarnessAddr(&creatorAddr, 100000), - HarnessAddr(&sig1Addr, 100000), - HarnessAddr(&sig2Addr, 100000), - HarnessAddr(&outsideAddr, 100000), - } - - h := NewHarness(t, opts...) - ret, _ := h.CreateActor(t, creatorAddr, builtin.MultisigActorCodeID, - &samsig.ConstructorParams{ - Signers: []address.Address{creatorAddr, sig1Addr, sig2Addr}, - NumApprovalsThreshold: 2, - }) - ApplyOK(t, ret) -} - -func ApplyOK(t testing.TB, ret *vm.ApplyRet) { - t.Helper() - if ret.ExitCode != 0 { - t.Fatalf("exit code should be 0, got %d, actorErr: %+v", ret.ExitCode, ret.ActorErr) - } - if ret.ActorErr != nil { - t.Fatalf("somehow got an error with exit == 0: %s", ret.ActorErr) - } -} - -func TestMultiSigOps(t *testing.T) { - var creatorAddr, sig1Addr, sig2Addr, outsideAddr address.Address - var multSigAddr address.Address - opts := []HarnessOpt{ - HarnessAddr(&creatorAddr, 100000), - HarnessAddr(&sig1Addr, 100000), - HarnessAddr(&sig2Addr, 100000), - HarnessAddr(&outsideAddr, 100000), - HarnessActor(&multSigAddr, &creatorAddr, builtin.MultisigActorCodeID, - func() cbg.CBORMarshaler { - return &samsig.ConstructorParams{ - Signers: []address.Address{creatorAddr, sig1Addr, sig2Addr}, - NumApprovalsThreshold: 2, - } - }), - } - - h := NewHarness(t, opts...) - { - const chargeVal = 2000 - // Send funds into the multisig - ret, _ := h.SendFunds(t, creatorAddr, multSigAddr, types.NewInt(chargeVal)) - ApplyOK(t, ret) - h.AssertBalanceChange(t, creatorAddr, -chargeVal) - h.AssertBalanceChange(t, multSigAddr, chargeVal) - } - - { - // Transfer funds outside of multsig - const sendVal = 1000 - ret, _ := h.Invoke(t, creatorAddr, multSigAddr, uint64(builtin.MethodsMultisig.Propose), - &samsig.ProposeParams{ - To: outsideAddr, - Value: big.NewInt(sendVal), - }) - ApplyOK(t, ret) - var txIDParam samsig.TxnIDParams - err := cbor.DecodeInto(ret.Return, &txIDParam.ID) - assert.NoError(t, err, "decoding txid") - - ret, _ = h.Invoke(t, outsideAddr, multSigAddr, uint64(builtin.MethodsMultisig.Approve), - &txIDParam) - assert.Equal(t, uint8(18), ret.ExitCode, "outsideAddr should not approve") - h.AssertBalanceChange(t, multSigAddr, 0) - - ret2, _ := h.Invoke(t, sig1Addr, multSigAddr, uint64(builtin.MethodsMultisig.Approve), - &txIDParam) - ApplyOK(t, ret2) - - h.AssertBalanceChange(t, outsideAddr, sendVal) - h.AssertBalanceChange(t, multSigAddr, -sendVal) - } - -} diff --git a/chain/actors/actor_paych_test.go b/chain/actors/actor_paych_test.go deleted file mode 100644 index 3d95371b7..000000000 --- a/chain/actors/actor_paych_test.go +++ /dev/null @@ -1,98 +0,0 @@ -package actors_test - -import ( - "context" - "testing" - - "github.com/filecoin-project/go-address" - "github.com/filecoin-project/specs-actors/actors/builtin" - "github.com/filecoin-project/specs-actors/actors/builtin/paych" - - "github.com/filecoin-project/lotus/chain/actors" - "github.com/filecoin-project/lotus/chain/types" - "github.com/filecoin-project/lotus/chain/wallet" -) - -func TestPaychCreate(t *testing.T) { - var creatorAddr, targetAddr address.Address - opts := []HarnessOpt{ - HarnessAddr(&creatorAddr, 100000), - HarnessAddr(&targetAddr, 100000), - } - - h := NewHarness(t, opts...) - ret, _ := h.CreateActor(t, creatorAddr, builtin.PaymentChannelActorCodeID, - &paych.ConstructorParams{ - To: targetAddr, - }) - ApplyOK(t, ret) -} - -func signVoucher(t *testing.T, w *wallet.Wallet, addr address.Address, sv *paych.SignedVoucher) { - vb, err := sv.SigningBytes() - if err != nil { - t.Fatal(err) - } - - sig, err := w.Sign(context.TODO(), addr, vb) - if err != nil { - t.Fatal(err) - } - - sv.Signature = sig -} - -func TestPaychUpdate(t *testing.T) { - var creatorAddr, targetAddr address.Address - opts := []HarnessOpt{ - HarnessAddr(&creatorAddr, 100000), - HarnessAddr(&targetAddr, 100000), - } - - h := NewHarness(t, opts...) - ret, _ := h.CreateActor(t, creatorAddr, builtin.PaymentChannelActorCodeID, - &paych.ConstructorParams{ - To: targetAddr, - }) - ApplyOK(t, ret) - pch, err := address.NewFromBytes(ret.Return) - if err != nil { - t.Fatal(err) - } - - ret, _ = h.SendFunds(t, creatorAddr, pch, types.NewInt(5000)) - ApplyOK(t, ret) - - sv := &paych.SignedVoucher{ - Amount: types.NewInt(100), - Nonce: 1, - } - signVoucher(t, h.w, creatorAddr, sv) - - ret, _ = h.Invoke(t, targetAddr, pch, uint64(builtin.MethodsPaych.UpdateChannelState), &paych.UpdateChannelStateParams{ - Sv: *sv, - }) - ApplyOK(t, ret) - - ret, _ = h.Invoke(t, targetAddr, pch, builtin.MethodsPaych.GetToSend, nil) - ApplyOK(t, ret) - - bi := types.BigFromBytes(ret.Return) - if bi.String() != "100" { - t.Fatal("toSend amount was wrong: ", bi.String()) - } - - // TODO settle - - ret, _ = h.Invoke(t, targetAddr, pch, uint64(builtin.MethodsPaych.Settle), nil) - ApplyOK(t, ret) - - // now we have to 'wait' for the chain to advance. - h.BlockHeight = 1000 - - ret, _ = h.Invoke(t, targetAddr, pch, uint64(builtin.MethodsPaych.Settle), nil) - ApplyOK(t, ret) - - h.AssertBalanceChange(t, targetAddr, 100) - h.AssertBalanceChange(t, creatorAddr, -100) -} diff --git a/chain/actors/actor_storagepower_test.go b/chain/actors/actor_storagepower_test.go deleted file mode 100644 index cd372f1a8..000000000 --- a/chain/actors/actor_storagepower_test.go +++ /dev/null @@ -1,182 +0,0 @@ -package actors_test - -import ( - "context" - "fmt" - "testing" - - "github.com/filecoin-project/lotus/build" - cbg "github.com/whyrusleeping/cbor-gen" - - "github.com/filecoin-project/go-address" - . "github.com/filecoin-project/lotus/chain/actors" - "github.com/filecoin-project/lotus/chain/types" - "github.com/filecoin-project/lotus/chain/vm" - "github.com/filecoin-project/lotus/chain/wallet" - _ "github.com/filecoin-project/lotus/lib/sigs/bls" - _ "github.com/filecoin-project/lotus/lib/sigs/secp" - - cid "github.com/ipfs/go-cid" - bstore "github.com/ipfs/go-ipfs-blockstore" - cbor "github.com/ipfs/go-ipld-cbor" - mh "github.com/multiformats/go-multihash" - "github.com/stretchr/testify/assert" -) - -func TestStorageMarketCreateAndSlashMiner(t *testing.T) { - var ownerAddr, workerAddr address.Address - - opts := []HarnessOpt{ - HarnessAddr(&ownerAddr, 1000000), - HarnessAddr(&workerAddr, 100000), - } - - h := NewHarness(t, opts...) - - var minerAddr address.Address - { - // cheating the bootstrapping problem - cheatStorageMarketTotal(t, h.vm, h.cs.Blockstore()) - - ret, _ := h.InvokeWithValue(t, ownerAddr, StoragePowerAddress, SPAMethods.CreateStorageMiner, - types.NewInt(500000), - &CreateStorageMinerParams{ - Owner: ownerAddr, - Worker: workerAddr, - SectorSize: build.SectorSizes[0], - PeerID: "fakepeerid", - }) - ApplyOK(t, ret) - var err error - minerAddr, err = address.NewFromBytes(ret.Return) - assert.NoError(t, err) - } - - { - ret, _ := h.Invoke(t, ownerAddr, StoragePowerAddress, SPAMethods.IsValidMiner, - &IsValidMinerParam{Addr: minerAddr}) - ApplyOK(t, ret) - - var output bool - err := cbor.DecodeInto(ret.Return, &output) - if err != nil { - t.Fatalf("error decoding: %+v", err) - } - - if !output { - t.Fatalf("%s is miner but IsValidMiner call returned false", minerAddr) - } - } - - { - ret, _ := h.Invoke(t, ownerAddr, StoragePowerAddress, SPAMethods.PowerLookup, - &PowerLookupParams{Miner: minerAddr}) - ApplyOK(t, ret) - power := types.BigFromBytes(ret.Return) - - if types.BigCmp(power, types.NewInt(0)) != 0 { - t.Fatalf("power should be zero, is: %s", power) - } - } - - { - ret, _ := h.Invoke(t, ownerAddr, minerAddr, MAMethods.GetOwner, nil) - ApplyOK(t, ret) - oA, err := address.NewFromBytes(ret.Return) - assert.NoError(t, err) - assert.Equal(t, ownerAddr, oA, "return from GetOwner should be equal to the owner") - } - - { - b1 := fakeBlock(t, minerAddr, 100) - b2 := fakeBlock(t, minerAddr, 101) - - signBlock(t, h.w, workerAddr, b1) - signBlock(t, h.w, workerAddr, b2) - - ret, _ := h.Invoke(t, ownerAddr, StoragePowerAddress, SPAMethods.ArbitrateConsensusFault, - &ArbitrateConsensusFaultParams{ - Block1: b1, - Block2: b1, - }) - assert.Equal(t, uint8(3), ret.ExitCode, "should have failed with exit 3") - - ret, _ = h.Invoke(t, ownerAddr, StoragePowerAddress, SPAMethods.ArbitrateConsensusFault, - &ArbitrateConsensusFaultParams{ - Block1: b1, - Block2: b2, - }) - ApplyOK(t, ret) - } - - { - ret, _ := h.Invoke(t, ownerAddr, StoragePowerAddress, SPAMethods.PowerLookup, - &PowerLookupParams{Miner: minerAddr}) - assert.Equal(t, ret.ExitCode, byte(1)) - } - - { - ret, _ := h.Invoke(t, ownerAddr, StoragePowerAddress, SPAMethods.IsValidMiner, &IsValidMinerParam{minerAddr}) - ApplyOK(t, ret) - assert.Equal(t, ret.Return, cbg.CborBoolFalse) - } -} - -func cheatStorageMarketTotal(t *testing.T, vm *vm.VM, bs bstore.Blockstore) { - t.Helper() - - sma, err := vm.StateTree().GetActor(StoragePowerAddress) - if err != nil { - t.Fatal(err) - } - - cst := cbor.NewCborStore(bs) - - var smastate StoragePowerState - if err := cst.Get(context.TODO(), sma.Head, &smastate); err != nil { - t.Fatal(err) - } - - smastate.TotalStorage = types.NewInt(10000) - - c, err := cst.Put(context.TODO(), &smastate) - if err != nil { - t.Fatal(err) - } - - sma.Head = c - - if err := vm.StateTree().SetActor(StoragePowerAddress, sma); err != nil { - t.Fatal(err) - } -} - -func fakeBlock(t *testing.T, minerAddr address.Address, ts uint64) *types.BlockHeader { - c := fakeCid(t, 1) - return &types.BlockHeader{Height: 8000, Miner: minerAddr, Timestamp: ts, ParentStateRoot: c, Messages: c, ParentMessageReceipts: c, BLSAggregate: types.Signature{Type: types.KTBLS}} -} - -func fakeCid(t *testing.T, s int) cid.Cid { - t.Helper() - c, err := cid.NewPrefixV1(cid.Raw, mh.IDENTITY).Sum([]byte(fmt.Sprintf("%d", s))) - if err != nil { - t.Fatal(err) - } - - return c -} - -func signBlock(t *testing.T, w *wallet.Wallet, worker address.Address, blk *types.BlockHeader) { - t.Helper() - sb, err := blk.SigningBytes() - if err != nil { - t.Fatal(err) - } - - sig, err := w.Sign(context.TODO(), worker, sb) - if err != nil { - t.Fatal(err) - } - - blk.BlockSig = sig -} diff --git a/chain/actors/actors_test.go b/chain/actors/actors_test.go deleted file mode 100644 index 6e832d0da..000000000 --- a/chain/actors/actors_test.go +++ /dev/null @@ -1,159 +0,0 @@ -package actors_test - -import ( - "context" - "encoding/binary" - "fmt" - "testing" - - "github.com/filecoin-project/lotus/build" - "github.com/filecoin-project/lotus/chain/gen/genesis" - - "github.com/filecoin-project/go-address" - dstore "github.com/ipfs/go-datastore" - bstore "github.com/ipfs/go-ipfs-blockstore" - - . "github.com/filecoin-project/lotus/chain/actors" - "github.com/filecoin-project/lotus/chain/store" - "github.com/filecoin-project/lotus/chain/types" - "github.com/filecoin-project/lotus/chain/vm" -) - -func blsaddr(n uint64) address.Address { - buf := make([]byte, 48) - binary.PutUvarint(buf, n) - - addr, err := address.NewBLSAddress(buf) - if err != nil { - panic(err) // ok - } - - return addr -} - -func setupVMTestEnv(t *testing.T) (*vm.VM, []address.Address, bstore.Blockstore) { - bs := bstore.NewBlockstore(dstore.NewMapDatastore()) - - from := blsaddr(0) - maddr := blsaddr(1) - - actors := map[address.Address]types.BigInt{ - from: types.NewInt(1000000), - maddr: types.NewInt(0), - } - st, err := genesis.MakeInitialStateTree(bs, actors) - if err != nil { - t.Fatal(err) - } - - stateroot, err := st.Flush(context.TODO()) - if err != nil { - t.Fatal(err) - } - - cs := store.NewChainStore(bs, nil, nil) - - // TODO: should probabaly mock out the randomness bit, nil works for now - vm, err := vm.NewVM(stateroot, 1, nil, maddr, cs.Blockstore(), cs.VMSys()) - if err != nil { - t.Fatal(err) - } - return vm, []address.Address{from, maddr}, bs -} - -func TestVMInvokeMethod(t *testing.T) { - vm, addrs, _ := setupVMTestEnv(t) - from := addrs[0] - - var err error - cenc, err := SerializeParams(&StorageMinerConstructorParams{Owner: from, Worker: from}) - if err != nil { - t.Fatal(err) - } - - execparams := &ExecParams{ - Code: StorageMinerCodeCid, - Params: cenc, - } - enc, err := SerializeParams(execparams) - if err != nil { - t.Fatal(err) - } - - msg := &types.Message{ - To: InitAddress, - From: from, - Method: IAMethods.Exec, - Params: enc, - GasPrice: types.NewInt(1), - GasLimit: types.NewInt(10000), - Value: types.NewInt(0), - } - - ret, err := vm.ApplyMessage(context.TODO(), msg) - if err != nil { - t.Fatal(err) - } - - if ret.ExitCode != 0 { - t.Fatal("invocation failed") - } - - outaddr, err := address.NewFromBytes(ret.Return) - if err != nil { - t.Fatal(err) - } - - if outaddr.String() != "t0102" { - t.Fatal("hold up") - } -} - -func TestStorageMarketActorCreateMiner(t *testing.T) { - vm, addrs, bs := setupVMTestEnv(t) - from := addrs[0] - maddr := addrs[1] - - cheatStorageMarketTotal(t, vm, bs) - - params := &StorageMinerConstructorParams{ - Owner: maddr, - Worker: maddr, - SectorSize: build.SectorSizes[0], - PeerID: "fakepeerid", - } - var err error - enc, err := SerializeParams(params) - if err != nil { - t.Fatal(err) - } - - msg := &types.Message{ - To: StoragePowerAddress, - From: from, - Method: SPAMethods.CreateStorageMiner, - Params: enc, - GasPrice: types.NewInt(1), - GasLimit: types.NewInt(10000), - Value: types.NewInt(50000), - } - - ret, err := vm.ApplyMessage(context.TODO(), msg) - if err != nil { - t.Fatal(err) - } - - if ret.ExitCode != 0 { - fmt.Println(ret.ActorErr) - t.Fatal("invocation failed: ", ret.ExitCode) - } - - outaddr, err := address.NewFromBytes(ret.Return) - if err != nil { - t.Fatal(err) - } - - if outaddr.String() != "t0102" { - t.Fatal("hold up") - } -} diff --git a/chain/actors/harness2_test.go b/chain/actors/harness2_test.go deleted file mode 100644 index f9739f4a6..000000000 --- a/chain/actors/harness2_test.go +++ /dev/null @@ -1,368 +0,0 @@ -package actors_test - -import ( - "bytes" - "context" - "math/rand" - "testing" - - "github.com/filecoin-project/specs-actors/actors/abi" - - "github.com/filecoin-project/go-sectorbuilder" - - "github.com/ipfs/go-cid" - dstore "github.com/ipfs/go-datastore" - blockstore "github.com/ipfs/go-ipfs-blockstore" - bstore "github.com/ipfs/go-ipfs-blockstore" - cbor "github.com/ipfs/go-ipld-cbor" - cbg "github.com/whyrusleeping/cbor-gen" - "golang.org/x/xerrors" - - "github.com/filecoin-project/go-address" - - "github.com/filecoin-project/lotus/chain/actors" - "github.com/filecoin-project/lotus/chain/gen/genesis" - "github.com/filecoin-project/lotus/chain/state" - "github.com/filecoin-project/lotus/chain/store" - "github.com/filecoin-project/lotus/chain/types" - "github.com/filecoin-project/lotus/chain/vm" - "github.com/filecoin-project/lotus/chain/wallet" -) - -const testGasLimit = 10000 - -type HarnessInit struct { - NAddrs uint64 - Addrs map[address.Address]types.BigInt - Miner address.Address -} - -type HarnessStage int - -const ( - HarnessPreInit HarnessStage = iota - HarnessPostInit -) - -type HarnessOpt func(testing.TB, *Harness) error - -type Harness struct { - HI HarnessInit - Stage HarnessStage - Nonces map[address.Address]uint64 - GasCharges map[address.Address]types.BigInt - Rand vm.Rand - BlockHeight abi.ChainEpoch - - lastBalanceCheck map[address.Address]types.BigInt - - ctx context.Context - bs blockstore.Blockstore - vm *vm.VM - cs *store.ChainStore - w *wallet.Wallet -} - -var HarnessMinerFunds = types.NewInt(1000000) - -func HarnessAddr(addr *address.Address, value uint64) HarnessOpt { - return func(t testing.TB, h *Harness) error { - if h.Stage != HarnessPreInit { - return nil - } - hi := &h.HI - if addr.Empty() { - k, err := h.w.GenerateKey(types.KTSecp256k1) - if err != nil { - t.Fatal(err) - } - - *addr = k - } - hi.Addrs[*addr] = types.NewInt(value) - return nil - } -} - -func HarnessMiner(addr *address.Address) HarnessOpt { - return func(_ testing.TB, h *Harness) error { - if h.Stage != HarnessPreInit { - return nil - } - hi := &h.HI - if addr.Empty() { - *addr = hi.Miner - return nil - } - delete(hi.Addrs, hi.Miner) - hi.Miner = *addr - return nil - } -} - -func HarnessActor(actor *address.Address, creator *address.Address, code cid.Cid, params func() cbg.CBORMarshaler) HarnessOpt { - return func(t testing.TB, h *Harness) error { - if h.Stage != HarnessPostInit { - return nil - } - if !actor.Empty() { - return xerrors.New("actor address should be empty") - } - - ret, _ := h.CreateActor(t, *creator, code, params()) - if ret.ExitCode != 0 { - return xerrors.Errorf("creating actor: %w", ret.ActorErr) - } - var err error - *actor, err = address.NewFromBytes(ret.Return) - return err - } - -} - -func HarnessAddMiner(addr *address.Address, creator *address.Address) HarnessOpt { - return func(t testing.TB, h *Harness) error { - if h.Stage != HarnessPostInit { - return nil - } - if !addr.Empty() { - return xerrors.New("actor address should be empty") - } - ret, _ := h.InvokeWithValue(t, *creator, actors.StoragePowerAddress, - actors.SPAMethods.CreateStorageMiner, types.NewInt(3000), &actors.StorageMinerConstructorParams{ - Owner: *creator, - Worker: *creator, - SectorSize: 1024, - PeerID: "fakepeerid", - }) - - if ret.ExitCode != 0 { - return xerrors.Errorf("creating actor: %w", ret.ActorErr) - } - var err error - *addr, err = address.NewFromBytes(ret.Return) - return err - - } -} - -func HarnessCtx(ctx context.Context) HarnessOpt { - return func(t testing.TB, h *Harness) error { - h.ctx = ctx - return nil - } -} - -func NewHarness(t *testing.T, options ...HarnessOpt) *Harness { - w, err := wallet.NewWallet(wallet.NewMemKeyStore()) - if err != nil { - t.Fatal(err) - } - h := &Harness{ - Stage: HarnessPreInit, - Nonces: make(map[address.Address]uint64), - Rand: &fakeRand{}, - HI: HarnessInit{ - NAddrs: 1, - Miner: blsaddr(0), - Addrs: map[address.Address]types.BigInt{ - blsaddr(0): HarnessMinerFunds, - }, - }, - GasCharges: make(map[address.Address]types.BigInt), - - lastBalanceCheck: make(map[address.Address]types.BigInt), - w: w, - ctx: context.Background(), - bs: bstore.NewBlockstore(dstore.NewMapDatastore()), - BlockHeight: 0, - } - for _, opt := range options { - err := opt(t, h) - if err != nil { - t.Fatalf("Applying options: %v", err) - } - } - - st, err := genesis.MakeInitialStateTree(h.bs, h.HI.Addrs) - if err != nil { - t.Fatal(err) - } - - stateroot, err := st.Flush(context.TODO()) - if err != nil { - t.Fatal(err) - } - - stateroot, err = genesis.SetupStorageMarketActor(h.bs, stateroot, nil) - if err != nil { - t.Fatal(err) - } - - h.cs = store.NewChainStore(h.bs, nil, vm.Syscalls(sectorbuilder.ProofVerifier)) - h.vm, err = vm.NewVM(stateroot, 1, h.Rand, h.HI.Miner, h.cs.Blockstore(), h.cs.VMSys()) - if err != nil { - t.Fatal(err) - } - h.Stage = HarnessPostInit - for _, opt := range options { - err := opt(t, h) - if err != nil { - t.Fatalf("Applying options: %+v", err) - } - } - - return h -} - -func (h *Harness) Apply(t testing.TB, msg types.Message) (*vm.ApplyRet, *state.StateTree) { - t.Helper() - if msg.Nonce == 0 { - msg.Nonce, _ = h.Nonces[msg.From] - h.Nonces[msg.From] = msg.Nonce + 1 - } - - ret, err := h.vm.ApplyMessage(h.ctx, &msg) - if err != nil { - t.Fatalf("Applying message: %+v", err) - } - - if ret != nil { - if prev, ok := h.GasCharges[msg.From]; ok { - h.GasCharges[msg.From] = types.BigAdd(prev, ret.GasUsed) - } else { - h.GasCharges[msg.From] = ret.GasUsed - } - } - - stateroot, err := h.vm.Flush(context.TODO()) - if err != nil { - t.Fatalf("Flushing VM: %+v", err) - } - cst := cbor.NewCborStore(h.bs) - state, err := state.LoadStateTree(cst, stateroot) - if err != nil { - t.Fatalf("Loading state tree: %+v", err) - } - return ret, state -} - -func (h *Harness) CreateActor(t testing.TB, from address.Address, - code cid.Cid, params cbg.CBORMarshaler) (*vm.ApplyRet, *state.StateTree) { - t.Helper() - - return h.Apply(t, types.Message{ - To: actors.InitAddress, - From: from, - Method: actors.IAMethods.Exec, - Params: DumpObject(t, - &actors.ExecParams{ - Code: code, - Params: DumpObject(t, params), - }), - GasPrice: types.NewInt(1), - GasLimit: types.NewInt(testGasLimit), - Value: types.NewInt(0), - }) -} - -func (h *Harness) SendFunds(t testing.TB, from address.Address, to address.Address, - value types.BigInt) (*vm.ApplyRet, *state.StateTree) { - t.Helper() - return h.Apply(t, types.Message{ - To: to, - From: from, - Method: 0, - Value: value, - GasPrice: types.NewInt(1), - GasLimit: types.NewInt(testGasLimit), - }) -} - -func (h *Harness) Invoke(t testing.TB, from address.Address, to address.Address, - method uint64, params cbg.CBORMarshaler) (*vm.ApplyRet, *state.StateTree) { - t.Helper() - return h.InvokeWithValue(t, from, to, method, types.NewInt(0), params) -} - -func (h *Harness) InvokeWithValue(t testing.TB, from address.Address, to address.Address, - method uint64, value types.BigInt, params cbg.CBORMarshaler) (*vm.ApplyRet, *state.StateTree) { - t.Helper() - h.vm.SetBlockHeight(h.BlockHeight) - return h.Apply(t, types.Message{ - To: to, - From: from, - Method: method, - Value: value, - Params: DumpObject(t, params), - GasPrice: types.NewInt(1), - GasLimit: types.NewInt(testGasLimit), - }) -} - -func (h *Harness) AssertBalance(t testing.TB, addr address.Address, amt uint64) { - t.Helper() - - b, err := h.vm.ActorBalance(addr) - if err != nil { - t.Fatalf("%+v", err) - } - - if types.BigCmp(types.NewInt(amt), b) != 0 { - t.Errorf("expected %s to have balanced of %d. Instead has %s", addr, amt, b) - } -} - -func (h *Harness) AssertBalanceChange(t testing.TB, addr address.Address, amt int64) { - t.Helper() - lastBalance, ok := h.lastBalanceCheck[addr] - if !ok { - lastBalance, ok = h.HI.Addrs[addr] - if !ok { - lastBalance = types.NewInt(0) - } - } - - var expected types.BigInt - - if amt >= 0 { - expected = types.BigAdd(lastBalance, types.NewInt(uint64(amt))) - } else { - expected = types.BigSub(lastBalance, types.NewInt(uint64(-amt))) - } - - h.lastBalanceCheck[addr] = expected - - if gasUsed, ok := h.GasCharges[addr]; ok { - expected = types.BigSub(expected, gasUsed) - } - - b, err := h.vm.ActorBalance(addr) - if err != nil { - t.Fatalf("%+v", err) - } - - if types.BigCmp(expected, b) != 0 { - t.Errorf("expected %s to have balanced of %d. Instead has %s", addr, amt, b) - } -} - -func DumpObject(t testing.TB, obj cbg.CBORMarshaler) []byte { - if obj == nil { - return nil - } - t.Helper() - b := new(bytes.Buffer) - if err := obj.MarshalCBOR(b); err != nil { - t.Fatalf("dumping params: %+v", err) - } - return b.Bytes() -} - -type fakeRand struct{} - -func (fr *fakeRand) GetRandomness(ctx context.Context, h int64) ([]byte, error) { - out := make([]byte, 32) - rand.New(rand.NewSource(h)).Read(out) - return out, nil -} diff --git a/chain/vm/syscalls.go b/chain/vm/syscalls.go index 8fca1939a..57db24755 100644 --- a/chain/vm/syscalls.go +++ b/chain/vm/syscalls.go @@ -1,7 +1,10 @@ package vm import ( - ffi "github.com/filecoin-project/filecoin-ffi" + "context" + "fmt" + "math/bits" + "github.com/filecoin-project/go-address" commcid "github.com/filecoin-project/go-fil-commcid" "github.com/filecoin-project/go-sectorbuilder" @@ -12,7 +15,6 @@ import ( "github.com/ipfs/go-cid" mh "github.com/multiformats/go-multihash" "golang.org/x/xerrors" - "math/bits" ) func init() { @@ -30,14 +32,8 @@ type syscallShim struct { } func (ss *syscallShim) ComputeUnsealedSectorCID(ssize abi.SectorSize, pieces []abi.PieceInfo) (cid.Cid, error) { - // TODO: does this pull in unwanted dependencies? - var ffipieces []ffi.PublicPieceInfo var sum abi.PaddedPieceSize for _, p := range pieces { - ffipieces = append(ffipieces, ffi.PublicPieceInfo{ - Size: p.Size.Unpadded(), - CommP: cidToCommD(p.PieceCID), - }) sum += p.Size } @@ -51,9 +47,9 @@ func (ss *syscallShim) ComputeUnsealedSectorCID(ssize abi.SectorSize, pieces []a toFill ^= psize unpadded := abi.PaddedPieceSize(psize).Unpadded() - ffipieces = append(ffipieces, ffi.PublicPieceInfo{ - Size: unpadded, - CommP: zerocomm.ForSize(unpadded), + pieces = append(pieces, abi.PieceInfo{ + Size: unpadded.Padded(), + PieceCID: zerocomm.ForSize(unpadded), }) } } @@ -71,12 +67,20 @@ func (ss *syscallShim) HashBlake2b(data []byte) [32]byte { panic("NYI") } -func (ss *syscallShim) VerifyConsensusFault(a, b []byte) bool { +func (ss *syscallShim) VerifyConsensusFault(a, b []byte) error { panic("NYI") } -func (ss *syscallShim) VerifyPoSt(ssize abi.SectorSize, proof abi.PoStVerifyInfo) (bool, error) { - panic("NYI") +func (ss *syscallShim) VerifyPoSt(proof abi.PoStVerifyInfo) error { + //VerifyFallbackPost(ctx context.Context, sectorSize abi.SectorSize, sectorInfo SortedPublicSectorInfo, challengeSeed []byte, proof []byte, candidates []EPostCandidate, proverID address.Address, faults uint64) (bool, error) + ok, err := ss.verifier.VerifyFallbackPost(context.TODO(), proof) + if err != nil { + return err + } + if !ok { + return fmt.Errorf("proof was invalid") + } + return nil } func cidToCommD(c cid.Cid) [32]byte { @@ -93,7 +97,7 @@ func cidToCommR(c cid.Cid) [32]byte { return out } -func (ss *syscallShim) VerifySeal(ssize abi.SectorSize, info abi.SealVerifyInfo) (bool, error) { +func (ss *syscallShim) VerifySeal(info abi.SealVerifyInfo) error { //_, span := trace.StartSpan(ctx, "ValidatePoRep") //defer span.End() @@ -114,14 +118,17 @@ func (ss *syscallShim) VerifySeal(ssize abi.SectorSize, info abi.SealVerifyInfo) //func(ctx context.Context, maddr address.Address, ssize abi.SectorSize, commD, commR, ticket, proof, seed []byte, sectorID abi.SectorNumber) ok, err := ss.verifier.VerifySeal(ssize, commR[:], commD[:], miner, ticket, seed, info.SectorID.Number, proof) if err != nil { - return false, xerrors.Errorf("failed to validate PoRep: %w", err) + return xerrors.Errorf("failed to validate PoRep: %w", err) + } + if !ok { + return fmt.Errorf("invalid proof") } - return ok, nil + return nil } -func (ss *syscallShim) VerifySignature(sig crypto.Signature, addr address.Address, input []byte) bool { - return true +func (ss *syscallShim) VerifySignature(sig crypto.Signature, addr address.Address, input []byte) error { + return nil /* // TODO: in genesis setup, we are currently faking signatures if err := ss.rt.vmctx.VerifySignature(&sig, addr, input); err != nil { return false diff --git a/cmd/lotus-chainwatch/storage.go b/cmd/lotus-chainwatch/storage.go index befdc288f..c3df0a789 100644 --- a/cmd/lotus-chainwatch/storage.go +++ b/cmd/lotus-chainwatch/storage.go @@ -456,7 +456,7 @@ create temp table mh (like miner_heads excluding constraints) on commit drop; return xerrors.Errorf("prep temp: %w", err) } - stmt, err := tx.Prepare(`copy mh (head, addr, stateroot, sectorset, setsize, provingset, provingsize, owner, worker, peerid, sectorsize, power, active, ppe, slashed_at) from STDIN`) + stmt, err := tx.Prepare(`copy mh (head, addr, stateroot, sectorset, setsize, provingset, provingsize, owner, worker, peerid, sectorsize, power, ppe) from STDIN`) if err != nil { return err } @@ -473,10 +473,8 @@ create temp table mh (like miner_heads excluding constraints) on commit drop; i.info.Worker.String(), i.info.PeerId.String(), i.info.SectorSize, - i.state.Power.String(), // TODO: SPA - i.state.Active, + i.power.String(), // TODO: SPA i.state.PoStState.ProvingPeriodStart, - i.state.SlashedAt, ); err != nil { return err } diff --git a/cmd/lotus-chainwatch/sync.go b/cmd/lotus-chainwatch/sync.go index 5276c9933..dc24bef98 100644 --- a/cmd/lotus-chainwatch/sync.go +++ b/cmd/lotus-chainwatch/sync.go @@ -5,13 +5,15 @@ import ( "container/list" "context" "encoding/json" - "github.com/filecoin-project/specs-actors/actors/builtin" - "github.com/filecoin-project/specs-actors/actors/builtin/miner" "math" "sync" + "github.com/filecoin-project/specs-actors/actors/builtin" + "github.com/filecoin-project/specs-actors/actors/builtin/miner" + "github.com/filecoin-project/go-address" "github.com/filecoin-project/specs-actors/actors/abi" + "github.com/filecoin-project/specs-actors/actors/abi/big" "github.com/ipfs/go-cid" @@ -56,6 +58,7 @@ type minerInfo struct { state miner.State info miner.MinerInfo + power big.Int ssize uint64 psize uint64 } @@ -268,6 +271,13 @@ func syncHead(ctx context.Context, api api.FullNode, st *storage, ts *types.TipS par(50, kvmaparr(miners), func(it func() (minerKey, *minerInfo)) { k, info := it() + pow, err := api.StateMinerPower(ctx, k.addr, types.EmptyTSK) + if err != nil { + log.Error(err) + // Not sure why this would fail, but its probably worth continuing + } + info.power = pow.MinerPower + sszs, err := api.StateMinerSectorCount(ctx, k.addr, types.EmptyTSK) if err != nil { log.Error(err) diff --git a/cmd/lotus-fountain/main.go b/cmd/lotus-fountain/main.go index 2df186225..628bf77e1 100644 --- a/cmd/lotus-fountain/main.go +++ b/cmd/lotus-fountain/main.go @@ -268,7 +268,7 @@ func (h *handler) mkminer(w http.ResponseWriter, r *http.Request) { Owner: owner, // TODO: That is useful Worker: owner, SectorSize: abi.SectorSize(ssize), - Peer: peer.ID("SETME"), + Peer: peer.ID("SETME"), }) if err != nil { w.WriteHeader(400) diff --git a/extern/filecoin-ffi b/extern/filecoin-ffi index cb6019e08..4da0bcccc 160000 --- a/extern/filecoin-ffi +++ b/extern/filecoin-ffi @@ -1 +1 @@ -Subproject commit cb6019e085428c845dc29c95b9e70569019e619f +Subproject commit 4da0bccccefb48df4bce63869d058f9bbf02b686 diff --git a/go.mod b/go.mod index ccfe3a99a..bd935a2e1 100644 --- a/go.mod +++ b/go.mod @@ -11,7 +11,7 @@ require ( github.com/coreos/go-systemd/v22 v22.0.0 github.com/docker/go-units v0.4.0 github.com/filecoin-project/chain-validation v0.0.3 - github.com/filecoin-project/filecoin-ffi v0.0.0-20191219131535-bb699517a590 + github.com/filecoin-project/filecoin-ffi v0.0.0-20200226205820-4da0bccccefb github.com/filecoin-project/go-address v0.0.2-0.20200218010043-eb9bb40ed5be github.com/filecoin-project/go-amt-ipld/v2 v2.0.1-0.20200131012142-05d80eeccc5e github.com/filecoin-project/go-cbor-util v0.0.0-20191219014500-08c40a1e63a2 @@ -20,10 +20,10 @@ require ( github.com/filecoin-project/go-fil-commcid v0.0.0-20200208005934-2b8bd03caca5 github.com/filecoin-project/go-fil-markets v0.0.0-20200223154807-f7afd8e927f9 github.com/filecoin-project/go-padreader v0.0.0-20200210211231-548257017ca6 - github.com/filecoin-project/go-paramfetch v0.0.1 - github.com/filecoin-project/go-sectorbuilder v0.0.2-0.20200210220012-eb75ec747d6b + github.com/filecoin-project/go-paramfetch v0.0.2-0.20200218225740-47c639bab663 + github.com/filecoin-project/go-sectorbuilder v0.0.2-0.20200226210935-4739f8749f56 github.com/filecoin-project/go-statestore v0.1.0 - github.com/filecoin-project/specs-actors v0.0.0-20200223194852-39976038b18d + github.com/filecoin-project/specs-actors v0.0.0-20200226222915-a3b194d36c61 github.com/gbrlsnchs/jwt/v3 v3.0.0-beta.1 github.com/go-ole/go-ole v1.2.4 // indirect github.com/google/uuid v1.1.1 diff --git a/go.sum b/go.sum index 083504ec4..3d34bcc5a 100644 --- a/go.sum +++ b/go.sum @@ -121,15 +121,28 @@ github.com/filecoin-project/go-padreader v0.0.0-20200210211231-548257017ca6/go.m github.com/filecoin-project/go-paramfetch v0.0.0-20200102181131-b20d579f2878/go.mod h1:40kI2Gv16mwcRsHptI3OAV4nlOEU7wVDc4RgMylNFjU= github.com/filecoin-project/go-paramfetch v0.0.1 h1:gV7bs5YaqlgpGFMiLxInGK2L1FyCXUE0rimz4L7ghoE= github.com/filecoin-project/go-paramfetch v0.0.1/go.mod h1:fZzmf4tftbwf9S37XRifoJlz7nCjRdIrMGLR07dKLCc= +github.com/filecoin-project/go-paramfetch v0.0.2-0.20200218225740-47c639bab663 h1:eYxi6vI5CyeXD15X1bB3bledDXbqKxqf0wQzTLgwYwA= +github.com/filecoin-project/go-paramfetch v0.0.2-0.20200218225740-47c639bab663/go.mod h1:fZzmf4tftbwf9S37XRifoJlz7nCjRdIrMGLR07dKLCc= github.com/filecoin-project/go-sectorbuilder v0.0.2-0.20200210220012-eb75ec747d6b h1:ds4TQay8wuV+2ucC6ENAeSYQDdl9CWYXnX0gvxzGKHg= github.com/filecoin-project/go-sectorbuilder v0.0.2-0.20200210220012-eb75ec747d6b/go.mod h1:qsuPYsbKTHH2phNk81aUF9VJIilUxFrnxxnryJh4FOM= +github.com/filecoin-project/go-sectorbuilder v0.0.2-0.20200224193134-7d37ec0f7723 h1:06DgVyH7jjafVa01EuVltEvJ7J7Q5A3/XEOLhmdDFOc= +github.com/filecoin-project/go-sectorbuilder v0.0.2-0.20200224193134-7d37ec0f7723/go.mod h1:u8n91UJUua9zEiyAPw8wRAgUEoyTH8BBM9LWJ5WuxOM= +github.com/filecoin-project/go-sectorbuilder v0.0.2-0.20200226210935-4739f8749f56 h1:CqldkHf9HtAsewneyOZdi19Btc6kEvktVVeZsP9N7NQ= +github.com/filecoin-project/go-sectorbuilder v0.0.2-0.20200226210935-4739f8749f56/go.mod h1:tzTc9BxxSbjlIzhFwm5h9oBkXKkRuLxeiWspntwnKyw= github.com/filecoin-project/go-statestore v0.1.0 h1:t56reH59843TwXHkMcwyuayStBIiWBRilQjQ+5IiwdQ= github.com/filecoin-project/go-statestore v0.1.0/go.mod h1:LFc9hD+fRxPqiHiaqUEZOinUJB4WARkRfNl10O7kTnI= github.com/filecoin-project/specs-actors v0.0.0-20200210130641-2d1fbd8672cf h1:fbxBG12yrxilPFV1EG2lYqpUyAlRZWkvtqjk2svSeXY= github.com/filecoin-project/specs-actors v0.0.0-20200210130641-2d1fbd8672cf/go.mod h1:xtDZUB6pe4Pksa/bAJbJ693OilaC5Wbot9jMhLm3cZA= +github.com/filecoin-project/specs-actors v0.0.0-20200213011857-91a589664341/go.mod h1:xtDZUB6pe4Pksa/bAJbJ693OilaC5Wbot9jMhLm3cZA= github.com/filecoin-project/specs-actors v0.0.0-20200220011005-b2a2fbf40362/go.mod h1:xtDZUB6pe4Pksa/bAJbJ693OilaC5Wbot9jMhLm3cZA= github.com/filecoin-project/specs-actors v0.0.0-20200223194852-39976038b18d h1:vukVHqbLQnXc+ZfhK+Cor3kaQx9SQbSZISqSeGjhYcE= github.com/filecoin-project/specs-actors v0.0.0-20200223194852-39976038b18d/go.mod h1:0HAWYrvajFHDgRaKbF0rl+IybVLZL5z4gQ8koCMPhoU= +github.com/filecoin-project/specs-actors v0.0.0-20200226200336-94c9b92b2775/go.mod h1:0HAWYrvajFHDgRaKbF0rl+IybVLZL5z4gQ8koCMPhoU= +github.com/filecoin-project/specs-actors v0.0.0-20200226204010-2ecdc6712206 h1:n63pVgoasZ8lzmC+Vx3/argZ5x9Vw+fPj/f24zsCAPE= +github.com/filecoin-project/specs-actors v0.0.0-20200226204010-2ecdc6712206/go.mod h1:0HAWYrvajFHDgRaKbF0rl+IybVLZL5z4gQ8koCMPhoU= +github.com/filecoin-project/specs-actors v0.0.0-20200226222440-f5d1be727992 h1:T4BLV7JBn+0xxSzWlmMwU4tCGp2QkqcE+xXwNO0ufBo= +github.com/filecoin-project/specs-actors v0.0.0-20200226222915-a3b194d36c61 h1:W5/1uYhny36b2x6Ce8awB3tF40z0Lmw7qluukRiVaVM= +github.com/filecoin-project/specs-actors v0.0.0-20200226222915-a3b194d36c61/go.mod h1:0HAWYrvajFHDgRaKbF0rl+IybVLZL5z4gQ8koCMPhoU= github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/gbrlsnchs/jwt/v3 v3.0.0-beta.1 h1:EzDjxMg43q1tA2c0MV3tNbaontnHLplHyFF6M5KiVP0= diff --git a/lib/zerocomm/zerocomm.go b/lib/zerocomm/zerocomm.go index 40dff3ede..92afbfeae 100644 --- a/lib/zerocomm/zerocomm.go +++ b/lib/zerocomm/zerocomm.go @@ -3,7 +3,9 @@ package zerocomm import ( "math/bits" + commcid "github.com/filecoin-project/go-fil-commcid" "github.com/filecoin-project/specs-actors/actors/abi" + "github.com/ipfs/go-cid" ) const levels = 37 @@ -47,7 +49,7 @@ var pieceComms = [levels - skip][32]byte{ {0xaa, 0xaa, 0x8c, 0x4c, 0xb4, 0xa, 0xac, 0xee, 0x1e, 0x2, 0xdc, 0x65, 0x42, 0x4b, 0x2a, 0x6c, 0x8e, 0x99, 0xf8, 0x3, 0xb7, 0x2f, 0x79, 0x29, 0xc4, 0x10, 0x1d, 0x7f, 0xae, 0x6b, 0xff, 0x32}, } -func ForSize(sz abi.UnpaddedPieceSize) [32]byte { +func ForSize(sz abi.UnpaddedPieceSize) cid.Cid { level := bits.TrailingZeros64(uint64(sz.Padded())) - skip - 5 // 2^5 = 32 - return pieceComms[level] + return commcid.DataCommitmentV1ToCID(pieceComms[level][:]) } diff --git a/lib/zerocomm/zerocomm_test.go b/lib/zerocomm/zerocomm_test.go index 5648d4f8f..329a2b38c 100644 --- a/lib/zerocomm/zerocomm_test.go +++ b/lib/zerocomm/zerocomm_test.go @@ -6,13 +6,15 @@ import ( "testing" "github.com/filecoin-project/go-sectorbuilder" + abi "github.com/filecoin-project/specs-actors/actors/abi" + "github.com/ipfs/go-cid" ) func TestComms(t *testing.T) { - var expPieceComms [levels - skip][32]byte + var expPieceComms [levels - skip]cid.Cid { - l2, err := sectorbuilder.GeneratePieceCommitment(bytes.NewReader(make([]byte, 127)), 127) + l2, err := sectorbuilder.GeneratePieceCIDFromFile(abi.RegisteredProof_StackedDRG2KiBPoSt, bytes.NewReader(make([]byte, 127)), 127) if err != nil { return } @@ -21,6 +23,7 @@ func TestComms(t *testing.T) { for i := 1; i < levels-2; i++ { var err error + sectorbuilder.GenerateUnsealedCID() expPieceComms[i], err = sectorbuilder.GenerateDataCommitment(128< 0 { panic("todo") } - n := sectorbuilder.ElectionPostChallengeCount(uint64(len(sectorInfo.Values())), uint64(len(faults))) - if n > uint64(len(sectorInfo.Values())) { - n = uint64(len(sectorInfo.Values())) + n := sectorbuilder.ElectionPostChallengeCount(uint64(len(sectorInfo)), uint64(len(faults))) + if n > uint64(len(sectorInfo)) { + n = uint64(len(sectorInfo)) } - out := make([]sectorbuilder.EPostCandidate, n) + out := make([]ffi.PoStCandidateWithTicket, n) seed := big.NewInt(0).SetBytes(challengeSeed[:]) - start := seed.Mod(seed, big.NewInt(int64(len(sectorInfo.Values())))).Int64() + start := seed.Mod(seed, big.NewInt(int64(len(sectorInfo)))).Int64() for i := range out { - out[i] = sectorbuilder.EPostCandidate{ - SectorNum: abi.SectorNumber((int(start) + i) % len(sectorInfo.Values())), - PartialTicket: challengeSeed, - Ticket: commDR(challengeSeed[:]), - SectorChallengeIndex: 0, + out[i] = ffi.PoStCandidateWithTicket{ + Candidate: abi.PoStCandidate{ + SectorID: abi.SectorID{ + Number: abi.SectorNumber((int(start) + i) % len(sectorInfo)), + Miner: 1125125, //TODO + }, + PartialTicket: abi.PartialTicket(challengeSeed), + }, } } return out, nil } -func (sb *SBMock) ReadPieceFromSealedSector(ctx context.Context, sectorID abi.SectorNumber, offset sectorbuilder.UnpaddedByteIndex, size abi.UnpaddedPieceSize, ticket []byte, commD []byte) (io.ReadCloser, error) { +func (sb *SBMock) ReadPieceFromSealedSector(ctx context.Context, sectorID abi.SectorNumber, offset sectorbuilder.UnpaddedByteIndex, size abi.UnpaddedPieceSize, ticket abi.SealRandomness, commD cid.Cid) (io.ReadCloser, error) { if len(sb.sectors[sectorID].pieces) > 1 { panic("implme") } - return ioutil.NopCloser(io.LimitReader(bytes.NewReader(sb.sectors[sectorID].pieces[0][offset:]), int64(size))), nil + return ioutil.NopCloser(io.LimitReader(bytes.NewReader(sb.sectors[sectorID].pieces[0].Bytes()[offset:]), int64(size))), nil } -func (sb *SBMock) StageFakeData() (abi.SectorNumber, []sectorbuilder.PublicPieceInfo, error) { +func (sb *SBMock) StageFakeData() (abi.SectorNumber, []abi.PieceInfo, error) { usize := abi.PaddedPieceSize(sb.sectorSize).Unpadded() sid, err := sb.AcquireSectorNumber() if err != nil { @@ -308,7 +328,7 @@ func (sb *SBMock) StageFakeData() (abi.SectorNumber, []sectorbuilder.PublicPiece return 0, nil, err } - return sid, []sectorbuilder.PublicPieceInfo{pi}, nil + return sid, []abi.PieceInfo{pi}, nil } func (sb *SBMock) FinalizeSector(context.Context, abi.SectorNumber) error { @@ -331,21 +351,21 @@ func (sb *SBMock) ReleaseSector(fs.DataType, fs.SectorPath) { panic("implement me") } -func (m mockVerif) VerifyElectionPost(ctx context.Context, sectorSize abi.SectorSize, sectorInfo sectorbuilder.SortedPublicSectorInfo, challengeSeed []byte, proof []byte, candidates []sectorbuilder.EPostCandidate, proverID address.Address) (bool, error) { +func (m mockVerif) VerifyElectionPost(ctx context.Context, pvi abi.PoStVerifyInfo) (bool, error) { panic("implement me") } -func (m mockVerif) VerifyFallbackPost(ctx context.Context, sectorSize abi.SectorSize, sectorInfo sectorbuilder.SortedPublicSectorInfo, challengeSeed []byte, proof []byte, candidates []sectorbuilder.EPostCandidate, proverID address.Address, faults uint64) (bool, error) { +func (m mockVerif) VerifyFallbackPost(ctx context.Context, pvi abi.PoStVerifyInfo) (bool, error) { panic("implement me") } -func (m mockVerif) VerifySeal(sectorSize abi.SectorSize, commR, commD []byte, proverID address.Address, ticket []byte, seed []byte, sectorID abi.SectorNumber, proof []byte) (bool, error) { - if len(proof) != 32 { // Real ones are longer, but this should be fine +func (m mockVerif) VerifySeal(svi abi.SealVerifyInfo) (bool, error) { + if len(svi.OnChain.Proof) != 32 { // Real ones are longer, but this should be fine return false, nil } - for i, b := range proof { - if b != commD[i]+commR[31-i]-ticket[i]*seed[i] { + for i, b := range svi.OnChain.Proof { + if b != svi.UnsealedCID.Bytes()[i]+svi.OnChain.SealedCID.Bytes()[31-i]-svi.InteractiveRandomness[i]*svi.Randomness[i] { return false, nil } } @@ -353,14 +373,14 @@ func (m mockVerif) VerifySeal(sectorSize abi.SectorSize, commR, commD []byte, pr return true, nil } -func (m mockVerif) GenerateDataCommitment(ssize abi.PaddedPieceSize, pieces []ffi.PublicPieceInfo) ([sectorbuilder.CommLen]byte, error) { +func (m mockVerif) GenerateDataCommitment(ssize abi.PaddedPieceSize, pieces []abi.PieceInfo) (cid.Cid, error) { if len(pieces) != 1 { panic("todo") } - if pieces[0].Size != ssize.Unpadded() { + if pieces[0].Size != ssize { panic("todo") } - return pieces[0].CommP, nil + return pieces[0].PieceCID, nil } var MockVerifier = mockVerif{} diff --git a/storage/sbmock/sbmock_test.go b/storage/sbmock/sbmock_test.go index d07a4eee4..da81ffa1b 100644 --- a/storage/sbmock/sbmock_test.go +++ b/storage/sbmock/sbmock_test.go @@ -5,7 +5,7 @@ import ( "testing" "time" - "github.com/filecoin-project/go-sectorbuilder" + "github.com/filecoin-project/specs-actors/actors/abi" ) func TestOpFinish(t *testing.T) { @@ -20,7 +20,7 @@ func TestOpFinish(t *testing.T) { finished := make(chan struct{}) go func() { - _, err := sb.SealPreCommit(ctx, sid, sectorbuilder.SealTicket{}, pieces) + _, _, err := sb.SealPreCommit(ctx, sid, abi.SealRandomness{}, pieces) if err != nil { t.Error(err) return diff --git a/storage/sbmock/util.go b/storage/sbmock/util.go index 5a4232d86..4ce76da30 100644 --- a/storage/sbmock/util.go +++ b/storage/sbmock/util.go @@ -1,14 +1,9 @@ package sbmock import ( - "bytes" "crypto/rand" "io" "io/ioutil" - - "github.com/filecoin-project/specs-actors/actors/abi" - - "github.com/filecoin-project/go-sectorbuilder" ) func randB(n uint64) []byte { @@ -26,11 +21,3 @@ func commDR(in []byte) (out [32]byte) { return out } - -func commD(b []byte) [32]byte { - c, err := sectorbuilder.GeneratePieceCommitment(bytes.NewReader(b), abi.UnpaddedPieceSize(len(b))) - if err != nil { - panic(err) - } - return c -}