Skip to content

Commit

Permalink
feat(btcstaking): add UpdateParams
Browse files Browse the repository at this point in the history
  • Loading branch information
473n committed Jun 4, 2024
1 parent a578d6f commit 8c3427b
Show file tree
Hide file tree
Showing 4 changed files with 300 additions and 1,177 deletions.
34 changes: 4 additions & 30 deletions proto/lorenzo/btcstaking/v1/tx.proto
Original file line number Diff line number Diff line change
Expand Up @@ -10,20 +10,14 @@ import "lorenzo/btcstaking/v1/params.proto";
option go_package = "github.com/Lorenzo-Protocol/lorenzo/x/btcstaking/types";

// Msg defines the Msg service.
// TODO: handle unbonding tx with full witness
service Msg {
option (cosmos.msg.v1.service) = true;

// CreateBTCDelegation creates a new BTC delegation
rpc CreateBTCStaking(MsgCreateBTCStaking) returns (MsgCreateBTCStakingResponse);

rpc Burn(MsgBurnRequest) returns (MsgBurnResponse);

rpc AddReceiver(MsgAddReceiver) returns (MsgAddReceiverResponse);

rpc RemoveReceiver(MsgRemoveReceiver) returns (MsgRemoveReceiverResponse);

rpc UpdateAllowList(MsgUpdateAllowList) returns (MsgUpdateAllowListResponse);
rpc UpdateParams(MsgUpdateParams) returns (MsgUpdateParamsResponse);
}

message TransactionKey {
Expand All @@ -48,9 +42,6 @@ message TransactionInfo {
TransactionKey key = 1;
// transaction is the full transaction in bytes
bytes transaction = 2;
// proof is the Merkle proof that this tx is included in the position in `key`
// TODO: maybe it could use here better format as we already processed and
// validated the proof?
bytes proof = 3;
}

Expand All @@ -72,29 +63,12 @@ message MsgBurnRequest {

message MsgBurnResponse{}

message MsgAddReceiver {
message MsgUpdateParams {
option (cosmos.msg.v1.signer) = "authority";

string authority = 1 [ (cosmos_proto.scalar) = "cosmos.AddressString" ];

Receiver receiver = 2 [ (gogoproto.nullable) = false ];
Params params = 2 [ (gogoproto.nullable) = false ];
}

message MsgAddReceiverResponse {}
message MsgRemoveReceiver {
option (cosmos.msg.v1.signer) = "authority";

string authority = 1 [ (cosmos_proto.scalar) = "cosmos.AddressString" ];

string receiver = 2 ;
}
message MsgRemoveReceiverResponse {}

message MsgUpdateAllowList {
option (cosmos.msg.v1.signer) = "authority";

string authority = 1 [ (cosmos_proto.scalar) = "cosmos.AddressString" ];

repeated string minter_allow_list = 2;
}
message MsgUpdateAllowListResponse {}
message MsgUpdateParamsResponse {}
55 changes: 4 additions & 51 deletions x/btcstaking/keeper/msg_server.go
Original file line number Diff line number Diff line change
Expand Up @@ -267,63 +267,16 @@ func findReceiver(receivers []*types.Receiver, name string) (int, *types.Receive
return idx, receiver
}

func (ms msgServer) AddReceiver(goCtx context.Context, req *types.MsgAddReceiver) (*types.MsgAddReceiverResponse, error) {
func (ms msgServer) UpdateParams(goCtx context.Context, req *types.MsgUpdateParams) (*types.MsgUpdateParamsResponse, error) {
if ms.authority != req.Authority {
return nil, errorsmod.Wrapf(govtypes.ErrInvalidSigner, "invalid authority; expected %s, got %s", ms.authority, req.Authority)
}
ctx := sdk.UnwrapSDKContext(goCtx)
params := ms.GetParams(ctx)
receiverIdx, receiver := findReceiver(params.Receivers, req.Receiver.Name)
if receiver != nil {
params.Receivers[receiverIdx] = &req.Receiver
} else {
params.Receivers = append(params.Receivers, &req.Receiver)
}
btclcParams := ms.btclcKeeper.GetBTCNet()
if _, err := btcutil.DecodeAddress(req.Receiver.Addr, btclcParams); err != nil {
return nil, types.ErrInvalidReceivingAddr.Wrap(err.Error())
}
if err := ms.SetParams(ctx, params); err != nil {
if err := req.Params.Validate(); err != nil {
return nil, err
}

return &types.MsgAddReceiverResponse{}, nil
}

func (ms msgServer) RemoveReceiver(goCtx context.Context, req *types.MsgRemoveReceiver) (*types.MsgRemoveReceiverResponse, error) {
if ms.authority != req.Authority {
return nil, errorsmod.Wrapf(govtypes.ErrInvalidSigner, "invalid authority; expected %s, got %s", ms.authority, req.Authority)
}
ctx := sdk.UnwrapSDKContext(goCtx)
params := ms.GetParams(ctx)
receivers := make([]*types.Receiver, 0, len(params.Receivers))
for _, receiver := range params.Receivers {
if receiver.Name != req.Receiver {
receivers = append(receivers, receiver)
}
}
if len(receivers) == len(params.Receivers) {
return nil, govtypes.ErrInvalidProposalMsg.Wrap("Receiver not exists")
}
params.Receivers = receivers
if err := ms.SetParams(ctx, params); err != nil {
return nil, err
}
return &types.MsgRemoveReceiverResponse{}, nil
}

func (ms msgServer) UpdateAllowList(goCtx context.Context, req *types.MsgUpdateAllowList) (*types.MsgUpdateAllowListResponse, error) {
if ms.authority != req.Authority {
return nil, errorsmod.Wrapf(govtypes.ErrInvalidSigner, "invalid authority; expected %s, got %s", ms.authority, req.Authority)
}
if err := types.ValidateAddressList(req.MinterAllowList); err != nil {
return nil, err
}
ctx := sdk.UnwrapSDKContext(goCtx)
params := ms.GetParams(ctx)
params.MinterAllowList = req.MinterAllowList
if err := ms.SetParams(ctx, params); err != nil {
if err := ms.SetParams(ctx, &req.Params); err != nil {
return nil, err
}
return &types.MsgUpdateAllowListResponse{}, nil
return &types.MsgUpdateParamsResponse{}, nil
}
44 changes: 4 additions & 40 deletions x/btcstaking/types/msg.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ package types
import (
fmt "fmt"

errorsmod "cosmossdk.io/errors"
"cosmossdk.io/math"
"github.com/btcsuite/btcd/btcutil"
"github.com/btcsuite/btcd/chaincfg"
Expand All @@ -14,9 +13,7 @@ import (
var (
_ sdk.Msg = &MsgCreateBTCStaking{}
_ sdk.Msg = &MsgBurnRequest{}
_ sdk.Msg = &MsgRemoveReceiver{}
_ sdk.Msg = &MsgAddReceiver{}
_ sdk.Msg = &MsgUpdateAllowList{}
_ sdk.Msg = &MsgUpdateParams{}
)

func (m *MsgCreateBTCStaking) ValidateBasic() error {
Expand All @@ -33,36 +30,6 @@ func (m *MsgCreateBTCStaking) ValidateBasic() error {
return nil
}

func (m *MsgAddReceiver) GetSigners() []sdk.AccAddress {
addr, _ := sdk.AccAddressFromBech32(m.Authority)
return []sdk.AccAddress{addr}
}

func (m *MsgAddReceiver) ValidateBasic() error {
if _, err := sdk.AccAddressFromBech32(m.Authority); err != nil {
return errorsmod.Wrap(err, "invalid authority address")
}
if err := m.Receiver.Validate(); err != nil {
return err
}
return nil
}

func (m *MsgRemoveReceiver) GetSigners() []sdk.AccAddress {
addr, _ := sdk.AccAddressFromBech32(m.Authority)
return []sdk.AccAddress{addr}
}

func (m *MsgRemoveReceiver) ValidateBasic() error {
if _, err := sdk.AccAddressFromBech32(m.Authority); err != nil {
return errorsmod.Wrap(err, "invalid authority address")
}
if len(m.Receiver) == 0 {
return fmt.Errorf("receiver name cannot be empty")
}
return nil
}

func (msg *MsgCreateBTCStaking) GetSigners() []sdk.AccAddress {
signer, err := sdk.AccAddressFromBech32(msg.Signer)
if err != nil {
Expand Down Expand Up @@ -101,16 +68,13 @@ func NewMsgBurnRequest(signer, btcTargetAddress string, amount math.Int) MsgBurn
}
}

func (m *MsgUpdateAllowList) GetSigners() []sdk.AccAddress {
func (m *MsgUpdateParams) GetSigners() []sdk.AccAddress {
addr, _ := sdk.AccAddressFromBech32(m.Authority)
return []sdk.AccAddress{addr}
}

func (m *MsgUpdateAllowList) ValidateBasic() error {
if _, err := sdk.AccAddressFromBech32(m.Authority); err != nil {
return errorsmod.Wrap(err, "invalid authority address")
}
if err := ValidateAddressList(m.MinterAllowList); err != nil {
func (m *MsgUpdateParams) ValidateBasic() error {
if err := m.Params.Validate(); err != nil {
return err
}
return nil
Expand Down
Loading

0 comments on commit 8c3427b

Please sign in to comment.