From 3a038d5498082672a4c823f65d17b7637ddf17a2 Mon Sep 17 00:00:00 2001 From: tanlang Date: Tue, 6 Dec 2022 01:29:30 +0000 Subject: [PATCH 01/21] feat: modify market api --- venus-shared/api/market/api.go | 8 ++++---- venus-shared/api/market/method.md | 8 ++++---- venus-shared/api/market/proxy_gen.go | 9 +++++---- 3 files changed, 13 insertions(+), 12 deletions(-) diff --git a/venus-shared/api/market/api.go b/venus-shared/api/market/api.go index 67fb8d2142..61a7e5466d 100644 --- a/venus-shared/api/market/api.go +++ b/venus-shared/api/market/api.go @@ -38,12 +38,12 @@ type IMarket interface { MarketSetRetrievalAsk(ctx context.Context, mAddr address.Address, rask *retrievalmarket.Ask) error //perm:admin MarketGetRetrievalAsk(ctx context.Context, mAddr address.Address) (*retrievalmarket.Ask, error) //perm:read MarketListRetrievalAsk(ctx context.Context) ([]*market.RetrievalAsk, error) //perm:read - MarketListDataTransfers(ctx context.Context) ([]market.DataTransferChannel, error) //perm:write - MarketDataTransferUpdates(ctx context.Context) (<-chan market.DataTransferChannel, error) //perm:write + MarketListDataTransfers(ctx context.Context) ([]market.DataTransferChannel, error) //perm:admin + MarketDataTransferUpdates(ctx context.Context) (<-chan market.DataTransferChannel, error) //perm:admin // MarketRestartDataTransfer attempts to restart a data transfer with the given transfer ID and other peer - MarketRestartDataTransfer(ctx context.Context, transferID datatransfer.TransferID, otherPeer peer.ID, isInitiator bool) error //perm:write + MarketRestartDataTransfer(ctx context.Context, transferID datatransfer.TransferID, otherPeer peer.ID, isInitiator bool) error //perm:admin // MarketCancelDataTransfer cancels a data transfer with the given transfer ID and other peer - MarketCancelDataTransfer(ctx context.Context, transferID datatransfer.TransferID, otherPeer peer.ID, isInitiator bool) error //perm:write + MarketCancelDataTransfer(ctx context.Context, transferID datatransfer.TransferID, otherPeer peer.ID, isInitiator bool) error //perm:admin MarketPendingDeals(ctx context.Context) ([]market.PendingDealInfo, error) //perm:write MarketPublishPendingDeals(ctx context.Context) error //perm:admin diff --git a/venus-shared/api/market/method.md b/venus-shared/api/market/method.md index 4e7a278907..1e369e47c1 100644 --- a/venus-shared/api/market/method.md +++ b/venus-shared/api/market/method.md @@ -994,7 +994,7 @@ Response: MarketCancelDataTransfer cancels a data transfer with the given transfer ID and other peer -Perms: write +Perms: admin Inputs: ```json @@ -1024,7 +1024,7 @@ Response: `"string value"` ### MarketDataTransferUpdates -Perms: write +Perms: admin Inputs: `[]` @@ -1293,7 +1293,7 @@ Response: `{}` ### MarketListDataTransfers -Perms: write +Perms: admin Inputs: `[]` @@ -1667,7 +1667,7 @@ Response: MarketRestartDataTransfer attempts to restart a data transfer with the given transfer ID and other peer -Perms: write +Perms: admin Inputs: ```json diff --git a/venus-shared/api/market/proxy_gen.go b/venus-shared/api/market/proxy_gen.go index 639c4d40b4..4e5a578a3f 100644 --- a/venus-shared/api/market/proxy_gen.go +++ b/venus-shared/api/market/proxy_gen.go @@ -66,16 +66,17 @@ type IMarketStruct struct { ListenMarketEvent func(ctx context.Context, policy *gateway.MarketRegisterPolicy) (<-chan *gateway.RequestEvent, error) `perm:"read"` MarkDealsAsPacking func(ctx context.Context, miner address.Address, deals []abi.DealID) error `perm:"write"` MarketAddBalance func(ctx context.Context, wallet, addr address.Address, amt types.BigInt) (cid.Cid, error) `perm:"sign"` - MarketCancelDataTransfer func(ctx context.Context, transferID datatransfer.TransferID, otherPeer peer.ID, isInitiator bool) error `perm:"write"` + MarketCancelDataTransfer func(ctx context.Context, transferID datatransfer.TransferID, otherPeer peer.ID, isInitiator bool) error `perm:"admin"` MarketDataTransferPath func(context.Context, address.Address) (string, error) `perm:"admin"` - MarketDataTransferUpdates func(ctx context.Context) (<-chan market.DataTransferChannel, error) `perm:"write"` + MarketDataTransferUpdates func(ctx context.Context) (<-chan market.DataTransferChannel, error) `perm:"admin"` MarketGetAsk func(ctx context.Context, mAddr address.Address) (*market.SignedStorageAsk, error) `perm:"read"` MarketGetDealUpdates func(ctx context.Context) (<-chan market.MinerDeal, error) `perm:"read"` MarketGetReserved func(ctx context.Context, addr address.Address) (types.BigInt, error) `perm:"sign"` MarketGetRetrievalAsk func(ctx context.Context, mAddr address.Address) (*retrievalmarket.Ask, error) `perm:"read"` MarketImportDealData func(ctx context.Context, propcid cid.Cid, path string) error `perm:"write"` MarketImportPublishedDeal func(ctx context.Context, deal market.MinerDeal) error `perm:"write"` - MarketListDataTransfers func(ctx context.Context) ([]market.DataTransferChannel, error) `perm:"write"` + MarketListAsk func(ctx context.Context) ([]*market.SignedStorageAsk, error) `perm:"read"` + MarketListDataTransfers func(ctx context.Context) ([]market.DataTransferChannel, error) `perm:"admin"` MarketListDeals func(ctx context.Context, addrs []address.Address) ([]*types.MarketDeal, error) `perm:"read"` MarketListIncompleteDeals func(ctx context.Context, mAddr address.Address) ([]market.MinerDeal, error) `perm:"read"` MarketListRetrievalAsk func(ctx context.Context) ([]*market.RetrievalAsk, error) `perm:"read"` @@ -87,7 +88,7 @@ type IMarketStruct struct { MarketPublishPendingDeals func(ctx context.Context) error `perm:"admin"` MarketReleaseFunds func(ctx context.Context, addr address.Address, amt types.BigInt) error `perm:"sign"` MarketReserveFunds func(ctx context.Context, wallet address.Address, addr address.Address, amt types.BigInt) (cid.Cid, error) `perm:"sign"` - MarketRestartDataTransfer func(ctx context.Context, transferID datatransfer.TransferID, otherPeer peer.ID, isInitiator bool) error `perm:"write"` + MarketRestartDataTransfer func(ctx context.Context, transferID datatransfer.TransferID, otherPeer peer.ID, isInitiator bool) error `perm:"admin"` MarketSetAsk func(ctx context.Context, mAddr address.Address, price types.BigInt, verifiedPrice types.BigInt, duration abi.ChainEpoch, minPieceSize abi.PaddedPieceSize, maxPieceSize abi.PaddedPieceSize) error `perm:"admin"` MarketSetDataTransferPath func(context.Context, address.Address, string) error `perm:"admin"` MarketSetMaxBalanceAddFee func(context.Context, address.Address, types.FIL) error `perm:"write"` From bbb3f3fb22974c8d5815dc4d822ef05186c4a980 Mon Sep 17 00:00:00 2001 From: tanlang Date: Tue, 29 Nov 2022 02:34:13 +0000 Subject: [PATCH 02/21] feat: add MsgQueryParams --- venus-shared/types/messager/message.go | 38 ++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/venus-shared/types/messager/message.go b/venus-shared/types/messager/message.go index 4edad8c4d7..e1eb8689be 100644 --- a/venus-shared/types/messager/message.go +++ b/venus-shared/types/messager/message.go @@ -159,3 +159,41 @@ type ReplacMessageParams struct { GasFeecap abi.TokenAmount GasOverPremium float64 } + +type MsgQueryParams struct { + // Message State + State MessageState + // Message From + From address.Address + // Message WalletName + WalletName string + + PageIndex int + PageSize int +} + +func (qp *MsgQueryParams) ToMap() map[string]interface{} { + ret := make(map[string]interface{}) + if qp.State != UnKnown { + ret["state"] = qp.State + } + if qp.From != address.Undef { + ret["from_addr"] = qp.From.String() + } + if qp.WalletName != "" { + ret["wallet_name"] = qp.WalletName + } + return ret +} + +func (qp *MsgQueryParams) Offset() int { + return (qp.PageIndex - 1) * qp.PageSize +} + +func (qp *MsgQueryParams) Limit() int { + return qp.PageSize +} + +func (qp *MsgQueryParams) IsPaged() bool { + return qp.PageIndex > 0 && qp.PageSize > 0 +} From b116b484c51497625993870299abdcd9d5aaea4e Mon Sep 17 00:00:00 2001 From: tanlang Date: Tue, 29 Nov 2022 03:43:16 +0000 Subject: [PATCH 03/21] feat: modify share api of messager --- venus-shared/api/messager/api.go | 2 +- venus-shared/api/messager/method.md | 13 ++++++++++++- venus-shared/api/messager/mock/mock_imessager.go | 8 ++++---- venus-shared/api/messager/proxy_gen.go | 6 +++--- 4 files changed, 20 insertions(+), 9 deletions(-) diff --git a/venus-shared/api/messager/api.go b/venus-shared/api/messager/api.go index 42a38e82b1..4165519096 100644 --- a/venus-shared/api/messager/api.go +++ b/venus-shared/api/messager/api.go @@ -22,7 +22,7 @@ type IMessager interface { GetMessageBySignedCid(ctx context.Context, cid cid.Cid) (*mtypes.Message, error) //perm:read GetMessageByUnsignedCid(ctx context.Context, cid cid.Cid) (*mtypes.Message, error) //perm:read GetMessageByFromAndNonce(ctx context.Context, from address.Address, nonce uint64) (*mtypes.Message, error) //perm:read - ListMessage(ctx context.Context) ([]*mtypes.Message, error) //perm:admin + ListMessage(ctx context.Context, p *mtypes.MsgQueryParams) ([]*mtypes.Message, error) //perm:admin ListMessageByFromState(ctx context.Context, from address.Address, state mtypes.MessageState, isAsc bool, pageIndex, pageSize int) ([]*mtypes.Message, error) //perm:admin ListMessageByAddress(ctx context.Context, addr address.Address) ([]*mtypes.Message, error) //perm:admin ListFailedMessage(ctx context.Context) ([]*mtypes.Message, error) //perm:admin diff --git a/venus-shared/api/messager/method.md b/venus-shared/api/messager/method.md index 391cb08ce9..0498e4161d 100644 --- a/venus-shared/api/messager/method.md +++ b/venus-shared/api/messager/method.md @@ -672,7 +672,18 @@ Response: Perms: admin -Inputs: `[]` +Inputs: +```json +[ + { + "State": 3, + "From": "f01234", + "WalletName": "string value", + "PageIndex": 123, + "PageSize": 123 + } +] +``` Response: ```json diff --git a/venus-shared/api/messager/mock/mock_imessager.go b/venus-shared/api/messager/mock/mock_imessager.go index c9682b8063..6867cf0427 100644 --- a/venus-shared/api/messager/mock/mock_imessager.go +++ b/venus-shared/api/messager/mock/mock_imessager.go @@ -308,18 +308,18 @@ func (mr *MockIMessagerMockRecorder) ListFailedMessage(arg0 interface{}) *gomock } // ListMessage mocks base method. -func (m *MockIMessager) ListMessage(arg0 context.Context) ([]*messager.Message, error) { +func (m *MockIMessager) ListMessage(arg0 context.Context, arg1 *messager.MsgQueryParams) ([]*messager.Message, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "ListMessage", arg0) + ret := m.ctrl.Call(m, "ListMessage", arg0, arg1) ret0, _ := ret[0].([]*messager.Message) ret1, _ := ret[1].(error) return ret0, ret1 } // ListMessage indicates an expected call of ListMessage. -func (mr *MockIMessagerMockRecorder) ListMessage(arg0 interface{}) *gomock.Call { +func (mr *MockIMessagerMockRecorder) ListMessage(arg0, arg1 interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ListMessage", reflect.TypeOf((*MockIMessager)(nil).ListMessage), arg0) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ListMessage", reflect.TypeOf((*MockIMessager)(nil).ListMessage), arg0, arg1) } // ListMessageByAddress mocks base method. diff --git a/venus-shared/api/messager/proxy_gen.go b/venus-shared/api/messager/proxy_gen.go index 113f62c3bd..5b93cd254d 100644 --- a/venus-shared/api/messager/proxy_gen.go +++ b/venus-shared/api/messager/proxy_gen.go @@ -33,7 +33,7 @@ type IMessagerStruct struct { ListAddress func(ctx context.Context) ([]*mtypes.Address, error) `perm:"admin"` ListBlockedMessage func(ctx context.Context, addr address.Address, d time.Duration) ([]*mtypes.Message, error) `perm:"admin"` ListFailedMessage func(ctx context.Context) ([]*mtypes.Message, error) `perm:"admin"` - ListMessage func(ctx context.Context) ([]*mtypes.Message, error) `perm:"admin"` + ListMessage func(ctx context.Context, p *mtypes.MsgQueryParams) ([]*mtypes.Message, error) `perm:"admin"` ListMessageByAddress func(ctx context.Context, addr address.Address) ([]*mtypes.Message, error) `perm:"admin"` ListMessageByFromState func(ctx context.Context, from address.Address, state mtypes.MessageState, isAsc bool, pageIndex, pageSize int) ([]*mtypes.Message, error) `perm:"admin"` ListNode func(ctx context.Context) ([]*mtypes.Node, error) `perm:"admin"` @@ -118,8 +118,8 @@ func (s *IMessagerStruct) ListBlockedMessage(p0 context.Context, p1 address.Addr func (s *IMessagerStruct) ListFailedMessage(p0 context.Context) ([]*mtypes.Message, error) { return s.Internal.ListFailedMessage(p0) } -func (s *IMessagerStruct) ListMessage(p0 context.Context) ([]*mtypes.Message, error) { - return s.Internal.ListMessage(p0) +func (s *IMessagerStruct) ListMessage(p0 context.Context, p1 *mtypes.MsgQueryParams) ([]*mtypes.Message, error) { + return s.Internal.ListMessage(p0, p1) } func (s *IMessagerStruct) ListMessageByAddress(p0 context.Context, p1 address.Address) ([]*mtypes.Message, error) { return s.Internal.ListMessageByAddress(p0, p1) From 5d3469a595d46966a635102ca28a14df970fdb1d Mon Sep 17 00:00:00 2001 From: tanlang Date: Wed, 7 Dec 2022 02:21:49 +0000 Subject: [PATCH 04/21] feat: demote some methods of messager from admin --- venus-shared/api/messager/api.go | 38 ++++++++++----------- venus-shared/api/messager/method.md | 47 ++++++++++++++------------ venus-shared/api/messager/proxy_gen.go | 38 ++++++++++----------- venus-shared/types/messager/message.go | 19 +++++------ 4 files changed, 72 insertions(+), 70 deletions(-) diff --git a/venus-shared/api/messager/api.go b/venus-shared/api/messager/api.go index 4165519096..155a7f7112 100644 --- a/venus-shared/api/messager/api.go +++ b/venus-shared/api/messager/api.go @@ -22,30 +22,30 @@ type IMessager interface { GetMessageBySignedCid(ctx context.Context, cid cid.Cid) (*mtypes.Message, error) //perm:read GetMessageByUnsignedCid(ctx context.Context, cid cid.Cid) (*mtypes.Message, error) //perm:read GetMessageByFromAndNonce(ctx context.Context, from address.Address, nonce uint64) (*mtypes.Message, error) //perm:read - ListMessage(ctx context.Context, p *mtypes.MsgQueryParams) ([]*mtypes.Message, error) //perm:admin + ListMessage(ctx context.Context, p *mtypes.MsgQueryParams) ([]*mtypes.Message, error) //perm:read ListMessageByFromState(ctx context.Context, from address.Address, state mtypes.MessageState, isAsc bool, pageIndex, pageSize int) ([]*mtypes.Message, error) //perm:admin ListMessageByAddress(ctx context.Context, addr address.Address) ([]*mtypes.Message, error) //perm:admin - ListFailedMessage(ctx context.Context) ([]*mtypes.Message, error) //perm:admin - ListBlockedMessage(ctx context.Context, addr address.Address, d time.Duration) ([]*mtypes.Message, error) //perm:admin - UpdateMessageStateByID(ctx context.Context, id string, state mtypes.MessageState) error //perm:admin + ListFailedMessage(ctx context.Context) ([]*mtypes.Message, error) //perm:read + ListBlockedMessage(ctx context.Context, addr address.Address, d time.Duration) ([]*mtypes.Message, error) //perm:read + UpdateMessageStateByID(ctx context.Context, id string, state mtypes.MessageState) error //perm:write UpdateAllFilledMessage(ctx context.Context) (int, error) //perm:admin - UpdateFilledMessageByID(ctx context.Context, id string) (string, error) //perm:admin - ReplaceMessage(ctx context.Context, params *mtypes.ReplacMessageParams) (cid.Cid, error) //perm:admin - RepublishMessage(ctx context.Context, id string) error //perm:admin - MarkBadMessage(ctx context.Context, id string) error //perm:admin - RecoverFailedMsg(ctx context.Context, addr address.Address) ([]string, error) //perm:admin + UpdateFilledMessageByID(ctx context.Context, id string) (string, error) //perm:write + ReplaceMessage(ctx context.Context, params *mtypes.ReplacMessageParams) (cid.Cid, error) //perm:write + RepublishMessage(ctx context.Context, id string) error //perm:write + MarkBadMessage(ctx context.Context, id string) error //perm:write + RecoverFailedMsg(ctx context.Context, addr address.Address) ([]string, error) //perm:write - GetAddress(ctx context.Context, addr address.Address) (*mtypes.Address, error) //perm:admin + GetAddress(ctx context.Context, addr address.Address) (*mtypes.Address, error) //perm:read HasAddress(ctx context.Context, addr address.Address) (bool, error) //perm:read WalletHas(ctx context.Context, addr address.Address) (bool, error) //perm:read - ListAddress(ctx context.Context) ([]*mtypes.Address, error) //perm:admin - UpdateNonce(ctx context.Context, addr address.Address, nonce uint64) error //perm:admin - DeleteAddress(ctx context.Context, addr address.Address) error //perm:admin - ForbiddenAddress(ctx context.Context, addr address.Address) error //perm:admin - ActiveAddress(ctx context.Context, addr address.Address) error //perm:admin + ListAddress(ctx context.Context) ([]*mtypes.Address, error) //perm:read + UpdateNonce(ctx context.Context, addr address.Address, nonce uint64) error //perm:write + DeleteAddress(ctx context.Context, addr address.Address) error //perm:write + ForbiddenAddress(ctx context.Context, addr address.Address) error //perm:write + ActiveAddress(ctx context.Context, addr address.Address) error //perm:write SetSelectMsgNum(ctx context.Context, addr address.Address, num uint64) error //perm:admin - SetFeeParams(ctx context.Context, params *mtypes.AddressSpec) error //perm:admin - ClearUnFillMessage(ctx context.Context, addr address.Address) (int, error) //perm:admin + SetFeeParams(ctx context.Context, params *mtypes.AddressSpec) error //perm:write + ClearUnFillMessage(ctx context.Context, addr address.Address) (int, error) //perm:write GetSharedParams(ctx context.Context) (*mtypes.SharedSpec, error) //perm:admin SetSharedParams(ctx context.Context, params *mtypes.SharedSpec) error //perm:admin @@ -57,9 +57,9 @@ type IMessager interface { DeleteNode(ctx context.Context, name string) error //perm:admin SetLogLevel(ctx context.Context, subsystem, level string) error //perm:admin - LogList(context.Context) ([]string, error) //perm:write + LogList(context.Context) ([]string, error) //perm:admin - Send(ctx context.Context, params mtypes.QuickSendParams) (string, error) //perm:admin + Send(ctx context.Context, params mtypes.QuickSendParams) (string, error) //perm:sign NetFindPeer(ctx context.Context, p peer.ID) (peer.AddrInfo, error) //perm:read NetPeers(ctx context.Context) ([]peer.AddrInfo, error) //perm:read diff --git a/venus-shared/api/messager/method.md b/venus-shared/api/messager/method.md index 0498e4161d..7067587528 100644 --- a/venus-shared/api/messager/method.md +++ b/venus-shared/api/messager/method.md @@ -53,7 +53,7 @@ ### ActiveAddress -Perms: admin +Perms: write Inputs: ```json @@ -67,7 +67,7 @@ Response: `{}` ### ClearUnFillMessage -Perms: admin +Perms: write Inputs: ```json @@ -81,7 +81,7 @@ Response: `123` ### DeleteAddress -Perms: admin +Perms: write Inputs: ```json @@ -109,7 +109,7 @@ Response: `{}` ### ForbiddenAddress -Perms: admin +Perms: write Inputs: ```json @@ -123,7 +123,7 @@ Response: `{}` ### GetAddress -Perms: admin +Perms: read Inputs: ```json @@ -509,7 +509,7 @@ Response: `true` ### ListAddress -Perms: admin +Perms: read Inputs: `[]` @@ -538,7 +538,7 @@ Response: ### ListBlockedMessage -Perms: admin +Perms: read Inputs: ```json @@ -607,7 +607,7 @@ Response: ### ListFailedMessage -Perms: admin +Perms: read Inputs: `[]` @@ -670,15 +670,18 @@ Response: ### ListMessage -Perms: admin +Perms: read Inputs: ```json [ { - "State": 3, - "From": "f01234", - "WalletName": "string value", + "State": [ + 3 + ], + "From": [ + "f01234" + ], "PageIndex": 123, "PageSize": 123 } @@ -904,7 +907,7 @@ Response: ### LogList -Perms: write +Perms: admin Inputs: `[]` @@ -918,7 +921,7 @@ Response: ### MarkBadMessage -Perms: admin +Perms: write Inputs: ```json @@ -1078,7 +1081,7 @@ Response: `"string value"` ### RecoverFailedMsg -Perms: admin +Perms: write Inputs: ```json @@ -1097,7 +1100,7 @@ Response: ### ReplaceMessage -Perms: admin +Perms: write Inputs: ```json @@ -1124,7 +1127,7 @@ Response: ### RepublishMessage -Perms: admin +Perms: write Inputs: ```json @@ -1158,7 +1161,7 @@ Response: `{}` ### Send -Perms: admin +Perms: sign Inputs: ```json @@ -1183,7 +1186,7 @@ Response: `"string value"` ### SetFeeParams -Perms: admin +Perms: write Inputs: ```json @@ -1265,7 +1268,7 @@ Response: `123` ### UpdateFilledMessageByID -Perms: admin +Perms: write Inputs: ```json @@ -1279,7 +1282,7 @@ Response: `"string value"` ### UpdateMessageStateByID -Perms: admin +Perms: write Inputs: ```json @@ -1294,7 +1297,7 @@ Response: `{}` ### UpdateNonce -Perms: admin +Perms: write Inputs: ```json diff --git a/venus-shared/api/messager/proxy_gen.go b/venus-shared/api/messager/proxy_gen.go index 5b93cd254d..3f11bcbf91 100644 --- a/venus-shared/api/messager/proxy_gen.go +++ b/venus-shared/api/messager/proxy_gen.go @@ -15,12 +15,12 @@ import ( type IMessagerStruct struct { Internal struct { - ActiveAddress func(ctx context.Context, addr address.Address) error `perm:"admin"` - ClearUnFillMessage func(ctx context.Context, addr address.Address) (int, error) `perm:"admin"` - DeleteAddress func(ctx context.Context, addr address.Address) error `perm:"admin"` + ActiveAddress func(ctx context.Context, addr address.Address) error `perm:"write"` + ClearUnFillMessage func(ctx context.Context, addr address.Address) (int, error) `perm:"write"` + DeleteAddress func(ctx context.Context, addr address.Address) error `perm:"write"` DeleteNode func(ctx context.Context, name string) error `perm:"admin"` - ForbiddenAddress func(ctx context.Context, addr address.Address) error `perm:"admin"` - GetAddress func(ctx context.Context, addr address.Address) (*mtypes.Address, error) `perm:"admin"` + ForbiddenAddress func(ctx context.Context, addr address.Address) error `perm:"write"` + GetAddress func(ctx context.Context, addr address.Address) (*mtypes.Address, error) `perm:"read"` GetMessageByFromAndNonce func(ctx context.Context, from address.Address, nonce uint64) (*mtypes.Message, error) `perm:"read"` GetMessageBySignedCid func(ctx context.Context, cid cid.Cid) (*mtypes.Message, error) `perm:"read"` GetMessageByUid func(ctx context.Context, id string) (*mtypes.Message, error) `perm:"read"` @@ -30,34 +30,34 @@ type IMessagerStruct struct { HasAddress func(ctx context.Context, addr address.Address) (bool, error) `perm:"read"` HasMessageByUid func(ctx context.Context, id string) (bool, error) `perm:"read"` HasNode func(ctx context.Context, name string) (bool, error) `perm:"admin"` - ListAddress func(ctx context.Context) ([]*mtypes.Address, error) `perm:"admin"` - ListBlockedMessage func(ctx context.Context, addr address.Address, d time.Duration) ([]*mtypes.Message, error) `perm:"admin"` - ListFailedMessage func(ctx context.Context) ([]*mtypes.Message, error) `perm:"admin"` - ListMessage func(ctx context.Context, p *mtypes.MsgQueryParams) ([]*mtypes.Message, error) `perm:"admin"` + ListAddress func(ctx context.Context) ([]*mtypes.Address, error) `perm:"read"` + ListBlockedMessage func(ctx context.Context, addr address.Address, d time.Duration) ([]*mtypes.Message, error) `perm:"read"` + ListFailedMessage func(ctx context.Context) ([]*mtypes.Message, error) `perm:"read"` + ListMessage func(ctx context.Context, p *mtypes.MsgQueryParams) ([]*mtypes.Message, error) `perm:"read"` ListMessageByAddress func(ctx context.Context, addr address.Address) ([]*mtypes.Message, error) `perm:"admin"` ListMessageByFromState func(ctx context.Context, from address.Address, state mtypes.MessageState, isAsc bool, pageIndex, pageSize int) ([]*mtypes.Message, error) `perm:"admin"` ListNode func(ctx context.Context) ([]*mtypes.Node, error) `perm:"admin"` - LogList func(context.Context) ([]string, error) `perm:"write"` - MarkBadMessage func(ctx context.Context, id string) error `perm:"admin"` + LogList func(context.Context) ([]string, error) `perm:"admin"` + MarkBadMessage func(ctx context.Context, id string) error `perm:"write"` NetAddrsListen func(ctx context.Context) (peer.AddrInfo, error) `perm:"read"` NetConnect func(ctx context.Context, pi peer.AddrInfo) error `perm:"admin"` NetFindPeer func(ctx context.Context, p peer.ID) (peer.AddrInfo, error) `perm:"read"` NetPeers func(ctx context.Context) ([]peer.AddrInfo, error) `perm:"read"` PushMessage func(ctx context.Context, msg *types.Message, meta *mtypes.SendSpec) (string, error) `perm:"write"` PushMessageWithId func(ctx context.Context, id string, msg *types.Message, meta *mtypes.SendSpec) (string, error) `perm:"write"` - RecoverFailedMsg func(ctx context.Context, addr address.Address) ([]string, error) `perm:"admin"` - ReplaceMessage func(ctx context.Context, params *mtypes.ReplacMessageParams) (cid.Cid, error) `perm:"admin"` - RepublishMessage func(ctx context.Context, id string) error `perm:"admin"` + RecoverFailedMsg func(ctx context.Context, addr address.Address) ([]string, error) `perm:"write"` + ReplaceMessage func(ctx context.Context, params *mtypes.ReplacMessageParams) (cid.Cid, error) `perm:"write"` + RepublishMessage func(ctx context.Context, id string) error `perm:"write"` SaveNode func(ctx context.Context, node *mtypes.Node) error `perm:"admin"` - Send func(ctx context.Context, params mtypes.QuickSendParams) (string, error) `perm:"admin"` - SetFeeParams func(ctx context.Context, params *mtypes.AddressSpec) error `perm:"admin"` + Send func(ctx context.Context, params mtypes.QuickSendParams) (string, error) `perm:"sign"` + SetFeeParams func(ctx context.Context, params *mtypes.AddressSpec) error `perm:"write"` SetLogLevel func(ctx context.Context, subsystem, level string) error `perm:"admin"` SetSelectMsgNum func(ctx context.Context, addr address.Address, num uint64) error `perm:"admin"` SetSharedParams func(ctx context.Context, params *mtypes.SharedSpec) error `perm:"admin"` UpdateAllFilledMessage func(ctx context.Context) (int, error) `perm:"admin"` - UpdateFilledMessageByID func(ctx context.Context, id string) (string, error) `perm:"admin"` - UpdateMessageStateByID func(ctx context.Context, id string, state mtypes.MessageState) error `perm:"admin"` - UpdateNonce func(ctx context.Context, addr address.Address, nonce uint64) error `perm:"admin"` + UpdateFilledMessageByID func(ctx context.Context, id string) (string, error) `perm:"write"` + UpdateMessageStateByID func(ctx context.Context, id string, state mtypes.MessageState) error `perm:"write"` + UpdateNonce func(ctx context.Context, addr address.Address, nonce uint64) error `perm:"write"` Version func(ctx context.Context) (types.Version, error) `perm:"read"` WaitMessage func(ctx context.Context, id string, confidence uint64) (*mtypes.Message, error) `perm:"read"` WalletHas func(ctx context.Context, addr address.Address) (bool, error) `perm:"read"` diff --git a/venus-shared/types/messager/message.go b/venus-shared/types/messager/message.go index e1eb8689be..fe3131f849 100644 --- a/venus-shared/types/messager/message.go +++ b/venus-shared/types/messager/message.go @@ -162,11 +162,9 @@ type ReplacMessageParams struct { type MsgQueryParams struct { // Message State - State MessageState + State []MessageState // Message From - From address.Address - // Message WalletName - WalletName string + From []address.Address PageIndex int PageSize int @@ -174,14 +172,15 @@ type MsgQueryParams struct { func (qp *MsgQueryParams) ToMap() map[string]interface{} { ret := make(map[string]interface{}) - if qp.State != UnKnown { + if len(qp.State) > 0 { ret["state"] = qp.State } - if qp.From != address.Undef { - ret["from_addr"] = qp.From.String() - } - if qp.WalletName != "" { - ret["wallet_name"] = qp.WalletName + if len(qp.From) > 0 { + temp := make([]string, 0, len(qp.From)) + for _, addr := range qp.From { + temp = append(temp, addr.String()) + } + ret["from_addr"] = temp } return ret } From db2ebfc014e6b980cecf2100b1549a1997208b2d Mon Sep 17 00:00:00 2001 From: tanlang Date: Wed, 7 Dec 2022 03:01:05 +0000 Subject: [PATCH 05/21] feat: promote permission of RepublishMessage --- venus-shared/api/messager/api.go | 2 +- venus-shared/api/messager/method.md | 2 +- venus-shared/api/messager/proxy_gen.go | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/venus-shared/api/messager/api.go b/venus-shared/api/messager/api.go index 155a7f7112..7aea55420f 100644 --- a/venus-shared/api/messager/api.go +++ b/venus-shared/api/messager/api.go @@ -31,7 +31,7 @@ type IMessager interface { UpdateAllFilledMessage(ctx context.Context) (int, error) //perm:admin UpdateFilledMessageByID(ctx context.Context, id string) (string, error) //perm:write ReplaceMessage(ctx context.Context, params *mtypes.ReplacMessageParams) (cid.Cid, error) //perm:write - RepublishMessage(ctx context.Context, id string) error //perm:write + RepublishMessage(ctx context.Context, id string) error //perm:admin MarkBadMessage(ctx context.Context, id string) error //perm:write RecoverFailedMsg(ctx context.Context, addr address.Address) ([]string, error) //perm:write diff --git a/venus-shared/api/messager/method.md b/venus-shared/api/messager/method.md index 7067587528..d71d4ee741 100644 --- a/venus-shared/api/messager/method.md +++ b/venus-shared/api/messager/method.md @@ -1127,7 +1127,7 @@ Response: ### RepublishMessage -Perms: write +Perms: admin Inputs: ```json diff --git a/venus-shared/api/messager/proxy_gen.go b/venus-shared/api/messager/proxy_gen.go index 3f11bcbf91..558a216fe3 100644 --- a/venus-shared/api/messager/proxy_gen.go +++ b/venus-shared/api/messager/proxy_gen.go @@ -47,7 +47,7 @@ type IMessagerStruct struct { PushMessageWithId func(ctx context.Context, id string, msg *types.Message, meta *mtypes.SendSpec) (string, error) `perm:"write"` RecoverFailedMsg func(ctx context.Context, addr address.Address) ([]string, error) `perm:"write"` ReplaceMessage func(ctx context.Context, params *mtypes.ReplacMessageParams) (cid.Cid, error) `perm:"write"` - RepublishMessage func(ctx context.Context, id string) error `perm:"write"` + RepublishMessage func(ctx context.Context, id string) error `perm:"admin"` SaveNode func(ctx context.Context, node *mtypes.Node) error `perm:"admin"` Send func(ctx context.Context, params mtypes.QuickSendParams) (string, error) `perm:"sign"` SetFeeParams func(ctx context.Context, params *mtypes.AddressSpec) error `perm:"write"` From 28870accfcf06713b8a4b4d9393d5b75e1133f21 Mon Sep 17 00:00:00 2001 From: tanlang Date: Wed, 7 Dec 2022 03:27:53 +0000 Subject: [PATCH 06/21] feat: open SetSelectMsgNum for normal user --- venus-shared/api/messager/api.go | 2 +- venus-shared/api/messager/method.md | 2 +- venus-shared/api/messager/proxy_gen.go | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/venus-shared/api/messager/api.go b/venus-shared/api/messager/api.go index 7aea55420f..0a1442d915 100644 --- a/venus-shared/api/messager/api.go +++ b/venus-shared/api/messager/api.go @@ -43,7 +43,7 @@ type IMessager interface { DeleteAddress(ctx context.Context, addr address.Address) error //perm:write ForbiddenAddress(ctx context.Context, addr address.Address) error //perm:write ActiveAddress(ctx context.Context, addr address.Address) error //perm:write - SetSelectMsgNum(ctx context.Context, addr address.Address, num uint64) error //perm:admin + SetSelectMsgNum(ctx context.Context, addr address.Address, num uint64) error //perm:write SetFeeParams(ctx context.Context, params *mtypes.AddressSpec) error //perm:write ClearUnFillMessage(ctx context.Context, addr address.Address) (int, error) //perm:write diff --git a/venus-shared/api/messager/method.md b/venus-shared/api/messager/method.md index d71d4ee741..568b08c16e 100644 --- a/venus-shared/api/messager/method.md +++ b/venus-shared/api/messager/method.md @@ -1222,7 +1222,7 @@ Response: `{}` ### SetSelectMsgNum -Perms: admin +Perms: write Inputs: ```json diff --git a/venus-shared/api/messager/proxy_gen.go b/venus-shared/api/messager/proxy_gen.go index 558a216fe3..da4d02405a 100644 --- a/venus-shared/api/messager/proxy_gen.go +++ b/venus-shared/api/messager/proxy_gen.go @@ -52,7 +52,7 @@ type IMessagerStruct struct { Send func(ctx context.Context, params mtypes.QuickSendParams) (string, error) `perm:"sign"` SetFeeParams func(ctx context.Context, params *mtypes.AddressSpec) error `perm:"write"` SetLogLevel func(ctx context.Context, subsystem, level string) error `perm:"admin"` - SetSelectMsgNum func(ctx context.Context, addr address.Address, num uint64) error `perm:"admin"` + SetSelectMsgNum func(ctx context.Context, addr address.Address, num uint64) error `perm:"write"` SetSharedParams func(ctx context.Context, params *mtypes.SharedSpec) error `perm:"admin"` UpdateAllFilledMessage func(ctx context.Context) (int, error) `perm:"admin"` UpdateFilledMessageByID func(ctx context.Context, id string) (string, error) `perm:"write"` From 28ac731239848605d709668a5732484f7c549387 Mon Sep 17 00:00:00 2001 From: tanlang Date: Thu, 8 Dec 2022 09:32:01 +0000 Subject: [PATCH 07/21] feat: promote perm of some interface from IMessage --- venus-shared/api/messager/api.go | 8 ++++---- venus-shared/api/messager/method.md | 8 ++++---- venus-shared/api/messager/proxy_gen.go | 8 ++++---- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/venus-shared/api/messager/api.go b/venus-shared/api/messager/api.go index 0a1442d915..5413fbaec9 100644 --- a/venus-shared/api/messager/api.go +++ b/venus-shared/api/messager/api.go @@ -39,7 +39,7 @@ type IMessager interface { HasAddress(ctx context.Context, addr address.Address) (bool, error) //perm:read WalletHas(ctx context.Context, addr address.Address) (bool, error) //perm:read ListAddress(ctx context.Context) ([]*mtypes.Address, error) //perm:read - UpdateNonce(ctx context.Context, addr address.Address, nonce uint64) error //perm:write + UpdateNonce(ctx context.Context, addr address.Address, nonce uint64) error //perm:admin DeleteAddress(ctx context.Context, addr address.Address) error //perm:write ForbiddenAddress(ctx context.Context, addr address.Address) error //perm:write ActiveAddress(ctx context.Context, addr address.Address) error //perm:write @@ -61,10 +61,10 @@ type IMessager interface { Send(ctx context.Context, params mtypes.QuickSendParams) (string, error) //perm:sign - NetFindPeer(ctx context.Context, p peer.ID) (peer.AddrInfo, error) //perm:read - NetPeers(ctx context.Context) ([]peer.AddrInfo, error) //perm:read + NetFindPeer(ctx context.Context, p peer.ID) (peer.AddrInfo, error) //perm:admin + NetPeers(ctx context.Context) ([]peer.AddrInfo, error) //perm:admin NetConnect(ctx context.Context, pi peer.AddrInfo) error //perm:admin - NetAddrsListen(ctx context.Context) (peer.AddrInfo, error) //perm:read + NetAddrsListen(ctx context.Context) (peer.AddrInfo, error) //perm:admin api.Version } diff --git a/venus-shared/api/messager/method.md b/venus-shared/api/messager/method.md index 568b08c16e..b13c32988b 100644 --- a/venus-shared/api/messager/method.md +++ b/venus-shared/api/messager/method.md @@ -935,7 +935,7 @@ Response: `{}` ### NetAddrsListen -Perms: read +Perms: admin Inputs: `[]` @@ -971,7 +971,7 @@ Response: `{}` ### NetFindPeer -Perms: read +Perms: admin Inputs: ```json @@ -993,7 +993,7 @@ Response: ### NetPeers -Perms: read +Perms: admin Inputs: `[]` @@ -1297,7 +1297,7 @@ Response: `{}` ### UpdateNonce -Perms: write +Perms: admin Inputs: ```json diff --git a/venus-shared/api/messager/proxy_gen.go b/venus-shared/api/messager/proxy_gen.go index da4d02405a..892bd0acbb 100644 --- a/venus-shared/api/messager/proxy_gen.go +++ b/venus-shared/api/messager/proxy_gen.go @@ -39,10 +39,10 @@ type IMessagerStruct struct { ListNode func(ctx context.Context) ([]*mtypes.Node, error) `perm:"admin"` LogList func(context.Context) ([]string, error) `perm:"admin"` MarkBadMessage func(ctx context.Context, id string) error `perm:"write"` - NetAddrsListen func(ctx context.Context) (peer.AddrInfo, error) `perm:"read"` + NetAddrsListen func(ctx context.Context) (peer.AddrInfo, error) `perm:"admin"` NetConnect func(ctx context.Context, pi peer.AddrInfo) error `perm:"admin"` - NetFindPeer func(ctx context.Context, p peer.ID) (peer.AddrInfo, error) `perm:"read"` - NetPeers func(ctx context.Context) ([]peer.AddrInfo, error) `perm:"read"` + NetFindPeer func(ctx context.Context, p peer.ID) (peer.AddrInfo, error) `perm:"admin"` + NetPeers func(ctx context.Context) ([]peer.AddrInfo, error) `perm:"admin"` PushMessage func(ctx context.Context, msg *types.Message, meta *mtypes.SendSpec) (string, error) `perm:"write"` PushMessageWithId func(ctx context.Context, id string, msg *types.Message, meta *mtypes.SendSpec) (string, error) `perm:"write"` RecoverFailedMsg func(ctx context.Context, addr address.Address) ([]string, error) `perm:"write"` @@ -57,7 +57,7 @@ type IMessagerStruct struct { UpdateAllFilledMessage func(ctx context.Context) (int, error) `perm:"admin"` UpdateFilledMessageByID func(ctx context.Context, id string) (string, error) `perm:"write"` UpdateMessageStateByID func(ctx context.Context, id string, state mtypes.MessageState) error `perm:"write"` - UpdateNonce func(ctx context.Context, addr address.Address, nonce uint64) error `perm:"write"` + UpdateNonce func(ctx context.Context, addr address.Address, nonce uint64) error `perm:"admin"` Version func(ctx context.Context) (types.Version, error) `perm:"read"` WaitMessage func(ctx context.Context, id string, confidence uint64) (*mtypes.Message, error) `perm:"read"` WalletHas func(ctx context.Context, addr address.Address) (bool, error) `perm:"read"` From 94dd6019e5e377f863b81ecc66e0ea4bfe20c4c0 Mon Sep 17 00:00:00 2001 From: tanlang Date: Thu, 8 Dec 2022 09:41:11 +0000 Subject: [PATCH 08/21] feat: promote perm of some api from IMarket --- venus-shared/api/market/api.go | 4 ++-- venus-shared/api/market/method.md | 4 ++-- venus-shared/api/market/proxy_gen.go | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/venus-shared/api/market/api.go b/venus-shared/api/market/api.go index 61a7e5466d..43cd1c40e8 100644 --- a/venus-shared/api/market/api.go +++ b/venus-shared/api/market/api.go @@ -26,11 +26,11 @@ type IMarket interface { ActorExist(ctx context.Context, addr address.Address) (bool, error) //perm:read ActorSectorSize(context.Context, address.Address) (abi.SectorSize, error) //perm:read - MarketImportDealData(ctx context.Context, propcid cid.Cid, path string) error //perm:write + MarketImportDealData(ctx context.Context, propcid cid.Cid, path string) error //perm:admin MarketImportPublishedDeal(ctx context.Context, deal market.MinerDeal) error //perm:write MarketListDeals(ctx context.Context, addrs []address.Address) ([]*types.MarketDeal, error) //perm:read MarketListRetrievalDeals(ctx context.Context) ([]market.ProviderDealState, error) //perm:read - MarketGetDealUpdates(ctx context.Context) (<-chan market.MinerDeal, error) //perm:read + MarketGetDealUpdates(ctx context.Context) (<-chan market.MinerDeal, error) //perm:admin MarketListIncompleteDeals(ctx context.Context, mAddr address.Address) ([]market.MinerDeal, error) //perm:read MarketSetAsk(ctx context.Context, mAddr address.Address, price types.BigInt, verifiedPrice types.BigInt, duration abi.ChainEpoch, minPieceSize abi.PaddedPieceSize, maxPieceSize abi.PaddedPieceSize) error //perm:admin MarketGetAsk(ctx context.Context, mAddr address.Address) (*market.SignedStorageAsk, error) //perm:read diff --git a/venus-shared/api/market/method.md b/venus-shared/api/market/method.md index 1e369e47c1..2474f52ab7 100644 --- a/venus-shared/api/market/method.md +++ b/venus-shared/api/market/method.md @@ -1098,7 +1098,7 @@ Response: ### MarketGetDealUpdates -Perms: read +Perms: admin Inputs: `[]` @@ -1204,7 +1204,7 @@ Response: ### MarketImportDealData -Perms: write +Perms: admin Inputs: ```json diff --git a/venus-shared/api/market/proxy_gen.go b/venus-shared/api/market/proxy_gen.go index 4e5a578a3f..77f518aa3e 100644 --- a/venus-shared/api/market/proxy_gen.go +++ b/venus-shared/api/market/proxy_gen.go @@ -70,10 +70,10 @@ type IMarketStruct struct { MarketDataTransferPath func(context.Context, address.Address) (string, error) `perm:"admin"` MarketDataTransferUpdates func(ctx context.Context) (<-chan market.DataTransferChannel, error) `perm:"admin"` MarketGetAsk func(ctx context.Context, mAddr address.Address) (*market.SignedStorageAsk, error) `perm:"read"` - MarketGetDealUpdates func(ctx context.Context) (<-chan market.MinerDeal, error) `perm:"read"` + MarketGetDealUpdates func(ctx context.Context) (<-chan market.MinerDeal, error) `perm:"admin"` MarketGetReserved func(ctx context.Context, addr address.Address) (types.BigInt, error) `perm:"sign"` MarketGetRetrievalAsk func(ctx context.Context, mAddr address.Address) (*retrievalmarket.Ask, error) `perm:"read"` - MarketImportDealData func(ctx context.Context, propcid cid.Cid, path string) error `perm:"write"` + MarketImportDealData func(ctx context.Context, propcid cid.Cid, path string) error `perm:"admin"` MarketImportPublishedDeal func(ctx context.Context, deal market.MinerDeal) error `perm:"write"` MarketListAsk func(ctx context.Context) ([]*market.SignedStorageAsk, error) `perm:"read"` MarketListDataTransfers func(ctx context.Context) ([]market.DataTransferChannel, error) `perm:"admin"` From 4c201be5b05b8deda4e1d21e25cdd54603aa40ca Mon Sep 17 00:00:00 2001 From: tanlang Date: Tue, 13 Dec 2022 05:35:47 +0000 Subject: [PATCH 09/21] feat: demote perm of GetSharedParams admin -> read --- venus-shared/api/messager/api.go | 2 +- venus-shared/api/messager/method.md | 2 +- venus-shared/api/messager/proxy_gen.go | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/venus-shared/api/messager/api.go b/venus-shared/api/messager/api.go index 5413fbaec9..982bfc6afb 100644 --- a/venus-shared/api/messager/api.go +++ b/venus-shared/api/messager/api.go @@ -47,7 +47,7 @@ type IMessager interface { SetFeeParams(ctx context.Context, params *mtypes.AddressSpec) error //perm:write ClearUnFillMessage(ctx context.Context, addr address.Address) (int, error) //perm:write - GetSharedParams(ctx context.Context) (*mtypes.SharedSpec, error) //perm:admin + GetSharedParams(ctx context.Context) (*mtypes.SharedSpec, error) //perm:read SetSharedParams(ctx context.Context, params *mtypes.SharedSpec) error //perm:admin SaveNode(ctx context.Context, node *mtypes.Node) error //perm:admin diff --git a/venus-shared/api/messager/method.md b/venus-shared/api/messager/method.md index b13c32988b..39dc430493 100644 --- a/venus-shared/api/messager/method.md +++ b/venus-shared/api/messager/method.md @@ -447,7 +447,7 @@ Response: ### GetSharedParams -Perms: admin +Perms: read Inputs: `[]` diff --git a/venus-shared/api/messager/proxy_gen.go b/venus-shared/api/messager/proxy_gen.go index 892bd0acbb..b45484b7c6 100644 --- a/venus-shared/api/messager/proxy_gen.go +++ b/venus-shared/api/messager/proxy_gen.go @@ -26,7 +26,7 @@ type IMessagerStruct struct { GetMessageByUid func(ctx context.Context, id string) (*mtypes.Message, error) `perm:"read"` GetMessageByUnsignedCid func(ctx context.Context, cid cid.Cid) (*mtypes.Message, error) `perm:"read"` GetNode func(ctx context.Context, name string) (*mtypes.Node, error) `perm:"admin"` - GetSharedParams func(ctx context.Context) (*mtypes.SharedSpec, error) `perm:"admin"` + GetSharedParams func(ctx context.Context) (*mtypes.SharedSpec, error) `perm:"read"` HasAddress func(ctx context.Context, addr address.Address) (bool, error) `perm:"read"` HasMessageByUid func(ctx context.Context, id string) (bool, error) `perm:"read"` HasNode func(ctx context.Context, name string) (bool, error) `perm:"admin"` From a285b6d1b31e785b6a4250be700cde475bd378b5 Mon Sep 17 00:00:00 2001 From: Tiance <1033935631@qq.com> Date: Tue, 20 Dec 2022 18:06:25 +0800 Subject: [PATCH 10/21] feat: add namespace and curl example in jsonrpc example --- venus-devtool/api-gen/doc_gen.go | 30 ++++++++++++++++++++++-- venus-shared/api/chain/v0/method.md | 6 +++++ venus-shared/api/chain/v1/method.md | 6 +++++ venus-shared/api/gateway/v0/method.md | 6 +++++ venus-shared/api/gateway/v1/method.md | 6 +++++ venus-shared/api/gateway/v2/method.md | 6 +++++ venus-shared/api/market/client/method.md | 6 +++++ venus-shared/api/market/method.md | 6 +++++ venus-shared/api/messager/method.md | 6 +++++ venus-shared/api/wallet/method.md | 6 +++++ 10 files changed, 82 insertions(+), 2 deletions(-) diff --git a/venus-devtool/api-gen/doc_gen.go b/venus-devtool/api-gen/doc_gen.go index d7acde2055..05eef744e0 100644 --- a/venus-devtool/api-gen/doc_gen.go +++ b/venus-devtool/api-gen/doc_gen.go @@ -11,6 +11,7 @@ import ( "reflect" "sort" "strings" + "text/template" "github.com/filecoin-project/go-address" "github.com/filecoin-project/venus/venus-devtool/util" @@ -86,7 +87,7 @@ func genDocForAPI(t util.APIMeta) error { groups = append(groups, mg) } - return writeAPIInfo(astMeta, groups) + return writeAPIInfo(astMeta, t.RPCMeta, groups) } func simpleGroupName(groupName string) string { @@ -147,8 +148,33 @@ func getComment(comments []*ast.CommentGroup) string { return cmt } -func writeAPIInfo(astMeta *util.ASTMeta, groups []MethodGroup) error { +func writeAPIInfo(astMeta *util.ASTMeta, rpcMeta util.RPCMeta, groups []MethodGroup) error { buf := &bytes.Buffer{} + + methNs := rpcMeta.MethodNamespace + if methNs == "" { + methNs = "Filecoin" + } + tmpl, err := template.New("curl").Parse(`# Sample code of curl + +{{ .StartBash }} +# corresponding to the value of Inputs Tag of each API +curl http://:/rpc/v{{ .APIVersion }} -X POST -H "Content-Type: application/json" -H "Authorization: Bearer " -d '{"method": "{{ .Namespace }}.", "params": , "id": 0}' +{{ .EndBash }} +`) + if err != nil { + return fmt.Errorf("parse template: %w", err) + } + err = tmpl.Execute(buf, map[string]interface{}{ + "APIVersion": rpcMeta.Version, + "Namespace": methNs, + "StartBash": "```bash", + "EndBash": "```", + }) + if err != nil { + return fmt.Errorf("exec curl template: %w", err) + } + fmt.Fprint(buf, "# Groups\n\n") sort.Slice(groups, func(i, j int) bool { diff --git a/venus-shared/api/chain/v0/method.md b/venus-shared/api/chain/v0/method.md index 3ad9a7ea33..3665dc1c1f 100644 --- a/venus-shared/api/chain/v0/method.md +++ b/venus-shared/api/chain/v0/method.md @@ -1,3 +1,9 @@ +# Sample code of curl + +```bash +# corresponding to the value of Inputs Tag of each API +curl http://:/rpc/v0 -X POST -H "Content-Type: application/json" -H "Authorization: Bearer " -d '{"method": "Filecoin.", "params": , "id": 0}' +``` # Groups * [Account](#account) diff --git a/venus-shared/api/chain/v1/method.md b/venus-shared/api/chain/v1/method.md index 3ef74b7746..95568a8493 100644 --- a/venus-shared/api/chain/v1/method.md +++ b/venus-shared/api/chain/v1/method.md @@ -1,3 +1,9 @@ +# Sample code of curl + +```bash +# corresponding to the value of Inputs Tag of each API +curl http://:/rpc/v1 -X POST -H "Content-Type: application/json" -H "Authorization: Bearer " -d '{"method": "Filecoin.", "params": , "id": 0}' +``` # Groups * [Account](#account) diff --git a/venus-shared/api/gateway/v0/method.md b/venus-shared/api/gateway/v0/method.md index 7d2bab0304..fa2ffa9fe9 100644 --- a/venus-shared/api/gateway/v0/method.md +++ b/venus-shared/api/gateway/v0/method.md @@ -1,3 +1,9 @@ +# Sample code of curl + +```bash +# corresponding to the value of Inputs Tag of each API +curl http://:/rpc/v0 -X POST -H "Content-Type: application/json" -H "Authorization: Bearer " -d '{"method": "Gateway.", "params": , "id": 0}' +``` # Groups * [Gateway](#gateway) diff --git a/venus-shared/api/gateway/v1/method.md b/venus-shared/api/gateway/v1/method.md index b98755eaf2..ed3432c046 100644 --- a/venus-shared/api/gateway/v1/method.md +++ b/venus-shared/api/gateway/v1/method.md @@ -1,3 +1,9 @@ +# Sample code of curl + +```bash +# corresponding to the value of Inputs Tag of each API +curl http://:/rpc/v1 -X POST -H "Content-Type: application/json" -H "Authorization: Bearer " -d '{"method": "Gateway.", "params": , "id": 0}' +``` # Groups * [Gateway](#gateway) diff --git a/venus-shared/api/gateway/v2/method.md b/venus-shared/api/gateway/v2/method.md index b15ceedb7e..23a722e1b6 100644 --- a/venus-shared/api/gateway/v2/method.md +++ b/venus-shared/api/gateway/v2/method.md @@ -1,3 +1,9 @@ +# Sample code of curl + +```bash +# corresponding to the value of Inputs Tag of each API +curl http://:/rpc/v2 -X POST -H "Content-Type: application/json" -H "Authorization: Bearer " -d '{"method": "Gateway.", "params": , "id": 0}' +``` # Groups * [Gateway](#gateway) diff --git a/venus-shared/api/market/client/method.md b/venus-shared/api/market/client/method.md index 82e3552dd6..6bab160b2c 100644 --- a/venus-shared/api/market/client/method.md +++ b/venus-shared/api/market/client/method.md @@ -1,3 +1,9 @@ +# Sample code of curl + +```bash +# corresponding to the value of Inputs Tag of each API +curl http://:/rpc/v0 -X POST -H "Content-Type: application/json" -H "Authorization: Bearer " -d '{"method": "VENUS_MARKET_CLIENT.", "params": , "id": 0}' +``` # Groups * [MarketClient](#marketclient) diff --git a/venus-shared/api/market/method.md b/venus-shared/api/market/method.md index 2474f52ab7..f20d86d4fe 100644 --- a/venus-shared/api/market/method.md +++ b/venus-shared/api/market/method.md @@ -1,3 +1,9 @@ +# Sample code of curl + +```bash +# corresponding to the value of Inputs Tag of each API +curl http://:/rpc/v0 -X POST -H "Content-Type: application/json" -H "Authorization: Bearer " -d '{"method": "VENUS_MARKET.", "params": , "id": 0}' +``` # Groups * [Market](#market) diff --git a/venus-shared/api/messager/method.md b/venus-shared/api/messager/method.md index 39dc430493..ec0e622b5b 100644 --- a/venus-shared/api/messager/method.md +++ b/venus-shared/api/messager/method.md @@ -1,3 +1,9 @@ +# Sample code of curl + +```bash +# corresponding to the value of Inputs Tag of each API +curl http://:/rpc/v0 -X POST -H "Content-Type: application/json" -H "Authorization: Bearer " -d '{"method": "Message.", "params": , "id": 0}' +``` # Groups * [Messager](#messager) diff --git a/venus-shared/api/wallet/method.md b/venus-shared/api/wallet/method.md index e9dd0c505e..76478d908f 100644 --- a/venus-shared/api/wallet/method.md +++ b/venus-shared/api/wallet/method.md @@ -1,3 +1,9 @@ +# Sample code of curl + +```bash +# corresponding to the value of Inputs Tag of each API +curl http://:/rpc/v0 -X POST -H "Content-Type: application/json" -H "Authorization: Bearer " -d '{"method": "Filecoin.", "params": , "id": 0}' +``` # Groups * [Common](#common) From 3ebc655be0978ef0ce932c8edf779b5fd9e7f636 Mon Sep 17 00:00:00 2001 From: Tiance <1033935631@qq.com> Date: Wed, 21 Dec 2022 13:10:06 +0800 Subject: [PATCH 11/21] feat: AllowableClockDriftSecs configurable --- pkg/config/config.go | 10 ++++++---- pkg/consensus/block_validator.go | 2 +- pkg/consensus/expected.go | 2 -- pkg/constants/shared_vals.go | 5 ----- pkg/migration/migrate.go | 1 + 5 files changed, 8 insertions(+), 12 deletions(-) diff --git a/pkg/config/config.go b/pkg/config/config.go index e2cba38c74..710b89b84d 100644 --- a/pkg/config/config.go +++ b/pkg/config/config.go @@ -263,6 +263,7 @@ type NetworkParamsConfig struct { ForkUpgradeParam *ForkUpgradeConfig `json:"-"` PreCommitChallengeDelay abi.ChainEpoch `json:"-"` PropagationDelaySecs uint64 `json:"-"` + AllowableClockDriftSecs uint64 `json:"allowableClockDriftSecs"` // ChainId defines the chain ID used in the Ethereum JSON-RPC endpoint. // As per https://github.com/ethereum-lists/chains Eip155ChainID int `json:"-"` @@ -337,10 +338,11 @@ func newDefaultNetworkParamsConfig() *NetworkParamsConfig { abi.RegisteredSealProof_StackedDrg32GiBV1, abi.RegisteredSealProof_StackedDrg64GiBV1, }, - DrandSchedule: map[abi.ChainEpoch]DrandEnum{0: 5, -1: 1}, - ForkUpgradeParam: &defaultParams, - PropagationDelaySecs: 10, - Eip155ChainID: 314, + DrandSchedule: map[abi.ChainEpoch]DrandEnum{0: 5, -1: 1}, + ForkUpgradeParam: &defaultParams, + PropagationDelaySecs: 10, + AllowableClockDriftSecs: 1, + Eip155ChainID: 314, } } diff --git a/pkg/consensus/block_validator.go b/pkg/consensus/block_validator.go index e32c9f9277..661bf83cbb 100644 --- a/pkg/consensus/block_validator.go +++ b/pkg/consensus/block_validator.go @@ -166,7 +166,7 @@ func (bv *BlockValidator) validateBlock(ctx context.Context, blk *types.BlockHea } now := uint64(time.Now().Unix()) - if blk.Timestamp > now+AllowableClockDriftSecs { + if blk.Timestamp > now+bv.config.AllowableClockDriftSecs { return fmt.Errorf("block was from the future (now=%d, blk=%d): %v", now, blk.Timestamp, ErrTemporal) } if blk.Timestamp > now { diff --git a/pkg/consensus/expected.go b/pkg/consensus/expected.go index 1cac3266b3..1ebfeefc15 100644 --- a/pkg/consensus/expected.go +++ b/pkg/consensus/expected.go @@ -38,8 +38,6 @@ var ( var logExpect = logging.Logger("consensus") -const AllowableClockDriftSecs = uint64(1) - // A Processor processes all the messages in a block or tip set. type Processor interface { // ApplyBlocks processes all messages in a tip set. diff --git a/pkg/constants/shared_vals.go b/pkg/constants/shared_vals.go index 3566931996..e8ff07469c 100644 --- a/pkg/constants/shared_vals.go +++ b/pkg/constants/shared_vals.go @@ -10,11 +10,6 @@ import ( "github.com/filecoin-project/go-state-types/network" ) -// ///// -// Consensus / Network - -const AllowableClockDriftSecs = uint64(1) - /* inline-gen template const TestNetworkVersion = network.Version{{.latestNetworkVersion}} diff --git a/pkg/migration/migrate.go b/pkg/migration/migrate.go index 0101c9d634..fb473d9037 100644 --- a/pkg/migration/migrate.go +++ b/pkg/migration/migrate.go @@ -377,6 +377,7 @@ func Version11Upgrade(repoPath string) (err error) { // add default actor event config cfg.FevmConfig = config.NewDefaultConfig().FevmConfig + cfg.NetworkParams.AllowableClockDriftSecs = 1 switch cfg.NetworkParams.NetworkType { case types.NetworkMainnet: From 715a32bf0e3219cb59a39f84f8c30ac2ab0bd9b7 Mon Sep 17 00:00:00 2001 From: tanlang Date: Wed, 4 Jan 2023 09:30:37 +0000 Subject: [PATCH 12/21] feat: export GenProxyForAPI --- venus-devtool/api-gen/client.go | 7 +++-- venus-devtool/api-gen/{ => common}/common.go | 12 +++---- venus-devtool/api-gen/doc_gen.go | 3 +- venus-devtool/api-gen/main.go | 21 +++++++++++++ venus-devtool/api-gen/mock.go | 3 +- venus-devtool/api-gen/{ => proxy}/proxy.go | 33 +++++--------------- 6 files changed, 42 insertions(+), 37 deletions(-) rename venus-devtool/api-gen/{ => common}/common.go (93%) rename venus-devtool/api-gen/{ => proxy}/proxy.go (91%) diff --git a/venus-devtool/api-gen/client.go b/venus-devtool/api-gen/client.go index 4671e1e37d..252a6af063 100644 --- a/venus-devtool/api-gen/client.go +++ b/venus-devtool/api-gen/client.go @@ -6,6 +6,7 @@ import ( "log" "text/template" + "github.com/filecoin-project/venus/venus-devtool/api-gen/common" "github.com/filecoin-project/venus/venus-devtool/util" "github.com/urfave/cli/v2" ) @@ -14,7 +15,7 @@ var clientCmd = &cli.Command{ Name: "client", Flags: []cli.Flag{}, Action: func(cctx *cli.Context) error { - for _, target := range apiTargets { + for _, target := range common.ApiTargets { err := genClientForAPI(target) if err != nil { log.Fatalf("got error while generating client codes for %s: %s", target.Type, err) @@ -176,7 +177,7 @@ func genClientForAPI(t util.APIMeta) error { err = tmpl.Execute(&buf, map[string]interface{}{ "PkgName": apiIface.Pkg.Name, "APIName": apiName, - "APIStruct": structName(apiName), + "APIStruct": common.StructName(apiName), "APINs": ns, "MethNs": methNs, "MajorVersion": t.RPCMeta.Version, @@ -186,5 +187,5 @@ func genClientForAPI(t util.APIMeta) error { return fmt.Errorf("exec template: %w", err) } - return outputSourceFile(astMeta.Location, "client_gen.go", &buf) + return common.OutputSourceFile(astMeta.Location, "client_gen.go", &buf) } diff --git a/venus-devtool/api-gen/common.go b/venus-devtool/api-gen/common/common.go similarity index 93% rename from venus-devtool/api-gen/common.go rename to venus-devtool/api-gen/common/common.go index ad6c44a30b..c483b5d91a 100644 --- a/venus-devtool/api-gen/common.go +++ b/venus-devtool/api-gen/common/common.go @@ -1,4 +1,4 @@ -package main +package common import ( "bytes" @@ -20,10 +20,10 @@ import ( func init() { for _, capi := range util.ChainAPIPairs { - apiTargets = append(apiTargets, capi.Venus) + ApiTargets = append(ApiTargets, capi.Venus) } - apiTargets = append(apiTargets, + ApiTargets = append(ApiTargets, util.APIMeta{ Type: reflect.TypeOf((*messager.IMessager)(nil)).Elem(), ParseOpt: util.InterfaceParseOption{ @@ -103,13 +103,13 @@ func init() { ) } -var apiTargets []util.APIMeta +var ApiTargets []util.APIMeta -func structName(ifaceName string) string { +func StructName(ifaceName string) string { return ifaceName + "Struct" } -func outputSourceFile(location, fname string, buf *bytes.Buffer) error { +func OutputSourceFile(location, fname string, buf *bytes.Buffer) error { formatted, err := format.Source(buf.Bytes()) if err != nil { return fmt.Errorf("format source content: %w", err) diff --git a/venus-devtool/api-gen/doc_gen.go b/venus-devtool/api-gen/doc_gen.go index 05eef744e0..18f1a75f47 100644 --- a/venus-devtool/api-gen/doc_gen.go +++ b/venus-devtool/api-gen/doc_gen.go @@ -14,6 +14,7 @@ import ( "text/template" "github.com/filecoin-project/go-address" + "github.com/filecoin-project/venus/venus-devtool/api-gen/common" "github.com/filecoin-project/venus/venus-devtool/util" "github.com/filecoin-project/venus/venus-shared/types" "github.com/urfave/cli/v2" @@ -27,7 +28,7 @@ var docGenCmd = &cli.Command{ if err := util.LoadExtraInterfaceMeta(); err != nil { return err } - for _, t := range apiTargets { + for _, t := range common.ApiTargets { if err := genDocForAPI(t); err != nil { return err } diff --git a/venus-devtool/api-gen/main.go b/venus-devtool/api-gen/main.go index 642ef7d16e..0bd676cf72 100644 --- a/venus-devtool/api-gen/main.go +++ b/venus-devtool/api-gen/main.go @@ -2,8 +2,12 @@ package main import ( "fmt" + "log" "os" + "github.com/filecoin-project/venus/venus-devtool/api-gen/common" + "github.com/filecoin-project/venus/venus-devtool/api-gen/proxy" + "github.com/filecoin-project/venus/venus-devtool/util" "github.com/urfave/cli/v2" ) @@ -27,3 +31,20 @@ func main() { fmt.Fprintf(os.Stderr, "ERR: %v\n", err) // nolint: errcheck } } + +var proxyCmd = &cli.Command{ + Name: "proxy", + Flags: []cli.Flag{}, + Action: func(cctx *cli.Context) error { + if err := util.LoadExtraInterfaceMeta(); err != nil { + return err + } + for _, target := range common.ApiTargets { + err := proxy.GenProxyForAPI(target) + if err != nil { + log.Fatalf("got error while generating proxy codes for %s: %s", target.Type, err) + } + } + return nil + }, +} diff --git a/venus-devtool/api-gen/mock.go b/venus-devtool/api-gen/mock.go index 8592631da4..bdb7a5f200 100644 --- a/venus-devtool/api-gen/mock.go +++ b/venus-devtool/api-gen/mock.go @@ -5,6 +5,7 @@ import ( "path/filepath" "strings" + "github.com/filecoin-project/venus/venus-devtool/api-gen/common" "github.com/filecoin-project/venus/venus-devtool/util" "github.com/urfave/cli/v2" ) @@ -12,7 +13,7 @@ import ( var mockCmd = &cli.Command{ Name: "mock", Action: func(cctx *cli.Context) error { - for _, t := range apiTargets { + for _, t := range common.ApiTargets { if err := mockAPI(t); err != nil { return err } diff --git a/venus-devtool/api-gen/proxy.go b/venus-devtool/api-gen/proxy/proxy.go similarity index 91% rename from venus-devtool/api-gen/proxy.go rename to venus-devtool/api-gen/proxy/proxy.go index d404dec9ee..f30237e2d4 100644 --- a/venus-devtool/api-gen/proxy.go +++ b/venus-devtool/api-gen/proxy/proxy.go @@ -1,4 +1,4 @@ -package main +package proxy import ( "bytes" @@ -6,33 +6,14 @@ import ( "go/ast" "go/printer" "io" - "log" "path/filepath" "strings" - "github.com/urfave/cli/v2" - + "github.com/filecoin-project/venus/venus-devtool/api-gen/common" "github.com/filecoin-project/venus/venus-devtool/util" ) -var proxyCmd = &cli.Command{ - Name: "proxy", - Flags: []cli.Flag{}, - Action: func(cctx *cli.Context) error { - if err := util.LoadExtraInterfaceMeta(); err != nil { - return err - } - for _, target := range apiTargets { - err := genProxyForAPI(target) - if err != nil { - log.Fatalf("got error while generating proxy codes for %s: %s", target.Type, err) - } - } - return nil - }, -} - -func genProxyForAPI(t util.APIMeta) error { +func GenProxyForAPI(t util.APIMeta) error { opt := t.ParseOpt opt.ResolveImports = true ifaceMetas, astMeta, err := util.ParseInterfaceMetas(opt) @@ -76,7 +57,7 @@ func genProxyForAPI(t util.APIMeta) error { return fmt.Errorf("copy contents into output: %w", err) } - return outputSourceFile(astMeta.Location, "proxy_gen.go", &fileBuffer) + return common.OutputSourceFile(astMeta.Location, "proxy_gen.go", &fileBuffer) } func writeImports(deps map[string]util.ImportMeta, dst *bytes.Buffer) error { @@ -166,10 +147,10 @@ type %s struct { ) func writeStruct(dst *bytes.Buffer, ifaceMeta *util.InterfaceMeta, astMeta *util.ASTMeta) error { - fmt.Fprintf(dst, structHeadFormat, structName(ifaceMeta.Name)) + fmt.Fprintf(dst, structHeadFormat, common.StructName(ifaceMeta.Name)) for _, nested := range ifaceMeta.Nested { - fmt.Fprintf(dst, "\t%s\n", structName(nested)) + fmt.Fprintf(dst, "\t%s\n", common.StructName(nested)) } tmpBuf := &bytes.Buffer{} @@ -343,7 +324,7 @@ func writeMethodBody(dst *bytes.Buffer, typBuf *bytes.Buffer, ifaceMeta *util.In } } - sname := structName(ifaceMeta.Name) + sname := common.StructName(ifaceMeta.Name) fmt.Fprintf(dst, "func(s *%s) %s(%s) (%s) { return s.Internal.%s(%s) }\n", sname, methMeta.Name, strings.Join(params, ", "), strings.Join(results, ", "), methMeta.Name, strings.Join(callNames, ", ")) return nil } From df3870e5ce81c291268e47b9b4c3cf537e3eee74 Mon Sep 17 00:00:00 2001 From: tanlang Date: Thu, 5 Jan 2023 08:21:50 +0000 Subject: [PATCH 13/21] feat: add GetMethodComment --- venus-devtool/api-gen/proxy/proxy.go | 2 +- venus-devtool/util/api_meta.go | 37 ++++++++++++++++++++++++++++ 2 files changed, 38 insertions(+), 1 deletion(-) diff --git a/venus-devtool/api-gen/proxy/proxy.go b/venus-devtool/api-gen/proxy/proxy.go index f30237e2d4..69e3de961b 100644 --- a/venus-devtool/api-gen/proxy/proxy.go +++ b/venus-devtool/api-gen/proxy/proxy.go @@ -168,7 +168,7 @@ func writeStruct(dst *bytes.Buffer, ifaceMeta *util.InterfaceMeta, astMeta *util dst.WriteString(strings.ReplaceAll(tmpBuf.String(), "\n\t", "")) tmpBuf.Reset() - fmt.Fprintf(dst, " `perm:\"%s\"`\n", util.GetAPIMethodPerm(meth)) + fmt.Fprint(dst, util.GetMethodComment(meth)) } fmt.Fprint(dst, structInternalTail) diff --git a/venus-devtool/util/api_meta.go b/venus-devtool/util/api_meta.go index 3eadd17d11..28bdeb223d 100644 --- a/venus-devtool/util/api_meta.go +++ b/venus-devtool/util/api_meta.go @@ -1,6 +1,7 @@ package util import ( + "fmt" "reflect" "strings" @@ -94,3 +95,39 @@ func GetAPIMethodPerm(m InterfaceMethodMeta) string { return "" } + +func GetMethodComment(m InterfaceMethodMeta) string { + ret := " `" + permStr := "" + + if cmtNum := len(m.Comments); cmtNum > 0 { + if itemNum := len(m.Comments[cmtNum-1].List); itemNum > 0 { + if strings.HasPrefix(m.Comments[cmtNum-1].List[0].Text, "//") { + permStr = m.Comments[cmtNum-1].List[0].Text[2:] + } + } + } + + for _, piece := range strings.Split(permStr, " ") { + trimmed := strings.TrimSpace(piece) + if strings.HasPrefix(trimmed, "perm:") { + ret += fmt.Sprintf("perm:\"%s\"", trimmed[5:]) + } + if strings.HasPrefix(trimmed, "GET:") { + ret += fmt.Sprintf(" GET:\"%s\"", trimmed[4:]) + } + if strings.HasPrefix(trimmed, "POST:") { + ret += fmt.Sprintf(" POST:\"%s\"", trimmed[5:]) + } + if strings.HasPrefix(trimmed, "PUT:") { + ret += fmt.Sprintf(" PUT:\"%s\"", trimmed[4:]) + } + if strings.HasPrefix(trimmed, "DELETE:") { + ret += fmt.Sprintf(" DELETE:\"%s\"", trimmed[7:]) + } + } + + ret += "`\n" + + return ret +} From 095fa1add26cf15475712849230a135203a3e106 Mon Sep 17 00:00:00 2001 From: tanlang Date: Fri, 13 Jan 2023 05:17:37 +0000 Subject: [PATCH 14/21] feat: add multisig to rpc --- app/node/builder.go | 1 + 1 file changed, 1 insertion(+) diff --git a/app/node/builder.go b/app/node/builder.go index c5a5d8fe1a..2b2cf68184 100644 --- a/app/node/builder.go +++ b/app/node/builder.go @@ -190,6 +190,7 @@ func (b *Builder) build(ctx context.Context) (*Node, error) { nd.paychan, nd.market, nd.common, + nd.multiSig, nd.eth, ) From 22cc7426091273092701ea6530244fa8955b779d Mon Sep 17 00:00:00 2001 From: tanlang Date: Fri, 13 Jan 2023 08:15:37 +0000 Subject: [PATCH 15/21] feat: supply interface for multisig --- app/node/env.go | 11 +- app/node/node.go | 3 +- app/submodule/multisig/multisig_api.go | 82 ++++++++++++++ .../multisig/v0api/multisig_v0api.go | 4 +- cmd/multisig.go | 43 ++++---- venus-shared/api/chain/v0/method.md | 101 +++++++++++++++++- .../api/chain/v0/mock/mock_fullnode.go | 53 ++++++++- venus-shared/api/chain/v0/multisig.go | 10 +- venus-shared/api/chain/v0/proxy_gen.go | 44 +++++--- venus-shared/api/chain/v1/method.md | 97 +++++++++++++++++ .../api/chain/v1/mock/mock_fullnode.go | 45 ++++++++ venus-shared/api/chain/v1/multisig.go | 14 ++- venus-shared/api/chain/v1/proxy_gen.go | 40 ++++--- venus-shared/compatible-checks/api-diff.txt | 7 -- venus-shared/types/api_types.go | 22 ++++ 15 files changed, 506 insertions(+), 70 deletions(-) diff --git a/app/node/env.go b/app/node/env.go index ffb2b9e03f..2a02ab0cdf 100644 --- a/app/node/env.go +++ b/app/node/env.go @@ -23,11 +23,12 @@ type Env struct { MingingAPI v1api.IMining MessagePoolAPI v1api.IMessagePool - MultiSigAPI v0api.IMultiSig - MarketAPI v1api.IMarket - PaychAPI v1api.IPaychan - CommonAPI v1api.ICommon - EthAPI v1api.IETH + MultiSigAPIV0 v0api.IMultiSig + MultiSigAPIV1 v1api.IMultiSig + MarketAPI v1api.IMarket + PaychAPI v1api.IPaychan + CommonAPI v1api.ICommon + EthAPI v1api.IETH } var _ cmds.Environment = (*Env)(nil) diff --git a/app/node/node.go b/app/node/node.go index 924e6aaa10..66841ee4a0 100644 --- a/app/node/node.go +++ b/app/node/node.go @@ -370,7 +370,8 @@ func (node *Node) createServerEnv(ctx context.Context) *Env { MessagePoolAPI: node.mpool.API(), PaychAPI: node.paychan.API(), MarketAPI: node.market.API(), - MultiSigAPI: &apiwrapper.WrapperV1IMultiSig{IMultiSig: node.multiSig.API(), IMessagePool: node.mpool.API()}, + MultiSigAPIV0: &apiwrapper.WrapperV1IMultiSig{IMultiSig: node.multiSig.API(), IMessagePool: node.mpool.API()}, + MultiSigAPIV1: node.multiSig.API(), CommonAPI: node.common, EthAPI: node.eth.API(), } diff --git a/app/submodule/multisig/multisig_api.go b/app/submodule/multisig/multisig_api.go index d7d6c7cd90..d4a800e3f4 100644 --- a/app/submodule/multisig/multisig_api.go +++ b/app/submodule/multisig/multisig_api.go @@ -311,6 +311,88 @@ func (a *multiSig) msigApproveOrCancelTxnHash(ctx context.Context, operation Msi }, nil } +func (a *multiSig) MsigGetAvailableBalance(ctx context.Context, addr address.Address, tsk types.TipSetKey) (types.BigInt, error) { + ts, err := a.state.ChainGetTipSet(ctx, tsk) + if err != nil { + return types.EmptyInt, fmt.Errorf("failed to load tipset: %w", err) + } + act, err := a.state.StateGetActor(ctx, addr, tsk) + if err != nil { + return types.EmptyInt, fmt.Errorf("failed to load multisig actor: %w", err) + } + msas, err := multisig.Load(a.store.Store(ctx), act) + if err != nil { + return types.EmptyInt, fmt.Errorf("failed to load multisig actor state: %w", err) + } + locked, err := msas.LockedBalance(ts.Height()) + if err != nil { + return types.EmptyInt, fmt.Errorf("failed to compute locked multisig balance: %w", err) + } + return types.BigSub(act.Balance, locked), nil +} + +func (a *multiSig) MsigGetVestingSchedule(ctx context.Context, addr address.Address, tsk types.TipSetKey) (types.MsigVesting, error) { + act, err := a.state.StateGetActor(ctx, addr, tsk) + if err != nil { + return types.EmptyVesting, fmt.Errorf("failed to load multisig actor: %w", err) + } + + msas, err := multisig.Load(a.store.Store(ctx), act) + if err != nil { + return types.EmptyVesting, fmt.Errorf("failed to load multisig actor state: %w", err) + } + + ib, err := msas.InitialBalance() + if err != nil { + return types.EmptyVesting, fmt.Errorf("failed to load multisig initial balance: %w", err) + } + + se, err := msas.StartEpoch() + if err != nil { + return types.EmptyVesting, fmt.Errorf("failed to load multisig start epoch: %w", err) + } + + ud, err := msas.UnlockDuration() + if err != nil { + return types.EmptyVesting, fmt.Errorf("failed to load multisig unlock duration: %w", err) + } + + return types.MsigVesting{ + InitialBalance: ib, + StartEpoch: se, + UnlockDuration: ud, + }, nil +} + +func (a *multiSig) MsigGetPending(ctx context.Context, addr address.Address, tsk types.TipSetKey) ([]*types.MsigTransaction, error) { + act, err := a.state.StateGetActor(ctx, addr, tsk) + if err != nil { + return nil, fmt.Errorf("failed to load multisig actor: %w", err) + } + msas, err := multisig.Load(a.store.Store(ctx), act) + if err != nil { + return nil, fmt.Errorf("failed to load multisig actor state: %w", err) + } + + var out = []*types.MsigTransaction{} + if err := msas.ForEachPendingTxn(func(id int64, txn multisig.Transaction) error { + out = append(out, &types.MsigTransaction{ + ID: id, + To: txn.To, + Value: txn.Value, + Method: txn.Method, + Params: txn.Params, + + Approved: txn.Approved, + }) + return nil + }); err != nil { + return nil, err + } + + return out, nil +} + func serializeAddParams(new address.Address, inc bool) ([]byte, error) { enc, actErr := actors.SerializeParams(&multisig2.AddSignerParams{ Signer: new, diff --git a/app/submodule/multisig/v0api/multisig_v0api.go b/app/submodule/multisig/v0api/multisig_v0api.go index ef32a8f1dc..9189ee3744 100644 --- a/app/submodule/multisig/v0api/multisig_v0api.go +++ b/app/submodule/multisig/v0api/multisig_v0api.go @@ -65,8 +65,8 @@ func (a *WrapperV1IMultiSig) MsigApproveTxnHash(ctx context.Context, msig addres return a.executePrototype(ctx, p) } -func (a *WrapperV1IMultiSig) MsigCancel(ctx context.Context, msig address.Address, txID uint64, src address.Address) (cid.Cid, error) { - p, err := a.IMultiSig.MsigCancel(ctx, msig, txID, src) +func (a *WrapperV1IMultiSig) MsigCancel(ctx context.Context, msig address.Address, txID uint64, to address.Address, amt types.BigInt, src address.Address, method uint64, params []byte) (cid.Cid, error) { + p, err := a.IMultiSig.MsigCancelTxnHash(ctx, msig, txID, to, amt, src, method, params) if err != nil { return cid.Undef, fmt.Errorf("creating prototype: %w", err) } diff --git a/cmd/multisig.go b/cmd/multisig.go index f7754d5e13..64c3af3bdb 100644 --- a/cmd/multisig.go +++ b/cmd/multisig.go @@ -118,7 +118,7 @@ var msigCreateCmd = &cmds.Command{ d := abi.ChainEpoch(duration) gp := types.NewInt(1) - msgCid, err := env.(*node.Env).MultiSigAPI.MsigCreate(req.Context, required, addrs, d, intVal, sendAddr, gp) + msgCid, err := env.(*node.Env).MultiSigAPIV0.MsigCreate(req.Context, required, addrs, d, intVal, sendAddr, gp) if err != nil { return err } @@ -371,7 +371,7 @@ var msigProposeCmd = &cmds.Command{ return fmt.Errorf("actor %s is not a multisig actor", msig) } - msgCid, err := env.(*node.Env).MultiSigAPI.MsigPropose(ctx, msig, dest, types.BigInt(value), from, method, params) + msgCid, err := env.(*node.Env).MultiSigAPIV0.MsigPropose(ctx, msig, dest, types.BigInt(value), from, method, params) if err != nil { return err } @@ -435,7 +435,7 @@ var msigRemoveProposeCmd = &cmds.Command{ return err } dt := reqBoolOption(req, "decrease-threshold") - msgCid, err := env.(*node.Env).MultiSigAPI.MsigRemoveSigner(ctx, msig, from, addr, dt) + msgCid, err := env.(*node.Env).MultiSigAPIV0.MsigRemoveSigner(ctx, msig, from, addr, dt) if err != nil { return err } @@ -512,7 +512,7 @@ var msigApproveCmd = &cmds.Command{ } var msgCid cid.Cid if argLen == 2 { - msgCid, err = env.(*node.Env).MultiSigAPI.MsigApprove(ctx, msig, txid, from) + msgCid, err = env.(*node.Env).MultiSigAPIV0.MsigApprove(ctx, msig, txid, from) if err != nil { return err } @@ -555,7 +555,7 @@ var msigApproveCmd = &cmds.Command{ params = p } - msgCid, err = env.(*node.Env).MultiSigAPI.MsigApproveTxnHash(ctx, msig, txid, proposer, dest, types.BigInt(value), from, method, params) + msgCid, err = env.(*node.Env).MultiSigAPIV0.MsigApproveTxnHash(ctx, msig, txid, proposer, dest, types.BigInt(value), from, method, params) if err != nil { return err } @@ -637,7 +637,7 @@ var msigAddProposeCmd = &cmds.Command{ } } - msgCid, err := env.(*node.Env).MultiSigAPI.MsigAddPropose(ctx, msig, from, addr, reqBoolOption(req, "increase-threshold")) + msgCid, err := env.(*node.Env).MultiSigAPIV0.MsigAddPropose(ctx, msig, from, addr, reqBoolOption(req, "increase-threshold")) if err != nil { return err } @@ -712,7 +712,7 @@ var msigAddApproveCmd = &cmds.Command{ if err != nil { return err } - msgCid, err := env.(*node.Env).MultiSigAPI.MsigAddApprove(ctx, msig, from, txid, prop, newAdd, inc) + msgCid, err := env.(*node.Env).MultiSigAPIV0.MsigAddApprove(ctx, msig, from, txid, prop, newAdd, inc) if err != nil { return err } @@ -774,7 +774,7 @@ var msigAddCancelCmd = &cmds.Command{ return err } - msgCid, err := env.(*node.Env).MultiSigAPI.MsigAddCancel(ctx, msig, from, txid, newAdd, inc) + msgCid, err := env.(*node.Env).MultiSigAPIV0.MsigAddCancel(ctx, msig, from, txid, newAdd, inc) if err != nil { return err } @@ -840,9 +840,16 @@ var msigCancelCmd = &cmds.Command{ ctx := ReqContext(req.Context) var msgCid cid.Cid if argLen == 2 { - if msgCid, err = api.MultiSigAPI.MsigCancel(ctx, msig, txid, from); err != nil { + p, err := api.MultiSigAPIV1.MsigCancel(ctx, msig, txid, from) + if err != nil { return err } + sm, err := api.MessagePoolAPI.MpoolPushMessage(ctx, &p.Message, nil) + if err != nil { + return fmt.Errorf("pushing message: %w", err) + } + msgCid = sm.Cid() + } else { dest, err := address.NewFromString(req.Arguments[2]) if err != nil { @@ -864,7 +871,7 @@ var msigCancelCmd = &cmds.Command{ return err } } - if msgCid, err = api.MultiSigAPI.MsigCancelTxnHash(ctx, msig, txid, dest, types.BigInt(value), + if msgCid, err = api.MultiSigAPIV0.MsigCancelTxnHash(ctx, msig, txid, dest, types.BigInt(value), from, method, params); err != nil { return err } @@ -921,7 +928,7 @@ var msigSwapProposeCmd = &cmds.Command{ if err != nil { return err } - msgCid, err := env.(*node.Env).MultiSigAPI.MsigSwapPropose(ctx, msig, from, oldAdd, newAdd) + msgCid, err := env.(*node.Env).MultiSigAPIV0.MsigSwapPropose(ctx, msig, from, oldAdd, newAdd) if err != nil { return err } @@ -995,7 +1002,7 @@ var msigSwapApproveCmd = &cmds.Command{ if err != nil { return err } - msgCid, err := env.(*node.Env).MultiSigAPI.MsigSwapApprove(ctx, msig, from, txid, prop, oldAdd, newAdd) + msgCid, err := env.(*node.Env).MultiSigAPIV0.MsigSwapApprove(ctx, msig, from, txid, prop, oldAdd, newAdd) if err != nil { return err } @@ -1056,7 +1063,7 @@ var msigSwapCancelCmd = &cmds.Command{ if err != nil { return err } - msgCid, err := env.(*node.Env).MultiSigAPI.MsigSwapCancel(ctx, msig, from, txid, oldAdd, newAdd) + msgCid, err := env.(*node.Env).MultiSigAPIV0.MsigSwapCancel(ctx, msig, from, txid, oldAdd, newAdd) if err != nil { return err } @@ -1126,7 +1133,7 @@ var msigLockProposeCmd = &cmds.Command{ if actErr != nil { return actErr } - msgCid, err := env.(*node.Env).MultiSigAPI.MsigPropose(ctx, msig, msig, big.Zero(), from, uint64(multisig.Methods.LockBalance), params) + msgCid, err := env.(*node.Env).MultiSigAPIV0.MsigPropose(ctx, msig, msig, big.Zero(), from, uint64(multisig.Methods.LockBalance), params) if err != nil { return err } @@ -1218,7 +1225,7 @@ var msigLockApproveCmd = &cmds.Command{ return actErr } - msgCid, err := env.(*node.Env).MultiSigAPI.MsigApproveTxnHash(ctx, msig, txid, prop, msig, big.Zero(), from, uint64(multisig.Methods.LockBalance), params) + msgCid, err := env.(*node.Env).MultiSigAPIV0.MsigApproveTxnHash(ctx, msig, txid, prop, msig, big.Zero(), from, uint64(multisig.Methods.LockBalance), params) if err != nil { return err } @@ -1295,7 +1302,7 @@ var msigLockCancelCmd = &cmds.Command{ return actErr } - msgCid, err := env.(*node.Env).MultiSigAPI.MsigCancelTxnHash(ctx, msig, txid, msig, big.Zero(), from, uint64(multisig.Methods.LockBalance), params) + msgCid, err := env.(*node.Env).MultiSigAPIV0.MsigCancelTxnHash(ctx, msig, txid, msig, big.Zero(), from, uint64(multisig.Methods.LockBalance), params) if err != nil { return err } @@ -1357,7 +1364,7 @@ var msigVestedCmd = &cmds.Command{ } } - ret, err := env.(*node.Env).MultiSigAPI.MsigGetVested(ctx, msig, start.Key(), end.Key()) + ret, err := env.(*node.Env).MultiSigAPIV0.MsigGetVested(ctx, msig, start.Key(), end.Key()) if err != nil { return err } @@ -1406,7 +1413,7 @@ var msigProposeThresholdCmd = &cmds.Command{ return actErr } - msgCid, err := env.(*node.Env).MultiSigAPI.MsigPropose(ctx, msig, msig, types.NewInt(0), from, uint64(multisig.Methods.ChangeNumApprovalsThreshold), params) + msgCid, err := env.(*node.Env).MultiSigAPIV0.MsigPropose(ctx, msig, msig, types.NewInt(0), from, uint64(multisig.Methods.ChangeNumApprovalsThreshold), params) if err != nil { return fmt.Errorf("failed to propose change of threshold: %w", err) } diff --git a/venus-shared/api/chain/v0/method.md b/venus-shared/api/chain/v0/method.md index 3665dc1c1f..09407a035b 100644 --- a/venus-shared/api/chain/v0/method.md +++ b/venus-shared/api/chain/v0/method.md @@ -137,7 +137,10 @@ curl http://:/rpc/v0 -X POST -H "Content-Type: application/json" -H " * [MsigCancel](#msigcancel) * [MsigCancelTxnHash](#msigcanceltxnhash) * [MsigCreate](#msigcreate) + * [MsigGetAvailableBalance](#msiggetavailablebalance) + * [MsigGetPending](#msiggetpending) * [MsigGetVested](#msiggetvested) + * [MsigGetVestingSchedule](#msiggetvestingschedule) * [MsigPropose](#msigpropose) * [MsigRemoveSigner](#msigremovesigner) * [MsigSwapApprove](#msigswapapprove) @@ -4391,7 +4394,11 @@ Inputs: [ "f01234", 42, - "f01234" + "f01234", + "0", + "f01234", + 42, + "Ynl0ZSBhcnJheQ==" ] ``` @@ -4459,6 +4466,68 @@ Response: } ``` +### MsigGetAvailableBalance +MsigGetAvailableBalance returns the portion of a multisig's balance that can be withdrawn or spent + + +Perms: read + +Inputs: +```json +[ + "f01234", + [ + { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + { + "/": "bafy2bzacebp3shtrn43k7g3unredz7fxn4gj533d3o43tqn2p2ipxxhrvchve" + } + ] +] +``` + +Response: `"0"` + +### MsigGetPending +MsigGetPending returns pending transactions for the given multisig +wallet. Once pending transactions are fully approved, they will no longer +appear here. + + +Perms: read + +Inputs: +```json +[ + "f01234", + [ + { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + { + "/": "bafy2bzacebp3shtrn43k7g3unredz7fxn4gj533d3o43tqn2p2ipxxhrvchve" + } + ] +] +``` + +Response: +```json +[ + { + "ID": 9, + "To": "f01234", + "Value": "0", + "Method": 1, + "Params": "Ynl0ZSBhcnJheQ==", + "Approved": [ + "f01234" + ] + } +] +``` + ### MsigGetVested @@ -4489,6 +4558,36 @@ Inputs: Response: `"0"` +### MsigGetVestingSchedule +MsigGetVestingSchedule returns the vesting details of a given multisig. + + +Perms: read + +Inputs: +```json +[ + "f01234", + [ + { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + { + "/": "bafy2bzacebp3shtrn43k7g3unredz7fxn4gj533d3o43tqn2p2ipxxhrvchve" + } + ] +] +``` + +Response: +```json +{ + "InitialBalance": "0", + "StartEpoch": 10101, + "UnlockDuration": 10101 +} +``` + ### MsigPropose diff --git a/venus-shared/api/chain/v0/mock/mock_fullnode.go b/venus-shared/api/chain/v0/mock/mock_fullnode.go index c35af01195..b988766d55 100644 --- a/venus-shared/api/chain/v0/mock/mock_fullnode.go +++ b/venus-shared/api/chain/v0/mock/mock_fullnode.go @@ -1032,18 +1032,18 @@ func (mr *MockFullNodeMockRecorder) MsigApproveTxnHash(arg0, arg1, arg2, arg3, a } // MsigCancel mocks base method. -func (m *MockFullNode) MsigCancel(arg0 context.Context, arg1 address.Address, arg2 uint64, arg3 address.Address) (cid.Cid, error) { +func (m *MockFullNode) MsigCancel(arg0 context.Context, arg1 address.Address, arg2 uint64, arg3 address.Address, arg4 big.Int, arg5 address.Address, arg6 uint64, arg7 []byte) (cid.Cid, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "MsigCancel", arg0, arg1, arg2, arg3) + ret := m.ctrl.Call(m, "MsigCancel", arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7) ret0, _ := ret[0].(cid.Cid) ret1, _ := ret[1].(error) return ret0, ret1 } // MsigCancel indicates an expected call of MsigCancel. -func (mr *MockFullNodeMockRecorder) MsigCancel(arg0, arg1, arg2, arg3 interface{}) *gomock.Call { +func (mr *MockFullNodeMockRecorder) MsigCancel(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7 interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "MsigCancel", reflect.TypeOf((*MockFullNode)(nil).MsigCancel), arg0, arg1, arg2, arg3) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "MsigCancel", reflect.TypeOf((*MockFullNode)(nil).MsigCancel), arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7) } // MsigCancelTxnHash mocks base method. @@ -1076,6 +1076,36 @@ func (mr *MockFullNodeMockRecorder) MsigCreate(arg0, arg1, arg2, arg3, arg4, arg return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "MsigCreate", reflect.TypeOf((*MockFullNode)(nil).MsigCreate), arg0, arg1, arg2, arg3, arg4, arg5, arg6) } +// MsigGetAvailableBalance mocks base method. +func (m *MockFullNode) MsigGetAvailableBalance(arg0 context.Context, arg1 address.Address, arg2 types.TipSetKey) (big.Int, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "MsigGetAvailableBalance", arg0, arg1, arg2) + ret0, _ := ret[0].(big.Int) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// MsigGetAvailableBalance indicates an expected call of MsigGetAvailableBalance. +func (mr *MockFullNodeMockRecorder) MsigGetAvailableBalance(arg0, arg1, arg2 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "MsigGetAvailableBalance", reflect.TypeOf((*MockFullNode)(nil).MsigGetAvailableBalance), arg0, arg1, arg2) +} + +// MsigGetPending mocks base method. +func (m *MockFullNode) MsigGetPending(arg0 context.Context, arg1 address.Address, arg2 types.TipSetKey) ([]*types.MsigTransaction, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "MsigGetPending", arg0, arg1, arg2) + ret0, _ := ret[0].([]*types.MsigTransaction) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// MsigGetPending indicates an expected call of MsigGetPending. +func (mr *MockFullNodeMockRecorder) MsigGetPending(arg0, arg1, arg2 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "MsigGetPending", reflect.TypeOf((*MockFullNode)(nil).MsigGetPending), arg0, arg1, arg2) +} + // MsigGetVested mocks base method. func (m *MockFullNode) MsigGetVested(arg0 context.Context, arg1 address.Address, arg2, arg3 types0.TipSetKey) (big.Int, error) { m.ctrl.T.Helper() @@ -1091,6 +1121,21 @@ func (mr *MockFullNodeMockRecorder) MsigGetVested(arg0, arg1, arg2, arg3 interfa return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "MsigGetVested", reflect.TypeOf((*MockFullNode)(nil).MsigGetVested), arg0, arg1, arg2, arg3) } +// MsigGetVestingSchedule mocks base method. +func (m *MockFullNode) MsigGetVestingSchedule(arg0 context.Context, arg1 address.Address, arg2 types.TipSetKey) (types.MsigVesting, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "MsigGetVestingSchedule", arg0, arg1, arg2) + ret0, _ := ret[0].(types.MsigVesting) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// MsigGetVestingSchedule indicates an expected call of MsigGetVestingSchedule. +func (mr *MockFullNodeMockRecorder) MsigGetVestingSchedule(arg0, arg1, arg2 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "MsigGetVestingSchedule", reflect.TypeOf((*MockFullNode)(nil).MsigGetVestingSchedule), arg0, arg1, arg2) +} + // MsigPropose mocks base method. func (m *MockFullNode) MsigPropose(arg0 context.Context, arg1, arg2 address.Address, arg3 big.Int, arg4 address.Address, arg5 uint64, arg6 []byte) (cid.Cid, error) { m.ctrl.T.Helper() diff --git a/venus-shared/api/chain/v0/multisig.go b/venus-shared/api/chain/v0/multisig.go index 324cd3846c..5fd5c55f54 100644 --- a/venus-shared/api/chain/v0/multisig.go +++ b/venus-shared/api/chain/v0/multisig.go @@ -29,7 +29,15 @@ type IMultiSig interface { MsigSwapCancel(ctx context.Context, msig address.Address, src address.Address, txID uint64, oldAdd address.Address, newAdd address.Address) (cid.Cid, error) //perm:sign MsigApprove(ctx context.Context, msig address.Address, txID uint64, src address.Address) (cid.Cid, error) //perm:sign MsigApproveTxnHash(ctx context.Context, msig address.Address, txID uint64, proposer address.Address, to address.Address, amt types.BigInt, src address.Address, method uint64, params []byte) (cid.Cid, error) //perm:sign - MsigCancel(ctx context.Context, msig address.Address, txID uint64, src address.Address) (cid.Cid, error) //perm:sign + MsigCancel(context.Context, address.Address, uint64, address.Address, types.BigInt, address.Address, uint64, []byte) (cid.Cid, error) //perm:sign MsigRemoveSigner(ctx context.Context, msig address.Address, proposer address.Address, toRemove address.Address, decrease bool) (cid.Cid, error) //perm:sign MsigGetVested(ctx context.Context, addr address.Address, start types.TipSetKey, end types.TipSetKey) (types.BigInt, error) //perm:read + // MsigGetAvailableBalance returns the portion of a multisig's balance that can be withdrawn or spent + MsigGetAvailableBalance(context.Context, address.Address, types.TipSetKey) (types.BigInt, error) //perm:read + //MsigGetPending returns pending transactions for the given multisig + //wallet. Once pending transactions are fully approved, they will no longer + //appear here. + MsigGetPending(context.Context, address.Address, types.TipSetKey) ([]*types.MsigTransaction, error) //perm:read + // MsigGetVestingSchedule returns the vesting details of a given multisig. + MsigGetVestingSchedule(context.Context, address.Address, types.TipSetKey) (types.MsigVesting, error) //perm:read } diff --git a/venus-shared/api/chain/v0/proxy_gen.go b/venus-shared/api/chain/v0/proxy_gen.go index 6f8d71f4ac..2c86f25499 100644 --- a/venus-shared/api/chain/v0/proxy_gen.go +++ b/venus-shared/api/chain/v0/proxy_gen.go @@ -527,20 +527,23 @@ func (s *IMessagePoolStruct) MpoolSub(p0 context.Context) (<-chan types.MpoolUpd type IMultiSigStruct struct { Internal struct { - MsigAddApprove func(ctx context.Context, msig address.Address, src address.Address, txID uint64, proposer address.Address, newAdd address.Address, inc bool) (cid.Cid, error) `perm:"sign"` - MsigAddCancel func(ctx context.Context, msig address.Address, src address.Address, txID uint64, newAdd address.Address, inc bool) (cid.Cid, error) `perm:"sign"` - MsigAddPropose func(ctx context.Context, msig address.Address, src address.Address, newAdd address.Address, inc bool) (cid.Cid, error) `perm:"sign"` - MsigApprove func(ctx context.Context, msig address.Address, txID uint64, src address.Address) (cid.Cid, error) `perm:"sign"` - MsigApproveTxnHash func(ctx context.Context, msig address.Address, txID uint64, proposer address.Address, to address.Address, amt types.BigInt, src address.Address, method uint64, params []byte) (cid.Cid, error) `perm:"sign"` - MsigCancel func(ctx context.Context, msig address.Address, txID uint64, src address.Address) (cid.Cid, error) `perm:"sign"` - MsigCancelTxnHash func(context.Context, address.Address, uint64, address.Address, types.BigInt, address.Address, uint64, []byte) (cid.Cid, error) `perm:"sign"` - MsigCreate func(context.Context, uint64, []address.Address, abi.ChainEpoch, types.BigInt, address.Address, types.BigInt) (cid.Cid, error) `perm:"sign"` - MsigGetVested func(ctx context.Context, addr address.Address, start types.TipSetKey, end types.TipSetKey) (types.BigInt, error) `perm:"read"` - MsigPropose func(ctx context.Context, msig address.Address, to address.Address, amt types.BigInt, src address.Address, method uint64, params []byte) (cid.Cid, error) `perm:"sign"` - MsigRemoveSigner func(ctx context.Context, msig address.Address, proposer address.Address, toRemove address.Address, decrease bool) (cid.Cid, error) `perm:"sign"` - MsigSwapApprove func(ctx context.Context, msig address.Address, src address.Address, txID uint64, proposer address.Address, oldAdd address.Address, newAdd address.Address) (cid.Cid, error) `perm:"sign"` - MsigSwapCancel func(ctx context.Context, msig address.Address, src address.Address, txID uint64, oldAdd address.Address, newAdd address.Address) (cid.Cid, error) `perm:"sign"` - MsigSwapPropose func(ctx context.Context, msig address.Address, src address.Address, oldAdd address.Address, newAdd address.Address) (cid.Cid, error) `perm:"sign"` + MsigAddApprove func(ctx context.Context, msig address.Address, src address.Address, txID uint64, proposer address.Address, newAdd address.Address, inc bool) (cid.Cid, error) `perm:"sign"` + MsigAddCancel func(ctx context.Context, msig address.Address, src address.Address, txID uint64, newAdd address.Address, inc bool) (cid.Cid, error) `perm:"sign"` + MsigAddPropose func(ctx context.Context, msig address.Address, src address.Address, newAdd address.Address, inc bool) (cid.Cid, error) `perm:"sign"` + MsigApprove func(ctx context.Context, msig address.Address, txID uint64, src address.Address) (cid.Cid, error) `perm:"sign"` + MsigApproveTxnHash func(ctx context.Context, msig address.Address, txID uint64, proposer address.Address, to address.Address, amt types.BigInt, src address.Address, method uint64, params []byte) (cid.Cid, error) `perm:"sign"` + MsigCancel func(context.Context, address.Address, uint64, address.Address, types.BigInt, address.Address, uint64, []byte) (cid.Cid, error) `perm:"sign"` + MsigCancelTxnHash func(context.Context, address.Address, uint64, address.Address, types.BigInt, address.Address, uint64, []byte) (cid.Cid, error) `perm:"sign"` + MsigCreate func(context.Context, uint64, []address.Address, abi.ChainEpoch, types.BigInt, address.Address, types.BigInt) (cid.Cid, error) `perm:"sign"` + MsigGetAvailableBalance func(context.Context, address.Address, types.TipSetKey) (types.BigInt, error) `perm:"read"` + MsigGetPending func(context.Context, address.Address, types.TipSetKey) ([]*types.MsigTransaction, error) `perm:"read"` + MsigGetVested func(ctx context.Context, addr address.Address, start types.TipSetKey, end types.TipSetKey) (types.BigInt, error) `perm:"read"` + MsigGetVestingSchedule func(context.Context, address.Address, types.TipSetKey) (types.MsigVesting, error) `perm:"read"` + MsigPropose func(ctx context.Context, msig address.Address, to address.Address, amt types.BigInt, src address.Address, method uint64, params []byte) (cid.Cid, error) `perm:"sign"` + MsigRemoveSigner func(ctx context.Context, msig address.Address, proposer address.Address, toRemove address.Address, decrease bool) (cid.Cid, error) `perm:"sign"` + MsigSwapApprove func(ctx context.Context, msig address.Address, src address.Address, txID uint64, proposer address.Address, oldAdd address.Address, newAdd address.Address) (cid.Cid, error) `perm:"sign"` + MsigSwapCancel func(ctx context.Context, msig address.Address, src address.Address, txID uint64, oldAdd address.Address, newAdd address.Address) (cid.Cid, error) `perm:"sign"` + MsigSwapPropose func(ctx context.Context, msig address.Address, src address.Address, oldAdd address.Address, newAdd address.Address) (cid.Cid, error) `perm:"sign"` } } @@ -559,8 +562,8 @@ func (s *IMultiSigStruct) MsigApprove(p0 context.Context, p1 address.Address, p2 func (s *IMultiSigStruct) MsigApproveTxnHash(p0 context.Context, p1 address.Address, p2 uint64, p3 address.Address, p4 address.Address, p5 types.BigInt, p6 address.Address, p7 uint64, p8 []byte) (cid.Cid, error) { return s.Internal.MsigApproveTxnHash(p0, p1, p2, p3, p4, p5, p6, p7, p8) } -func (s *IMultiSigStruct) MsigCancel(p0 context.Context, p1 address.Address, p2 uint64, p3 address.Address) (cid.Cid, error) { - return s.Internal.MsigCancel(p0, p1, p2, p3) +func (s *IMultiSigStruct) MsigCancel(p0 context.Context, p1 address.Address, p2 uint64, p3 address.Address, p4 types.BigInt, p5 address.Address, p6 uint64, p7 []byte) (cid.Cid, error) { + return s.Internal.MsigCancel(p0, p1, p2, p3, p4, p5, p6, p7) } func (s *IMultiSigStruct) MsigCancelTxnHash(p0 context.Context, p1 address.Address, p2 uint64, p3 address.Address, p4 types.BigInt, p5 address.Address, p6 uint64, p7 []byte) (cid.Cid, error) { return s.Internal.MsigCancelTxnHash(p0, p1, p2, p3, p4, p5, p6, p7) @@ -568,9 +571,18 @@ func (s *IMultiSigStruct) MsigCancelTxnHash(p0 context.Context, p1 address.Addre func (s *IMultiSigStruct) MsigCreate(p0 context.Context, p1 uint64, p2 []address.Address, p3 abi.ChainEpoch, p4 types.BigInt, p5 address.Address, p6 types.BigInt) (cid.Cid, error) { return s.Internal.MsigCreate(p0, p1, p2, p3, p4, p5, p6) } +func (s *IMultiSigStruct) MsigGetAvailableBalance(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (types.BigInt, error) { + return s.Internal.MsigGetAvailableBalance(p0, p1, p2) +} +func (s *IMultiSigStruct) MsigGetPending(p0 context.Context, p1 address.Address, p2 types.TipSetKey) ([]*types.MsigTransaction, error) { + return s.Internal.MsigGetPending(p0, p1, p2) +} func (s *IMultiSigStruct) MsigGetVested(p0 context.Context, p1 address.Address, p2 types.TipSetKey, p3 types.TipSetKey) (types.BigInt, error) { return s.Internal.MsigGetVested(p0, p1, p2, p3) } +func (s *IMultiSigStruct) MsigGetVestingSchedule(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (types.MsigVesting, error) { + return s.Internal.MsigGetVestingSchedule(p0, p1, p2) +} func (s *IMultiSigStruct) MsigPropose(p0 context.Context, p1 address.Address, p2 address.Address, p3 types.BigInt, p4 address.Address, p5 uint64, p6 []byte) (cid.Cid, error) { return s.Internal.MsigPropose(p0, p1, p2, p3, p4, p5, p6) } diff --git a/venus-shared/api/chain/v1/method.md b/venus-shared/api/chain/v1/method.md index 95568a8493..e20bb7fb56 100644 --- a/venus-shared/api/chain/v1/method.md +++ b/venus-shared/api/chain/v1/method.md @@ -186,7 +186,10 @@ curl http://:/rpc/v1 -X POST -H "Content-Type: application/json" -H " * [MsigCancel](#msigcancel) * [MsigCancelTxnHash](#msigcanceltxnhash) * [MsigCreate](#msigcreate) + * [MsigGetAvailableBalance](#msiggetavailablebalance) + * [MsigGetPending](#msiggetpending) * [MsigGetVested](#msiggetvested) + * [MsigGetVestingSchedule](#msiggetvestingschedule) * [MsigPropose](#msigpropose) * [MsigRemoveSigner](#msigremovesigner) * [MsigSwapApprove](#msigswapapprove) @@ -5751,7 +5754,71 @@ Response: } ``` +### MsigGetAvailableBalance +MsigGetAvailableBalance returns the portion of a multisig's balance that can be withdrawn or spent + + +Perms: read + +Inputs: +```json +[ + "f01234", + [ + { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + { + "/": "bafy2bzacebp3shtrn43k7g3unredz7fxn4gj533d3o43tqn2p2ipxxhrvchve" + } + ] +] +``` + +Response: `"0"` + +### MsigGetPending +MsigGetPending returns pending transactions for the given multisig +wallet. Once pending transactions are fully approved, they will no longer +appear here. + + +Perms: read + +Inputs: +```json +[ + "f01234", + [ + { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + { + "/": "bafy2bzacebp3shtrn43k7g3unredz7fxn4gj533d3o43tqn2p2ipxxhrvchve" + } + ] +] +``` + +Response: +```json +[ + { + "ID": 9, + "To": "f01234", + "Value": "0", + "Method": 1, + "Params": "Ynl0ZSBhcnJheQ==", + "Approved": [ + "f01234" + ] + } +] +``` + ### MsigGetVested +MsigGetVested returns the amount of FIL that vested in a multisig in a certain period. +It takes the following params: \, \, \ Perms: read @@ -5781,6 +5848,36 @@ Inputs: Response: `"0"` +### MsigGetVestingSchedule +MsigGetVestingSchedule returns the vesting details of a given multisig. + + +Perms: read + +Inputs: +```json +[ + "f01234", + [ + { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + { + "/": "bafy2bzacebp3shtrn43k7g3unredz7fxn4gj533d3o43tqn2p2ipxxhrvchve" + } + ] +] +``` + +Response: +```json +{ + "InitialBalance": "0", + "StartEpoch": 10101, + "UnlockDuration": 10101 +} +``` + ### MsigPropose diff --git a/venus-shared/api/chain/v1/mock/mock_fullnode.go b/venus-shared/api/chain/v1/mock/mock_fullnode.go index 948a794c64..2b7ff93898 100644 --- a/venus-shared/api/chain/v1/mock/mock_fullnode.go +++ b/venus-shared/api/chain/v1/mock/mock_fullnode.go @@ -1603,6 +1603,36 @@ func (mr *MockFullNodeMockRecorder) MsigCreate(arg0, arg1, arg2, arg3, arg4, arg return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "MsigCreate", reflect.TypeOf((*MockFullNode)(nil).MsigCreate), arg0, arg1, arg2, arg3, arg4, arg5, arg6) } +// MsigGetAvailableBalance mocks base method. +func (m *MockFullNode) MsigGetAvailableBalance(arg0 context.Context, arg1 address.Address, arg2 types.TipSetKey) (big.Int, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "MsigGetAvailableBalance", arg0, arg1, arg2) + ret0, _ := ret[0].(big.Int) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// MsigGetAvailableBalance indicates an expected call of MsigGetAvailableBalance. +func (mr *MockFullNodeMockRecorder) MsigGetAvailableBalance(arg0, arg1, arg2 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "MsigGetAvailableBalance", reflect.TypeOf((*MockFullNode)(nil).MsigGetAvailableBalance), arg0, arg1, arg2) +} + +// MsigGetPending mocks base method. +func (m *MockFullNode) MsigGetPending(arg0 context.Context, arg1 address.Address, arg2 types.TipSetKey) ([]*types.MsigTransaction, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "MsigGetPending", arg0, arg1, arg2) + ret0, _ := ret[0].([]*types.MsigTransaction) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// MsigGetPending indicates an expected call of MsigGetPending. +func (mr *MockFullNodeMockRecorder) MsigGetPending(arg0, arg1, arg2 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "MsigGetPending", reflect.TypeOf((*MockFullNode)(nil).MsigGetPending), arg0, arg1, arg2) +} + // MsigGetVested mocks base method. func (m *MockFullNode) MsigGetVested(arg0 context.Context, arg1 address.Address, arg2, arg3 types0.TipSetKey) (big.Int, error) { m.ctrl.T.Helper() @@ -1618,6 +1648,21 @@ func (mr *MockFullNodeMockRecorder) MsigGetVested(arg0, arg1, arg2, arg3 interfa return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "MsigGetVested", reflect.TypeOf((*MockFullNode)(nil).MsigGetVested), arg0, arg1, arg2, arg3) } +// MsigGetVestingSchedule mocks base method. +func (m *MockFullNode) MsigGetVestingSchedule(arg0 context.Context, arg1 address.Address, arg2 types.TipSetKey) (types.MsigVesting, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "MsigGetVestingSchedule", arg0, arg1, arg2) + ret0, _ := ret[0].(types.MsigVesting) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// MsigGetVestingSchedule indicates an expected call of MsigGetVestingSchedule. +func (mr *MockFullNodeMockRecorder) MsigGetVestingSchedule(arg0, arg1, arg2 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "MsigGetVestingSchedule", reflect.TypeOf((*MockFullNode)(nil).MsigGetVestingSchedule), arg0, arg1, arg2) +} + // MsigPropose mocks base method. func (m *MockFullNode) MsigPropose(arg0 context.Context, arg1, arg2 address.Address, arg3 big.Int, arg4 address.Address, arg5 uint64, arg6 []byte) (*types0.MessagePrototype, error) { m.ctrl.T.Helper() diff --git a/venus-shared/api/chain/v1/multisig.go b/venus-shared/api/chain/v1/multisig.go index 48d145cbb6..6bd38ef704 100644 --- a/venus-shared/api/chain/v1/multisig.go +++ b/venus-shared/api/chain/v1/multisig.go @@ -26,5 +26,17 @@ type IMultiSig interface { MsigApproveTxnHash(ctx context.Context, msig address.Address, txID uint64, proposer address.Address, to address.Address, amt types.BigInt, src address.Address, method uint64, params []byte) (*types.MessagePrototype, error) //perm:sign MsigCancel(ctx context.Context, msig address.Address, txID uint64, src address.Address) (*types.MessagePrototype, error) //perm:sign MsigRemoveSigner(ctx context.Context, msig address.Address, proposer address.Address, toRemove address.Address, decrease bool) (*types.MessagePrototype, error) //perm:sign - MsigGetVested(ctx context.Context, addr address.Address, start types.TipSetKey, end types.TipSetKey) (types.BigInt, error) //perm:read + + // MsigGetVested returns the amount of FIL that vested in a multisig in a certain period. + // It takes the following params: , , + MsigGetVested(context.Context, address.Address, types.TipSetKey, types.TipSetKey) (types.BigInt, error) //perm:read + // MsigGetAvailableBalance returns the portion of a multisig's balance that can be withdrawn or spent + MsigGetAvailableBalance(context.Context, address.Address, types.TipSetKey) (types.BigInt, error) //perm:read + // MsigGetVestingSchedule returns the vesting details of a given multisig. + MsigGetVestingSchedule(context.Context, address.Address, types.TipSetKey) (types.MsigVesting, error) //perm:read + + //MsigGetPending returns pending transactions for the given multisig + //wallet. Once pending transactions are fully approved, they will no longer + //appear here. + MsigGetPending(context.Context, address.Address, types.TipSetKey) ([]*types.MsigTransaction, error) //perm:read } diff --git a/venus-shared/api/chain/v1/proxy_gen.go b/venus-shared/api/chain/v1/proxy_gen.go index 11ba58fb37..85041991d5 100644 --- a/venus-shared/api/chain/v1/proxy_gen.go +++ b/venus-shared/api/chain/v1/proxy_gen.go @@ -566,20 +566,23 @@ func (s *IMessagePoolStruct) MpoolSub(p0 context.Context) (<-chan types.MpoolUpd type IMultiSigStruct struct { Internal struct { - MsigAddApprove func(ctx context.Context, msig address.Address, src address.Address, txID uint64, proposer address.Address, newAdd address.Address, inc bool) (*types.MessagePrototype, error) `perm:"sign"` - MsigAddCancel func(ctx context.Context, msig address.Address, src address.Address, txID uint64, newAdd address.Address, inc bool) (*types.MessagePrototype, error) `perm:"sign"` - MsigAddPropose func(ctx context.Context, msig address.Address, src address.Address, newAdd address.Address, inc bool) (*types.MessagePrototype, error) `perm:"sign"` - MsigApprove func(ctx context.Context, msig address.Address, txID uint64, src address.Address) (*types.MessagePrototype, error) `perm:"sign"` - MsigApproveTxnHash func(ctx context.Context, msig address.Address, txID uint64, proposer address.Address, to address.Address, amt types.BigInt, src address.Address, method uint64, params []byte) (*types.MessagePrototype, error) `perm:"sign"` - MsigCancel func(ctx context.Context, msig address.Address, txID uint64, src address.Address) (*types.MessagePrototype, error) `perm:"sign"` - MsigCancelTxnHash func(context.Context, address.Address, uint64, address.Address, types.BigInt, address.Address, uint64, []byte) (*types.MessagePrototype, error) `perm:"sign"` - MsigCreate func(ctx context.Context, req uint64, addrs []address.Address, duration abi.ChainEpoch, val types.BigInt, src address.Address, gp types.BigInt) (*types.MessagePrototype, error) `perm:"sign"` - MsigGetVested func(ctx context.Context, addr address.Address, start types.TipSetKey, end types.TipSetKey) (types.BigInt, error) `perm:"read"` - MsigPropose func(ctx context.Context, msig address.Address, to address.Address, amt types.BigInt, src address.Address, method uint64, params []byte) (*types.MessagePrototype, error) `perm:"sign"` - MsigRemoveSigner func(ctx context.Context, msig address.Address, proposer address.Address, toRemove address.Address, decrease bool) (*types.MessagePrototype, error) `perm:"sign"` - MsigSwapApprove func(ctx context.Context, msig address.Address, src address.Address, txID uint64, proposer address.Address, oldAdd address.Address, newAdd address.Address) (*types.MessagePrototype, error) `perm:"sign"` - MsigSwapCancel func(ctx context.Context, msig address.Address, src address.Address, txID uint64, oldAdd address.Address, newAdd address.Address) (*types.MessagePrototype, error) `perm:"sign"` - MsigSwapPropose func(ctx context.Context, msig address.Address, src address.Address, oldAdd address.Address, newAdd address.Address) (*types.MessagePrototype, error) `perm:"sign"` + MsigAddApprove func(ctx context.Context, msig address.Address, src address.Address, txID uint64, proposer address.Address, newAdd address.Address, inc bool) (*types.MessagePrototype, error) `perm:"sign"` + MsigAddCancel func(ctx context.Context, msig address.Address, src address.Address, txID uint64, newAdd address.Address, inc bool) (*types.MessagePrototype, error) `perm:"sign"` + MsigAddPropose func(ctx context.Context, msig address.Address, src address.Address, newAdd address.Address, inc bool) (*types.MessagePrototype, error) `perm:"sign"` + MsigApprove func(ctx context.Context, msig address.Address, txID uint64, src address.Address) (*types.MessagePrototype, error) `perm:"sign"` + MsigApproveTxnHash func(ctx context.Context, msig address.Address, txID uint64, proposer address.Address, to address.Address, amt types.BigInt, src address.Address, method uint64, params []byte) (*types.MessagePrototype, error) `perm:"sign"` + MsigCancel func(ctx context.Context, msig address.Address, txID uint64, src address.Address) (*types.MessagePrototype, error) `perm:"sign"` + MsigCancelTxnHash func(context.Context, address.Address, uint64, address.Address, types.BigInt, address.Address, uint64, []byte) (*types.MessagePrototype, error) `perm:"sign"` + MsigCreate func(ctx context.Context, req uint64, addrs []address.Address, duration abi.ChainEpoch, val types.BigInt, src address.Address, gp types.BigInt) (*types.MessagePrototype, error) `perm:"sign"` + MsigGetAvailableBalance func(context.Context, address.Address, types.TipSetKey) (types.BigInt, error) `perm:"read"` + MsigGetPending func(context.Context, address.Address, types.TipSetKey) ([]*types.MsigTransaction, error) `perm:"read"` + MsigGetVested func(context.Context, address.Address, types.TipSetKey, types.TipSetKey) (types.BigInt, error) `perm:"read"` + MsigGetVestingSchedule func(context.Context, address.Address, types.TipSetKey) (types.MsigVesting, error) `perm:"read"` + MsigPropose func(ctx context.Context, msig address.Address, to address.Address, amt types.BigInt, src address.Address, method uint64, params []byte) (*types.MessagePrototype, error) `perm:"sign"` + MsigRemoveSigner func(ctx context.Context, msig address.Address, proposer address.Address, toRemove address.Address, decrease bool) (*types.MessagePrototype, error) `perm:"sign"` + MsigSwapApprove func(ctx context.Context, msig address.Address, src address.Address, txID uint64, proposer address.Address, oldAdd address.Address, newAdd address.Address) (*types.MessagePrototype, error) `perm:"sign"` + MsigSwapCancel func(ctx context.Context, msig address.Address, src address.Address, txID uint64, oldAdd address.Address, newAdd address.Address) (*types.MessagePrototype, error) `perm:"sign"` + MsigSwapPropose func(ctx context.Context, msig address.Address, src address.Address, oldAdd address.Address, newAdd address.Address) (*types.MessagePrototype, error) `perm:"sign"` } } @@ -607,9 +610,18 @@ func (s *IMultiSigStruct) MsigCancelTxnHash(p0 context.Context, p1 address.Addre func (s *IMultiSigStruct) MsigCreate(p0 context.Context, p1 uint64, p2 []address.Address, p3 abi.ChainEpoch, p4 types.BigInt, p5 address.Address, p6 types.BigInt) (*types.MessagePrototype, error) { return s.Internal.MsigCreate(p0, p1, p2, p3, p4, p5, p6) } +func (s *IMultiSigStruct) MsigGetAvailableBalance(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (types.BigInt, error) { + return s.Internal.MsigGetAvailableBalance(p0, p1, p2) +} +func (s *IMultiSigStruct) MsigGetPending(p0 context.Context, p1 address.Address, p2 types.TipSetKey) ([]*types.MsigTransaction, error) { + return s.Internal.MsigGetPending(p0, p1, p2) +} func (s *IMultiSigStruct) MsigGetVested(p0 context.Context, p1 address.Address, p2 types.TipSetKey, p3 types.TipSetKey) (types.BigInt, error) { return s.Internal.MsigGetVested(p0, p1, p2, p3) } +func (s *IMultiSigStruct) MsigGetVestingSchedule(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (types.MsigVesting, error) { + return s.Internal.MsigGetVestingSchedule(p0, p1, p2) +} func (s *IMultiSigStruct) MsigPropose(p0 context.Context, p1 address.Address, p2 address.Address, p3 types.BigInt, p4 address.Address, p5 uint64, p6 []byte) (*types.MessagePrototype, error) { return s.Internal.MsigPropose(p0, p1, p2, p3, p4, p5, p6) } diff --git a/venus-shared/compatible-checks/api-diff.txt b/venus-shared/compatible-checks/api-diff.txt index 33eb37f9e0..2d82f5fd7b 100644 --- a/venus-shared/compatible-checks/api-diff.txt +++ b/venus-shared/compatible-checks/api-diff.txt @@ -61,11 +61,7 @@ github.com/filecoin-project/venus/venus-shared/api/chain/v0.FullNode <> github.c + MpoolPublishMessage > MpoolPushMessage {[func(context.Context, *types.Message, *types.MessageSendSpec) (*types.SignedMessage, error) <> func(context.Context, *types.Message, *api.MessageSendSpec) (*types.SignedMessage, error)] base=func in type: #2 input; nested={[*types.MessageSendSpec <> *api.MessageSendSpec] base=pointed type; nested={[types.MessageSendSpec <> api.MessageSendSpec] base=struct field; nested={[types.MessageSendSpec <> api.MessageSendSpec] base=exported fields count: 3 != 2; nested=nil}}}} + MpoolSelects - > MsigCancel {[func(context.Context, address.Address, uint64, address.Address) (cid.Cid, error) <> func(context.Context, address.Address, uint64, address.Address, big.Int, address.Address, uint64, []uint8) (cid.Cid, error)] base=func in num: 4 != 8; nested=nil} + MsigCancelTxnHash - - MsigGetAvailableBalance - - MsigGetPending - - MsigGetVestingSchedule - NetBlockAdd - NetBlockList - NetBlockRemove @@ -179,9 +175,6 @@ github.com/filecoin-project/venus/venus-shared/api/chain/v1.FullNode <> github.c + MpoolPublishMessage > MpoolPushMessage {[func(context.Context, *types.Message, *types.MessageSendSpec) (*types.SignedMessage, error) <> func(context.Context, *types.Message, *api.MessageSendSpec) (*types.SignedMessage, error)] base=func in type: #2 input; nested={[*types.MessageSendSpec <> *api.MessageSendSpec] base=pointed type; nested={[types.MessageSendSpec <> api.MessageSendSpec] base=struct field; nested={[types.MessageSendSpec <> api.MessageSendSpec] base=exported fields count: 3 != 2; nested=nil}}}} + MpoolSelects - - MsigGetAvailableBalance - - MsigGetPending - - MsigGetVestingSchedule - NetBlockAdd - NetBlockList - NetBlockRemove diff --git a/venus-shared/types/api_types.go b/venus-shared/types/api_types.go index d9ec37fe6b..8fec02a508 100644 --- a/venus-shared/types/api_types.go +++ b/venus-shared/types/api_types.go @@ -123,6 +123,28 @@ type MessageMatch struct { From address.Address } +type MsigTransaction struct { + ID int64 + To address.Address + Value abi.TokenAmount + Method abi.MethodNum + Params []byte + + Approved []address.Address +} + +type MsigVesting struct { + InitialBalance abi.TokenAmount + StartEpoch abi.ChainEpoch + UnlockDuration abi.ChainEpoch +} + +var EmptyVesting = MsigVesting{ + InitialBalance: EmptyInt, + StartEpoch: -1, + UnlockDuration: -1, +} + // SectorInfo provides information about a sector construction type SectorInfo struct { Size abi.SectorSize From e20af696add74b25af93b536212e030b5dcc3830 Mon Sep 17 00:00:00 2001 From: tanlang Date: Thu, 12 Jan 2023 08:36:16 +0000 Subject: [PATCH 16/21] feat: add multi-sig types --- venus-devtool/state-type-gen/main.go | 6 ++++- .../api/chain/v0/mock/mock_fullnode.go | 10 ++++---- .../api/chain/v1/mock/mock_fullnode.go | 10 ++++---- venus-shared/api/market/proxy_gen.go | 1 - venus-shared/types/state_types_gen.go | 25 ++++++++++++++++++- 5 files changed, 39 insertions(+), 13 deletions(-) diff --git a/venus-devtool/state-type-gen/main.go b/venus-devtool/state-type-gen/main.go index 2869761a35..b115f863f4 100644 --- a/venus-devtool/state-type-gen/main.go +++ b/venus-devtool/state-type-gen/main.go @@ -107,6 +107,10 @@ var stateTypesOpt = option{ {pkgName: "market", newName: "MarketWithdrawBalanceParams"}, {pkgName: "miner", newName: "MinerWithdrawBalanceParams"}, }, + "ConstructorParams": { + {pkgName: "multisig", newName: "MultisigConstructorParams"}, + {pkgName: "paych", newName: "PaychConstructorParams"}, + }, }, } @@ -126,7 +130,7 @@ var getStateTypesIncludePkgs = func() []string { aliasVesion := map[string]actors.Version{ "paych": actors.Version8, } - for _, pkg := range []string{"market", "miner", "verifreg", "paych"} { + for _, pkg := range []string{"market", "miner", "verifreg", "paych", "multisig"} { if v, ok := aliasVesion[pkg]; ok { pkgs = append(pkgs, fmt.Sprintf("v%v/%s", v, pkg)) } else { diff --git a/venus-shared/api/chain/v0/mock/mock_fullnode.go b/venus-shared/api/chain/v0/mock/mock_fullnode.go index b988766d55..5a49d52017 100644 --- a/venus-shared/api/chain/v0/mock/mock_fullnode.go +++ b/venus-shared/api/chain/v0/mock/mock_fullnode.go @@ -1077,7 +1077,7 @@ func (mr *MockFullNodeMockRecorder) MsigCreate(arg0, arg1, arg2, arg3, arg4, arg } // MsigGetAvailableBalance mocks base method. -func (m *MockFullNode) MsigGetAvailableBalance(arg0 context.Context, arg1 address.Address, arg2 types.TipSetKey) (big.Int, error) { +func (m *MockFullNode) MsigGetAvailableBalance(arg0 context.Context, arg1 address.Address, arg2 types0.TipSetKey) (big.Int, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "MsigGetAvailableBalance", arg0, arg1, arg2) ret0, _ := ret[0].(big.Int) @@ -1092,10 +1092,10 @@ func (mr *MockFullNodeMockRecorder) MsigGetAvailableBalance(arg0, arg1, arg2 int } // MsigGetPending mocks base method. -func (m *MockFullNode) MsigGetPending(arg0 context.Context, arg1 address.Address, arg2 types.TipSetKey) ([]*types.MsigTransaction, error) { +func (m *MockFullNode) MsigGetPending(arg0 context.Context, arg1 address.Address, arg2 types0.TipSetKey) ([]*types0.MsigTransaction, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "MsigGetPending", arg0, arg1, arg2) - ret0, _ := ret[0].([]*types.MsigTransaction) + ret0, _ := ret[0].([]*types0.MsigTransaction) ret1, _ := ret[1].(error) return ret0, ret1 } @@ -1122,10 +1122,10 @@ func (mr *MockFullNodeMockRecorder) MsigGetVested(arg0, arg1, arg2, arg3 interfa } // MsigGetVestingSchedule mocks base method. -func (m *MockFullNode) MsigGetVestingSchedule(arg0 context.Context, arg1 address.Address, arg2 types.TipSetKey) (types.MsigVesting, error) { +func (m *MockFullNode) MsigGetVestingSchedule(arg0 context.Context, arg1 address.Address, arg2 types0.TipSetKey) (types0.MsigVesting, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "MsigGetVestingSchedule", arg0, arg1, arg2) - ret0, _ := ret[0].(types.MsigVesting) + ret0, _ := ret[0].(types0.MsigVesting) ret1, _ := ret[1].(error) return ret0, ret1 } diff --git a/venus-shared/api/chain/v1/mock/mock_fullnode.go b/venus-shared/api/chain/v1/mock/mock_fullnode.go index 2b7ff93898..df338f8f99 100644 --- a/venus-shared/api/chain/v1/mock/mock_fullnode.go +++ b/venus-shared/api/chain/v1/mock/mock_fullnode.go @@ -1604,7 +1604,7 @@ func (mr *MockFullNodeMockRecorder) MsigCreate(arg0, arg1, arg2, arg3, arg4, arg } // MsigGetAvailableBalance mocks base method. -func (m *MockFullNode) MsigGetAvailableBalance(arg0 context.Context, arg1 address.Address, arg2 types.TipSetKey) (big.Int, error) { +func (m *MockFullNode) MsigGetAvailableBalance(arg0 context.Context, arg1 address.Address, arg2 types0.TipSetKey) (big.Int, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "MsigGetAvailableBalance", arg0, arg1, arg2) ret0, _ := ret[0].(big.Int) @@ -1619,10 +1619,10 @@ func (mr *MockFullNodeMockRecorder) MsigGetAvailableBalance(arg0, arg1, arg2 int } // MsigGetPending mocks base method. -func (m *MockFullNode) MsigGetPending(arg0 context.Context, arg1 address.Address, arg2 types.TipSetKey) ([]*types.MsigTransaction, error) { +func (m *MockFullNode) MsigGetPending(arg0 context.Context, arg1 address.Address, arg2 types0.TipSetKey) ([]*types0.MsigTransaction, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "MsigGetPending", arg0, arg1, arg2) - ret0, _ := ret[0].([]*types.MsigTransaction) + ret0, _ := ret[0].([]*types0.MsigTransaction) ret1, _ := ret[1].(error) return ret0, ret1 } @@ -1649,10 +1649,10 @@ func (mr *MockFullNodeMockRecorder) MsigGetVested(arg0, arg1, arg2, arg3 interfa } // MsigGetVestingSchedule mocks base method. -func (m *MockFullNode) MsigGetVestingSchedule(arg0 context.Context, arg1 address.Address, arg2 types.TipSetKey) (types.MsigVesting, error) { +func (m *MockFullNode) MsigGetVestingSchedule(arg0 context.Context, arg1 address.Address, arg2 types0.TipSetKey) (types0.MsigVesting, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "MsigGetVestingSchedule", arg0, arg1, arg2) - ret0, _ := ret[0].(types.MsigVesting) + ret0, _ := ret[0].(types0.MsigVesting) ret1, _ := ret[1].(error) return ret0, ret1 } diff --git a/venus-shared/api/market/proxy_gen.go b/venus-shared/api/market/proxy_gen.go index 77f518aa3e..35bef7fa84 100644 --- a/venus-shared/api/market/proxy_gen.go +++ b/venus-shared/api/market/proxy_gen.go @@ -75,7 +75,6 @@ type IMarketStruct struct { MarketGetRetrievalAsk func(ctx context.Context, mAddr address.Address) (*retrievalmarket.Ask, error) `perm:"read"` MarketImportDealData func(ctx context.Context, propcid cid.Cid, path string) error `perm:"admin"` MarketImportPublishedDeal func(ctx context.Context, deal market.MinerDeal) error `perm:"write"` - MarketListAsk func(ctx context.Context) ([]*market.SignedStorageAsk, error) `perm:"read"` MarketListDataTransfers func(ctx context.Context) ([]market.DataTransferChannel, error) `perm:"admin"` MarketListDeals func(ctx context.Context, addrs []address.Address) ([]*types.MarketDeal, error) `perm:"read"` MarketListIncompleteDeals func(ctx context.Context, mAddr address.Address) ([]market.MinerDeal, error) `perm:"read"` diff --git a/venus-shared/types/state_types_gen.go b/venus-shared/types/state_types_gen.go index 52a56d486a..d9b3c15986 100755 --- a/venus-shared/types/state_types_gen.go +++ b/venus-shared/types/state_types_gen.go @@ -5,6 +5,7 @@ import ( "github.com/filecoin-project/go-state-types/builtin/v8/paych" "github.com/filecoin-project/go-state-types/builtin/v9/market" "github.com/filecoin-project/go-state-types/builtin/v9/miner" + "github.com/filecoin-project/go-state-types/builtin/v9/multisig" "github.com/filecoin-project/go-state-types/builtin/v9/verifreg" ) @@ -172,6 +173,28 @@ var ( SectorKey = miner.SectorKey ) +////////// multisig ////////// + +const ( + SignersMax = multisig.SignersMax +) + +type ( + AddSignerParams = multisig.AddSignerParams + ApproveReturn = multisig.ApproveReturn + ChangeNumApprovalsThresholdParams = multisig.ChangeNumApprovalsThresholdParams + MultisigConstructorParams = multisig.ConstructorParams + LockBalanceParams = multisig.LockBalanceParams + ProposalHashData = multisig.ProposalHashData + ProposeParams = multisig.ProposeParams + ProposeReturn = multisig.ProposeReturn + RemoveSignerParams = multisig.RemoveSignerParams + SwapSignerParams = multisig.SwapSignerParams + Transaction = multisig.Transaction + TxnID = multisig.TxnID + TxnIDParams = multisig.TxnIDParams +) + ////////// paych ////////// const ( @@ -180,7 +203,7 @@ const ( ) type ( - ConstructorParams = paych.ConstructorParams + PaychConstructorParams = paych.ConstructorParams LaneState = paych.LaneState Merge = paych.Merge ModVerifyParams = paych.ModVerifyParams From adf411e21cebbb7546cbb792153cd8b4f9669b09 Mon Sep 17 00:00:00 2001 From: tanlang Date: Tue, 17 Jan 2023 07:19:17 +0000 Subject: [PATCH 17/21] feat: add StateMsigInfo method to IMultiSig --- app/submodule/multisig/multisig_api.go | 51 +++++++++++++++++++ venus-shared/api/chain/v1/method.md | 36 +++++++++++++ .../api/chain/v1/mock/mock_fullnode.go | 15 ++++++ venus-shared/api/chain/v1/multisig.go | 1 + venus-shared/api/chain/v1/proxy_gen.go | 4 ++ venus-shared/types/api_types.go | 10 ++++ 6 files changed, 117 insertions(+) diff --git a/app/submodule/multisig/multisig_api.go b/app/submodule/multisig/multisig_api.go index d4a800e3f4..3fa7d5e8e4 100644 --- a/app/submodule/multisig/multisig_api.go +++ b/app/submodule/multisig/multisig_api.go @@ -67,6 +67,57 @@ func (a *multiSig) MsigCreate(ctx context.Context, req uint64, addrs []address.A }, nil } +func (a *multiSig) StateMsigInfo(ctx context.Context, addr address.Address, tsk types.TipSetKey) (*types.MsigInfo, error) { + ret := &types.MsigInfo{} + + ts, err := a.state.ChainGetTipSet(ctx, tsk) + if err != nil { + return nil, err + } + + act, err := a.state.StateGetActor(ctx, addr, tsk) + if err != nil { + return nil, fmt.Errorf("failed to load multisig actor: %w", err) + } + msas, err := multisig.Load(a.store.Store(ctx), act) + if err != nil { + return nil, fmt.Errorf("failed to load multisig actor state: %w", err) + } + + ret.ApprovalsThreshold, err = msas.Threshold() + if err != nil { + return nil, fmt.Errorf("failed to get threshold: %w", err) + } + + ret.Signers, err = msas.Signers() + if err != nil { + return nil, fmt.Errorf("failed to get signers: %w", err) + } + + ret.InitialBalance, err = msas.InitialBalance() + if err != nil { + return nil, fmt.Errorf("failed to get initial balance: %w", err) + } + + ret.CurrentBalance = act.Balance + ret.LockBalance, err = msas.LockedBalance(ts.Height()) + if err != nil { + return nil, fmt.Errorf("failed to get locked balance: %w", err) + } + + ret.StartEpoch, err = msas.StartEpoch() + if err != nil { + return nil, fmt.Errorf("failed to get start epoch") + } + + ret.UnlockDuration, err = msas.UnlockDuration() + if err != nil { + return nil, fmt.Errorf("failed to get unlocked duration") + } + + return ret, nil +} + func (a *multiSig) MsigPropose(ctx context.Context, msig address.Address, to address.Address, amt types.BigInt, src address.Address, method uint64, params []byte) (*types.MessagePrototype, error) { mb, err := a.messageBuilder(ctx, src) if err != nil { diff --git a/venus-shared/api/chain/v1/method.md b/venus-shared/api/chain/v1/method.md index e20bb7fb56..0a65663115 100644 --- a/venus-shared/api/chain/v1/method.md +++ b/venus-shared/api/chain/v1/method.md @@ -195,6 +195,7 @@ curl http://:/rpc/v1 -X POST -H "Content-Type: application/json" -H " * [MsigSwapApprove](#msigswapapprove) * [MsigSwapCancel](#msigswapcancel) * [MsigSwapPropose](#msigswappropose) + * [StateMsigInfo](#statemsiginfo) * [Network](#network) * [ID](#id) * [NetAddrsListen](#netaddrslisten) @@ -6068,6 +6069,41 @@ Response: } ``` +### StateMsigInfo + + +Perms: read + +Inputs: +```json +[ + "f01234", + [ + { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + { + "/": "bafy2bzacebp3shtrn43k7g3unredz7fxn4gj533d3o43tqn2p2ipxxhrvchve" + } + ] +] +``` + +Response: +```json +{ + "ApprovalsThreshold": 42, + "Signers": [ + "f01234" + ], + "InitialBalance": "0", + "CurrentBalance": "0", + "LockBalance": "0", + "StartEpoch": 10101, + "UnlockDuration": 10101 +} +``` + ## Network ### ID diff --git a/venus-shared/api/chain/v1/mock/mock_fullnode.go b/venus-shared/api/chain/v1/mock/mock_fullnode.go index df338f8f99..fbf1a97021 100644 --- a/venus-shared/api/chain/v1/mock/mock_fullnode.go +++ b/venus-shared/api/chain/v1/mock/mock_fullnode.go @@ -3095,6 +3095,21 @@ func (mr *MockFullNodeMockRecorder) StateMinerWorkerAddress(arg0, arg1, arg2 int return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateMinerWorkerAddress", reflect.TypeOf((*MockFullNode)(nil).StateMinerWorkerAddress), arg0, arg1, arg2) } +// StateMsigInfo mocks base method. +func (m *MockFullNode) StateMsigInfo(arg0 context.Context, arg1 address.Address, arg2 types.TipSetKey) (*types.MsigInfo, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "StateMsigInfo", arg0, arg1, arg2) + ret0, _ := ret[0].(*types.MsigInfo) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// StateMsigInfo indicates an expected call of StateMsigInfo. +func (mr *MockFullNodeMockRecorder) StateMsigInfo(arg0, arg1, arg2 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateMsigInfo", reflect.TypeOf((*MockFullNode)(nil).StateMsigInfo), arg0, arg1, arg2) +} + // StateNetworkName mocks base method. func (m *MockFullNode) StateNetworkName(arg0 context.Context) (types0.NetworkName, error) { m.ctrl.T.Helper() diff --git a/venus-shared/api/chain/v1/multisig.go b/venus-shared/api/chain/v1/multisig.go index 6bd38ef704..f38ddbe948 100644 --- a/venus-shared/api/chain/v1/multisig.go +++ b/venus-shared/api/chain/v1/multisig.go @@ -11,6 +11,7 @@ import ( type IMultiSig interface { MsigCreate(ctx context.Context, req uint64, addrs []address.Address, duration abi.ChainEpoch, val types.BigInt, src address.Address, gp types.BigInt) (*types.MessagePrototype, error) //perm:sign + StateMsigInfo(ctx context.Context, addr address.Address, tsk types.TipSetKey) (*types.MsigInfo, error) //perm:read MsigPropose(ctx context.Context, msig address.Address, to address.Address, amt types.BigInt, src address.Address, method uint64, params []byte) (*types.MessagePrototype, error) //perm:sign MsigAddPropose(ctx context.Context, msig address.Address, src address.Address, newAdd address.Address, inc bool) (*types.MessagePrototype, error) //perm:sign MsigAddApprove(ctx context.Context, msig address.Address, src address.Address, txID uint64, proposer address.Address, newAdd address.Address, inc bool) (*types.MessagePrototype, error) //perm:sign diff --git a/venus-shared/api/chain/v1/proxy_gen.go b/venus-shared/api/chain/v1/proxy_gen.go index 85041991d5..3c47c5d139 100644 --- a/venus-shared/api/chain/v1/proxy_gen.go +++ b/venus-shared/api/chain/v1/proxy_gen.go @@ -583,6 +583,7 @@ type IMultiSigStruct struct { MsigSwapApprove func(ctx context.Context, msig address.Address, src address.Address, txID uint64, proposer address.Address, oldAdd address.Address, newAdd address.Address) (*types.MessagePrototype, error) `perm:"sign"` MsigSwapCancel func(ctx context.Context, msig address.Address, src address.Address, txID uint64, oldAdd address.Address, newAdd address.Address) (*types.MessagePrototype, error) `perm:"sign"` MsigSwapPropose func(ctx context.Context, msig address.Address, src address.Address, oldAdd address.Address, newAdd address.Address) (*types.MessagePrototype, error) `perm:"sign"` + StateMsigInfo func(ctx context.Context, addr address.Address, tsk types.TipSetKey) (*types.MsigInfo, error) `perm:"read"` } } @@ -637,6 +638,9 @@ func (s *IMultiSigStruct) MsigSwapCancel(p0 context.Context, p1 address.Address, func (s *IMultiSigStruct) MsigSwapPropose(p0 context.Context, p1 address.Address, p2 address.Address, p3 address.Address, p4 address.Address) (*types.MessagePrototype, error) { return s.Internal.MsigSwapPropose(p0, p1, p2, p3, p4) } +func (s *IMultiSigStruct) StateMsigInfo(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (*types.MsigInfo, error) { + return s.Internal.StateMsigInfo(p0, p1, p2) +} type INetworkStruct struct { Internal struct { diff --git a/venus-shared/types/api_types.go b/venus-shared/types/api_types.go index 8fec02a508..58ecaecca0 100644 --- a/venus-shared/types/api_types.go +++ b/venus-shared/types/api_types.go @@ -145,6 +145,16 @@ var EmptyVesting = MsigVesting{ UnlockDuration: -1, } +type MsigInfo struct { + ApprovalsThreshold uint64 + Signers []address.Address + InitialBalance abi.TokenAmount + CurrentBalance abi.TokenAmount + LockBalance abi.TokenAmount + StartEpoch abi.ChainEpoch + UnlockDuration abi.ChainEpoch +} + // SectorInfo provides information about a sector construction type SectorInfo struct { Size abi.SectorSize From 324bdaf27910cc6c9c7dd32f8278b5807247e402 Mon Sep 17 00:00:00 2001 From: tanlang Date: Tue, 17 Jan 2023 08:57:05 +0000 Subject: [PATCH 18/21] fix: gen-all before merge --- venus-shared/compatible-checks/api-diff.txt | 1 + venus-shared/compatible-checks/api-perm.txt | 1 + 2 files changed, 2 insertions(+) diff --git a/venus-shared/compatible-checks/api-diff.txt b/venus-shared/compatible-checks/api-diff.txt index 2d82f5fd7b..bffab1637d 100644 --- a/venus-shared/compatible-checks/api-diff.txt +++ b/venus-shared/compatible-checks/api-diff.txt @@ -195,6 +195,7 @@ github.com/filecoin-project/venus/venus-shared/api/chain/v1.FullNode <> github.c > StateGetNetworkParams {[func(context.Context) (*types.NetworkParams, error) <> func(context.Context) (*api.NetworkParams, error)] base=func out type: #0 input; nested={[*types.NetworkParams <> *api.NetworkParams] base=pointed type; nested={[types.NetworkParams <> api.NetworkParams] base=struct field; nested={[types.NetworkParams <> api.NetworkParams] base=exported field type: #5 field named ForkUpgradeParams; nested={[types.ForkUpgradeParams <> api.ForkUpgradeParams] base=struct field; nested={[types.ForkUpgradeParams <> api.ForkUpgradeParams] base=exported fields count: 22 != 23; nested=nil}}}}}} + StateMinerSectorSize + StateMinerWorkerAddress + + StateMsigInfo - SyncCheckBad - SyncCheckpoint - SyncIncomingBlocks diff --git a/venus-shared/compatible-checks/api-perm.txt b/venus-shared/compatible-checks/api-perm.txt index f2d6958018..f2fc2433b9 100644 --- a/venus-shared/compatible-checks/api-perm.txt +++ b/venus-shared/compatible-checks/api-perm.txt @@ -75,6 +75,7 @@ v1: github.com/filecoin-project/venus/venus-shared/api/chain/v1 <> github.com/fi - IMessagePool.MpoolPublishByAddr - IMessagePool.MpoolPublishMessage - IMessagePool.MpoolSelects + - IMultiSig.StateMsigInfo > INetwork.NetConnect: admin <> Net.NetConnect: write > INetwork.NetDisconnect: admin <> Net.NetDisconnect: write - INetwork.NetFindProvidersAsync From 047b8c8c1f0ba7a8a09729945ea025898ccac042 Mon Sep 17 00:00:00 2001 From: tanlang Date: Tue, 17 Jan 2023 09:33:34 +0000 Subject: [PATCH 19/21] feat: wrap err and return --- app/submodule/multisig/multisig_api.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/submodule/multisig/multisig_api.go b/app/submodule/multisig/multisig_api.go index 3fa7d5e8e4..83a3834301 100644 --- a/app/submodule/multisig/multisig_api.go +++ b/app/submodule/multisig/multisig_api.go @@ -107,12 +107,12 @@ func (a *multiSig) StateMsigInfo(ctx context.Context, addr address.Address, tsk ret.StartEpoch, err = msas.StartEpoch() if err != nil { - return nil, fmt.Errorf("failed to get start epoch") + return nil, fmt.Errorf("failed to get start epoch: %w", err) } ret.UnlockDuration, err = msas.UnlockDuration() if err != nil { - return nil, fmt.Errorf("failed to get unlocked duration") + return nil, fmt.Errorf("failed to get unlocked duration %w", err) } return ret, nil From 5648650e07ede6a6842c0b5aaf74dca42f62db17 Mon Sep 17 00:00:00 2001 From: tanlang Date: Mon, 30 Jan 2023 08:39:18 +0000 Subject: [PATCH 20/21] feat: rm IMultisig and it's impl and cmd --- app/node/builder.go | 4 - app/node/env.go | 11 +- app/node/node.go | 9 - app/submodule/multisig/multisig_api.go | 481 ------ app/submodule/multisig/multisig_submodule.go | 31 - .../multisig/v0api/multisig_v0api.go | 147 -- cmd/main.go | 2 - cmd/multisig.go | 1438 ----------------- cmd/multisig_helper.go | 65 - venus-shared/api/chain/v0/fullnode.go | 1 - venus-shared/api/chain/v0/method.md | 455 ------ .../api/chain/v0/mock/mock_fullnode.go | 255 --- venus-shared/api/chain/v0/multisig.go | 43 - venus-shared/api/chain/v0/proxy_gen.go | 75 - venus-shared/api/chain/v1/fullnode.go | 1 - venus-shared/api/chain/v1/method.md | 681 -------- .../api/chain/v1/mock/mock_fullnode.go | 270 ---- venus-shared/api/chain/v1/multisig.go | 43 - venus-shared/api/chain/v1/proxy_gen.go | 79 - venus-shared/compatible-checks/api-diff.txt | 35 +- venus-shared/compatible-checks/api-perm.txt | 2 - 21 files changed, 37 insertions(+), 4091 deletions(-) delete mode 100644 app/submodule/multisig/multisig_api.go delete mode 100644 app/submodule/multisig/multisig_submodule.go delete mode 100644 app/submodule/multisig/v0api/multisig_v0api.go delete mode 100644 cmd/multisig.go delete mode 100644 cmd/multisig_helper.go delete mode 100644 venus-shared/api/chain/v0/multisig.go delete mode 100644 venus-shared/api/chain/v1/multisig.go diff --git a/app/node/builder.go b/app/node/builder.go index 2b2cf68184..d77cda36b0 100644 --- a/app/node/builder.go +++ b/app/node/builder.go @@ -21,7 +21,6 @@ import ( "github.com/filecoin-project/venus/app/submodule/market" "github.com/filecoin-project/venus/app/submodule/mining" "github.com/filecoin-project/venus/app/submodule/mpool" - "github.com/filecoin-project/venus/app/submodule/multisig" "github.com/filecoin-project/venus/app/submodule/paych" "github.com/filecoin-project/venus/app/submodule/storagenetworking" "github.com/filecoin-project/venus/app/submodule/syncer" @@ -150,8 +149,6 @@ func (b *Builder) build(ctx context.Context) (*Node, error) { } nd.mining = mining.NewMiningModule(nd.syncer.Stmgr, (*builder)(b), nd.chain, nd.blockstore, nd.network, nd.syncer, *nd.wallet) - nd.multiSig = multisig.NewMultiSigSubmodule(nd.chain.API(), nd.mpool.API(), nd.chain.ChainReader) - mgrps := &paychmgr.ManagerParams{ MPoolAPI: nd.mpool.API(), ChainInfoAPI: nd.chain.API(), @@ -190,7 +187,6 @@ func (b *Builder) build(ctx context.Context) (*Node, error) { nd.paychan, nd.market, nd.common, - nd.multiSig, nd.eth, ) diff --git a/app/node/env.go b/app/node/env.go index 2a02ab0cdf..1e7812f801 100644 --- a/app/node/env.go +++ b/app/node/env.go @@ -6,7 +6,6 @@ import ( cmds "github.com/ipfs/go-ipfs-cmds" "github.com/filecoin-project/venus/app/submodule/storagenetworking" - v0api "github.com/filecoin-project/venus/venus-shared/api/chain/v0" v1api "github.com/filecoin-project/venus/venus-shared/api/chain/v1" ) @@ -23,12 +22,10 @@ type Env struct { MingingAPI v1api.IMining MessagePoolAPI v1api.IMessagePool - MultiSigAPIV0 v0api.IMultiSig - MultiSigAPIV1 v1api.IMultiSig - MarketAPI v1api.IMarket - PaychAPI v1api.IPaychan - CommonAPI v1api.ICommon - EthAPI v1api.IETH + MarketAPI v1api.IMarket + PaychAPI v1api.IPaychan + CommonAPI v1api.ICommon + EthAPI v1api.IETH } var _ cmds.Environment = (*Env)(nil) diff --git a/app/node/node.go b/app/node/node.go index 66841ee4a0..42da2101f6 100644 --- a/app/node/node.go +++ b/app/node/node.go @@ -21,8 +21,6 @@ import ( "github.com/filecoin-project/venus/app/submodule/market" "github.com/filecoin-project/venus/app/submodule/mining" "github.com/filecoin-project/venus/app/submodule/mpool" - "github.com/filecoin-project/venus/app/submodule/multisig" - apiwrapper "github.com/filecoin-project/venus/app/submodule/multisig/v0api" network2 "github.com/filecoin-project/venus/app/submodule/network" "github.com/filecoin-project/venus/app/submodule/paych" "github.com/filecoin-project/venus/app/submodule/storagenetworking" @@ -87,7 +85,6 @@ type Node struct { // Supporting services // wallet *wallet.WalletSubmodule - multiSig *multisig.MultiSigSubmodule mpool *mpool.MessagePoolSubmodule storageNetworking *storagenetworking.StorageNetworkingSubmodule @@ -124,10 +121,6 @@ func (node *Node) Wallet() *wallet.WalletSubmodule { return node.wallet } -func (node *Node) MultiSig() *multisig.MultiSigSubmodule { - return node.multiSig -} - func (node *Node) Network() *network2.NetworkSubmodule { return node.network } @@ -370,8 +363,6 @@ func (node *Node) createServerEnv(ctx context.Context) *Env { MessagePoolAPI: node.mpool.API(), PaychAPI: node.paychan.API(), MarketAPI: node.market.API(), - MultiSigAPIV0: &apiwrapper.WrapperV1IMultiSig{IMultiSig: node.multiSig.API(), IMessagePool: node.mpool.API()}, - MultiSigAPIV1: node.multiSig.API(), CommonAPI: node.common, EthAPI: node.eth.API(), } diff --git a/app/submodule/multisig/multisig_api.go b/app/submodule/multisig/multisig_api.go deleted file mode 100644 index 83a3834301..0000000000 --- a/app/submodule/multisig/multisig_api.go +++ /dev/null @@ -1,481 +0,0 @@ -package multisig - -import ( - "context" - "fmt" - - "github.com/filecoin-project/go-address" - "github.com/filecoin-project/go-state-types/abi" - actorstypes "github.com/filecoin-project/go-state-types/actors" - "github.com/filecoin-project/go-state-types/big" - multisig2 "github.com/filecoin-project/specs-actors/v2/actors/builtin/multisig" - - "github.com/filecoin-project/venus/venus-shared/actors" - "github.com/filecoin-project/venus/venus-shared/actors/builtin/multisig" - v1api "github.com/filecoin-project/venus/venus-shared/api/chain/v1" - "github.com/filecoin-project/venus/venus-shared/types" -) - -var _ v1api.IMultiSig = &multiSig{} - -type multiSig struct { - *MultiSigSubmodule -} - -type MsigProposeResponse int - -const ( - MsigApprove MsigProposeResponse = iota - MsigCancel -) - -func newMultiSig(m *MultiSigSubmodule) v1api.IMultiSig { - return &multiSig{ - MultiSigSubmodule: m, - } -} - -func (a *multiSig) messageBuilder(ctx context.Context, from address.Address) (multisig.MessageBuilder, error) { - nver, err := a.state.StateNetworkVersion(ctx, types.EmptyTSK) - if err != nil { - return nil, err - } - aver, err := actorstypes.VersionForNetwork(nver) - if err != nil { - return nil, err - } - return multisig.Message(aver, from), nil -} - -// MsigCreate creates a multisig wallet -// It takes the following params: , , -// , , -func (a *multiSig) MsigCreate(ctx context.Context, req uint64, addrs []address.Address, duration abi.ChainEpoch, val types.BigInt, src address.Address, gp types.BigInt) (*types.MessagePrototype, error) { - mb, err := a.messageBuilder(ctx, src) - if err != nil { - return nil, err - } - - msg, err := mb.Create(addrs, req, 0, duration, val) - if err != nil { - return nil, err - } - - return &types.MessagePrototype{ - Message: *msg, - ValidNonce: false, - }, nil -} - -func (a *multiSig) StateMsigInfo(ctx context.Context, addr address.Address, tsk types.TipSetKey) (*types.MsigInfo, error) { - ret := &types.MsigInfo{} - - ts, err := a.state.ChainGetTipSet(ctx, tsk) - if err != nil { - return nil, err - } - - act, err := a.state.StateGetActor(ctx, addr, tsk) - if err != nil { - return nil, fmt.Errorf("failed to load multisig actor: %w", err) - } - msas, err := multisig.Load(a.store.Store(ctx), act) - if err != nil { - return nil, fmt.Errorf("failed to load multisig actor state: %w", err) - } - - ret.ApprovalsThreshold, err = msas.Threshold() - if err != nil { - return nil, fmt.Errorf("failed to get threshold: %w", err) - } - - ret.Signers, err = msas.Signers() - if err != nil { - return nil, fmt.Errorf("failed to get signers: %w", err) - } - - ret.InitialBalance, err = msas.InitialBalance() - if err != nil { - return nil, fmt.Errorf("failed to get initial balance: %w", err) - } - - ret.CurrentBalance = act.Balance - ret.LockBalance, err = msas.LockedBalance(ts.Height()) - if err != nil { - return nil, fmt.Errorf("failed to get locked balance: %w", err) - } - - ret.StartEpoch, err = msas.StartEpoch() - if err != nil { - return nil, fmt.Errorf("failed to get start epoch: %w", err) - } - - ret.UnlockDuration, err = msas.UnlockDuration() - if err != nil { - return nil, fmt.Errorf("failed to get unlocked duration %w", err) - } - - return ret, nil -} - -func (a *multiSig) MsigPropose(ctx context.Context, msig address.Address, to address.Address, amt types.BigInt, src address.Address, method uint64, params []byte) (*types.MessagePrototype, error) { - mb, err := a.messageBuilder(ctx, src) - if err != nil { - return nil, err - } - - msg, err := mb.Propose(msig, to, amt, abi.MethodNum(method), params) - if err != nil { - return nil, fmt.Errorf("failed to create proposal: %w", err) - } - - return &types.MessagePrototype{ - Message: *msg, - ValidNonce: false, - }, nil -} - -func (a *multiSig) MsigAddPropose(ctx context.Context, msig address.Address, src address.Address, newAdd address.Address, inc bool) (*types.MessagePrototype, error) { - enc, actErr := serializeAddParams(newAdd, inc) - if actErr != nil { - return nil, actErr - } - - return a.MsigPropose(ctx, msig, msig, big.Zero(), src, uint64(multisig.Methods.AddSigner), enc) -} - -func (a *multiSig) MsigAddApprove(ctx context.Context, msig address.Address, src address.Address, txID uint64, proposer address.Address, newAdd address.Address, inc bool) (*types.MessagePrototype, error) { - enc, actErr := serializeAddParams(newAdd, inc) - if actErr != nil { - return nil, actErr - } - - return a.MsigApproveTxnHash(ctx, msig, txID, proposer, msig, big.Zero(), src, uint64(multisig.Methods.AddSigner), enc) -} - -// MsigAddApprove approves a previously proposed AddSigner message -// It takes the following params: , , , -// , , -func (a *multiSig) MsigAddCancel(ctx context.Context, msig address.Address, src address.Address, txID uint64, newAdd address.Address, inc bool) (*types.MessagePrototype, error) { - enc, actErr := serializeAddParams(newAdd, inc) - if actErr != nil { - return nil, actErr - } - - return a.MsigCancelTxnHash(ctx, msig, txID, msig, big.Zero(), src, uint64(multisig.Methods.AddSigner), enc) -} - -func (a *multiSig) MsigCancelTxnHash(ctx context.Context, msig address.Address, txID uint64, to address.Address, amt types.BigInt, src address.Address, method uint64, params []byte) (*types.MessagePrototype, error) { - return a.msigApproveOrCancelTxnHash(ctx, MsigCancel, msig, txID, src, to, amt, src, method, params) -} - -// MsigSwapPropose proposes swapping 2 signers in the multisig -// It takes the following params: , , -// , -func (a *multiSig) MsigSwapPropose(ctx context.Context, msig address.Address, src address.Address, oldAdd address.Address, newAdd address.Address) (*types.MessagePrototype, error) { - enc, actErr := serializeSwapParams(oldAdd, newAdd) - if actErr != nil { - return nil, actErr - } - - return a.MsigPropose(ctx, msig, msig, big.Zero(), src, uint64(multisig.Methods.SwapSigner), enc) -} - -// MsigSwapApprove approves a previously proposed SwapSigner -// It takes the following params: , , , -// , , -func (a *multiSig) MsigSwapApprove(ctx context.Context, msig address.Address, src address.Address, txID uint64, proposer address.Address, oldAdd address.Address, newAdd address.Address) (*types.MessagePrototype, error) { - enc, actErr := serializeSwapParams(oldAdd, newAdd) - if actErr != nil { - return nil, actErr - } - - return a.MsigApproveTxnHash(ctx, msig, txID, proposer, msig, big.Zero(), src, uint64(multisig.Methods.SwapSigner), enc) -} - -func (a *multiSig) MsigSwapCancel(ctx context.Context, msig address.Address, src address.Address, txID uint64, oldAdd address.Address, newAdd address.Address) (*types.MessagePrototype, error) { - enc, actErr := serializeSwapParams(oldAdd, newAdd) - if actErr != nil { - return nil, actErr - } - - return a.MsigCancelTxnHash(ctx, msig, txID, msig, big.Zero(), src, uint64(multisig.Methods.SwapSigner), enc) -} - -// MsigSwapCancel cancels a previously proposed SwapSigner message -// It takes the following params: , , , -// , -func (a *multiSig) MsigApprove(ctx context.Context, msig address.Address, txID uint64, src address.Address) (*types.MessagePrototype, error) { - return a.msigApproveOrCancelSimple(ctx, MsigApprove, msig, txID, src) -} - -// MsigApproveTxnHash approves a previously-proposed multisig message, specified -// using both transaction ID and a hash of the parameters used in the -// proposal. This method of approval can be used to ensure you only approve -// exactly the transaction you think you are. -// It takes the following params: , , , , , -// , , -func (a *multiSig) MsigApproveTxnHash(ctx context.Context, msig address.Address, txID uint64, proposer address.Address, to address.Address, amt types.BigInt, src address.Address, method uint64, params []byte) (*types.MessagePrototype, error) { - return a.msigApproveOrCancelTxnHash(ctx, MsigApprove, msig, txID, proposer, to, amt, src, method, params) -} - -// MsigCancel cancels a previously-proposed multisig message -// It takes the following params: , , , , -// , , -func (a *multiSig) MsigCancel(ctx context.Context, msig address.Address, txID uint64, src address.Address) (*types.MessagePrototype, error) { - return a.msigApproveOrCancelSimple(ctx, MsigCancel, msig, txID, src) -} - -// MsigRemoveSigner proposes the removal of a signer from the multisig. -// It accepts the multisig to make the change on, the proposer address to -// send the message from, the address to be removed, and a boolean -// indicating whether or not the signing threshold should be lowered by one -// along with the address removal. -func (a *multiSig) MsigRemoveSigner(ctx context.Context, msig address.Address, proposer address.Address, toRemove address.Address, decrease bool) (*types.MessagePrototype, error) { - enc, actErr := serializeRemoveParams(toRemove, decrease) - if actErr != nil { - return nil, actErr - } - - return a.MsigPropose(ctx, msig, msig, types.NewInt(0), proposer, uint64(multisig.Methods.RemoveSigner), enc) -} - -// MsigGetVested returns the amount of FIL that vested in a multisig in a certain period. -// It takes the following params: , , -func (a *multiSig) MsigGetVested(ctx context.Context, addr address.Address, start types.TipSetKey, end types.TipSetKey) (types.BigInt, error) { - startTS, err := a.state.ChainGetTipSet(ctx, start) - if err != nil { - return types.EmptyInt, fmt.Errorf("loading start tipset %s: %w", start, err) - } - - endTS, err := a.state.ChainGetTipSet(ctx, end) - if err != nil { - return types.EmptyInt, fmt.Errorf("loading end tipset %s: %w", end, err) - } - - if startTS.Height() > endTS.Height() { - return types.EmptyInt, fmt.Errorf("start tipset %d is after end tipset %d", startTS.Height(), endTS.Height()) - } else if startTS.Height() == endTS.Height() { - return big.Zero(), nil - } - - // LoadActor(ctx, addr, endTs) - act, err := a.state.GetParentStateRootActor(ctx, endTS, addr) - if err != nil { - return types.EmptyInt, fmt.Errorf("failed to load multisig actor at end epoch: %w", err) - } - - msas, err := multisig.Load(a.store.Store(ctx), act) - if err != nil { - return types.EmptyInt, fmt.Errorf("failed to load multisig actor state: %w", err) - } - - startLk, err := msas.LockedBalance(startTS.Height()) - if err != nil { - return types.EmptyInt, fmt.Errorf("failed to compute locked balance at start height: %w", err) - } - - endLk, err := msas.LockedBalance(endTS.Height()) - if err != nil { - return types.EmptyInt, fmt.Errorf("failed to compute locked balance at end height: %w", err) - } - - return types.BigSub(startLk, endLk), nil -} - -func (a *multiSig) msigApproveOrCancelSimple(ctx context.Context, operation MsigProposeResponse, msig address.Address, txID uint64, src address.Address) (*types.MessagePrototype, error) { - if msig == address.Undef { - return nil, fmt.Errorf("must provide multisig address") - } - - if src == address.Undef { - return nil, fmt.Errorf("must provide source address") - } - - mb, err := a.messageBuilder(ctx, src) - if err != nil { - return nil, err - } - - var msg *types.Message - switch operation { - case MsigApprove: - msg, err = mb.Approve(msig, txID, nil) - case MsigCancel: - msg, err = mb.Cancel(msig, txID, nil) - default: - return nil, fmt.Errorf("invalid operation for msigApproveOrCancel") - } - if err != nil { - return nil, err - } - - return &types.MessagePrototype{Message: *msg, ValidNonce: false}, nil -} - -func (a *multiSig) msigApproveOrCancelTxnHash(ctx context.Context, operation MsigProposeResponse, msig address.Address, txID uint64, proposer address.Address, to address.Address, amt types.BigInt, src address.Address, method uint64, params []byte) (*types.MessagePrototype, error) { - if msig == address.Undef { - return nil, fmt.Errorf("must provide multisig address") - } - - if src == address.Undef { - return nil, fmt.Errorf("must provide source address") - } - - if proposer.Protocol() != address.ID { - proposerID, err := a.state.StateLookupID(ctx, proposer, types.EmptyTSK) - if err != nil { - return nil, err - } - proposer = proposerID - } - - p := multisig.ProposalHashData{ - Requester: proposer, - To: to, - Value: amt, - Method: abi.MethodNum(method), - Params: params, - } - - mb, err := a.messageBuilder(ctx, src) - if err != nil { - return nil, err - } - - var msg *types.Message - switch operation { - case MsigApprove: - msg, err = mb.Approve(msig, txID, &p) - case MsigCancel: - msg, err = mb.Cancel(msig, txID, &p) - default: - return nil, fmt.Errorf("invalid operation for msigApproveOrCancel") - } - if err != nil { - return nil, err - } - - return &types.MessagePrototype{ - Message: *msg, - ValidNonce: false, - }, nil -} - -func (a *multiSig) MsigGetAvailableBalance(ctx context.Context, addr address.Address, tsk types.TipSetKey) (types.BigInt, error) { - ts, err := a.state.ChainGetTipSet(ctx, tsk) - if err != nil { - return types.EmptyInt, fmt.Errorf("failed to load tipset: %w", err) - } - act, err := a.state.StateGetActor(ctx, addr, tsk) - if err != nil { - return types.EmptyInt, fmt.Errorf("failed to load multisig actor: %w", err) - } - msas, err := multisig.Load(a.store.Store(ctx), act) - if err != nil { - return types.EmptyInt, fmt.Errorf("failed to load multisig actor state: %w", err) - } - locked, err := msas.LockedBalance(ts.Height()) - if err != nil { - return types.EmptyInt, fmt.Errorf("failed to compute locked multisig balance: %w", err) - } - return types.BigSub(act.Balance, locked), nil -} - -func (a *multiSig) MsigGetVestingSchedule(ctx context.Context, addr address.Address, tsk types.TipSetKey) (types.MsigVesting, error) { - act, err := a.state.StateGetActor(ctx, addr, tsk) - if err != nil { - return types.EmptyVesting, fmt.Errorf("failed to load multisig actor: %w", err) - } - - msas, err := multisig.Load(a.store.Store(ctx), act) - if err != nil { - return types.EmptyVesting, fmt.Errorf("failed to load multisig actor state: %w", err) - } - - ib, err := msas.InitialBalance() - if err != nil { - return types.EmptyVesting, fmt.Errorf("failed to load multisig initial balance: %w", err) - } - - se, err := msas.StartEpoch() - if err != nil { - return types.EmptyVesting, fmt.Errorf("failed to load multisig start epoch: %w", err) - } - - ud, err := msas.UnlockDuration() - if err != nil { - return types.EmptyVesting, fmt.Errorf("failed to load multisig unlock duration: %w", err) - } - - return types.MsigVesting{ - InitialBalance: ib, - StartEpoch: se, - UnlockDuration: ud, - }, nil -} - -func (a *multiSig) MsigGetPending(ctx context.Context, addr address.Address, tsk types.TipSetKey) ([]*types.MsigTransaction, error) { - act, err := a.state.StateGetActor(ctx, addr, tsk) - if err != nil { - return nil, fmt.Errorf("failed to load multisig actor: %w", err) - } - msas, err := multisig.Load(a.store.Store(ctx), act) - if err != nil { - return nil, fmt.Errorf("failed to load multisig actor state: %w", err) - } - - var out = []*types.MsigTransaction{} - if err := msas.ForEachPendingTxn(func(id int64, txn multisig.Transaction) error { - out = append(out, &types.MsigTransaction{ - ID: id, - To: txn.To, - Value: txn.Value, - Method: txn.Method, - Params: txn.Params, - - Approved: txn.Approved, - }) - return nil - }); err != nil { - return nil, err - } - - return out, nil -} - -func serializeAddParams(new address.Address, inc bool) ([]byte, error) { - enc, actErr := actors.SerializeParams(&multisig2.AddSignerParams{ - Signer: new, - Increase: inc, - }) - if actErr != nil { - return nil, actErr - } - - return enc, nil -} - -func serializeSwapParams(old address.Address, new address.Address) ([]byte, error) { - enc, actErr := actors.SerializeParams(&multisig2.SwapSignerParams{ - From: old, - To: new, - }) - if actErr != nil { - return nil, actErr - } - - return enc, nil -} - -func serializeRemoveParams(rem address.Address, dec bool) ([]byte, error) { - enc, actErr := actors.SerializeParams(&multisig2.RemoveSignerParams{ - Signer: rem, - Decrease: dec, - }) - if actErr != nil { - return nil, actErr - } - - return enc, nil -} diff --git a/app/submodule/multisig/multisig_submodule.go b/app/submodule/multisig/multisig_submodule.go deleted file mode 100644 index 398fed72c3..0000000000 --- a/app/submodule/multisig/multisig_submodule.go +++ /dev/null @@ -1,31 +0,0 @@ -package multisig - -import ( - apiwrapper "github.com/filecoin-project/venus/app/submodule/multisig/v0api" - chain2 "github.com/filecoin-project/venus/pkg/chain" - v0api "github.com/filecoin-project/venus/venus-shared/api/chain/v0" - v1api "github.com/filecoin-project/venus/venus-shared/api/chain/v1" -) - -type MultiSigSubmodule struct { //nolint - state v1api.IChain - mpool v1api.IMessagePool - store *chain2.Store -} - -// MessagingSubmodule enhances the `Node` with multisig capabilities. -func NewMultiSigSubmodule(chainState v1api.IChain, msgPool v1api.IMessagePool, store *chain2.Store) *MultiSigSubmodule { - return &MultiSigSubmodule{state: chainState, mpool: msgPool, store: store} -} - -// API create a new multisig implement -func (sb *MultiSigSubmodule) API() v1api.IMultiSig { - return newMultiSig(sb) -} - -func (sb *MultiSigSubmodule) V0API() v0api.IMultiSig { - return &apiwrapper.WrapperV1IMultiSig{ - IMultiSig: newMultiSig(sb), - IMessagePool: sb.mpool, - } -} diff --git a/app/submodule/multisig/v0api/multisig_v0api.go b/app/submodule/multisig/v0api/multisig_v0api.go deleted file mode 100644 index 9189ee3744..0000000000 --- a/app/submodule/multisig/v0api/multisig_v0api.go +++ /dev/null @@ -1,147 +0,0 @@ -package v0api - -import ( - "context" - "fmt" - - v0api "github.com/filecoin-project/venus/venus-shared/api/chain/v0" - v1api "github.com/filecoin-project/venus/venus-shared/api/chain/v1" - "github.com/filecoin-project/venus/venus-shared/types" - - "github.com/filecoin-project/go-address" - "github.com/filecoin-project/go-state-types/abi" - "github.com/ipfs/go-cid" -) - -type WrapperV1IMultiSig struct { - v1api.IMultiSig - v1api.IMessagePool -} - -var _ v0api.IMultiSig = (*WrapperV1IMultiSig)(nil) - -func (a *WrapperV1IMultiSig) executePrototype(ctx context.Context, p *types.MessagePrototype) (cid.Cid, error) { - sm, err := a.IMessagePool.MpoolPushMessage(ctx, &p.Message, nil) - if err != nil { - return cid.Undef, fmt.Errorf("pushing message: %w", err) - } - - return sm.Cid(), nil -} - -func (a *WrapperV1IMultiSig) MsigCreate(ctx context.Context, req uint64, addrs []address.Address, duration abi.ChainEpoch, val types.BigInt, src address.Address, gp types.BigInt) (cid.Cid, error) { - p, err := a.IMultiSig.MsigCreate(ctx, req, addrs, duration, val, src, gp) - if err != nil { - return cid.Undef, fmt.Errorf("creating prototype: %w", err) - } - - return a.executePrototype(ctx, p) -} - -func (a *WrapperV1IMultiSig) MsigPropose(ctx context.Context, msig address.Address, to address.Address, amt types.BigInt, src address.Address, method uint64, params []byte) (cid.Cid, error) { - p, err := a.IMultiSig.MsigPropose(ctx, msig, to, amt, src, method, params) - if err != nil { - return cid.Undef, fmt.Errorf("creating prototype: %w", err) - } - - return a.executePrototype(ctx, p) -} - -func (a *WrapperV1IMultiSig) MsigApprove(ctx context.Context, msig address.Address, txID uint64, src address.Address) (cid.Cid, error) { - p, err := a.IMultiSig.MsigApprove(ctx, msig, txID, src) - if err != nil { - return cid.Undef, fmt.Errorf("creating prototype: %w", err) - } - - return a.executePrototype(ctx, p) -} - -func (a *WrapperV1IMultiSig) MsigApproveTxnHash(ctx context.Context, msig address.Address, txID uint64, proposer address.Address, to address.Address, amt types.BigInt, src address.Address, method uint64, params []byte) (cid.Cid, error) { - p, err := a.IMultiSig.MsigApproveTxnHash(ctx, msig, txID, proposer, to, amt, src, method, params) - if err != nil { - return cid.Undef, fmt.Errorf("creating prototype: %w", err) - } - - return a.executePrototype(ctx, p) -} - -func (a *WrapperV1IMultiSig) MsigCancel(ctx context.Context, msig address.Address, txID uint64, to address.Address, amt types.BigInt, src address.Address, method uint64, params []byte) (cid.Cid, error) { - p, err := a.IMultiSig.MsigCancelTxnHash(ctx, msig, txID, to, amt, src, method, params) - if err != nil { - return cid.Undef, fmt.Errorf("creating prototype: %w", err) - } - - return a.executePrototype(ctx, p) -} - -func (a *WrapperV1IMultiSig) MsigCancelTxnHash(ctx context.Context, msig address.Address, txID uint64, to address.Address, amt types.BigInt, src address.Address, method uint64, params []byte) (cid.Cid, error) { - p, err := a.IMultiSig.MsigCancelTxnHash(ctx, msig, txID, to, amt, src, method, params) - if err != nil { - return cid.Undef, fmt.Errorf("creating prototype: %w", err) - } - - return a.executePrototype(ctx, p) -} - -func (a *WrapperV1IMultiSig) MsigAddPropose(ctx context.Context, msig address.Address, src address.Address, newAdd address.Address, inc bool) (cid.Cid, error) { - p, err := a.IMultiSig.MsigAddPropose(ctx, msig, src, newAdd, inc) - if err != nil { - return cid.Undef, fmt.Errorf("creating prototype: %w", err) - } - - return a.executePrototype(ctx, p) -} - -func (a *WrapperV1IMultiSig) MsigAddApprove(ctx context.Context, msig address.Address, src address.Address, txID uint64, proposer address.Address, newAdd address.Address, inc bool) (cid.Cid, error) { - p, err := a.IMultiSig.MsigAddApprove(ctx, msig, src, txID, proposer, newAdd, inc) - if err != nil { - return cid.Undef, fmt.Errorf("creating prototype: %w", err) - } - - return a.executePrototype(ctx, p) -} - -func (a *WrapperV1IMultiSig) MsigAddCancel(ctx context.Context, msig address.Address, src address.Address, txID uint64, newAdd address.Address, inc bool) (cid.Cid, error) { - p, err := a.IMultiSig.MsigAddCancel(ctx, msig, src, txID, newAdd, inc) - if err != nil { - return cid.Undef, fmt.Errorf("creating prototype: %w", err) - } - - return a.executePrototype(ctx, p) -} - -func (a *WrapperV1IMultiSig) MsigSwapPropose(ctx context.Context, msig address.Address, src address.Address, oldAdd address.Address, newAdd address.Address) (cid.Cid, error) { - p, err := a.IMultiSig.MsigSwapPropose(ctx, msig, src, oldAdd, newAdd) - if err != nil { - return cid.Undef, fmt.Errorf("creating prototype: %w", err) - } - - return a.executePrototype(ctx, p) -} - -func (a *WrapperV1IMultiSig) MsigSwapApprove(ctx context.Context, msig address.Address, src address.Address, txID uint64, proposer address.Address, oldAdd address.Address, newAdd address.Address) (cid.Cid, error) { - p, err := a.IMultiSig.MsigSwapApprove(ctx, msig, src, txID, proposer, oldAdd, newAdd) - if err != nil { - return cid.Undef, fmt.Errorf("creating prototype: %w", err) - } - - return a.executePrototype(ctx, p) -} - -func (a *WrapperV1IMultiSig) MsigSwapCancel(ctx context.Context, msig address.Address, src address.Address, txID uint64, oldAdd address.Address, newAdd address.Address) (cid.Cid, error) { - p, err := a.IMultiSig.MsigSwapCancel(ctx, msig, src, txID, oldAdd, newAdd) - if err != nil { - return cid.Undef, fmt.Errorf("creating prototype: %w", err) - } - - return a.executePrototype(ctx, p) -} - -func (a *WrapperV1IMultiSig) MsigRemoveSigner(ctx context.Context, msig address.Address, proposer address.Address, toRemove address.Address, decrease bool) (cid.Cid, error) { - p, err := a.IMultiSig.MsigRemoveSigner(ctx, msig, proposer, toRemove, decrease) - if err != nil { - return cid.Undef, fmt.Errorf("creating prototype: %w", err) - } - - return a.executePrototype(ctx, p) -} diff --git a/cmd/main.go b/cmd/main.go index 01cb832281..d492674e74 100644 --- a/cmd/main.go +++ b/cmd/main.go @@ -98,7 +98,6 @@ var RootCmd = &cmds.Command{ START RUNNING VENUS daemon - Start a venus daemon process wallet - Manage wallet - msig - Interact with a multisig wallet info - Print node info VIEW DATA STRUCTURES @@ -176,7 +175,6 @@ var rootSubcmdsDaemon = map[string]*cmds.Command{ "state": stateCmd, "miner": minerCmd, "paych": paychCmd, - "msig": multisigCmd, "info": infoCmd, "evm": evmCmd, } diff --git a/cmd/multisig.go b/cmd/multisig.go deleted file mode 100644 index 64c3af3bdb..0000000000 --- a/cmd/multisig.go +++ /dev/null @@ -1,1438 +0,0 @@ -package cmd - -import ( - "bytes" - "encoding/hex" - "encoding/json" - "fmt" - "reflect" - "sort" - "strconv" - "strings" - "text/tabwriter" - - init2 "github.com/filecoin-project/specs-actors/v2/actors/builtin/init" - msig2 "github.com/filecoin-project/specs-actors/v2/actors/builtin/multisig" - - "github.com/filecoin-project/go-address" - "github.com/filecoin-project/go-state-types/abi" - "github.com/filecoin-project/go-state-types/big" - "github.com/filecoin-project/venus/app/node" - "github.com/filecoin-project/venus/pkg/constants" - "github.com/filecoin-project/venus/venus-shared/actors" - "github.com/filecoin-project/venus/venus-shared/actors/adt" - "github.com/filecoin-project/venus/venus-shared/actors/builtin" - "github.com/filecoin-project/venus/venus-shared/actors/builtin/multisig" - "github.com/filecoin-project/venus/venus-shared/blockstore" - "github.com/filecoin-project/venus/venus-shared/types" - "github.com/filecoin-project/venus/venus-shared/utils" - "github.com/ipfs/go-cid" - cmds "github.com/ipfs/go-ipfs-cmds" - cbor "github.com/ipfs/go-ipld-cbor" - cbg "github.com/whyrusleeping/cbor-gen" -) - -var multisigCmd = &cmds.Command{ - Helptext: cmds.HelpText{ - Tagline: "Interact with a multisig wallet", - }, - Options: []cmds.Option{ - cmds.Uint64Option("number of block confirmations to wait for").WithDefault(constants.MessageConfidence), - }, - Subcommands: map[string]*cmds.Command{ - "create": msigCreateCmd, - "inspect": msigInspectCmd, - "propose": msigProposeCmd, - "propose-remove": msigRemoveProposeCmd, - "approve": msigApproveCmd, - "add-propose": msigAddProposeCmd, - "add-approve": msigAddApproveCmd, - "cancel": msigCancelCmd, - "add-cancel": msigAddCancelCmd, - "swap-propose": msigSwapProposeCmd, - "swap-approve": msigSwapApproveCmd, - "swap-cancel": msigSwapCancelCmd, - "lock-propose": msigLockProposeCmd, - "lock-approve": msigLockApproveCmd, - "lock-cancel": msigLockCancelCmd, - "vested": msigVestedCmd, - "propose-threshold": msigProposeThresholdCmd, - }, -} - -var msigCreateCmd = &cmds.Command{ - Helptext: cmds.HelpText{ - Tagline: "Create a new multisig wallet", - Usage: "[address1 address2 ...]", - }, - Options: []cmds.Option{ - cmds.Uint64Option("required", "number of required approvals (uses number of signers provided if omitted)").WithDefault(uint64(0)), - cmds.StringOption("value", "initial funds to give to multisig").WithDefault("0"), - cmds.Uint64Option("duration", "length of the period over which funds unlock").WithDefault(uint64(0)), - cmds.StringOption("from", "account to send the create message from"), - }, - Arguments: []cmds.Argument{ - cmds.StringArg("addresses", true, false, "approving addresses,Ps:'addr1 addr2 ...'"), - }, - Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { - if len(req.Arguments) < 1 { - return fmt.Errorf("multisigs must have at least one signer") - } - addrStr := req.Arguments[0] - addrArr := strings.Split(addrStr, ",") - var addrs []address.Address - for _, a := range addrArr { - addr, err := address.NewFromString(a) - if err != nil { - return err - } - addrs = append(addrs, addr) - } - - // get the address we're going to use to create the multisig (can be one of the above, as long as they have funds) - var sendAddr address.Address - send := reqStringOption(req, "from") - if send == "" { - defaddr, err := env.(*node.Env).WalletAPI.WalletDefaultAddress(req.Context) - if err != nil { - return err - } - sendAddr = defaddr - } else { - addr, err := address.NewFromString(send) - if err != nil { - return err - } - sendAddr = addr - } - val := reqStringOption(req, "value") - filval, err := types.ParseFIL(val) - if err != nil { - return err - } - intVal := types.BigInt(filval) - - required := reqUint64Option(req, "required") - - duration := reqUint64Option(req, "duration") - d := abi.ChainEpoch(duration) - gp := types.NewInt(1) - - msgCid, err := env.(*node.Env).MultiSigAPIV0.MsigCreate(req.Context, required, addrs, d, intVal, sendAddr, gp) - if err != nil { - return err - } - // wait for it to get mined into a block - wait, err := env.(*node.Env).ChainAPI.StateWaitMsg(req.Context, msgCid, reqConfidence(req), constants.LookbackNoLimit, true) - if err != nil { - return err - } - // check it executed successfully - if wait.Receipt.ExitCode != 0 { - return err - } - // get address of newly created miner - var execreturn init2.ExecReturn - if err := execreturn.UnmarshalCBOR(bytes.NewReader(wait.Receipt.Return)); err != nil { - return err - } - // TODO: maybe register this somewhere - return re.Emit(fmt.Sprintf("Created new multisig: %s %s", execreturn.IDAddress, execreturn.RobustAddress)) - }, -} - -var msigInspectCmd = &cmds.Command{ - Helptext: cmds.HelpText{ - Tagline: "Inspect a multisig wallet", - Usage: "[address]", - }, - Options: []cmds.Option{ - cmds.BoolOption("vesting", "Include vesting details)"), - cmds.BoolOption("decode-params", "Decode parameters of transaction proposals"), - }, - Arguments: []cmds.Argument{ - cmds.StringArg("address", true, false, "a multiSig wallet address"), - }, - Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { - if len(req.Arguments) == 0 { - return fmt.Errorf("must specify address of multisig to inspect") - } - ctx := req.Context - store := adt.WrapStore(ctx, cbor.NewCborStore(blockstore.NewAPIBlockstore(env.(*node.Env).BlockStoreAPI))) - // store := env.(*node.Env).ChainAPI.ChainReader.Store(req.Context) - maddr, err := address.NewFromString(req.Arguments[0]) - if err != nil { - return err - } - - if err := utils.LoadBuiltinActors(ctx, env.(*node.Env).ChainAPI); err != nil { - return err - } - - head, err := env.(*node.Env).ChainAPI.ChainHead(req.Context) - if err != nil { - return err - } - - act, err := env.(*node.Env).ChainAPI.StateGetActor(req.Context, maddr, head.Key()) - if err != nil { - return err - } - - ownId, err := env.(*node.Env).ChainAPI.StateLookupID(req.Context, maddr, types.EmptyTSK) //nolint - if err != nil { - return err - } - mstate, err := multisig.Load(store, act) - if err != nil { - return err - } - locked, err := mstate.LockedBalance(head.Height()) - if err != nil { - return err - } - cliw := new(bytes.Buffer) - fmt.Fprintf(cliw, "Balance: %s\n", types.FIL(act.Balance)) - fmt.Fprintf(cliw, "Spendable: %s\n", types.FIL(types.BigSub(act.Balance, locked))) - - vesting := reqBoolOption(req, "vesting") - if vesting { - ib, err := mstate.InitialBalance() - if err != nil { - return err - } - fmt.Fprintf(cliw, "InitialBalance: %s\n", types.FIL(ib)) - se, err := mstate.StartEpoch() - if err != nil { - return err - } - fmt.Fprintf(cliw, "StartEpoch: %d\n", se) - ud, err := mstate.UnlockDuration() - if err != nil { - return err - } - fmt.Fprintf(cliw, "UnlockDuration: %d\n", ud) - } - - signers, err := mstate.Signers() - if err != nil { - return err - } - threshold, err := mstate.Threshold() - if err != nil { - return err - } - fmt.Fprintf(cliw, "Threshold: %d / %d\n", threshold, len(signers)) - fmt.Fprintln(cliw, "Signers:") - - signerTable := tabwriter.NewWriter(cliw, 8, 4, 2, ' ', 0) - fmt.Fprintf(signerTable, "ID\tAddress\n") - for _, s := range signers { - signerActor, err := env.(*node.Env).ChainAPI.StateAccountKey(req.Context, s, types.EmptyTSK) - if err != nil { - fmt.Fprintf(signerTable, "%s\t%s\n", s, "N/A") - } else { - fmt.Fprintf(signerTable, "%s\t%s\n", s, signerActor) - } - } - if err := signerTable.Flush(); err != nil { - return fmt.Errorf("flushing output: %+v", err) - } - - pending := make(map[int64]multisig.Transaction) - if err := mstate.ForEachPendingTxn(func(id int64, txn multisig.Transaction) error { - pending[id] = txn - return nil - }); err != nil { - return fmt.Errorf("reading pending transactions: %w", err) - } - - decParams := reqBoolOption(req, "decode-params") - fmt.Fprintln(cliw, "Transactions: ", len(pending)) - if len(pending) > 0 { - var txids []int64 - for txid := range pending { - txids = append(txids, txid) - } - sort.Slice(txids, func(i, j int) bool { - return txids[i] < txids[j] - }) - - w := tabwriter.NewWriter(cliw, 8, 4, 2, ' ', 0) - fmt.Fprintf(w, "ID\tState\tApprovals\tTo\tValue\tMethod\tParams\n") - for _, txid := range txids { - tx := pending[txid] - target := tx.To.String() - if tx.To == ownId { - target += " (self)" - } - targAct, err := env.(*node.Env).ChainAPI.StateGetActor(req.Context, tx.To, types.EmptyTSK) - paramStr := fmt.Sprintf("%x", tx.Params) - - if err != nil { - if tx.Method == 0 { - fmt.Fprintf(w, "%d\t%s\t%d\t%s\t%s\t%s(%d)\t%s\n", txid, "pending", len(tx.Approved), target, types.FIL(tx.Value), "Send", tx.Method, paramStr) - } else { - fmt.Fprintf(w, "%d\t%s\t%d\t%s\t%s\t%s(%d)\t%s\n", txid, "pending", len(tx.Approved), target, types.FIL(tx.Value), "new account, unknown method", tx.Method, paramStr) - } - } else { - method := utils.MethodsMap[targAct.Code][tx.Method] - - if decParams && tx.Method != 0 { - ptyp := reflect.New(method.Params.Elem()).Interface().(cbg.CBORUnmarshaler) - if err := ptyp.UnmarshalCBOR(bytes.NewReader(tx.Params)); err != nil { - return fmt.Errorf("failed to decode parameters of transaction %d: %w", txid, err) - } - - b, err := json.Marshal(ptyp) - if err != nil { - return fmt.Errorf("could not json marshal parameter type: %w", err) - } - paramStr = string(b) - } - fmt.Fprintf(w, "%d\t%s\t%d\t%s\t%s\t%s(%d)\t%s\n", txid, "pending", len(tx.Approved), target, types.FIL(tx.Value), method.Name, tx.Method, paramStr) - } - } - if err := w.Flush(); err != nil { - return fmt.Errorf("flushing output: %+v", err) - } - } - return re.Emit(cliw) - }, -} - -var msigProposeCmd = &cmds.Command{ - Helptext: cmds.HelpText{ - Tagline: "Propose a multisig transaction", - Usage: "[multisigAddress destinationAddress value (optional)]", - }, - Options: []cmds.Option{ - cmds.StringOption("from", "account to send the propose message from)"), - }, - Arguments: []cmds.Argument{ - cmds.StringArg("multisigAddress", true, false, "a multisig address which contains from"), - cmds.StringArg("destinationAddress", true, false, "recipient address"), - cmds.StringArg("value", true, false, "value to transfer"), - cmds.StringArg("methodId", false, false, "method to call in the proposed message"), - cmds.StringArg("methodParams", false, false, "params to include in the proposed message"), - }, - Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { - reqLen := len(req.Arguments) - if reqLen < 3 { - return fmt.Errorf("must pass at least multisig address, destination, and value") - } - if reqLen > 3 && reqLen != 5 { - return fmt.Errorf("must either pass three or five arguments") - } - - ctx := req.Context - - msig, err := address.NewFromString(req.Arguments[0]) - if err != nil { - return err - } - - dest, err := address.NewFromString(req.Arguments[1]) - if err != nil { - return err - } - - value, err := types.ParseFIL(req.Arguments[2]) - if err != nil { - return err - } - - var method uint64 - var params []byte - if reqLen == 5 { - m, err := strconv.ParseUint(req.Arguments[3], 10, 64) - if err != nil { - return err - } - method = m - - p, err := hex.DecodeString(req.Arguments[4]) - if err != nil { - return err - } - params = p - } - from, err := reqFromWithDefault(req, env) - if err != nil { - return err - } - - act, err := env.(*node.Env).ChainAPI.StateGetActor(ctx, msig, types.EmptyTSK) - if err != nil { - return fmt.Errorf("failed to look up multisig %s: %w", msig, err) - } - - if !builtin.IsMultisigActor(act.Code) { - return fmt.Errorf("actor %s is not a multisig actor", msig) - } - - msgCid, err := env.(*node.Env).MultiSigAPIV0.MsigPropose(ctx, msig, dest, types.BigInt(value), from, method, params) - if err != nil { - return err - } - buf := new(bytes.Buffer) - - fmt.Fprintln(buf, "send proposal in message: ", msgCid) - confidence := reqConfidence(req) - wait, err := env.(*node.Env).ChainAPI.StateWaitMsg(ctx, msgCid, confidence, constants.LookbackNoLimit, true) - if err != nil { - return err - } - if wait.Receipt.ExitCode != 0 { - return fmt.Errorf("proposal returned exit %d", wait.Receipt.ExitCode) - } - - var retval msig2.ProposeReturn - if err := retval.UnmarshalCBOR(bytes.NewReader(wait.Receipt.Return)); err != nil { - return fmt.Errorf("failed to unmarshal propose return value: %w", err) - } - fmt.Fprintf(buf, "Transaction ID: %d\n", retval.TxnID) - - if retval.Applied { - fmt.Fprintf(buf, "Transaction was executed during propose\n") - fmt.Fprintf(buf, "Exit Code: %d\n", retval.Code) - fmt.Fprintf(buf, "Return Value: %x\n", retval.Ret) - } - return re.Emit(buf) - }, -} - -var msigRemoveProposeCmd = &cmds.Command{ - Helptext: cmds.HelpText{ - Tagline: "Propose to remove a signer", - Usage: "[multisigAddress signer]", - }, - Options: []cmds.Option{ - cmds.BoolOption("decrease-threshold", "whether the number of required signers should be decreased").WithDefault(false), - cmds.StringOption("from", "account to send the propose message from"), - }, - Arguments: []cmds.Argument{ - cmds.StringArg("multisigAddress", true, false, "multisig address"), - cmds.StringArg("signer", true, false, "a wallet address of the multisig"), - }, - Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { - if len(req.Arguments) != 2 { - return fmt.Errorf("must pass multisig address and signer address") - } - ctx := ReqContext(req.Context) - msig, err := address.NewFromString(req.Arguments[0]) - if err != nil { - return err - } - - addr, err := address.NewFromString(req.Arguments[1]) - if err != nil { - return err - } - - from, err := reqFromWithDefault(req, env) - if err != nil { - return err - } - dt := reqBoolOption(req, "decrease-threshold") - msgCid, err := env.(*node.Env).MultiSigAPIV0.MsigRemoveSigner(ctx, msig, from, addr, dt) - if err != nil { - return err - } - - fmt.Println("sent remove proposal in message: ", msgCid) - confidence := reqConfidence(req) - wait, err := env.(*node.Env).ChainAPI.StateWaitMsg(ctx, msgCid, confidence, constants.LookbackNoLimit, true) - if err != nil { - return err - } - - if wait.Receipt.ExitCode != 0 { - return fmt.Errorf("add proposal returned exit %d", wait.Receipt.ExitCode) - } - - var ret multisig.ProposeReturn - err = ret.UnmarshalCBOR(bytes.NewReader(wait.Receipt.Return)) - if err != nil { - return fmt.Errorf("decoding proposal return: %w", err) - } - cliw := new(bytes.Buffer) - fmt.Fprintf(cliw, "sent remove singer proposal in message: %s\n", msgCid) - fmt.Fprintf(cliw, "TxnID: %d\n", ret.TxnID) - return re.Emit(cliw) - }, -} - -var msigApproveCmd = &cmds.Command{ - Helptext: cmds.HelpText{ - Tagline: "Approve a multisig message", - Usage: " [proposerAddress destination value [methodId methodParams]]", - }, - Options: []cmds.Option{ - cmds.StringOption("from", "account to send the approve message from"), - }, - Arguments: []cmds.Argument{ - cmds.StringArg("multisigAddress", true, false, "multisig address"), - cmds.StringArg("messageId", true, false, "proposed transaction ID"), - cmds.StringArg("proposerAddress", false, false, "proposer address"), - cmds.StringArg("destination", false, false, "recipient address"), - cmds.StringArg("value", false, false, "value to transfer"), - cmds.StringArg("methodId", false, false, "method to call in the proposed message"), - cmds.StringArg("methodParams", false, false, "params to include in the proposed message"), - }, - Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { - argLen := len(req.Arguments) - if argLen < 2 { - return fmt.Errorf("must pass at least multisig address and message ID") - } - - if argLen > 2 && argLen < 5 { - return fmt.Errorf("usage: msig approve ") - } - - if argLen > 5 && argLen != 7 { - return fmt.Errorf("usage: msig approve [ ]") - } - - ctx := ReqContext(req.Context) - - msig, err := address.NewFromString(req.Arguments[0]) - if err != nil { - return err - } - - txid, err := strconv.ParseUint(req.Arguments[1], 10, 64) - if err != nil { - return err - } - - from, err := reqFromWithDefault(req, env) - if err != nil { - return err - } - var msgCid cid.Cid - if argLen == 2 { - msgCid, err = env.(*node.Env).MultiSigAPIV0.MsigApprove(ctx, msig, txid, from) - if err != nil { - return err - } - } else { - proposer, err := address.NewFromString(req.Arguments[2]) - if err != nil { - return err - } - - if proposer.Protocol() != address.ID { - proposer, err = env.(*node.Env).ChainAPI.StateLookupID(ctx, proposer, types.EmptyTSK) - if err != nil { - return err - } - } - - dest, err := address.NewFromString(req.Arguments[3]) - if err != nil { - return err - } - - value, err := types.ParseFIL(req.Arguments[4]) - if err != nil { - return err - } - - var method uint64 - var params []byte - if argLen == 7 { - m, err := strconv.ParseUint(req.Arguments[5], 10, 64) - if err != nil { - return err - } - method = m - - p, err := hex.DecodeString(req.Arguments[6]) - if err != nil { - return err - } - params = p - } - - msgCid, err = env.(*node.Env).MultiSigAPIV0.MsigApproveTxnHash(ctx, msig, txid, proposer, dest, types.BigInt(value), from, method, params) - if err != nil { - return err - } - } - wait, err := env.(*node.Env).ChainAPI.StateWaitMsg(ctx, msgCid, reqConfidence(req), constants.LookbackNoLimit, true) - if err != nil { - return err - } - if wait.Receipt.ExitCode != 0 { - return fmt.Errorf("approve returned exit %d", wait.Receipt.ExitCode) - } - return re.Emit(fmt.Sprintf("sent approval in message: %s", msgCid)) - }, -} - -var msigAddProposeCmd = &cmds.Command{ - Helptext: cmds.HelpText{ - Tagline: "Propose to add a signer", - Usage: "[multisigAddress signer]", - }, - Options: []cmds.Option{ - cmds.BoolOption("increase-threshold", "whether the number of required signers should be increased").WithDefault(false), - cmds.StringOption("from", "account to send the propose message from"), - }, - Arguments: []cmds.Argument{ - cmds.StringArg("multisigAddress", true, false, "multisig address"), - cmds.StringArg("signer", true, false, "a wallet address of the multisig"), - }, - Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { - if len(req.Arguments) != 2 { - return fmt.Errorf("must pass multisig address and signer address") - } - ctx := ReqContext(req.Context) - msig, err := address.NewFromString(req.Arguments[0]) - if err != nil { - return err - } - - addr, err := address.NewFromString(req.Arguments[1]) - if err != nil { - return err - } - - from, err := reqFromWithDefault(req, env) - if err != nil { - return err - } - - store := adt.WrapStore(ctx, cbor.NewCborStore(blockstore.NewAPIBlockstore(env.(*node.Env).BlockStoreAPI))) - - head, err := env.(*node.Env).ChainAPI.ChainHead(ctx) - if err != nil { - return err - } - - act, err := env.(*node.Env).ChainAPI.StateGetActor(ctx, msig, head.Key()) - if err != nil { - return err - } - - mstate, err := multisig.Load(store, act) - if err != nil { - return err - } - - signers, err := mstate.Signers() - if err != nil { - return err - } - - addrID, err := env.(*node.Env).ChainAPI.StateLookupID(ctx, addr, types.EmptyTSK) - if err != nil { - return err - } - - for _, s := range signers { - if s == addrID { - return fmt.Errorf("%s is already a signer", addr.String()) - } - } - - msgCid, err := env.(*node.Env).MultiSigAPIV0.MsigAddPropose(ctx, msig, from, addr, reqBoolOption(req, "increase-threshold")) - if err != nil { - return err - } - - confidence := reqConfidence(req) - wait, err := env.(*node.Env).ChainAPI.StateWaitMsg(ctx, msgCid, confidence, constants.LookbackNoLimit, true) - if err != nil { - return err - } - if wait.Receipt.ExitCode != 0 { - return fmt.Errorf("add proposal returned exit %d", wait.Receipt.ExitCode) - } - - var ret multisig.ProposeReturn - err = ret.UnmarshalCBOR(bytes.NewReader(wait.Receipt.Return)) - if err != nil { - return fmt.Errorf("decoding proposal return: %w", err) - } - cliw := new(bytes.Buffer) - fmt.Fprintf(cliw, "sent add singer proposal in message: %s\n", msgCid) - fmt.Fprintf(cliw, "TxnID: %d\n", ret.TxnID) - return re.Emit(cliw) - }, -} - -var msigAddApproveCmd = &cmds.Command{ - Helptext: cmds.HelpText{ - Tagline: "Approve a message to add a signer", - Usage: "[multisigAddress proposerAddress txId newAddress increaseThreshold]", - }, - Options: []cmds.Option{ - cmds.StringOption("from", "account to send the approve message from)"), - }, - Arguments: []cmds.Argument{ - cmds.StringArg("multisigAddress", true, false, "multisig address"), - cmds.StringArg("proposerAddress", true, false, "sender address of the approve msg"), - cmds.StringArg("txId", true, false, "proposed message ID"), - cmds.StringArg("newAddress", true, false, "new signer"), - cmds.StringArg("increaseThreshold", true, false, "whether the number of required signers should be increased"), - }, - Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { - if len(req.Arguments) != 5 { - return fmt.Errorf("must pass multisig address, proposer address, transaction id, new signer address, whether to increase threshold") - } - ctx := ReqContext(req.Context) - msig, err := address.NewFromString(req.Arguments[0]) - if err != nil { - return err - } - - prop, err := address.NewFromString(req.Arguments[1]) - if err != nil { - return err - } - - txid, err := strconv.ParseUint(req.Arguments[2], 10, 64) - if err != nil { - return err - } - - newAdd, err := address.NewFromString(req.Arguments[3]) - if err != nil { - return err - } - - inc, err := strconv.ParseBool(req.Arguments[4]) - if err != nil { - return err - } - - from, err := reqFromWithDefault(req, env) - if err != nil { - return err - } - msgCid, err := env.(*node.Env).MultiSigAPIV0.MsigAddApprove(ctx, msig, from, txid, prop, newAdd, inc) - if err != nil { - return err - } - - wait, err := env.(*node.Env).ChainAPI.StateWaitMsg(ctx, msgCid, reqConfidence(req), constants.LookbackNoLimit, true) - if err != nil { - return err - } - - if wait.Receipt.ExitCode != 0 { - return fmt.Errorf("add approval returned exit %d", wait.Receipt.ExitCode) - } - - return re.Emit(fmt.Sprintf("sent add approval in message: %s", msgCid)) - }, -} - -var msigAddCancelCmd = &cmds.Command{ - Helptext: cmds.HelpText{ - Tagline: "Cancel a message to add a signer", - Usage: "[multisigAddress txId newAddress increaseThreshold]", - }, - Options: []cmds.Option{ - cmds.StringOption("from", "account to send the approve message from"), - }, - Arguments: []cmds.Argument{ - cmds.StringArg("multisigAddress", true, false, "multisig address"), - cmds.StringArg("txId", true, false, "proposed message ID"), - cmds.StringArg("newAddress", true, false, "new signer"), - cmds.StringArg("increaseThreshold", true, false, "whether the number of required signers should be increased"), - }, - Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { - if len(req.Arguments) != 4 { - return fmt.Errorf("must pass multisig address, transaction id, new signer address, whether to increase threshold") - } - ctx := ReqContext(req.Context) - msig, err := address.NewFromString(req.Arguments[0]) - if err != nil { - return err - } - - txid, err := strconv.ParseUint(req.Arguments[1], 10, 64) - if err != nil { - return err - } - - newAdd, err := address.NewFromString(req.Arguments[2]) - if err != nil { - return err - } - - inc, err := strconv.ParseBool(req.Arguments[3]) - if err != nil { - return err - } - - from, err := reqFromWithDefault(req, env) - if err != nil { - return err - } - - msgCid, err := env.(*node.Env).MultiSigAPIV0.MsigAddCancel(ctx, msig, from, txid, newAdd, inc) - if err != nil { - return err - } - - wait, err := env.(*node.Env).ChainAPI.StateWaitMsg(ctx, msgCid, reqConfidence(req), constants.LookbackNoLimit, true) - if err != nil { - return err - } - - if wait.Receipt.ExitCode != 0 { - return fmt.Errorf("add cancellation returned exit %d", wait.Receipt.ExitCode) - } - return re.Emit(fmt.Sprintf("sent add cancellation in message: %s", msgCid)) - }, -} - -var msigCancelCmd = &cmds.Command{ - Helptext: cmds.HelpText{ - Tagline: "Cancel a multisig message", - Usage: " [destination value [methodId methodParams]]", - }, - Options: []cmds.Option{ - cmds.StringOption("from", "account to send the propose message from)"), - }, - Arguments: []cmds.Argument{ - cmds.StringArg("multisigAddress", false, false, "a multisig address which contains from"), - cmds.StringArg("txId", false, false, "msig transaction id"), - cmds.StringArg("destinationAddress", false, false, "recipient address"), - cmds.StringArg("value", false, false, "value to transfer"), - cmds.StringArg("methodId", false, false, "method to call in the proposed message"), - cmds.StringArg("methodParams", false, false, "params to include in the proposed message"), - }, - Run: func(req *cmds.Request, emitter cmds.ResponseEmitter, env cmds.Environment) error { - argLen := len(req.Arguments) - if argLen < 2 { - return fmt.Errorf("must pass at least multisig address and message ID") - } - - if argLen > 2 && argLen < 4 { - return fmt.Errorf("usage: msig cancel ") - } - - if argLen > 4 && argLen < 6 { - return fmt.Errorf("usage: msig cancel [ ]") - } - - msig, err := address.NewFromString(req.Arguments[0]) - if err != nil { - return err - } - - txid, err := strconv.ParseUint(req.Arguments[1], 10, 64) - if err != nil { - return err - } - - from, err := reqFromWithDefault(req, env) - if err != nil { - return err - } - - api := env.(*node.Env) - ctx := ReqContext(req.Context) - var msgCid cid.Cid - if argLen == 2 { - p, err := api.MultiSigAPIV1.MsigCancel(ctx, msig, txid, from) - if err != nil { - return err - } - sm, err := api.MessagePoolAPI.MpoolPushMessage(ctx, &p.Message, nil) - if err != nil { - return fmt.Errorf("pushing message: %w", err) - } - msgCid = sm.Cid() - - } else { - dest, err := address.NewFromString(req.Arguments[2]) - if err != nil { - return err - } - - value, err := types.ParseFIL(req.Arguments[3]) - if err != nil { - return err - } - - var method uint64 - var params []byte - if argLen == 6 { - if method, err = strconv.ParseUint(req.Arguments[4], 10, 64); err != nil { - return err - } - if params, err = hex.DecodeString(req.Arguments[5]); err != nil { - return err - } - } - if msgCid, err = api.MultiSigAPIV0.MsigCancelTxnHash(ctx, msig, txid, dest, types.BigInt(value), - from, method, params); err != nil { - return err - } - } - fmt.Println("sent cancel in message: ", msgCid.String()) - wait, err := api.ChainAPI.StateWaitMsg(ctx, msgCid, reqConfidence(req), constants.Finality, true) - if err != nil { - return err - } - - if wait.Receipt.ExitCode != 0 { - return fmt.Errorf("cancel returned exit %d:%s", wait.Receipt.ExitCode, - wait.Receipt.ExitCode.String()) - } - return nil - }, -} - -var msigSwapProposeCmd = &cmds.Command{ - Helptext: cmds.HelpText{ - Tagline: "Propose to swap signers", - Usage: "[multisigAddress oldAddress newAddress]", - }, - Options: []cmds.Option{ - cmds.StringOption("from", "account to send the propose message from"), - }, - Arguments: []cmds.Argument{ - cmds.StringArg("multisigAddress", true, false, "multisig address"), - cmds.StringArg("oldAddress", true, false, "sender address of the cancel msg"), - cmds.StringArg("newAddress", true, false, "new signer"), - }, - Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { - if len(req.Arguments) != 3 { - return fmt.Errorf("must pass multisig address, old signer address, new signer address") - } - ctx := ReqContext(req.Context) - - msig, err := address.NewFromString(req.Arguments[0]) - if err != nil { - return err - } - - oldAdd, err := address.NewFromString(req.Arguments[1]) - if err != nil { - return err - } - - newAdd, err := address.NewFromString(req.Arguments[2]) - if err != nil { - return err - } - - from, err := reqFromWithDefault(req, env) - if err != nil { - return err - } - msgCid, err := env.(*node.Env).MultiSigAPIV0.MsigSwapPropose(ctx, msig, from, oldAdd, newAdd) - if err != nil { - return err - } - - wait, err := env.(*node.Env).ChainAPI.StateWaitMsg(ctx, msgCid, reqConfidence(req), constants.LookbackNoLimit, true) - if err != nil { - return err - } - - if wait.Receipt.ExitCode != 0 { - return fmt.Errorf("swap proposal returned exit %d", wait.Receipt.ExitCode) - } - var ret multisig.ProposeReturn - err = ret.UnmarshalCBOR(bytes.NewReader(wait.Receipt.Return)) - if err != nil { - return fmt.Errorf("decoding proposal return: %w", err) - } - cliw := new(bytes.Buffer) - fmt.Fprintf(cliw, "sent swap singer proposal in message: %s\n", msgCid) - fmt.Fprintf(cliw, "TxnID: %d\n", ret.TxnID) - return re.Emit(cliw) - }, -} - -var msigSwapApproveCmd = &cmds.Command{ - Helptext: cmds.HelpText{ - Tagline: "Approve a message to swap signers", - Usage: "[multisigAddress proposerAddress txId oldAddress newAddress]", - }, - Options: []cmds.Option{ - cmds.StringOption("from", "account to send the approve message from"), - }, - Arguments: []cmds.Argument{ - cmds.StringArg("multisigAddress", true, false, "multisig address"), - cmds.StringArg("proposerAddress", true, false, "sender address of the approve msg"), - cmds.StringArg("txId", true, false, "proposed message ID"), - cmds.StringArg("oldAddress", true, false, "old signer"), - cmds.StringArg("newAddress", true, false, "new signer"), - }, - Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { - if len(req.Arguments) != 5 { - return fmt.Errorf("must pass multisig address, proposer address, transaction id, old signer address, new signer address") - } - ctx := ReqContext(req.Context) - - msig, err := address.NewFromString(req.Arguments[0]) - if err != nil { - return err - } - - prop, err := address.NewFromString(req.Arguments[1]) - if err != nil { - return err - } - - txid, err := strconv.ParseUint(req.Arguments[2], 10, 64) - if err != nil { - return err - } - - oldAdd, err := address.NewFromString(req.Arguments[3]) - if err != nil { - return err - } - - newAdd, err := address.NewFromString(req.Arguments[4]) - if err != nil { - return err - } - from, err := reqFromWithDefault(req, env) - if err != nil { - return err - } - msgCid, err := env.(*node.Env).MultiSigAPIV0.MsigSwapApprove(ctx, msig, from, txid, prop, oldAdd, newAdd) - if err != nil { - return err - } - - wait, err := env.(*node.Env).ChainAPI.StateWaitMsg(ctx, msgCid, reqConfidence(req), constants.LookbackNoLimit, true) - if err != nil { - return err - } - - if wait.Receipt.ExitCode != 0 { - return fmt.Errorf("swap approval returned exit %d", wait.Receipt.ExitCode) - } - - return re.Emit(fmt.Sprintf("sent swap approval in message: %s", msgCid)) - }, -} - -var msigSwapCancelCmd = &cmds.Command{ - Helptext: cmds.HelpText{ - Tagline: "Cancel a message to swap signers", - Usage: "[multisigAddress txId oldAddress newAddress]", - }, - Options: []cmds.Option{ - cmds.StringOption("from", "account to send the approve message from"), - }, - Arguments: []cmds.Argument{ - cmds.StringArg("multisigAddress", true, false, "multisig address"), - cmds.StringArg("txId", true, false, "proposed message ID"), - cmds.StringArg("oldAddress", true, false, "old signer"), - cmds.StringArg("newAddress", true, false, "new signer"), - }, - Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { - if len(req.Arguments) != 4 { - return fmt.Errorf("must pass multisig address, transaction id, old signer address, new signer address") - } - ctx := ReqContext(req.Context) - - msig, err := address.NewFromString(req.Arguments[0]) - if err != nil { - return err - } - - txid, err := strconv.ParseUint(req.Arguments[1], 10, 64) - if err != nil { - return err - } - - oldAdd, err := address.NewFromString(req.Arguments[2]) - if err != nil { - return err - } - - newAdd, err := address.NewFromString(req.Arguments[3]) - if err != nil { - return err - } - from, err := reqFromWithDefault(req, env) - if err != nil { - return err - } - msgCid, err := env.(*node.Env).MultiSigAPIV0.MsigSwapCancel(ctx, msig, from, txid, oldAdd, newAdd) - if err != nil { - return err - } - - wait, err := env.(*node.Env).ChainAPI.StateWaitMsg(ctx, msgCid, reqConfidence(req), constants.LookbackNoLimit, true) - if err != nil { - return err - } - - if wait.Receipt.ExitCode != 0 { - return fmt.Errorf("swap cancellation returned exit %d", wait.Receipt.ExitCode) - } - - return re.Emit(fmt.Sprintf("sent swap cancellation in message: %s", msgCid)) - }, -} - -var msigLockProposeCmd = &cmds.Command{ - Helptext: cmds.HelpText{ - Tagline: "Propose to lock up some balance", - Usage: "[multisigAddress startEpoch unlockDuration amount]", - }, - Options: []cmds.Option{ - cmds.StringOption("from", "account to send the propose message from"), - }, - Arguments: []cmds.Argument{ - cmds.StringArg("multisigAddress", true, false, "multisig address"), - cmds.StringArg("startEpoch", true, false, "start epoch"), - cmds.StringArg("unlockDuration", true, false, "the locked block period"), - cmds.StringArg("amount", true, false, "amount of FIL"), - }, - Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { - if len(req.Arguments) != 4 { - return fmt.Errorf("must pass multisig address, start epoch, unlock duration, and amount") - } - ctx := ReqContext(req.Context) - - msig, err := address.NewFromString(req.Arguments[0]) - if err != nil { - return err - } - - start, err := strconv.ParseUint(req.Arguments[1], 10, 64) - if err != nil { - return err - } - - duration, err := strconv.ParseUint(req.Arguments[2], 10, 64) - if err != nil { - return err - } - - amount, err := types.ParseFIL(req.Arguments[3]) - if err != nil { - return err - } - from, err := reqFromWithDefault(req, env) - if err != nil { - return err - } - params, actErr := actors.SerializeParams(&msig2.LockBalanceParams{ - StartEpoch: abi.ChainEpoch(start), - UnlockDuration: abi.ChainEpoch(duration), - Amount: big.Int(amount), - }) - - if actErr != nil { - return actErr - } - msgCid, err := env.(*node.Env).MultiSigAPIV0.MsigPropose(ctx, msig, msig, big.Zero(), from, uint64(multisig.Methods.LockBalance), params) - if err != nil { - return err - } - - wait, err := env.(*node.Env).ChainAPI.StateWaitMsg(ctx, msgCid, reqConfidence(req), constants.LookbackNoLimit, true) - if err != nil { - return err - } - - if wait.Receipt.ExitCode != 0 { - return fmt.Errorf("lock proposal returned exit %d", wait.Receipt.ExitCode) - } - var ret multisig.ProposeReturn - err = ret.UnmarshalCBOR(bytes.NewReader(wait.Receipt.Return)) - if err != nil { - return fmt.Errorf("decoding proposal return: %w", err) - } - cliw := new(bytes.Buffer) - fmt.Fprintf(cliw, "sent lock balance proposal in message: %s\n", msgCid) - fmt.Fprintf(cliw, "TxnID: %d\n", ret.TxnID) - return re.Emit(cliw) - }, -} - -var msigLockApproveCmd = &cmds.Command{ - Helptext: cmds.HelpText{ - Tagline: "Approve a message to lock up some balance", - Usage: "[multisigAddress proposerAddress txId startEpoch unlockDuration amount]", - }, - Options: []cmds.Option{ - cmds.StringOption("from", "account to send the propose message from"), - }, - Arguments: []cmds.Argument{ - cmds.StringArg("multisigAddress", true, false, "multisig address"), - cmds.StringArg("proposerAddress", true, false, "proposed address"), - cmds.StringArg("txId", true, false, "proposed message ID"), - cmds.StringArg("startEpoch", true, false, "start epoch"), - cmds.StringArg("unlockDuration", true, false, "the locked block period"), - cmds.StringArg("amount", true, false, "amount of FIL"), - }, - Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { - if len(req.Arguments) != 6 { - return fmt.Errorf("must pass multisig address, proposer address, tx id, start epoch, unlock duration, and amount") - } - ctx := ReqContext(req.Context) - - msig, err := address.NewFromString(req.Arguments[0]) - if err != nil { - return err - } - - prop, err := address.NewFromString(req.Arguments[1]) - if err != nil { - return err - } - - txid, err := strconv.ParseUint(req.Arguments[2], 10, 64) - if err != nil { - return err - } - - start, err := strconv.ParseUint(req.Arguments[3], 10, 64) - if err != nil { - return err - } - - duration, err := strconv.ParseUint(req.Arguments[4], 10, 64) - if err != nil { - return err - } - - amount, err := types.ParseFIL(req.Arguments[5]) - if err != nil { - return err - } - - from, err := reqFromWithDefault(req, env) - if err != nil { - return err - } - - params, actErr := actors.SerializeParams(&msig2.LockBalanceParams{ - StartEpoch: abi.ChainEpoch(start), - UnlockDuration: abi.ChainEpoch(duration), - Amount: big.Int(amount), - }) - - if actErr != nil { - return actErr - } - - msgCid, err := env.(*node.Env).MultiSigAPIV0.MsigApproveTxnHash(ctx, msig, txid, prop, msig, big.Zero(), from, uint64(multisig.Methods.LockBalance), params) - if err != nil { - return err - } - - wait, err := env.(*node.Env).ChainAPI.StateWaitMsg(ctx, msgCid, reqConfidence(req), constants.LookbackNoLimit, true) - if err != nil { - return err - } - - if wait.Receipt.ExitCode != 0 { - return fmt.Errorf("lock approval returned exit %d", wait.Receipt.ExitCode) - } - return re.Emit(fmt.Sprintf("sent lock approval in message: %s", msgCid)) - }, -} - -var msigLockCancelCmd = &cmds.Command{ - Helptext: cmds.HelpText{ - Tagline: "Cancel a message to lock up some balance", - Usage: "[multisigAddress txId startEpoch unlockDuration amount]", - }, - Options: []cmds.Option{ - cmds.StringOption("from", "account to send the propose message from"), - }, - Arguments: []cmds.Argument{ - cmds.StringArg("multisigAddress", true, false, "multisig address"), - cmds.StringArg("txId", true, false, "proposed transaction ID"), - cmds.StringArg("startEpoch", true, false, "start epoch"), - cmds.StringArg("unlockDuration", true, false, "the locked block period"), - cmds.StringArg("amount", true, false, "amount of FIL"), - }, - Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { - if len(req.Arguments) != 5 { - return fmt.Errorf("must pass multisig address, tx id, start epoch, unlock duration, and amount") - } - ctx := ReqContext(req.Context) - - msig, err := address.NewFromString(req.Arguments[0]) - if err != nil { - return err - } - - txid, err := strconv.ParseUint(req.Arguments[1], 10, 64) - if err != nil { - return err - } - - start, err := strconv.ParseUint(req.Arguments[2], 10, 64) - if err != nil { - return err - } - - duration, err := strconv.ParseUint(req.Arguments[3], 10, 64) - if err != nil { - return err - } - - amount, err := types.ParseFIL(req.Arguments[4]) - if err != nil { - return err - } - - from, err := reqFromWithDefault(req, env) - if err != nil { - return err - } - - params, actErr := actors.SerializeParams(&msig2.LockBalanceParams{ - StartEpoch: abi.ChainEpoch(start), - UnlockDuration: abi.ChainEpoch(duration), - Amount: big.Int(amount), - }) - if actErr != nil { - return actErr - } - - msgCid, err := env.(*node.Env).MultiSigAPIV0.MsigCancelTxnHash(ctx, msig, txid, msig, big.Zero(), from, uint64(multisig.Methods.LockBalance), params) - if err != nil { - return err - } - - wait, err := env.(*node.Env).ChainAPI.StateWaitMsg(ctx, msgCid, reqConfidence(req), constants.LookbackNoLimit, true) - if err != nil { - return err - } - - if wait.Receipt.ExitCode != 0 { - return fmt.Errorf("lock cancellation returned exit %d", wait.Receipt.ExitCode) - } - - return re.Emit(fmt.Sprintf("sent lock cancellation in message: %s", msgCid)) - }, -} - -var msigVestedCmd = &cmds.Command{ - Helptext: cmds.HelpText{ - Tagline: "Gets the amount vested in an msig between two epochs", - Usage: "[multisigAddress]", - }, - Options: []cmds.Option{ - cmds.Int64Option("start-epoch", "start epoch to measure vesting from").WithDefault(int64(0)), - cmds.Int64Option("end-epoch", "end epoch to measure vesting at").WithDefault(int64(-1)), - }, - Arguments: []cmds.Argument{ - cmds.StringArg("multisigAddress", true, false, "multisig address"), - }, - Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { - /*defer func() { - if err := recover(); err != nil { - re.Emit(err) - } - }()*/ - if len(req.Arguments) != 1 { - return fmt.Errorf("must pass multisig address") - } - ctx := ReqContext(req.Context) - msig, err := address.NewFromString(req.Arguments[0]) - if err != nil { - return err - } - start, err := env.(*node.Env).ChainAPI.ChainGetTipSetByHeight(ctx, reqChainEpochOption(req, "start-epoch"), types.EmptyTSK) - if err != nil { - return err - } - var end *types.TipSet - endEpoch := reqChainEpochOption(req, "end-epoch") - if endEpoch < 0 { - end, err = env.(*node.Env).ChainAPI.ChainHead(ctx) - if err != nil { - return err - } - } else { - end, err = env.(*node.Env).ChainAPI.ChainGetTipSetByHeight(ctx, endEpoch, types.EmptyTSK) - if err != nil { - return err - } - } - - ret, err := env.(*node.Env).MultiSigAPIV0.MsigGetVested(ctx, msig, start.Key(), end.Key()) - if err != nil { - return err - } - return re.Emit(fmt.Sprintf("Vested: %s between %d and %d", types.FIL(ret), start.Height(), end.Height())) - }, -} - -var msigProposeThresholdCmd = &cmds.Command{ - Helptext: cmds.HelpText{ - Tagline: "Propose setting a different signing threshold on the account", - Usage: "", - }, - Options: []cmds.Option{ - cmds.StringOption("from", "account to send the proposal from"), - }, - Arguments: []cmds.Argument{ - cmds.StringArg("multisigAddress", true, false, "multisig address"), - cmds.StringArg("newM", true, false, "number of signature required"), - }, - Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { - if len(req.Arguments) != 2 { - return fmt.Errorf("must pass multisig address and new threshold value") - } - ctx := ReqContext(req.Context) - - msig, err := address.NewFromString(req.Arguments[0]) - if err != nil { - return err - } - - newM, err := strconv.ParseUint(req.Arguments[1], 10, 64) - if err != nil { - return err - } - - from, err := reqFromWithDefault(req, env) - if err != nil { - return err - } - - params, actErr := actors.SerializeParams(&msig2.ChangeNumApprovalsThresholdParams{ - NewThreshold: newM, - }) - - if actErr != nil { - return actErr - } - - msgCid, err := env.(*node.Env).MultiSigAPIV0.MsigPropose(ctx, msig, msig, types.NewInt(0), from, uint64(multisig.Methods.ChangeNumApprovalsThreshold), params) - if err != nil { - return fmt.Errorf("failed to propose change of threshold: %w", err) - } - wait, err := env.(*node.Env).ChainAPI.StateWaitMsg(ctx, msgCid, reqConfidence(req), constants.LookbackNoLimit, true) - if err != nil { - return err - } - - if wait.Receipt.ExitCode != 0 { - return fmt.Errorf("change threshold proposal returned exit %d", wait.Receipt.ExitCode) - } - var ret multisig.ProposeReturn - err = ret.UnmarshalCBOR(bytes.NewReader(wait.Receipt.Return)) - if err != nil { - return fmt.Errorf("decoding proposal return: %w", err) - } - cliw := new(bytes.Buffer) - fmt.Fprintf(cliw, "sent change threshold proposal in message: %s\n", msgCid) - fmt.Fprintf(cliw, "TxnID: %d\n", ret.TxnID) - return re.Emit(cliw) - }, -} diff --git a/cmd/multisig_helper.go b/cmd/multisig_helper.go deleted file mode 100644 index 57785a0caf..0000000000 --- a/cmd/multisig_helper.go +++ /dev/null @@ -1,65 +0,0 @@ -package cmd - -import ( - "github.com/filecoin-project/go-address" - "github.com/filecoin-project/go-state-types/abi" - "github.com/filecoin-project/venus/app/node" - "github.com/filecoin-project/venus/pkg/constants" - cmds "github.com/ipfs/go-ipfs-cmds" -) - -func reqConfidence(req *cmds.Request) uint64 { - confidence, ok := req.Options["confidence"] - if ok { - return confidence.(uint64) - } - return 0 -} - -func reqFromWithDefault(req *cmds.Request, env cmds.Environment) (address.Address, error) { - f, ok := req.Options["from"] - if ok { - from, err := address.NewFromString(f.(string)) - if err != nil { - return address.Undef, err - } - return from, nil - } - defaddr, err := env.(*node.Env).WalletAPI.WalletDefaultAddress(req.Context) - if err != nil { - return address.Undef, err - } - return defaddr, nil -} - -func reqBoolOption(req *cmds.Request, cmd string) bool { - tmp, ok := req.Options[cmd] - if ok { - return tmp.(bool) - } - return false -} - -func reqUint64Option(req *cmds.Request, cmd string) uint64 { - tmp, ok := req.Options[cmd] - if ok { - return tmp.(uint64) - } - return 0 -} - -func reqStringOption(req *cmds.Request, cmd string) string { - tmp, ok := req.Options[cmd] - if ok { - return tmp.(string) - } - return constants.StringEmpty -} - -func reqChainEpochOption(req *cmds.Request, cmd string) abi.ChainEpoch { - v, ok := req.Options[cmd] - if ok { - return abi.ChainEpoch(v.(int64)) - } - return 0 -} diff --git a/venus-shared/api/chain/v0/fullnode.go b/venus-shared/api/chain/v0/fullnode.go index bc6e1867fb..bbfc547e38 100644 --- a/venus-shared/api/chain/v0/fullnode.go +++ b/venus-shared/api/chain/v0/fullnode.go @@ -6,7 +6,6 @@ type FullNode interface { IMarket IMining IMessagePool - IMultiSig INetwork IPaychan ISyncer diff --git a/venus-shared/api/chain/v0/method.md b/venus-shared/api/chain/v0/method.md index 09407a035b..b0ce5089c2 100644 --- a/venus-shared/api/chain/v0/method.md +++ b/venus-shared/api/chain/v0/method.md @@ -128,24 +128,6 @@ curl http://:/rpc/v0 -X POST -H "Content-Type: application/json" -H " * [Mining](#mining) * [MinerCreateBlock](#minercreateblock) * [MinerGetBaseInfo](#minergetbaseinfo) -* [MultiSig](#multisig) - * [MsigAddApprove](#msigaddapprove) - * [MsigAddCancel](#msigaddcancel) - * [MsigAddPropose](#msigaddpropose) - * [MsigApprove](#msigapprove) - * [MsigApproveTxnHash](#msigapprovetxnhash) - * [MsigCancel](#msigcancel) - * [MsigCancelTxnHash](#msigcanceltxnhash) - * [MsigCreate](#msigcreate) - * [MsigGetAvailableBalance](#msiggetavailablebalance) - * [MsigGetPending](#msiggetpending) - * [MsigGetVested](#msiggetvested) - * [MsigGetVestingSchedule](#msiggetvestingschedule) - * [MsigPropose](#msigpropose) - * [MsigRemoveSigner](#msigremovesigner) - * [MsigSwapApprove](#msigswapapprove) - * [MsigSwapCancel](#msigswapcancel) - * [MsigSwapPropose](#msigswappropose) * [Network](#network) * [ID](#id) * [NetAddrsListen](#netaddrslisten) @@ -4266,443 +4248,6 @@ Response: } ``` -## MultiSig - -### MsigAddApprove - - -Perms: sign - -Inputs: -```json -[ - "f01234", - "f01234", - 42, - "f01234", - "f01234", - true -] -``` - -Response: -```json -{ - "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" -} -``` - -### MsigAddCancel - - -Perms: sign - -Inputs: -```json -[ - "f01234", - "f01234", - 42, - "f01234", - true -] -``` - -Response: -```json -{ - "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" -} -``` - -### MsigAddPropose - - -Perms: sign - -Inputs: -```json -[ - "f01234", - "f01234", - "f01234", - true -] -``` - -Response: -```json -{ - "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" -} -``` - -### MsigApprove - - -Perms: sign - -Inputs: -```json -[ - "f01234", - 42, - "f01234" -] -``` - -Response: -```json -{ - "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" -} -``` - -### MsigApproveTxnHash - - -Perms: sign - -Inputs: -```json -[ - "f01234", - 42, - "f01234", - "f01234", - "0", - "f01234", - 42, - "Ynl0ZSBhcnJheQ==" -] -``` - -Response: -```json -{ - "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" -} -``` - -### MsigCancel - - -Perms: sign - -Inputs: -```json -[ - "f01234", - 42, - "f01234", - "0", - "f01234", - 42, - "Ynl0ZSBhcnJheQ==" -] -``` - -Response: -```json -{ - "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" -} -``` - -### MsigCancelTxnHash -MsigCancel cancels a previously-proposed multisig message -It takes the following params: \, \, \, \, -\, \, \ - - -Perms: sign - -Inputs: -```json -[ - "f01234", - 42, - "f01234", - "0", - "f01234", - 42, - "Ynl0ZSBhcnJheQ==" -] -``` - -Response: -```json -{ - "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" -} -``` - -### MsigCreate -MsigCreate creates a multisig wallet -It takes the following params: \, \, \ -\, \, \ - - -Perms: sign - -Inputs: -```json -[ - 42, - [ - "f01234" - ], - 10101, - "0", - "f01234", - "0" -] -``` - -Response: -```json -{ - "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" -} -``` - -### MsigGetAvailableBalance -MsigGetAvailableBalance returns the portion of a multisig's balance that can be withdrawn or spent - - -Perms: read - -Inputs: -```json -[ - "f01234", - [ - { - "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" - }, - { - "/": "bafy2bzacebp3shtrn43k7g3unredz7fxn4gj533d3o43tqn2p2ipxxhrvchve" - } - ] -] -``` - -Response: `"0"` - -### MsigGetPending -MsigGetPending returns pending transactions for the given multisig -wallet. Once pending transactions are fully approved, they will no longer -appear here. - - -Perms: read - -Inputs: -```json -[ - "f01234", - [ - { - "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" - }, - { - "/": "bafy2bzacebp3shtrn43k7g3unredz7fxn4gj533d3o43tqn2p2ipxxhrvchve" - } - ] -] -``` - -Response: -```json -[ - { - "ID": 9, - "To": "f01234", - "Value": "0", - "Method": 1, - "Params": "Ynl0ZSBhcnJheQ==", - "Approved": [ - "f01234" - ] - } -] -``` - -### MsigGetVested - - -Perms: read - -Inputs: -```json -[ - "f01234", - [ - { - "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" - }, - { - "/": "bafy2bzacebp3shtrn43k7g3unredz7fxn4gj533d3o43tqn2p2ipxxhrvchve" - } - ], - [ - { - "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" - }, - { - "/": "bafy2bzacebp3shtrn43k7g3unredz7fxn4gj533d3o43tqn2p2ipxxhrvchve" - } - ] -] -``` - -Response: `"0"` - -### MsigGetVestingSchedule -MsigGetVestingSchedule returns the vesting details of a given multisig. - - -Perms: read - -Inputs: -```json -[ - "f01234", - [ - { - "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" - }, - { - "/": "bafy2bzacebp3shtrn43k7g3unredz7fxn4gj533d3o43tqn2p2ipxxhrvchve" - } - ] -] -``` - -Response: -```json -{ - "InitialBalance": "0", - "StartEpoch": 10101, - "UnlockDuration": 10101 -} -``` - -### MsigPropose - - -Perms: sign - -Inputs: -```json -[ - "f01234", - "f01234", - "0", - "f01234", - 42, - "Ynl0ZSBhcnJheQ==" -] -``` - -Response: -```json -{ - "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" -} -``` - -### MsigRemoveSigner - - -Perms: sign - -Inputs: -```json -[ - "f01234", - "f01234", - "f01234", - true -] -``` - -Response: -```json -{ - "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" -} -``` - -### MsigSwapApprove - - -Perms: sign - -Inputs: -```json -[ - "f01234", - "f01234", - 42, - "f01234", - "f01234", - "f01234" -] -``` - -Response: -```json -{ - "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" -} -``` - -### MsigSwapCancel - - -Perms: sign - -Inputs: -```json -[ - "f01234", - "f01234", - 42, - "f01234", - "f01234" -] -``` - -Response: -```json -{ - "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" -} -``` - -### MsigSwapPropose - - -Perms: sign - -Inputs: -```json -[ - "f01234", - "f01234", - "f01234", - "f01234" -] -``` - -Response: -```json -{ - "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" -} -``` - ## Network ### ID diff --git a/venus-shared/api/chain/v0/mock/mock_fullnode.go b/venus-shared/api/chain/v0/mock/mock_fullnode.go index 5a49d52017..da07d2bf7b 100644 --- a/venus-shared/api/chain/v0/mock/mock_fullnode.go +++ b/venus-shared/api/chain/v0/mock/mock_fullnode.go @@ -956,261 +956,6 @@ func (mr *MockFullNodeMockRecorder) MpoolSub(arg0 interface{}) *gomock.Call { return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "MpoolSub", reflect.TypeOf((*MockFullNode)(nil).MpoolSub), arg0) } -// MsigAddApprove mocks base method. -func (m *MockFullNode) MsigAddApprove(arg0 context.Context, arg1, arg2 address.Address, arg3 uint64, arg4, arg5 address.Address, arg6 bool) (cid.Cid, error) { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "MsigAddApprove", arg0, arg1, arg2, arg3, arg4, arg5, arg6) - ret0, _ := ret[0].(cid.Cid) - ret1, _ := ret[1].(error) - return ret0, ret1 -} - -// MsigAddApprove indicates an expected call of MsigAddApprove. -func (mr *MockFullNodeMockRecorder) MsigAddApprove(arg0, arg1, arg2, arg3, arg4, arg5, arg6 interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "MsigAddApprove", reflect.TypeOf((*MockFullNode)(nil).MsigAddApprove), arg0, arg1, arg2, arg3, arg4, arg5, arg6) -} - -// MsigAddCancel mocks base method. -func (m *MockFullNode) MsigAddCancel(arg0 context.Context, arg1, arg2 address.Address, arg3 uint64, arg4 address.Address, arg5 bool) (cid.Cid, error) { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "MsigAddCancel", arg0, arg1, arg2, arg3, arg4, arg5) - ret0, _ := ret[0].(cid.Cid) - ret1, _ := ret[1].(error) - return ret0, ret1 -} - -// MsigAddCancel indicates an expected call of MsigAddCancel. -func (mr *MockFullNodeMockRecorder) MsigAddCancel(arg0, arg1, arg2, arg3, arg4, arg5 interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "MsigAddCancel", reflect.TypeOf((*MockFullNode)(nil).MsigAddCancel), arg0, arg1, arg2, arg3, arg4, arg5) -} - -// MsigAddPropose mocks base method. -func (m *MockFullNode) MsigAddPropose(arg0 context.Context, arg1, arg2, arg3 address.Address, arg4 bool) (cid.Cid, error) { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "MsigAddPropose", arg0, arg1, arg2, arg3, arg4) - ret0, _ := ret[0].(cid.Cid) - ret1, _ := ret[1].(error) - return ret0, ret1 -} - -// MsigAddPropose indicates an expected call of MsigAddPropose. -func (mr *MockFullNodeMockRecorder) MsigAddPropose(arg0, arg1, arg2, arg3, arg4 interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "MsigAddPropose", reflect.TypeOf((*MockFullNode)(nil).MsigAddPropose), arg0, arg1, arg2, arg3, arg4) -} - -// MsigApprove mocks base method. -func (m *MockFullNode) MsigApprove(arg0 context.Context, arg1 address.Address, arg2 uint64, arg3 address.Address) (cid.Cid, error) { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "MsigApprove", arg0, arg1, arg2, arg3) - ret0, _ := ret[0].(cid.Cid) - ret1, _ := ret[1].(error) - return ret0, ret1 -} - -// MsigApprove indicates an expected call of MsigApprove. -func (mr *MockFullNodeMockRecorder) MsigApprove(arg0, arg1, arg2, arg3 interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "MsigApprove", reflect.TypeOf((*MockFullNode)(nil).MsigApprove), arg0, arg1, arg2, arg3) -} - -// MsigApproveTxnHash mocks base method. -func (m *MockFullNode) MsigApproveTxnHash(arg0 context.Context, arg1 address.Address, arg2 uint64, arg3, arg4 address.Address, arg5 big.Int, arg6 address.Address, arg7 uint64, arg8 []byte) (cid.Cid, error) { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "MsigApproveTxnHash", arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8) - ret0, _ := ret[0].(cid.Cid) - ret1, _ := ret[1].(error) - return ret0, ret1 -} - -// MsigApproveTxnHash indicates an expected call of MsigApproveTxnHash. -func (mr *MockFullNodeMockRecorder) MsigApproveTxnHash(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8 interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "MsigApproveTxnHash", reflect.TypeOf((*MockFullNode)(nil).MsigApproveTxnHash), arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8) -} - -// MsigCancel mocks base method. -func (m *MockFullNode) MsigCancel(arg0 context.Context, arg1 address.Address, arg2 uint64, arg3 address.Address, arg4 big.Int, arg5 address.Address, arg6 uint64, arg7 []byte) (cid.Cid, error) { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "MsigCancel", arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7) - ret0, _ := ret[0].(cid.Cid) - ret1, _ := ret[1].(error) - return ret0, ret1 -} - -// MsigCancel indicates an expected call of MsigCancel. -func (mr *MockFullNodeMockRecorder) MsigCancel(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7 interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "MsigCancel", reflect.TypeOf((*MockFullNode)(nil).MsigCancel), arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7) -} - -// MsigCancelTxnHash mocks base method. -func (m *MockFullNode) MsigCancelTxnHash(arg0 context.Context, arg1 address.Address, arg2 uint64, arg3 address.Address, arg4 big.Int, arg5 address.Address, arg6 uint64, arg7 []byte) (cid.Cid, error) { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "MsigCancelTxnHash", arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7) - ret0, _ := ret[0].(cid.Cid) - ret1, _ := ret[1].(error) - return ret0, ret1 -} - -// MsigCancelTxnHash indicates an expected call of MsigCancelTxnHash. -func (mr *MockFullNodeMockRecorder) MsigCancelTxnHash(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7 interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "MsigCancelTxnHash", reflect.TypeOf((*MockFullNode)(nil).MsigCancelTxnHash), arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7) -} - -// MsigCreate mocks base method. -func (m *MockFullNode) MsigCreate(arg0 context.Context, arg1 uint64, arg2 []address.Address, arg3 abi.ChainEpoch, arg4 big.Int, arg5 address.Address, arg6 big.Int) (cid.Cid, error) { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "MsigCreate", arg0, arg1, arg2, arg3, arg4, arg5, arg6) - ret0, _ := ret[0].(cid.Cid) - ret1, _ := ret[1].(error) - return ret0, ret1 -} - -// MsigCreate indicates an expected call of MsigCreate. -func (mr *MockFullNodeMockRecorder) MsigCreate(arg0, arg1, arg2, arg3, arg4, arg5, arg6 interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "MsigCreate", reflect.TypeOf((*MockFullNode)(nil).MsigCreate), arg0, arg1, arg2, arg3, arg4, arg5, arg6) -} - -// MsigGetAvailableBalance mocks base method. -func (m *MockFullNode) MsigGetAvailableBalance(arg0 context.Context, arg1 address.Address, arg2 types0.TipSetKey) (big.Int, error) { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "MsigGetAvailableBalance", arg0, arg1, arg2) - ret0, _ := ret[0].(big.Int) - ret1, _ := ret[1].(error) - return ret0, ret1 -} - -// MsigGetAvailableBalance indicates an expected call of MsigGetAvailableBalance. -func (mr *MockFullNodeMockRecorder) MsigGetAvailableBalance(arg0, arg1, arg2 interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "MsigGetAvailableBalance", reflect.TypeOf((*MockFullNode)(nil).MsigGetAvailableBalance), arg0, arg1, arg2) -} - -// MsigGetPending mocks base method. -func (m *MockFullNode) MsigGetPending(arg0 context.Context, arg1 address.Address, arg2 types0.TipSetKey) ([]*types0.MsigTransaction, error) { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "MsigGetPending", arg0, arg1, arg2) - ret0, _ := ret[0].([]*types0.MsigTransaction) - ret1, _ := ret[1].(error) - return ret0, ret1 -} - -// MsigGetPending indicates an expected call of MsigGetPending. -func (mr *MockFullNodeMockRecorder) MsigGetPending(arg0, arg1, arg2 interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "MsigGetPending", reflect.TypeOf((*MockFullNode)(nil).MsigGetPending), arg0, arg1, arg2) -} - -// MsigGetVested mocks base method. -func (m *MockFullNode) MsigGetVested(arg0 context.Context, arg1 address.Address, arg2, arg3 types0.TipSetKey) (big.Int, error) { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "MsigGetVested", arg0, arg1, arg2, arg3) - ret0, _ := ret[0].(big.Int) - ret1, _ := ret[1].(error) - return ret0, ret1 -} - -// MsigGetVested indicates an expected call of MsigGetVested. -func (mr *MockFullNodeMockRecorder) MsigGetVested(arg0, arg1, arg2, arg3 interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "MsigGetVested", reflect.TypeOf((*MockFullNode)(nil).MsigGetVested), arg0, arg1, arg2, arg3) -} - -// MsigGetVestingSchedule mocks base method. -func (m *MockFullNode) MsigGetVestingSchedule(arg0 context.Context, arg1 address.Address, arg2 types0.TipSetKey) (types0.MsigVesting, error) { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "MsigGetVestingSchedule", arg0, arg1, arg2) - ret0, _ := ret[0].(types0.MsigVesting) - ret1, _ := ret[1].(error) - return ret0, ret1 -} - -// MsigGetVestingSchedule indicates an expected call of MsigGetVestingSchedule. -func (mr *MockFullNodeMockRecorder) MsigGetVestingSchedule(arg0, arg1, arg2 interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "MsigGetVestingSchedule", reflect.TypeOf((*MockFullNode)(nil).MsigGetVestingSchedule), arg0, arg1, arg2) -} - -// MsigPropose mocks base method. -func (m *MockFullNode) MsigPropose(arg0 context.Context, arg1, arg2 address.Address, arg3 big.Int, arg4 address.Address, arg5 uint64, arg6 []byte) (cid.Cid, error) { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "MsigPropose", arg0, arg1, arg2, arg3, arg4, arg5, arg6) - ret0, _ := ret[0].(cid.Cid) - ret1, _ := ret[1].(error) - return ret0, ret1 -} - -// MsigPropose indicates an expected call of MsigPropose. -func (mr *MockFullNodeMockRecorder) MsigPropose(arg0, arg1, arg2, arg3, arg4, arg5, arg6 interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "MsigPropose", reflect.TypeOf((*MockFullNode)(nil).MsigPropose), arg0, arg1, arg2, arg3, arg4, arg5, arg6) -} - -// MsigRemoveSigner mocks base method. -func (m *MockFullNode) MsigRemoveSigner(arg0 context.Context, arg1, arg2, arg3 address.Address, arg4 bool) (cid.Cid, error) { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "MsigRemoveSigner", arg0, arg1, arg2, arg3, arg4) - ret0, _ := ret[0].(cid.Cid) - ret1, _ := ret[1].(error) - return ret0, ret1 -} - -// MsigRemoveSigner indicates an expected call of MsigRemoveSigner. -func (mr *MockFullNodeMockRecorder) MsigRemoveSigner(arg0, arg1, arg2, arg3, arg4 interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "MsigRemoveSigner", reflect.TypeOf((*MockFullNode)(nil).MsigRemoveSigner), arg0, arg1, arg2, arg3, arg4) -} - -// MsigSwapApprove mocks base method. -func (m *MockFullNode) MsigSwapApprove(arg0 context.Context, arg1, arg2 address.Address, arg3 uint64, arg4, arg5, arg6 address.Address) (cid.Cid, error) { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "MsigSwapApprove", arg0, arg1, arg2, arg3, arg4, arg5, arg6) - ret0, _ := ret[0].(cid.Cid) - ret1, _ := ret[1].(error) - return ret0, ret1 -} - -// MsigSwapApprove indicates an expected call of MsigSwapApprove. -func (mr *MockFullNodeMockRecorder) MsigSwapApprove(arg0, arg1, arg2, arg3, arg4, arg5, arg6 interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "MsigSwapApprove", reflect.TypeOf((*MockFullNode)(nil).MsigSwapApprove), arg0, arg1, arg2, arg3, arg4, arg5, arg6) -} - -// MsigSwapCancel mocks base method. -func (m *MockFullNode) MsigSwapCancel(arg0 context.Context, arg1, arg2 address.Address, arg3 uint64, arg4, arg5 address.Address) (cid.Cid, error) { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "MsigSwapCancel", arg0, arg1, arg2, arg3, arg4, arg5) - ret0, _ := ret[0].(cid.Cid) - ret1, _ := ret[1].(error) - return ret0, ret1 -} - -// MsigSwapCancel indicates an expected call of MsigSwapCancel. -func (mr *MockFullNodeMockRecorder) MsigSwapCancel(arg0, arg1, arg2, arg3, arg4, arg5 interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "MsigSwapCancel", reflect.TypeOf((*MockFullNode)(nil).MsigSwapCancel), arg0, arg1, arg2, arg3, arg4, arg5) -} - -// MsigSwapPropose mocks base method. -func (m *MockFullNode) MsigSwapPropose(arg0 context.Context, arg1, arg2, arg3, arg4 address.Address) (cid.Cid, error) { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "MsigSwapPropose", arg0, arg1, arg2, arg3, arg4) - ret0, _ := ret[0].(cid.Cid) - ret1, _ := ret[1].(error) - return ret0, ret1 -} - -// MsigSwapPropose indicates an expected call of MsigSwapPropose. -func (mr *MockFullNodeMockRecorder) MsigSwapPropose(arg0, arg1, arg2, arg3, arg4 interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "MsigSwapPropose", reflect.TypeOf((*MockFullNode)(nil).MsigSwapPropose), arg0, arg1, arg2, arg3, arg4) -} - // NetAddrsListen mocks base method. func (m *MockFullNode) NetAddrsListen(arg0 context.Context) (peer.AddrInfo, error) { m.ctrl.T.Helper() diff --git a/venus-shared/api/chain/v0/multisig.go b/venus-shared/api/chain/v0/multisig.go deleted file mode 100644 index 5fd5c55f54..0000000000 --- a/venus-shared/api/chain/v0/multisig.go +++ /dev/null @@ -1,43 +0,0 @@ -package v0 - -import ( - "context" - - "github.com/ipfs/go-cid" - - "github.com/filecoin-project/go-address" - "github.com/filecoin-project/go-state-types/abi" - - "github.com/filecoin-project/venus/venus-shared/types" -) - -type IMultiSig interface { - // MsigCreate creates a multisig wallet - // It takes the following params: , , - //, , - MsigCreate(context.Context, uint64, []address.Address, abi.ChainEpoch, types.BigInt, address.Address, types.BigInt) (cid.Cid, error) //perm:sign - MsigPropose(ctx context.Context, msig address.Address, to address.Address, amt types.BigInt, src address.Address, method uint64, params []byte) (cid.Cid, error) //perm:sign - MsigAddPropose(ctx context.Context, msig address.Address, src address.Address, newAdd address.Address, inc bool) (cid.Cid, error) //perm:sign - MsigAddApprove(ctx context.Context, msig address.Address, src address.Address, txID uint64, proposer address.Address, newAdd address.Address, inc bool) (cid.Cid, error) //perm:sign - MsigAddCancel(ctx context.Context, msig address.Address, src address.Address, txID uint64, newAdd address.Address, inc bool) (cid.Cid, error) //perm:sign - // MsigCancel cancels a previously-proposed multisig message - // It takes the following params: , , , , - // , , - MsigCancelTxnHash(context.Context, address.Address, uint64, address.Address, types.BigInt, address.Address, uint64, []byte) (cid.Cid, error) //perm:sign - MsigSwapPropose(ctx context.Context, msig address.Address, src address.Address, oldAdd address.Address, newAdd address.Address) (cid.Cid, error) //perm:sign - MsigSwapApprove(ctx context.Context, msig address.Address, src address.Address, txID uint64, proposer address.Address, oldAdd address.Address, newAdd address.Address) (cid.Cid, error) //perm:sign - MsigSwapCancel(ctx context.Context, msig address.Address, src address.Address, txID uint64, oldAdd address.Address, newAdd address.Address) (cid.Cid, error) //perm:sign - MsigApprove(ctx context.Context, msig address.Address, txID uint64, src address.Address) (cid.Cid, error) //perm:sign - MsigApproveTxnHash(ctx context.Context, msig address.Address, txID uint64, proposer address.Address, to address.Address, amt types.BigInt, src address.Address, method uint64, params []byte) (cid.Cid, error) //perm:sign - MsigCancel(context.Context, address.Address, uint64, address.Address, types.BigInt, address.Address, uint64, []byte) (cid.Cid, error) //perm:sign - MsigRemoveSigner(ctx context.Context, msig address.Address, proposer address.Address, toRemove address.Address, decrease bool) (cid.Cid, error) //perm:sign - MsigGetVested(ctx context.Context, addr address.Address, start types.TipSetKey, end types.TipSetKey) (types.BigInt, error) //perm:read - // MsigGetAvailableBalance returns the portion of a multisig's balance that can be withdrawn or spent - MsigGetAvailableBalance(context.Context, address.Address, types.TipSetKey) (types.BigInt, error) //perm:read - //MsigGetPending returns pending transactions for the given multisig - //wallet. Once pending transactions are fully approved, they will no longer - //appear here. - MsigGetPending(context.Context, address.Address, types.TipSetKey) ([]*types.MsigTransaction, error) //perm:read - // MsigGetVestingSchedule returns the vesting details of a given multisig. - MsigGetVestingSchedule(context.Context, address.Address, types.TipSetKey) (types.MsigVesting, error) //perm:read -} diff --git a/venus-shared/api/chain/v0/proxy_gen.go b/venus-shared/api/chain/v0/proxy_gen.go index 2c86f25499..20c0b08f0e 100644 --- a/venus-shared/api/chain/v0/proxy_gen.go +++ b/venus-shared/api/chain/v0/proxy_gen.go @@ -525,80 +525,6 @@ func (s *IMessagePoolStruct) MpoolSub(p0 context.Context) (<-chan types.MpoolUpd return s.Internal.MpoolSub(p0) } -type IMultiSigStruct struct { - Internal struct { - MsigAddApprove func(ctx context.Context, msig address.Address, src address.Address, txID uint64, proposer address.Address, newAdd address.Address, inc bool) (cid.Cid, error) `perm:"sign"` - MsigAddCancel func(ctx context.Context, msig address.Address, src address.Address, txID uint64, newAdd address.Address, inc bool) (cid.Cid, error) `perm:"sign"` - MsigAddPropose func(ctx context.Context, msig address.Address, src address.Address, newAdd address.Address, inc bool) (cid.Cid, error) `perm:"sign"` - MsigApprove func(ctx context.Context, msig address.Address, txID uint64, src address.Address) (cid.Cid, error) `perm:"sign"` - MsigApproveTxnHash func(ctx context.Context, msig address.Address, txID uint64, proposer address.Address, to address.Address, amt types.BigInt, src address.Address, method uint64, params []byte) (cid.Cid, error) `perm:"sign"` - MsigCancel func(context.Context, address.Address, uint64, address.Address, types.BigInt, address.Address, uint64, []byte) (cid.Cid, error) `perm:"sign"` - MsigCancelTxnHash func(context.Context, address.Address, uint64, address.Address, types.BigInt, address.Address, uint64, []byte) (cid.Cid, error) `perm:"sign"` - MsigCreate func(context.Context, uint64, []address.Address, abi.ChainEpoch, types.BigInt, address.Address, types.BigInt) (cid.Cid, error) `perm:"sign"` - MsigGetAvailableBalance func(context.Context, address.Address, types.TipSetKey) (types.BigInt, error) `perm:"read"` - MsigGetPending func(context.Context, address.Address, types.TipSetKey) ([]*types.MsigTransaction, error) `perm:"read"` - MsigGetVested func(ctx context.Context, addr address.Address, start types.TipSetKey, end types.TipSetKey) (types.BigInt, error) `perm:"read"` - MsigGetVestingSchedule func(context.Context, address.Address, types.TipSetKey) (types.MsigVesting, error) `perm:"read"` - MsigPropose func(ctx context.Context, msig address.Address, to address.Address, amt types.BigInt, src address.Address, method uint64, params []byte) (cid.Cid, error) `perm:"sign"` - MsigRemoveSigner func(ctx context.Context, msig address.Address, proposer address.Address, toRemove address.Address, decrease bool) (cid.Cid, error) `perm:"sign"` - MsigSwapApprove func(ctx context.Context, msig address.Address, src address.Address, txID uint64, proposer address.Address, oldAdd address.Address, newAdd address.Address) (cid.Cid, error) `perm:"sign"` - MsigSwapCancel func(ctx context.Context, msig address.Address, src address.Address, txID uint64, oldAdd address.Address, newAdd address.Address) (cid.Cid, error) `perm:"sign"` - MsigSwapPropose func(ctx context.Context, msig address.Address, src address.Address, oldAdd address.Address, newAdd address.Address) (cid.Cid, error) `perm:"sign"` - } -} - -func (s *IMultiSigStruct) MsigAddApprove(p0 context.Context, p1 address.Address, p2 address.Address, p3 uint64, p4 address.Address, p5 address.Address, p6 bool) (cid.Cid, error) { - return s.Internal.MsigAddApprove(p0, p1, p2, p3, p4, p5, p6) -} -func (s *IMultiSigStruct) MsigAddCancel(p0 context.Context, p1 address.Address, p2 address.Address, p3 uint64, p4 address.Address, p5 bool) (cid.Cid, error) { - return s.Internal.MsigAddCancel(p0, p1, p2, p3, p4, p5) -} -func (s *IMultiSigStruct) MsigAddPropose(p0 context.Context, p1 address.Address, p2 address.Address, p3 address.Address, p4 bool) (cid.Cid, error) { - return s.Internal.MsigAddPropose(p0, p1, p2, p3, p4) -} -func (s *IMultiSigStruct) MsigApprove(p0 context.Context, p1 address.Address, p2 uint64, p3 address.Address) (cid.Cid, error) { - return s.Internal.MsigApprove(p0, p1, p2, p3) -} -func (s *IMultiSigStruct) MsigApproveTxnHash(p0 context.Context, p1 address.Address, p2 uint64, p3 address.Address, p4 address.Address, p5 types.BigInt, p6 address.Address, p7 uint64, p8 []byte) (cid.Cid, error) { - return s.Internal.MsigApproveTxnHash(p0, p1, p2, p3, p4, p5, p6, p7, p8) -} -func (s *IMultiSigStruct) MsigCancel(p0 context.Context, p1 address.Address, p2 uint64, p3 address.Address, p4 types.BigInt, p5 address.Address, p6 uint64, p7 []byte) (cid.Cid, error) { - return s.Internal.MsigCancel(p0, p1, p2, p3, p4, p5, p6, p7) -} -func (s *IMultiSigStruct) MsigCancelTxnHash(p0 context.Context, p1 address.Address, p2 uint64, p3 address.Address, p4 types.BigInt, p5 address.Address, p6 uint64, p7 []byte) (cid.Cid, error) { - return s.Internal.MsigCancelTxnHash(p0, p1, p2, p3, p4, p5, p6, p7) -} -func (s *IMultiSigStruct) MsigCreate(p0 context.Context, p1 uint64, p2 []address.Address, p3 abi.ChainEpoch, p4 types.BigInt, p5 address.Address, p6 types.BigInt) (cid.Cid, error) { - return s.Internal.MsigCreate(p0, p1, p2, p3, p4, p5, p6) -} -func (s *IMultiSigStruct) MsigGetAvailableBalance(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (types.BigInt, error) { - return s.Internal.MsigGetAvailableBalance(p0, p1, p2) -} -func (s *IMultiSigStruct) MsigGetPending(p0 context.Context, p1 address.Address, p2 types.TipSetKey) ([]*types.MsigTransaction, error) { - return s.Internal.MsigGetPending(p0, p1, p2) -} -func (s *IMultiSigStruct) MsigGetVested(p0 context.Context, p1 address.Address, p2 types.TipSetKey, p3 types.TipSetKey) (types.BigInt, error) { - return s.Internal.MsigGetVested(p0, p1, p2, p3) -} -func (s *IMultiSigStruct) MsigGetVestingSchedule(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (types.MsigVesting, error) { - return s.Internal.MsigGetVestingSchedule(p0, p1, p2) -} -func (s *IMultiSigStruct) MsigPropose(p0 context.Context, p1 address.Address, p2 address.Address, p3 types.BigInt, p4 address.Address, p5 uint64, p6 []byte) (cid.Cid, error) { - return s.Internal.MsigPropose(p0, p1, p2, p3, p4, p5, p6) -} -func (s *IMultiSigStruct) MsigRemoveSigner(p0 context.Context, p1 address.Address, p2 address.Address, p3 address.Address, p4 bool) (cid.Cid, error) { - return s.Internal.MsigRemoveSigner(p0, p1, p2, p3, p4) -} -func (s *IMultiSigStruct) MsigSwapApprove(p0 context.Context, p1 address.Address, p2 address.Address, p3 uint64, p4 address.Address, p5 address.Address, p6 address.Address) (cid.Cid, error) { - return s.Internal.MsigSwapApprove(p0, p1, p2, p3, p4, p5, p6) -} -func (s *IMultiSigStruct) MsigSwapCancel(p0 context.Context, p1 address.Address, p2 address.Address, p3 uint64, p4 address.Address, p5 address.Address) (cid.Cid, error) { - return s.Internal.MsigSwapCancel(p0, p1, p2, p3, p4, p5) -} -func (s *IMultiSigStruct) MsigSwapPropose(p0 context.Context, p1 address.Address, p2 address.Address, p3 address.Address, p4 address.Address) (cid.Cid, error) { - return s.Internal.MsigSwapPropose(p0, p1, p2, p3, p4) -} - type INetworkStruct struct { Internal struct { ID func(ctx context.Context) (peer.ID, error) `perm:"read"` @@ -869,7 +795,6 @@ type FullNodeStruct struct { IMarketStruct IMiningStruct IMessagePoolStruct - IMultiSigStruct INetworkStruct IPaychanStruct ISyncerStruct diff --git a/venus-shared/api/chain/v1/fullnode.go b/venus-shared/api/chain/v1/fullnode.go index 389492b69d..8afc3effb4 100644 --- a/venus-shared/api/chain/v1/fullnode.go +++ b/venus-shared/api/chain/v1/fullnode.go @@ -6,7 +6,6 @@ type FullNode interface { IMarket IMining IMessagePool - IMultiSig INetwork IPaychan ISyncer diff --git a/venus-shared/api/chain/v1/method.md b/venus-shared/api/chain/v1/method.md index 0a65663115..fcc9748390 100644 --- a/venus-shared/api/chain/v1/method.md +++ b/venus-shared/api/chain/v1/method.md @@ -177,25 +177,6 @@ curl http://:/rpc/v1 -X POST -H "Content-Type: application/json" -H " * [Mining](#mining) * [MinerCreateBlock](#minercreateblock) * [MinerGetBaseInfo](#minergetbaseinfo) -* [MultiSig](#multisig) - * [MsigAddApprove](#msigaddapprove) - * [MsigAddCancel](#msigaddcancel) - * [MsigAddPropose](#msigaddpropose) - * [MsigApprove](#msigapprove) - * [MsigApproveTxnHash](#msigapprovetxnhash) - * [MsigCancel](#msigcancel) - * [MsigCancelTxnHash](#msigcanceltxnhash) - * [MsigCreate](#msigcreate) - * [MsigGetAvailableBalance](#msiggetavailablebalance) - * [MsigGetPending](#msiggetpending) - * [MsigGetVested](#msiggetvested) - * [MsigGetVestingSchedule](#msiggetvestingschedule) - * [MsigPropose](#msigpropose) - * [MsigRemoveSigner](#msigremovesigner) - * [MsigSwapApprove](#msigswapapprove) - * [MsigSwapCancel](#msigswapcancel) - * [MsigSwapPropose](#msigswappropose) - * [StateMsigInfo](#statemsiginfo) * [Network](#network) * [ID](#id) * [NetAddrsListen](#netaddrslisten) @@ -5442,668 +5423,6 @@ Response: } ``` -## MultiSig - -### MsigAddApprove - - -Perms: sign - -Inputs: -```json -[ - "f01234", - "f01234", - 42, - "f01234", - "f01234", - true -] -``` - -Response: -```json -{ - "Message": { - "CID": { - "/": "bafy2bzacebbpdegvr3i4cosewthysg5xkxpqfn2wfcz6mv2hmoktwbdxkax4s" - }, - "Version": 42, - "To": "f01234", - "From": "f01234", - "Nonce": 42, - "Value": "0", - "GasLimit": 9, - "GasFeeCap": "0", - "GasPremium": "0", - "Method": 1, - "Params": "Ynl0ZSBhcnJheQ==" - }, - "ValidNonce": true -} -``` - -### MsigAddCancel - - -Perms: sign - -Inputs: -```json -[ - "f01234", - "f01234", - 42, - "f01234", - true -] -``` - -Response: -```json -{ - "Message": { - "CID": { - "/": "bafy2bzacebbpdegvr3i4cosewthysg5xkxpqfn2wfcz6mv2hmoktwbdxkax4s" - }, - "Version": 42, - "To": "f01234", - "From": "f01234", - "Nonce": 42, - "Value": "0", - "GasLimit": 9, - "GasFeeCap": "0", - "GasPremium": "0", - "Method": 1, - "Params": "Ynl0ZSBhcnJheQ==" - }, - "ValidNonce": true -} -``` - -### MsigAddPropose - - -Perms: sign - -Inputs: -```json -[ - "f01234", - "f01234", - "f01234", - true -] -``` - -Response: -```json -{ - "Message": { - "CID": { - "/": "bafy2bzacebbpdegvr3i4cosewthysg5xkxpqfn2wfcz6mv2hmoktwbdxkax4s" - }, - "Version": 42, - "To": "f01234", - "From": "f01234", - "Nonce": 42, - "Value": "0", - "GasLimit": 9, - "GasFeeCap": "0", - "GasPremium": "0", - "Method": 1, - "Params": "Ynl0ZSBhcnJheQ==" - }, - "ValidNonce": true -} -``` - -### MsigApprove - - -Perms: sign - -Inputs: -```json -[ - "f01234", - 42, - "f01234" -] -``` - -Response: -```json -{ - "Message": { - "CID": { - "/": "bafy2bzacebbpdegvr3i4cosewthysg5xkxpqfn2wfcz6mv2hmoktwbdxkax4s" - }, - "Version": 42, - "To": "f01234", - "From": "f01234", - "Nonce": 42, - "Value": "0", - "GasLimit": 9, - "GasFeeCap": "0", - "GasPremium": "0", - "Method": 1, - "Params": "Ynl0ZSBhcnJheQ==" - }, - "ValidNonce": true -} -``` - -### MsigApproveTxnHash - - -Perms: sign - -Inputs: -```json -[ - "f01234", - 42, - "f01234", - "f01234", - "0", - "f01234", - 42, - "Ynl0ZSBhcnJheQ==" -] -``` - -Response: -```json -{ - "Message": { - "CID": { - "/": "bafy2bzacebbpdegvr3i4cosewthysg5xkxpqfn2wfcz6mv2hmoktwbdxkax4s" - }, - "Version": 42, - "To": "f01234", - "From": "f01234", - "Nonce": 42, - "Value": "0", - "GasLimit": 9, - "GasFeeCap": "0", - "GasPremium": "0", - "Method": 1, - "Params": "Ynl0ZSBhcnJheQ==" - }, - "ValidNonce": true -} -``` - -### MsigCancel - - -Perms: sign - -Inputs: -```json -[ - "f01234", - 42, - "f01234" -] -``` - -Response: -```json -{ - "Message": { - "CID": { - "/": "bafy2bzacebbpdegvr3i4cosewthysg5xkxpqfn2wfcz6mv2hmoktwbdxkax4s" - }, - "Version": 42, - "To": "f01234", - "From": "f01234", - "Nonce": 42, - "Value": "0", - "GasLimit": 9, - "GasFeeCap": "0", - "GasPremium": "0", - "Method": 1, - "Params": "Ynl0ZSBhcnJheQ==" - }, - "ValidNonce": true -} -``` - -### MsigCancelTxnHash -MsigCancel cancels a previously-proposed multisig message -It takes the following params: \, \, \, \, -\, \, \ - - -Perms: sign - -Inputs: -```json -[ - "f01234", - 42, - "f01234", - "0", - "f01234", - 42, - "Ynl0ZSBhcnJheQ==" -] -``` - -Response: -```json -{ - "Message": { - "CID": { - "/": "bafy2bzacebbpdegvr3i4cosewthysg5xkxpqfn2wfcz6mv2hmoktwbdxkax4s" - }, - "Version": 42, - "To": "f01234", - "From": "f01234", - "Nonce": 42, - "Value": "0", - "GasLimit": 9, - "GasFeeCap": "0", - "GasPremium": "0", - "Method": 1, - "Params": "Ynl0ZSBhcnJheQ==" - }, - "ValidNonce": true -} -``` - -### MsigCreate - - -Perms: sign - -Inputs: -```json -[ - 42, - [ - "f01234" - ], - 10101, - "0", - "f01234", - "0" -] -``` - -Response: -```json -{ - "Message": { - "CID": { - "/": "bafy2bzacebbpdegvr3i4cosewthysg5xkxpqfn2wfcz6mv2hmoktwbdxkax4s" - }, - "Version": 42, - "To": "f01234", - "From": "f01234", - "Nonce": 42, - "Value": "0", - "GasLimit": 9, - "GasFeeCap": "0", - "GasPremium": "0", - "Method": 1, - "Params": "Ynl0ZSBhcnJheQ==" - }, - "ValidNonce": true -} -``` - -### MsigGetAvailableBalance -MsigGetAvailableBalance returns the portion of a multisig's balance that can be withdrawn or spent - - -Perms: read - -Inputs: -```json -[ - "f01234", - [ - { - "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" - }, - { - "/": "bafy2bzacebp3shtrn43k7g3unredz7fxn4gj533d3o43tqn2p2ipxxhrvchve" - } - ] -] -``` - -Response: `"0"` - -### MsigGetPending -MsigGetPending returns pending transactions for the given multisig -wallet. Once pending transactions are fully approved, they will no longer -appear here. - - -Perms: read - -Inputs: -```json -[ - "f01234", - [ - { - "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" - }, - { - "/": "bafy2bzacebp3shtrn43k7g3unredz7fxn4gj533d3o43tqn2p2ipxxhrvchve" - } - ] -] -``` - -Response: -```json -[ - { - "ID": 9, - "To": "f01234", - "Value": "0", - "Method": 1, - "Params": "Ynl0ZSBhcnJheQ==", - "Approved": [ - "f01234" - ] - } -] -``` - -### MsigGetVested -MsigGetVested returns the amount of FIL that vested in a multisig in a certain period. -It takes the following params: \, \, \ - - -Perms: read - -Inputs: -```json -[ - "f01234", - [ - { - "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" - }, - { - "/": "bafy2bzacebp3shtrn43k7g3unredz7fxn4gj533d3o43tqn2p2ipxxhrvchve" - } - ], - [ - { - "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" - }, - { - "/": "bafy2bzacebp3shtrn43k7g3unredz7fxn4gj533d3o43tqn2p2ipxxhrvchve" - } - ] -] -``` - -Response: `"0"` - -### MsigGetVestingSchedule -MsigGetVestingSchedule returns the vesting details of a given multisig. - - -Perms: read - -Inputs: -```json -[ - "f01234", - [ - { - "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" - }, - { - "/": "bafy2bzacebp3shtrn43k7g3unredz7fxn4gj533d3o43tqn2p2ipxxhrvchve" - } - ] -] -``` - -Response: -```json -{ - "InitialBalance": "0", - "StartEpoch": 10101, - "UnlockDuration": 10101 -} -``` - -### MsigPropose - - -Perms: sign - -Inputs: -```json -[ - "f01234", - "f01234", - "0", - "f01234", - 42, - "Ynl0ZSBhcnJheQ==" -] -``` - -Response: -```json -{ - "Message": { - "CID": { - "/": "bafy2bzacebbpdegvr3i4cosewthysg5xkxpqfn2wfcz6mv2hmoktwbdxkax4s" - }, - "Version": 42, - "To": "f01234", - "From": "f01234", - "Nonce": 42, - "Value": "0", - "GasLimit": 9, - "GasFeeCap": "0", - "GasPremium": "0", - "Method": 1, - "Params": "Ynl0ZSBhcnJheQ==" - }, - "ValidNonce": true -} -``` - -### MsigRemoveSigner - - -Perms: sign - -Inputs: -```json -[ - "f01234", - "f01234", - "f01234", - true -] -``` - -Response: -```json -{ - "Message": { - "CID": { - "/": "bafy2bzacebbpdegvr3i4cosewthysg5xkxpqfn2wfcz6mv2hmoktwbdxkax4s" - }, - "Version": 42, - "To": "f01234", - "From": "f01234", - "Nonce": 42, - "Value": "0", - "GasLimit": 9, - "GasFeeCap": "0", - "GasPremium": "0", - "Method": 1, - "Params": "Ynl0ZSBhcnJheQ==" - }, - "ValidNonce": true -} -``` - -### MsigSwapApprove - - -Perms: sign - -Inputs: -```json -[ - "f01234", - "f01234", - 42, - "f01234", - "f01234", - "f01234" -] -``` - -Response: -```json -{ - "Message": { - "CID": { - "/": "bafy2bzacebbpdegvr3i4cosewthysg5xkxpqfn2wfcz6mv2hmoktwbdxkax4s" - }, - "Version": 42, - "To": "f01234", - "From": "f01234", - "Nonce": 42, - "Value": "0", - "GasLimit": 9, - "GasFeeCap": "0", - "GasPremium": "0", - "Method": 1, - "Params": "Ynl0ZSBhcnJheQ==" - }, - "ValidNonce": true -} -``` - -### MsigSwapCancel - - -Perms: sign - -Inputs: -```json -[ - "f01234", - "f01234", - 42, - "f01234", - "f01234" -] -``` - -Response: -```json -{ - "Message": { - "CID": { - "/": "bafy2bzacebbpdegvr3i4cosewthysg5xkxpqfn2wfcz6mv2hmoktwbdxkax4s" - }, - "Version": 42, - "To": "f01234", - "From": "f01234", - "Nonce": 42, - "Value": "0", - "GasLimit": 9, - "GasFeeCap": "0", - "GasPremium": "0", - "Method": 1, - "Params": "Ynl0ZSBhcnJheQ==" - }, - "ValidNonce": true -} -``` - -### MsigSwapPropose - - -Perms: sign - -Inputs: -```json -[ - "f01234", - "f01234", - "f01234", - "f01234" -] -``` - -Response: -```json -{ - "Message": { - "CID": { - "/": "bafy2bzacebbpdegvr3i4cosewthysg5xkxpqfn2wfcz6mv2hmoktwbdxkax4s" - }, - "Version": 42, - "To": "f01234", - "From": "f01234", - "Nonce": 42, - "Value": "0", - "GasLimit": 9, - "GasFeeCap": "0", - "GasPremium": "0", - "Method": 1, - "Params": "Ynl0ZSBhcnJheQ==" - }, - "ValidNonce": true -} -``` - -### StateMsigInfo - - -Perms: read - -Inputs: -```json -[ - "f01234", - [ - { - "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" - }, - { - "/": "bafy2bzacebp3shtrn43k7g3unredz7fxn4gj533d3o43tqn2p2ipxxhrvchve" - } - ] -] -``` - -Response: -```json -{ - "ApprovalsThreshold": 42, - "Signers": [ - "f01234" - ], - "InitialBalance": "0", - "CurrentBalance": "0", - "LockBalance": "0", - "StartEpoch": 10101, - "UnlockDuration": 10101 -} -``` - ## Network ### ID diff --git a/venus-shared/api/chain/v1/mock/mock_fullnode.go b/venus-shared/api/chain/v1/mock/mock_fullnode.go index fbf1a97021..17cdd49f48 100644 --- a/venus-shared/api/chain/v1/mock/mock_fullnode.go +++ b/venus-shared/api/chain/v1/mock/mock_fullnode.go @@ -1483,261 +1483,6 @@ func (mr *MockFullNodeMockRecorder) MpoolSub(arg0 interface{}) *gomock.Call { return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "MpoolSub", reflect.TypeOf((*MockFullNode)(nil).MpoolSub), arg0) } -// MsigAddApprove mocks base method. -func (m *MockFullNode) MsigAddApprove(arg0 context.Context, arg1, arg2 address.Address, arg3 uint64, arg4, arg5 address.Address, arg6 bool) (*types0.MessagePrototype, error) { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "MsigAddApprove", arg0, arg1, arg2, arg3, arg4, arg5, arg6) - ret0, _ := ret[0].(*types0.MessagePrototype) - ret1, _ := ret[1].(error) - return ret0, ret1 -} - -// MsigAddApprove indicates an expected call of MsigAddApprove. -func (mr *MockFullNodeMockRecorder) MsigAddApprove(arg0, arg1, arg2, arg3, arg4, arg5, arg6 interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "MsigAddApprove", reflect.TypeOf((*MockFullNode)(nil).MsigAddApprove), arg0, arg1, arg2, arg3, arg4, arg5, arg6) -} - -// MsigAddCancel mocks base method. -func (m *MockFullNode) MsigAddCancel(arg0 context.Context, arg1, arg2 address.Address, arg3 uint64, arg4 address.Address, arg5 bool) (*types0.MessagePrototype, error) { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "MsigAddCancel", arg0, arg1, arg2, arg3, arg4, arg5) - ret0, _ := ret[0].(*types0.MessagePrototype) - ret1, _ := ret[1].(error) - return ret0, ret1 -} - -// MsigAddCancel indicates an expected call of MsigAddCancel. -func (mr *MockFullNodeMockRecorder) MsigAddCancel(arg0, arg1, arg2, arg3, arg4, arg5 interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "MsigAddCancel", reflect.TypeOf((*MockFullNode)(nil).MsigAddCancel), arg0, arg1, arg2, arg3, arg4, arg5) -} - -// MsigAddPropose mocks base method. -func (m *MockFullNode) MsigAddPropose(arg0 context.Context, arg1, arg2, arg3 address.Address, arg4 bool) (*types0.MessagePrototype, error) { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "MsigAddPropose", arg0, arg1, arg2, arg3, arg4) - ret0, _ := ret[0].(*types0.MessagePrototype) - ret1, _ := ret[1].(error) - return ret0, ret1 -} - -// MsigAddPropose indicates an expected call of MsigAddPropose. -func (mr *MockFullNodeMockRecorder) MsigAddPropose(arg0, arg1, arg2, arg3, arg4 interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "MsigAddPropose", reflect.TypeOf((*MockFullNode)(nil).MsigAddPropose), arg0, arg1, arg2, arg3, arg4) -} - -// MsigApprove mocks base method. -func (m *MockFullNode) MsigApprove(arg0 context.Context, arg1 address.Address, arg2 uint64, arg3 address.Address) (*types0.MessagePrototype, error) { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "MsigApprove", arg0, arg1, arg2, arg3) - ret0, _ := ret[0].(*types0.MessagePrototype) - ret1, _ := ret[1].(error) - return ret0, ret1 -} - -// MsigApprove indicates an expected call of MsigApprove. -func (mr *MockFullNodeMockRecorder) MsigApprove(arg0, arg1, arg2, arg3 interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "MsigApprove", reflect.TypeOf((*MockFullNode)(nil).MsigApprove), arg0, arg1, arg2, arg3) -} - -// MsigApproveTxnHash mocks base method. -func (m *MockFullNode) MsigApproveTxnHash(arg0 context.Context, arg1 address.Address, arg2 uint64, arg3, arg4 address.Address, arg5 big.Int, arg6 address.Address, arg7 uint64, arg8 []byte) (*types0.MessagePrototype, error) { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "MsigApproveTxnHash", arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8) - ret0, _ := ret[0].(*types0.MessagePrototype) - ret1, _ := ret[1].(error) - return ret0, ret1 -} - -// MsigApproveTxnHash indicates an expected call of MsigApproveTxnHash. -func (mr *MockFullNodeMockRecorder) MsigApproveTxnHash(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8 interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "MsigApproveTxnHash", reflect.TypeOf((*MockFullNode)(nil).MsigApproveTxnHash), arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8) -} - -// MsigCancel mocks base method. -func (m *MockFullNode) MsigCancel(arg0 context.Context, arg1 address.Address, arg2 uint64, arg3 address.Address) (*types0.MessagePrototype, error) { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "MsigCancel", arg0, arg1, arg2, arg3) - ret0, _ := ret[0].(*types0.MessagePrototype) - ret1, _ := ret[1].(error) - return ret0, ret1 -} - -// MsigCancel indicates an expected call of MsigCancel. -func (mr *MockFullNodeMockRecorder) MsigCancel(arg0, arg1, arg2, arg3 interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "MsigCancel", reflect.TypeOf((*MockFullNode)(nil).MsigCancel), arg0, arg1, arg2, arg3) -} - -// MsigCancelTxnHash mocks base method. -func (m *MockFullNode) MsigCancelTxnHash(arg0 context.Context, arg1 address.Address, arg2 uint64, arg3 address.Address, arg4 big.Int, arg5 address.Address, arg6 uint64, arg7 []byte) (*types0.MessagePrototype, error) { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "MsigCancelTxnHash", arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7) - ret0, _ := ret[0].(*types0.MessagePrototype) - ret1, _ := ret[1].(error) - return ret0, ret1 -} - -// MsigCancelTxnHash indicates an expected call of MsigCancelTxnHash. -func (mr *MockFullNodeMockRecorder) MsigCancelTxnHash(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7 interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "MsigCancelTxnHash", reflect.TypeOf((*MockFullNode)(nil).MsigCancelTxnHash), arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7) -} - -// MsigCreate mocks base method. -func (m *MockFullNode) MsigCreate(arg0 context.Context, arg1 uint64, arg2 []address.Address, arg3 abi.ChainEpoch, arg4 big.Int, arg5 address.Address, arg6 big.Int) (*types0.MessagePrototype, error) { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "MsigCreate", arg0, arg1, arg2, arg3, arg4, arg5, arg6) - ret0, _ := ret[0].(*types0.MessagePrototype) - ret1, _ := ret[1].(error) - return ret0, ret1 -} - -// MsigCreate indicates an expected call of MsigCreate. -func (mr *MockFullNodeMockRecorder) MsigCreate(arg0, arg1, arg2, arg3, arg4, arg5, arg6 interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "MsigCreate", reflect.TypeOf((*MockFullNode)(nil).MsigCreate), arg0, arg1, arg2, arg3, arg4, arg5, arg6) -} - -// MsigGetAvailableBalance mocks base method. -func (m *MockFullNode) MsigGetAvailableBalance(arg0 context.Context, arg1 address.Address, arg2 types0.TipSetKey) (big.Int, error) { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "MsigGetAvailableBalance", arg0, arg1, arg2) - ret0, _ := ret[0].(big.Int) - ret1, _ := ret[1].(error) - return ret0, ret1 -} - -// MsigGetAvailableBalance indicates an expected call of MsigGetAvailableBalance. -func (mr *MockFullNodeMockRecorder) MsigGetAvailableBalance(arg0, arg1, arg2 interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "MsigGetAvailableBalance", reflect.TypeOf((*MockFullNode)(nil).MsigGetAvailableBalance), arg0, arg1, arg2) -} - -// MsigGetPending mocks base method. -func (m *MockFullNode) MsigGetPending(arg0 context.Context, arg1 address.Address, arg2 types0.TipSetKey) ([]*types0.MsigTransaction, error) { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "MsigGetPending", arg0, arg1, arg2) - ret0, _ := ret[0].([]*types0.MsigTransaction) - ret1, _ := ret[1].(error) - return ret0, ret1 -} - -// MsigGetPending indicates an expected call of MsigGetPending. -func (mr *MockFullNodeMockRecorder) MsigGetPending(arg0, arg1, arg2 interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "MsigGetPending", reflect.TypeOf((*MockFullNode)(nil).MsigGetPending), arg0, arg1, arg2) -} - -// MsigGetVested mocks base method. -func (m *MockFullNode) MsigGetVested(arg0 context.Context, arg1 address.Address, arg2, arg3 types0.TipSetKey) (big.Int, error) { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "MsigGetVested", arg0, arg1, arg2, arg3) - ret0, _ := ret[0].(big.Int) - ret1, _ := ret[1].(error) - return ret0, ret1 -} - -// MsigGetVested indicates an expected call of MsigGetVested. -func (mr *MockFullNodeMockRecorder) MsigGetVested(arg0, arg1, arg2, arg3 interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "MsigGetVested", reflect.TypeOf((*MockFullNode)(nil).MsigGetVested), arg0, arg1, arg2, arg3) -} - -// MsigGetVestingSchedule mocks base method. -func (m *MockFullNode) MsigGetVestingSchedule(arg0 context.Context, arg1 address.Address, arg2 types0.TipSetKey) (types0.MsigVesting, error) { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "MsigGetVestingSchedule", arg0, arg1, arg2) - ret0, _ := ret[0].(types0.MsigVesting) - ret1, _ := ret[1].(error) - return ret0, ret1 -} - -// MsigGetVestingSchedule indicates an expected call of MsigGetVestingSchedule. -func (mr *MockFullNodeMockRecorder) MsigGetVestingSchedule(arg0, arg1, arg2 interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "MsigGetVestingSchedule", reflect.TypeOf((*MockFullNode)(nil).MsigGetVestingSchedule), arg0, arg1, arg2) -} - -// MsigPropose mocks base method. -func (m *MockFullNode) MsigPropose(arg0 context.Context, arg1, arg2 address.Address, arg3 big.Int, arg4 address.Address, arg5 uint64, arg6 []byte) (*types0.MessagePrototype, error) { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "MsigPropose", arg0, arg1, arg2, arg3, arg4, arg5, arg6) - ret0, _ := ret[0].(*types0.MessagePrototype) - ret1, _ := ret[1].(error) - return ret0, ret1 -} - -// MsigPropose indicates an expected call of MsigPropose. -func (mr *MockFullNodeMockRecorder) MsigPropose(arg0, arg1, arg2, arg3, arg4, arg5, arg6 interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "MsigPropose", reflect.TypeOf((*MockFullNode)(nil).MsigPropose), arg0, arg1, arg2, arg3, arg4, arg5, arg6) -} - -// MsigRemoveSigner mocks base method. -func (m *MockFullNode) MsigRemoveSigner(arg0 context.Context, arg1, arg2, arg3 address.Address, arg4 bool) (*types0.MessagePrototype, error) { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "MsigRemoveSigner", arg0, arg1, arg2, arg3, arg4) - ret0, _ := ret[0].(*types0.MessagePrototype) - ret1, _ := ret[1].(error) - return ret0, ret1 -} - -// MsigRemoveSigner indicates an expected call of MsigRemoveSigner. -func (mr *MockFullNodeMockRecorder) MsigRemoveSigner(arg0, arg1, arg2, arg3, arg4 interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "MsigRemoveSigner", reflect.TypeOf((*MockFullNode)(nil).MsigRemoveSigner), arg0, arg1, arg2, arg3, arg4) -} - -// MsigSwapApprove mocks base method. -func (m *MockFullNode) MsigSwapApprove(arg0 context.Context, arg1, arg2 address.Address, arg3 uint64, arg4, arg5, arg6 address.Address) (*types0.MessagePrototype, error) { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "MsigSwapApprove", arg0, arg1, arg2, arg3, arg4, arg5, arg6) - ret0, _ := ret[0].(*types0.MessagePrototype) - ret1, _ := ret[1].(error) - return ret0, ret1 -} - -// MsigSwapApprove indicates an expected call of MsigSwapApprove. -func (mr *MockFullNodeMockRecorder) MsigSwapApprove(arg0, arg1, arg2, arg3, arg4, arg5, arg6 interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "MsigSwapApprove", reflect.TypeOf((*MockFullNode)(nil).MsigSwapApprove), arg0, arg1, arg2, arg3, arg4, arg5, arg6) -} - -// MsigSwapCancel mocks base method. -func (m *MockFullNode) MsigSwapCancel(arg0 context.Context, arg1, arg2 address.Address, arg3 uint64, arg4, arg5 address.Address) (*types0.MessagePrototype, error) { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "MsigSwapCancel", arg0, arg1, arg2, arg3, arg4, arg5) - ret0, _ := ret[0].(*types0.MessagePrototype) - ret1, _ := ret[1].(error) - return ret0, ret1 -} - -// MsigSwapCancel indicates an expected call of MsigSwapCancel. -func (mr *MockFullNodeMockRecorder) MsigSwapCancel(arg0, arg1, arg2, arg3, arg4, arg5 interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "MsigSwapCancel", reflect.TypeOf((*MockFullNode)(nil).MsigSwapCancel), arg0, arg1, arg2, arg3, arg4, arg5) -} - -// MsigSwapPropose mocks base method. -func (m *MockFullNode) MsigSwapPropose(arg0 context.Context, arg1, arg2, arg3, arg4 address.Address) (*types0.MessagePrototype, error) { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "MsigSwapPropose", arg0, arg1, arg2, arg3, arg4) - ret0, _ := ret[0].(*types0.MessagePrototype) - ret1, _ := ret[1].(error) - return ret0, ret1 -} - -// MsigSwapPropose indicates an expected call of MsigSwapPropose. -func (mr *MockFullNodeMockRecorder) MsigSwapPropose(arg0, arg1, arg2, arg3, arg4 interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "MsigSwapPropose", reflect.TypeOf((*MockFullNode)(nil).MsigSwapPropose), arg0, arg1, arg2, arg3, arg4) -} - // NetAddrsListen mocks base method. func (m *MockFullNode) NetAddrsListen(arg0 context.Context) (peer.AddrInfo, error) { m.ctrl.T.Helper() @@ -3095,21 +2840,6 @@ func (mr *MockFullNodeMockRecorder) StateMinerWorkerAddress(arg0, arg1, arg2 int return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateMinerWorkerAddress", reflect.TypeOf((*MockFullNode)(nil).StateMinerWorkerAddress), arg0, arg1, arg2) } -// StateMsigInfo mocks base method. -func (m *MockFullNode) StateMsigInfo(arg0 context.Context, arg1 address.Address, arg2 types.TipSetKey) (*types.MsigInfo, error) { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "StateMsigInfo", arg0, arg1, arg2) - ret0, _ := ret[0].(*types.MsigInfo) - ret1, _ := ret[1].(error) - return ret0, ret1 -} - -// StateMsigInfo indicates an expected call of StateMsigInfo. -func (mr *MockFullNodeMockRecorder) StateMsigInfo(arg0, arg1, arg2 interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateMsigInfo", reflect.TypeOf((*MockFullNode)(nil).StateMsigInfo), arg0, arg1, arg2) -} - // StateNetworkName mocks base method. func (m *MockFullNode) StateNetworkName(arg0 context.Context) (types0.NetworkName, error) { m.ctrl.T.Helper() diff --git a/venus-shared/api/chain/v1/multisig.go b/venus-shared/api/chain/v1/multisig.go deleted file mode 100644 index f38ddbe948..0000000000 --- a/venus-shared/api/chain/v1/multisig.go +++ /dev/null @@ -1,43 +0,0 @@ -package v1 - -import ( - "context" - - "github.com/filecoin-project/go-address" - "github.com/filecoin-project/go-state-types/abi" - - "github.com/filecoin-project/venus/venus-shared/types" -) - -type IMultiSig interface { - MsigCreate(ctx context.Context, req uint64, addrs []address.Address, duration abi.ChainEpoch, val types.BigInt, src address.Address, gp types.BigInt) (*types.MessagePrototype, error) //perm:sign - StateMsigInfo(ctx context.Context, addr address.Address, tsk types.TipSetKey) (*types.MsigInfo, error) //perm:read - MsigPropose(ctx context.Context, msig address.Address, to address.Address, amt types.BigInt, src address.Address, method uint64, params []byte) (*types.MessagePrototype, error) //perm:sign - MsigAddPropose(ctx context.Context, msig address.Address, src address.Address, newAdd address.Address, inc bool) (*types.MessagePrototype, error) //perm:sign - MsigAddApprove(ctx context.Context, msig address.Address, src address.Address, txID uint64, proposer address.Address, newAdd address.Address, inc bool) (*types.MessagePrototype, error) //perm:sign - MsigAddCancel(ctx context.Context, msig address.Address, src address.Address, txID uint64, newAdd address.Address, inc bool) (*types.MessagePrototype, error) //perm:sign - // MsigCancel cancels a previously-proposed multisig message - // It takes the following params: , , , , - // , , - MsigCancelTxnHash(context.Context, address.Address, uint64, address.Address, types.BigInt, address.Address, uint64, []byte) (*types.MessagePrototype, error) //perm:sign - MsigSwapPropose(ctx context.Context, msig address.Address, src address.Address, oldAdd address.Address, newAdd address.Address) (*types.MessagePrototype, error) //perm:sign - MsigSwapApprove(ctx context.Context, msig address.Address, src address.Address, txID uint64, proposer address.Address, oldAdd address.Address, newAdd address.Address) (*types.MessagePrototype, error) //perm:sign - MsigSwapCancel(ctx context.Context, msig address.Address, src address.Address, txID uint64, oldAdd address.Address, newAdd address.Address) (*types.MessagePrototype, error) //perm:sign - MsigApprove(ctx context.Context, msig address.Address, txID uint64, src address.Address) (*types.MessagePrototype, error) //perm:sign - MsigApproveTxnHash(ctx context.Context, msig address.Address, txID uint64, proposer address.Address, to address.Address, amt types.BigInt, src address.Address, method uint64, params []byte) (*types.MessagePrototype, error) //perm:sign - MsigCancel(ctx context.Context, msig address.Address, txID uint64, src address.Address) (*types.MessagePrototype, error) //perm:sign - MsigRemoveSigner(ctx context.Context, msig address.Address, proposer address.Address, toRemove address.Address, decrease bool) (*types.MessagePrototype, error) //perm:sign - - // MsigGetVested returns the amount of FIL that vested in a multisig in a certain period. - // It takes the following params: , , - MsigGetVested(context.Context, address.Address, types.TipSetKey, types.TipSetKey) (types.BigInt, error) //perm:read - // MsigGetAvailableBalance returns the portion of a multisig's balance that can be withdrawn or spent - MsigGetAvailableBalance(context.Context, address.Address, types.TipSetKey) (types.BigInt, error) //perm:read - // MsigGetVestingSchedule returns the vesting details of a given multisig. - MsigGetVestingSchedule(context.Context, address.Address, types.TipSetKey) (types.MsigVesting, error) //perm:read - - //MsigGetPending returns pending transactions for the given multisig - //wallet. Once pending transactions are fully approved, they will no longer - //appear here. - MsigGetPending(context.Context, address.Address, types.TipSetKey) ([]*types.MsigTransaction, error) //perm:read -} diff --git a/venus-shared/api/chain/v1/proxy_gen.go b/venus-shared/api/chain/v1/proxy_gen.go index 3c47c5d139..b7dcb0f73f 100644 --- a/venus-shared/api/chain/v1/proxy_gen.go +++ b/venus-shared/api/chain/v1/proxy_gen.go @@ -564,84 +564,6 @@ func (s *IMessagePoolStruct) MpoolSub(p0 context.Context) (<-chan types.MpoolUpd return s.Internal.MpoolSub(p0) } -type IMultiSigStruct struct { - Internal struct { - MsigAddApprove func(ctx context.Context, msig address.Address, src address.Address, txID uint64, proposer address.Address, newAdd address.Address, inc bool) (*types.MessagePrototype, error) `perm:"sign"` - MsigAddCancel func(ctx context.Context, msig address.Address, src address.Address, txID uint64, newAdd address.Address, inc bool) (*types.MessagePrototype, error) `perm:"sign"` - MsigAddPropose func(ctx context.Context, msig address.Address, src address.Address, newAdd address.Address, inc bool) (*types.MessagePrototype, error) `perm:"sign"` - MsigApprove func(ctx context.Context, msig address.Address, txID uint64, src address.Address) (*types.MessagePrototype, error) `perm:"sign"` - MsigApproveTxnHash func(ctx context.Context, msig address.Address, txID uint64, proposer address.Address, to address.Address, amt types.BigInt, src address.Address, method uint64, params []byte) (*types.MessagePrototype, error) `perm:"sign"` - MsigCancel func(ctx context.Context, msig address.Address, txID uint64, src address.Address) (*types.MessagePrototype, error) `perm:"sign"` - MsigCancelTxnHash func(context.Context, address.Address, uint64, address.Address, types.BigInt, address.Address, uint64, []byte) (*types.MessagePrototype, error) `perm:"sign"` - MsigCreate func(ctx context.Context, req uint64, addrs []address.Address, duration abi.ChainEpoch, val types.BigInt, src address.Address, gp types.BigInt) (*types.MessagePrototype, error) `perm:"sign"` - MsigGetAvailableBalance func(context.Context, address.Address, types.TipSetKey) (types.BigInt, error) `perm:"read"` - MsigGetPending func(context.Context, address.Address, types.TipSetKey) ([]*types.MsigTransaction, error) `perm:"read"` - MsigGetVested func(context.Context, address.Address, types.TipSetKey, types.TipSetKey) (types.BigInt, error) `perm:"read"` - MsigGetVestingSchedule func(context.Context, address.Address, types.TipSetKey) (types.MsigVesting, error) `perm:"read"` - MsigPropose func(ctx context.Context, msig address.Address, to address.Address, amt types.BigInt, src address.Address, method uint64, params []byte) (*types.MessagePrototype, error) `perm:"sign"` - MsigRemoveSigner func(ctx context.Context, msig address.Address, proposer address.Address, toRemove address.Address, decrease bool) (*types.MessagePrototype, error) `perm:"sign"` - MsigSwapApprove func(ctx context.Context, msig address.Address, src address.Address, txID uint64, proposer address.Address, oldAdd address.Address, newAdd address.Address) (*types.MessagePrototype, error) `perm:"sign"` - MsigSwapCancel func(ctx context.Context, msig address.Address, src address.Address, txID uint64, oldAdd address.Address, newAdd address.Address) (*types.MessagePrototype, error) `perm:"sign"` - MsigSwapPropose func(ctx context.Context, msig address.Address, src address.Address, oldAdd address.Address, newAdd address.Address) (*types.MessagePrototype, error) `perm:"sign"` - StateMsigInfo func(ctx context.Context, addr address.Address, tsk types.TipSetKey) (*types.MsigInfo, error) `perm:"read"` - } -} - -func (s *IMultiSigStruct) MsigAddApprove(p0 context.Context, p1 address.Address, p2 address.Address, p3 uint64, p4 address.Address, p5 address.Address, p6 bool) (*types.MessagePrototype, error) { - return s.Internal.MsigAddApprove(p0, p1, p2, p3, p4, p5, p6) -} -func (s *IMultiSigStruct) MsigAddCancel(p0 context.Context, p1 address.Address, p2 address.Address, p3 uint64, p4 address.Address, p5 bool) (*types.MessagePrototype, error) { - return s.Internal.MsigAddCancel(p0, p1, p2, p3, p4, p5) -} -func (s *IMultiSigStruct) MsigAddPropose(p0 context.Context, p1 address.Address, p2 address.Address, p3 address.Address, p4 bool) (*types.MessagePrototype, error) { - return s.Internal.MsigAddPropose(p0, p1, p2, p3, p4) -} -func (s *IMultiSigStruct) MsigApprove(p0 context.Context, p1 address.Address, p2 uint64, p3 address.Address) (*types.MessagePrototype, error) { - return s.Internal.MsigApprove(p0, p1, p2, p3) -} -func (s *IMultiSigStruct) MsigApproveTxnHash(p0 context.Context, p1 address.Address, p2 uint64, p3 address.Address, p4 address.Address, p5 types.BigInt, p6 address.Address, p7 uint64, p8 []byte) (*types.MessagePrototype, error) { - return s.Internal.MsigApproveTxnHash(p0, p1, p2, p3, p4, p5, p6, p7, p8) -} -func (s *IMultiSigStruct) MsigCancel(p0 context.Context, p1 address.Address, p2 uint64, p3 address.Address) (*types.MessagePrototype, error) { - return s.Internal.MsigCancel(p0, p1, p2, p3) -} -func (s *IMultiSigStruct) MsigCancelTxnHash(p0 context.Context, p1 address.Address, p2 uint64, p3 address.Address, p4 types.BigInt, p5 address.Address, p6 uint64, p7 []byte) (*types.MessagePrototype, error) { - return s.Internal.MsigCancelTxnHash(p0, p1, p2, p3, p4, p5, p6, p7) -} -func (s *IMultiSigStruct) MsigCreate(p0 context.Context, p1 uint64, p2 []address.Address, p3 abi.ChainEpoch, p4 types.BigInt, p5 address.Address, p6 types.BigInt) (*types.MessagePrototype, error) { - return s.Internal.MsigCreate(p0, p1, p2, p3, p4, p5, p6) -} -func (s *IMultiSigStruct) MsigGetAvailableBalance(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (types.BigInt, error) { - return s.Internal.MsigGetAvailableBalance(p0, p1, p2) -} -func (s *IMultiSigStruct) MsigGetPending(p0 context.Context, p1 address.Address, p2 types.TipSetKey) ([]*types.MsigTransaction, error) { - return s.Internal.MsigGetPending(p0, p1, p2) -} -func (s *IMultiSigStruct) MsigGetVested(p0 context.Context, p1 address.Address, p2 types.TipSetKey, p3 types.TipSetKey) (types.BigInt, error) { - return s.Internal.MsigGetVested(p0, p1, p2, p3) -} -func (s *IMultiSigStruct) MsigGetVestingSchedule(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (types.MsigVesting, error) { - return s.Internal.MsigGetVestingSchedule(p0, p1, p2) -} -func (s *IMultiSigStruct) MsigPropose(p0 context.Context, p1 address.Address, p2 address.Address, p3 types.BigInt, p4 address.Address, p5 uint64, p6 []byte) (*types.MessagePrototype, error) { - return s.Internal.MsigPropose(p0, p1, p2, p3, p4, p5, p6) -} -func (s *IMultiSigStruct) MsigRemoveSigner(p0 context.Context, p1 address.Address, p2 address.Address, p3 address.Address, p4 bool) (*types.MessagePrototype, error) { - return s.Internal.MsigRemoveSigner(p0, p1, p2, p3, p4) -} -func (s *IMultiSigStruct) MsigSwapApprove(p0 context.Context, p1 address.Address, p2 address.Address, p3 uint64, p4 address.Address, p5 address.Address, p6 address.Address) (*types.MessagePrototype, error) { - return s.Internal.MsigSwapApprove(p0, p1, p2, p3, p4, p5, p6) -} -func (s *IMultiSigStruct) MsigSwapCancel(p0 context.Context, p1 address.Address, p2 address.Address, p3 uint64, p4 address.Address, p5 address.Address) (*types.MessagePrototype, error) { - return s.Internal.MsigSwapCancel(p0, p1, p2, p3, p4, p5) -} -func (s *IMultiSigStruct) MsigSwapPropose(p0 context.Context, p1 address.Address, p2 address.Address, p3 address.Address, p4 address.Address) (*types.MessagePrototype, error) { - return s.Internal.MsigSwapPropose(p0, p1, p2, p3, p4) -} -func (s *IMultiSigStruct) StateMsigInfo(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (*types.MsigInfo, error) { - return s.Internal.StateMsigInfo(p0, p1, p2) -} - type INetworkStruct struct { Internal struct { ID func(ctx context.Context) (peer.ID, error) `perm:"read"` @@ -1079,7 +1001,6 @@ type FullNodeStruct struct { IMarketStruct IMiningStruct IMessagePoolStruct - IMultiSigStruct INetworkStruct IPaychanStruct ISyncerStruct diff --git a/venus-shared/compatible-checks/api-diff.txt b/venus-shared/compatible-checks/api-diff.txt index bffab1637d..7dcdf06f5f 100644 --- a/venus-shared/compatible-checks/api-diff.txt +++ b/venus-shared/compatible-checks/api-diff.txt @@ -61,7 +61,22 @@ github.com/filecoin-project/venus/venus-shared/api/chain/v0.FullNode <> github.c + MpoolPublishMessage > MpoolPushMessage {[func(context.Context, *types.Message, *types.MessageSendSpec) (*types.SignedMessage, error) <> func(context.Context, *types.Message, *api.MessageSendSpec) (*types.SignedMessage, error)] base=func in type: #2 input; nested={[*types.MessageSendSpec <> *api.MessageSendSpec] base=pointed type; nested={[types.MessageSendSpec <> api.MessageSendSpec] base=struct field; nested={[types.MessageSendSpec <> api.MessageSendSpec] base=exported fields count: 3 != 2; nested=nil}}}} + MpoolSelects - + MsigCancelTxnHash + - MsigAddApprove + - MsigAddCancel + - MsigAddPropose + - MsigApprove + - MsigApproveTxnHash + - MsigCancel + - MsigCreate + - MsigGetAvailableBalance + - MsigGetPending + - MsigGetVested + - MsigGetVestingSchedule + - MsigPropose + - MsigRemoveSigner + - MsigSwapApprove + - MsigSwapCancel + - MsigSwapPropose - NetBlockAdd - NetBlockList - NetBlockRemove @@ -175,6 +190,23 @@ github.com/filecoin-project/venus/venus-shared/api/chain/v1.FullNode <> github.c + MpoolPublishMessage > MpoolPushMessage {[func(context.Context, *types.Message, *types.MessageSendSpec) (*types.SignedMessage, error) <> func(context.Context, *types.Message, *api.MessageSendSpec) (*types.SignedMessage, error)] base=func in type: #2 input; nested={[*types.MessageSendSpec <> *api.MessageSendSpec] base=pointed type; nested={[types.MessageSendSpec <> api.MessageSendSpec] base=struct field; nested={[types.MessageSendSpec <> api.MessageSendSpec] base=exported fields count: 3 != 2; nested=nil}}}} + MpoolSelects + - MsigAddApprove + - MsigAddCancel + - MsigAddPropose + - MsigApprove + - MsigApproveTxnHash + - MsigCancel + - MsigCancelTxnHash + - MsigCreate + - MsigGetAvailableBalance + - MsigGetPending + - MsigGetVested + - MsigGetVestingSchedule + - MsigPropose + - MsigRemoveSigner + - MsigSwapApprove + - MsigSwapCancel + - MsigSwapPropose - NetBlockAdd - NetBlockList - NetBlockRemove @@ -195,7 +227,6 @@ github.com/filecoin-project/venus/venus-shared/api/chain/v1.FullNode <> github.c > StateGetNetworkParams {[func(context.Context) (*types.NetworkParams, error) <> func(context.Context) (*api.NetworkParams, error)] base=func out type: #0 input; nested={[*types.NetworkParams <> *api.NetworkParams] base=pointed type; nested={[types.NetworkParams <> api.NetworkParams] base=struct field; nested={[types.NetworkParams <> api.NetworkParams] base=exported field type: #5 field named ForkUpgradeParams; nested={[types.ForkUpgradeParams <> api.ForkUpgradeParams] base=struct field; nested={[types.ForkUpgradeParams <> api.ForkUpgradeParams] base=exported fields count: 22 != 23; nested=nil}}}}}} + StateMinerSectorSize + StateMinerWorkerAddress - + StateMsigInfo - SyncCheckBad - SyncCheckpoint - SyncIncomingBlocks diff --git a/venus-shared/compatible-checks/api-perm.txt b/venus-shared/compatible-checks/api-perm.txt index f2fc2433b9..2da634626e 100644 --- a/venus-shared/compatible-checks/api-perm.txt +++ b/venus-shared/compatible-checks/api-perm.txt @@ -21,7 +21,6 @@ v0: github.com/filecoin-project/venus/venus-shared/api/chain/v0 <> github.com/fi - IMessagePool.MpoolPublishByAddr - IMessagePool.MpoolPublishMessage - IMessagePool.MpoolSelects - - IMultiSig.MsigCancelTxnHash - INetwork.ID - INetwork.NetAddrsListen - INetwork.NetAgentVersion @@ -75,7 +74,6 @@ v1: github.com/filecoin-project/venus/venus-shared/api/chain/v1 <> github.com/fi - IMessagePool.MpoolPublishByAddr - IMessagePool.MpoolPublishMessage - IMessagePool.MpoolSelects - - IMultiSig.StateMsigInfo > INetwork.NetConnect: admin <> Net.NetConnect: write > INetwork.NetDisconnect: admin <> Net.NetDisconnect: write - INetwork.NetFindProvidersAsync From d94a3e05c714329004a36a11a92fa70366af212d Mon Sep 17 00:00:00 2001 From: simlecode <69969590+simlecode@users.noreply.github.com> Date: Fri, 17 Feb 2023 14:17:36 +0800 Subject: [PATCH 21/21] chore: bump version to v1.10.0-rc2 --- go.mod | 2 +- go.sum | 4 ++-- pkg/constants/version.go | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/go.mod b/go.mod index 9cdddc27b1..1cdd6b3832 100644 --- a/go.mod +++ b/go.mod @@ -43,7 +43,7 @@ require ( github.com/filecoin-project/specs-actors/v8 v8.0.1 github.com/filecoin-project/specs-storage v0.4.1 github.com/filecoin-project/test-vectors/schema v0.0.5 - github.com/filecoin-project/venus-auth v1.10.0-rc1 + github.com/filecoin-project/venus-auth v1.10.0-rc2 github.com/fxamacker/cbor/v2 v2.4.0 github.com/go-errors/errors v1.0.1 github.com/go-kit/kit v0.12.0 diff --git a/go.sum b/go.sum index 1eafa3387b..77f5ec305e 100644 --- a/go.sum +++ b/go.sum @@ -380,8 +380,8 @@ github.com/filecoin-project/specs-storage v0.4.1/go.mod h1:Z2eK6uMwAOSLjek6+sy0j github.com/filecoin-project/storetheindex v0.4.30-0.20221114113647-683091f8e893 h1:6GCuzxLVHBzlz7y+FkbHh6n0UyoEGWqDwJKQPJoz7bE= github.com/filecoin-project/test-vectors/schema v0.0.5 h1:w3zHQhzM4pYxJDl21avXjOKBLF8egrvwUwjpT8TquDg= github.com/filecoin-project/test-vectors/schema v0.0.5/go.mod h1:iQ9QXLpYWL3m7warwvK1JC/pTri8mnfEmKygNDqqY6E= -github.com/filecoin-project/venus-auth v1.10.0-rc1 h1:4Oo+lLJP/cnAxEoZkVLdcI3+QcmPf4TIpdzb5urlk8o= -github.com/filecoin-project/venus-auth v1.10.0-rc1/go.mod h1:KvTLXbGp0jOKqQ9Rxc3zcZA/MFRPYz64D/jSdvUu+Qc= +github.com/filecoin-project/venus-auth v1.10.0-rc2 h1:mC2kRcUmXaL2nPky8iiogFjrygMTUXGXHjvEV9msPgk= +github.com/filecoin-project/venus-auth v1.10.0-rc2/go.mod h1:bJT0owiiQfQq7u8QBpIf22JHNRZdsx9rAr4wMEsg+ds= github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= github.com/flynn/noise v1.0.0 h1:DlTHqmzmvcEiKj+4RYo/imoswx/4r6iBlCMfVtrMXpQ= github.com/flynn/noise v1.0.0/go.mod h1:xbMo+0i6+IGbYdJhF31t2eR1BIU0CYc12+BNAKwUTag= diff --git a/pkg/constants/version.go b/pkg/constants/version.go index 824ff185b0..d2a5b14794 100644 --- a/pkg/constants/version.go +++ b/pkg/constants/version.go @@ -5,7 +5,7 @@ import ( ) // BuildVersion is the local build version, set by build system -const BuildVersion = "1.10.0-rc1" +const BuildVersion = "1.10.0-rc2" var CurrentCommit string