Added cli command for verifier to sing RemoveDataCapProposal
This commit is contained in:
parent
5d416de32e
commit
375d9fdfc9
@ -16,6 +16,7 @@ import (
|
|||||||
"github.com/filecoin-project/lotus/chain/actors/builtin"
|
"github.com/filecoin-project/lotus/chain/actors/builtin"
|
||||||
"github.com/filecoin-project/lotus/chain/actors"
|
"github.com/filecoin-project/lotus/chain/actors"
|
||||||
"github.com/filecoin-project/lotus/chain/types"
|
"github.com/filecoin-project/lotus/chain/types"
|
||||||
|
verifreg7 "github.com/filecoin-project/specs-actors/v7/actors/builtin/verifreg"
|
||||||
)
|
)
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
@ -62,6 +63,9 @@ func GetActorCodeID(av actors.Version) (cid.Cid, error) {
|
|||||||
return cid.Undef, xerrors.Errorf("unknown actor version %d", av)
|
return cid.Undef, xerrors.Errorf("unknown actor version %d", av)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type RemoveDataCapProposal = verifreg7.RemoveDataCapProposal
|
||||||
|
type RmDcProposalID = verifreg7.RmDcProposalID
|
||||||
|
const SignatureDomainSeparation_RemoveDataCap = verifreg7.SignatureDomainSeparation_RemoveDataCap
|
||||||
|
|
||||||
type State interface {
|
type State interface {
|
||||||
cbor.Marshaler
|
cbor.Marshaler
|
||||||
@ -69,6 +73,7 @@ type State interface {
|
|||||||
RootKey() (address.Address, error)
|
RootKey() (address.Address, error)
|
||||||
VerifiedClientDataCap(address.Address) (bool, abi.StoragePower, error)
|
VerifiedClientDataCap(address.Address) (bool, abi.StoragePower, error)
|
||||||
VerifierDataCap(address.Address) (bool, abi.StoragePower, error)
|
VerifierDataCap(address.Address) (bool, abi.StoragePower, error)
|
||||||
|
RemoveDataCapProposalID(verifier address.Address, client address.Address) (bool, uint64, error)
|
||||||
ForEachVerifier(func(addr address.Address, dcap abi.StoragePower) error) error
|
ForEachVerifier(func(addr address.Address, dcap abi.StoragePower) error) error
|
||||||
ForEachClient(func(addr address.Address, dcap abi.StoragePower) error) error
|
ForEachClient(func(addr address.Address, dcap abi.StoragePower) error) error
|
||||||
GetState() interface{}
|
GetState() interface{}
|
||||||
|
@ -61,6 +61,10 @@ func (s *state{{.v}}) VerifierDataCap(addr address.Address) (bool, abi.StoragePo
|
|||||||
return getDataCap(s.store, actors.Version{{.v}}, s.verifiers, addr)
|
return getDataCap(s.store, actors.Version{{.v}}, s.verifiers, addr)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *state{{.v}}) RemoveDataCapProposalID(verifier address.Address, client address.Address) (bool, uint64, error) {
|
||||||
|
return getRemoveDataCapProposalID(s.store, actors.Version{{.v}}, s.removeDataCapProposalIDs, verifier, client)
|
||||||
|
}
|
||||||
|
|
||||||
func (s *state{{.v}}) ForEachVerifier(cb func(addr address.Address, dcap abi.StoragePower) error) error {
|
func (s *state{{.v}}) ForEachVerifier(cb func(addr address.Address, dcap abi.StoragePower) error) error {
|
||||||
return forEachCap(s.store, actors.Version{{.v}}, s.verifiers, cb)
|
return forEachCap(s.store, actors.Version{{.v}}, s.verifiers, cb)
|
||||||
}
|
}
|
||||||
@ -77,6 +81,11 @@ func (s *state{{.v}}) verifiers() (adt.Map, error) {
|
|||||||
return adt{{.v}}.AsMap(s.store, s.Verifiers{{if (ge .v 3)}}, builtin{{.v}}.DefaultHamtBitwidth{{end}})
|
return adt{{.v}}.AsMap(s.store, s.Verifiers{{if (ge .v 3)}}, builtin{{.v}}.DefaultHamtBitwidth{{end}})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *state{{.v}}) removeDataCapProposalIDs() (adt.Map, error) {
|
||||||
|
{{if le .v 6}}return nil, nil
|
||||||
|
{{else}}return adt{{.v}}.AsMap(s.store, s.RemoveDataCapProposalIDs, builtin{{.v}}.DefaultHamtBitwidth){{end}}
|
||||||
|
}
|
||||||
|
|
||||||
func (s *state{{.v}}) GetState() interface{} {
|
func (s *state{{.v}}) GetState() interface{} {
|
||||||
return &s.State
|
return &s.State
|
||||||
}
|
}
|
@ -6,6 +6,7 @@ import (
|
|||||||
"github.com/filecoin-project/go-state-types/big"
|
"github.com/filecoin-project/go-state-types/big"
|
||||||
"github.com/filecoin-project/lotus/chain/actors"
|
"github.com/filecoin-project/lotus/chain/actors"
|
||||||
"github.com/filecoin-project/lotus/chain/actors/adt"
|
"github.com/filecoin-project/lotus/chain/actors/adt"
|
||||||
|
"github.com/filecoin-project/specs-actors/v7/actors/builtin/verifreg"
|
||||||
"golang.org/x/xerrors"
|
"golang.org/x/xerrors"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -50,3 +51,25 @@ func forEachCap(store adt.Store, ver actors.Version, root rootFunc, cb func(addr
|
|||||||
return cb(a, dcap)
|
return cb(a, dcap)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func getRemoveDataCapProposalID(store adt.Store, ver actors.Version, root rootFunc, verifier address.Address, client address.Address) (bool, uint64, error) {
|
||||||
|
if verifier.Protocol() != address.ID {
|
||||||
|
return false, 0, xerrors.Errorf("can only look up ID addresses")
|
||||||
|
}
|
||||||
|
if client.Protocol() != address.ID {
|
||||||
|
return false, 0, xerrors.Errorf("can only look up ID addresses")
|
||||||
|
}
|
||||||
|
vh, err := root()
|
||||||
|
if err != nil {
|
||||||
|
return false, 0, xerrors.Errorf("loading verifreg: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
var id verifreg.RmDcProposalID
|
||||||
|
if found, err := vh.Get(abi.NewAddrPairKey(verifier, client), &id); err != nil {
|
||||||
|
return false, 0, xerrors.Errorf("looking up addr pair: %w", err)
|
||||||
|
} else if !found {
|
||||||
|
return false, 0, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
return true, id.ProposalID, nil
|
||||||
|
}
|
||||||
|
@ -53,6 +53,10 @@ func (s *state0) VerifierDataCap(addr address.Address) (bool, abi.StoragePower,
|
|||||||
return getDataCap(s.store, actors.Version0, s.verifiers, addr)
|
return getDataCap(s.store, actors.Version0, s.verifiers, addr)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *state0) RemoveDataCapProposalID(verifier address.Address, client address.Address) (bool, uint64, error) {
|
||||||
|
return getRemoveDataCapProposalID(s.store, actors.Version0, s.removeDataCapProposalIDs, verifier, client)
|
||||||
|
}
|
||||||
|
|
||||||
func (s *state0) ForEachVerifier(cb func(addr address.Address, dcap abi.StoragePower) error) error {
|
func (s *state0) ForEachVerifier(cb func(addr address.Address, dcap abi.StoragePower) error) error {
|
||||||
return forEachCap(s.store, actors.Version0, s.verifiers, cb)
|
return forEachCap(s.store, actors.Version0, s.verifiers, cb)
|
||||||
}
|
}
|
||||||
@ -69,6 +73,11 @@ func (s *state0) verifiers() (adt.Map, error) {
|
|||||||
return adt0.AsMap(s.store, s.Verifiers)
|
return adt0.AsMap(s.store, s.Verifiers)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *state0) removeDataCapProposalIDs() (adt.Map, error) {
|
||||||
|
return nil, nil
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
func (s *state0) GetState() interface{} {
|
func (s *state0) GetState() interface{} {
|
||||||
return &s.State
|
return &s.State
|
||||||
}
|
}
|
||||||
|
@ -53,6 +53,10 @@ func (s *state2) VerifierDataCap(addr address.Address) (bool, abi.StoragePower,
|
|||||||
return getDataCap(s.store, actors.Version2, s.verifiers, addr)
|
return getDataCap(s.store, actors.Version2, s.verifiers, addr)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *state2) RemoveDataCapProposalID(verifier address.Address, client address.Address) (bool, uint64, error) {
|
||||||
|
return getRemoveDataCapProposalID(s.store, actors.Version2, s.removeDataCapProposalIDs, verifier, client)
|
||||||
|
}
|
||||||
|
|
||||||
func (s *state2) ForEachVerifier(cb func(addr address.Address, dcap abi.StoragePower) error) error {
|
func (s *state2) ForEachVerifier(cb func(addr address.Address, dcap abi.StoragePower) error) error {
|
||||||
return forEachCap(s.store, actors.Version2, s.verifiers, cb)
|
return forEachCap(s.store, actors.Version2, s.verifiers, cb)
|
||||||
}
|
}
|
||||||
@ -69,6 +73,11 @@ func (s *state2) verifiers() (adt.Map, error) {
|
|||||||
return adt2.AsMap(s.store, s.Verifiers)
|
return adt2.AsMap(s.store, s.Verifiers)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *state2) removeDataCapProposalIDs() (adt.Map, error) {
|
||||||
|
return nil, nil
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
func (s *state2) GetState() interface{} {
|
func (s *state2) GetState() interface{} {
|
||||||
return &s.State
|
return &s.State
|
||||||
}
|
}
|
||||||
|
@ -54,6 +54,10 @@ func (s *state3) VerifierDataCap(addr address.Address) (bool, abi.StoragePower,
|
|||||||
return getDataCap(s.store, actors.Version3, s.verifiers, addr)
|
return getDataCap(s.store, actors.Version3, s.verifiers, addr)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *state3) RemoveDataCapProposalID(verifier address.Address, client address.Address) (bool, uint64, error) {
|
||||||
|
return getRemoveDataCapProposalID(s.store, actors.Version3, s.removeDataCapProposalIDs, verifier, client)
|
||||||
|
}
|
||||||
|
|
||||||
func (s *state3) ForEachVerifier(cb func(addr address.Address, dcap abi.StoragePower) error) error {
|
func (s *state3) ForEachVerifier(cb func(addr address.Address, dcap abi.StoragePower) error) error {
|
||||||
return forEachCap(s.store, actors.Version3, s.verifiers, cb)
|
return forEachCap(s.store, actors.Version3, s.verifiers, cb)
|
||||||
}
|
}
|
||||||
@ -70,6 +74,11 @@ func (s *state3) verifiers() (adt.Map, error) {
|
|||||||
return adt3.AsMap(s.store, s.Verifiers, builtin3.DefaultHamtBitwidth)
|
return adt3.AsMap(s.store, s.Verifiers, builtin3.DefaultHamtBitwidth)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *state3) removeDataCapProposalIDs() (adt.Map, error) {
|
||||||
|
return nil, nil
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
func (s *state3) GetState() interface{} {
|
func (s *state3) GetState() interface{} {
|
||||||
return &s.State
|
return &s.State
|
||||||
}
|
}
|
||||||
|
@ -54,6 +54,10 @@ func (s *state4) VerifierDataCap(addr address.Address) (bool, abi.StoragePower,
|
|||||||
return getDataCap(s.store, actors.Version4, s.verifiers, addr)
|
return getDataCap(s.store, actors.Version4, s.verifiers, addr)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *state4) RemoveDataCapProposalID(verifier address.Address, client address.Address) (bool, uint64, error) {
|
||||||
|
return getRemoveDataCapProposalID(s.store, actors.Version4, s.removeDataCapProposalIDs, verifier, client)
|
||||||
|
}
|
||||||
|
|
||||||
func (s *state4) ForEachVerifier(cb func(addr address.Address, dcap abi.StoragePower) error) error {
|
func (s *state4) ForEachVerifier(cb func(addr address.Address, dcap abi.StoragePower) error) error {
|
||||||
return forEachCap(s.store, actors.Version4, s.verifiers, cb)
|
return forEachCap(s.store, actors.Version4, s.verifiers, cb)
|
||||||
}
|
}
|
||||||
@ -70,6 +74,11 @@ func (s *state4) verifiers() (adt.Map, error) {
|
|||||||
return adt4.AsMap(s.store, s.Verifiers, builtin4.DefaultHamtBitwidth)
|
return adt4.AsMap(s.store, s.Verifiers, builtin4.DefaultHamtBitwidth)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *state4) removeDataCapProposalIDs() (adt.Map, error) {
|
||||||
|
return nil, nil
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
func (s *state4) GetState() interface{} {
|
func (s *state4) GetState() interface{} {
|
||||||
return &s.State
|
return &s.State
|
||||||
}
|
}
|
||||||
|
@ -54,6 +54,10 @@ func (s *state5) VerifierDataCap(addr address.Address) (bool, abi.StoragePower,
|
|||||||
return getDataCap(s.store, actors.Version5, s.verifiers, addr)
|
return getDataCap(s.store, actors.Version5, s.verifiers, addr)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *state5) RemoveDataCapProposalID(verifier address.Address, client address.Address) (bool, uint64, error) {
|
||||||
|
return getRemoveDataCapProposalID(s.store, actors.Version5, s.removeDataCapProposalIDs, verifier, client)
|
||||||
|
}
|
||||||
|
|
||||||
func (s *state5) ForEachVerifier(cb func(addr address.Address, dcap abi.StoragePower) error) error {
|
func (s *state5) ForEachVerifier(cb func(addr address.Address, dcap abi.StoragePower) error) error {
|
||||||
return forEachCap(s.store, actors.Version5, s.verifiers, cb)
|
return forEachCap(s.store, actors.Version5, s.verifiers, cb)
|
||||||
}
|
}
|
||||||
@ -70,6 +74,11 @@ func (s *state5) verifiers() (adt.Map, error) {
|
|||||||
return adt5.AsMap(s.store, s.Verifiers, builtin5.DefaultHamtBitwidth)
|
return adt5.AsMap(s.store, s.Verifiers, builtin5.DefaultHamtBitwidth)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *state5) removeDataCapProposalIDs() (adt.Map, error) {
|
||||||
|
return nil, nil
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
func (s *state5) GetState() interface{} {
|
func (s *state5) GetState() interface{} {
|
||||||
return &s.State
|
return &s.State
|
||||||
}
|
}
|
||||||
|
@ -54,6 +54,10 @@ func (s *state6) VerifierDataCap(addr address.Address) (bool, abi.StoragePower,
|
|||||||
return getDataCap(s.store, actors.Version6, s.verifiers, addr)
|
return getDataCap(s.store, actors.Version6, s.verifiers, addr)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *state6) RemoveDataCapProposalID(verifier address.Address, client address.Address) (bool, uint64, error) {
|
||||||
|
return getRemoveDataCapProposalID(s.store, actors.Version6, s.removeDataCapProposalIDs, verifier, client)
|
||||||
|
}
|
||||||
|
|
||||||
func (s *state6) ForEachVerifier(cb func(addr address.Address, dcap abi.StoragePower) error) error {
|
func (s *state6) ForEachVerifier(cb func(addr address.Address, dcap abi.StoragePower) error) error {
|
||||||
return forEachCap(s.store, actors.Version6, s.verifiers, cb)
|
return forEachCap(s.store, actors.Version6, s.verifiers, cb)
|
||||||
}
|
}
|
||||||
@ -70,6 +74,11 @@ func (s *state6) verifiers() (adt.Map, error) {
|
|||||||
return adt6.AsMap(s.store, s.Verifiers, builtin6.DefaultHamtBitwidth)
|
return adt6.AsMap(s.store, s.Verifiers, builtin6.DefaultHamtBitwidth)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *state6) removeDataCapProposalIDs() (adt.Map, error) {
|
||||||
|
return nil, nil
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
func (s *state6) GetState() interface{} {
|
func (s *state6) GetState() interface{} {
|
||||||
return &s.State
|
return &s.State
|
||||||
}
|
}
|
||||||
|
@ -54,6 +54,10 @@ func (s *state7) VerifierDataCap(addr address.Address) (bool, abi.StoragePower,
|
|||||||
return getDataCap(s.store, actors.Version7, s.verifiers, addr)
|
return getDataCap(s.store, actors.Version7, s.verifiers, addr)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *state7) RemoveDataCapProposalID(verifier address.Address, client address.Address) (bool, uint64, error) {
|
||||||
|
return getRemoveDataCapProposalID(s.store, actors.Version7, s.removeDataCapProposalIDs, verifier, client)
|
||||||
|
}
|
||||||
|
|
||||||
func (s *state7) ForEachVerifier(cb func(addr address.Address, dcap abi.StoragePower) error) error {
|
func (s *state7) ForEachVerifier(cb func(addr address.Address, dcap abi.StoragePower) error) error {
|
||||||
return forEachCap(s.store, actors.Version7, s.verifiers, cb)
|
return forEachCap(s.store, actors.Version7, s.verifiers, cb)
|
||||||
}
|
}
|
||||||
@ -70,6 +74,10 @@ func (s *state7) verifiers() (adt.Map, error) {
|
|||||||
return adt7.AsMap(s.store, s.Verifiers, builtin7.DefaultHamtBitwidth)
|
return adt7.AsMap(s.store, s.Verifiers, builtin7.DefaultHamtBitwidth)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *state7) removeDataCapProposalIDs() (adt.Map, error) {
|
||||||
|
return adt7.AsMap(s.store, s.RemoveDataCapProposalIDs, builtin7.DefaultHamtBitwidth)
|
||||||
|
}
|
||||||
|
|
||||||
func (s *state7) GetState() interface{} {
|
func (s *state7) GetState() interface{} {
|
||||||
return &s.State
|
return &s.State
|
||||||
}
|
}
|
||||||
|
@ -27,6 +27,7 @@ import (
|
|||||||
"github.com/filecoin-project/lotus/chain/actors/adt"
|
"github.com/filecoin-project/lotus/chain/actors/adt"
|
||||||
"github.com/filecoin-project/lotus/chain/actors/builtin"
|
"github.com/filecoin-project/lotus/chain/actors/builtin"
|
||||||
"github.com/filecoin-project/lotus/chain/types"
|
"github.com/filecoin-project/lotus/chain/types"
|
||||||
|
verifreg7 "github.com/filecoin-project/specs-actors/v7/actors/builtin/verifreg"
|
||||||
)
|
)
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
@ -151,12 +152,18 @@ func GetActorCodeID(av actors.Version) (cid.Cid, error) {
|
|||||||
return cid.Undef, xerrors.Errorf("unknown actor version %d", av)
|
return cid.Undef, xerrors.Errorf("unknown actor version %d", av)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type RemoveDataCapProposal = verifreg7.RemoveDataCapProposal
|
||||||
|
type RmDcProposalID = verifreg7.RmDcProposalID
|
||||||
|
|
||||||
|
const SignatureDomainSeparation_RemoveDataCap = verifreg7.SignatureDomainSeparation_RemoveDataCap
|
||||||
|
|
||||||
type State interface {
|
type State interface {
|
||||||
cbor.Marshaler
|
cbor.Marshaler
|
||||||
|
|
||||||
RootKey() (address.Address, error)
|
RootKey() (address.Address, error)
|
||||||
VerifiedClientDataCap(address.Address) (bool, abi.StoragePower, error)
|
VerifiedClientDataCap(address.Address) (bool, abi.StoragePower, error)
|
||||||
VerifierDataCap(address.Address) (bool, abi.StoragePower, error)
|
VerifierDataCap(address.Address) (bool, abi.StoragePower, error)
|
||||||
|
RemoveDataCapProposalID(verifier address.Address, client address.Address) (bool, uint64, error)
|
||||||
ForEachVerifier(func(addr address.Address, dcap abi.StoragePower) error) error
|
ForEachVerifier(func(addr address.Address, dcap abi.StoragePower) error) error
|
||||||
ForEachClient(func(addr address.Address, dcap abi.StoragePower) error) error
|
ForEachClient(func(addr address.Address, dcap abi.StoragePower) error) error
|
||||||
GetState() interface{}
|
GetState() interface{}
|
||||||
|
@ -1,7 +1,9 @@
|
|||||||
package cli
|
package cli
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"bytes"
|
||||||
"context"
|
"context"
|
||||||
|
"encoding/hex"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
verifreg4 "github.com/filecoin-project/specs-actors/v4/actors/builtin/verifreg"
|
verifreg4 "github.com/filecoin-project/specs-actors/v4/actors/builtin/verifreg"
|
||||||
@ -34,6 +36,7 @@ var filplusCmd = &cli.Command{
|
|||||||
filplusListClientsCmd,
|
filplusListClientsCmd,
|
||||||
filplusCheckClientCmd,
|
filplusCheckClientCmd,
|
||||||
filplusCheckNotaryCmd,
|
filplusCheckNotaryCmd,
|
||||||
|
filplusSignRemoveDataCapProposal,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -274,3 +277,94 @@ func checkNotary(ctx context.Context, api v0api.FullNode, vaddr address.Address)
|
|||||||
|
|
||||||
return st.VerifierDataCap(vid)
|
return st.VerifierDataCap(vid)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var filplusSignRemoveDataCapProposal = &cli.Command{
|
||||||
|
Name: "sign-remove-data-cap-proposal",
|
||||||
|
Usage: "TODO",
|
||||||
|
Flags: []cli.Flag{
|
||||||
|
&cli.Int64Flag{
|
||||||
|
Name: "id",
|
||||||
|
Usage: "specify the id of the Remove Data Cap Proposal",
|
||||||
|
Required: false,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
Action: func(cctx *cli.Context) error {
|
||||||
|
if cctx.Args().Len() != 3 {
|
||||||
|
return fmt.Errorf("must specify three arguments: verifier address, client address, and allowance to remove")
|
||||||
|
}
|
||||||
|
|
||||||
|
verifier, err := address.NewFromString(cctx.Args().Get(0))
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
client, err := address.NewFromString(cctx.Args().Get(1))
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
allowanceToRemove, err := types.BigFromString(cctx.Args().Get(2))
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
api, closer, err := GetFullNodeAPI(cctx)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
defer closer()
|
||||||
|
ctx := ReqContext(cctx)
|
||||||
|
|
||||||
|
found, _, err := checkNotary(ctx, api, verifier)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
if !found {
|
||||||
|
return xerrors.New("verifier address must be a notary")
|
||||||
|
}
|
||||||
|
|
||||||
|
id := cctx.Uint64("id")
|
||||||
|
if id == 0 {
|
||||||
|
act, err := api.StateGetActor(ctx, verifreg.Address, types.EmptyTSK)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
apibs := blockstore.NewAPIBlockstore(api)
|
||||||
|
store := adt.WrapStore(ctx, cbor.NewCborStore(apibs))
|
||||||
|
|
||||||
|
st, err := verifreg.Load(store, act)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
_, id, err = st.RemoveDataCapProposalID(verifier, client)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: This should be abstracted over actor versions
|
||||||
|
params := verifreg.RemoveDataCapProposal{
|
||||||
|
RemovalProposalID: verifreg.RmDcProposalID{ProposalID: id},
|
||||||
|
DataCapAmount: allowanceToRemove,
|
||||||
|
VerifiedClient: client,
|
||||||
|
}
|
||||||
|
|
||||||
|
paramBuf := new(bytes.Buffer)
|
||||||
|
paramBuf.WriteString(verifreg.SignatureDomainSeparation_RemoveDataCap)
|
||||||
|
err = params.MarshalCBOR(paramBuf)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
msg, err := api.WalletSign(ctx, verifier, paramBuf.Bytes())
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
fmt.Println(hex.EncodeToString(msg.Data))
|
||||||
|
|
||||||
|
return nil
|
||||||
|
},
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user