Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(x/swingset): allow third party to provision wallet #10923

Merged
merged 3 commits into from
Feb 5, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 3 additions & 7 deletions golang/cosmos/x/swingset/keeper/keeper.go
Original file line number Diff line number Diff line change
Expand Up @@ -380,7 +380,7 @@ func makeFeeMenu(powerFlagFees []types.PowerFlagFee) map[string]sdk.Coins {

var privilegedProvisioningCoins sdk.Coins = sdk.NewCoins(sdk.NewInt64Coin("provisionpass", 1))

func calculateFees(balances sdk.Coins, submitter, addr sdk.AccAddress, powerFlags []string, powerFlagFees []types.PowerFlagFee) (sdk.Coins, error) {
func calculateFees(balances sdk.Coins, powerFlags []string, powerFlagFees []types.PowerFlagFee) (sdk.Coins, error) {
fees := sdk.NewCoins()

// See if we have the balance needed for privileged provisioning.
Expand All @@ -389,10 +389,6 @@ func calculateFees(balances sdk.Coins, submitter, addr sdk.AccAddress, powerFlag
return fees, nil
}

if !submitter.Equals(addr) {
return nil, fmt.Errorf("submitter is not the same as target address for fee-based provisioning")
}

if len(powerFlags) == 0 {
return nil, fmt.Errorf("must specify powerFlags for fee-based provisioning")
}
Expand All @@ -412,9 +408,9 @@ func calculateFees(balances sdk.Coins, submitter, addr sdk.AccAddress, powerFlag
return fees, nil
}

func (k Keeper) ChargeForProvisioning(ctx sdk.Context, submitter, addr sdk.AccAddress, powerFlags []string) error {
func (k Keeper) ChargeForProvisioning(ctx sdk.Context, submitter sdk.AccAddress, powerFlags []string) error {
balances := k.bankKeeper.GetAllBalances(ctx, submitter)
fees, err := calculateFees(balances, submitter, addr, powerFlags, k.GetParams(ctx).PowerFlagFees)
fees, err := calculateFees(balances, powerFlags, k.GetParams(ctx).PowerFlagFees)
if err != nil {
return err
}
Expand Down
26 changes: 16 additions & 10 deletions golang/cosmos/x/swingset/keeper/keeper_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -61,15 +61,6 @@ func Test_calculateFees(t *testing.T) {
},
want: cns(),
},
{
name: "cannot pay fee to provision third party",
args: args{
submitter: submitAddr,
addr: utilAddr,
powerFlags: []string{"powerflag1"},
},
errMsg: "submitter is not the same as target address for fee-based provisioning",
},
{
name: "need powerflags for fee provisioning",
args: args{
Expand Down Expand Up @@ -106,6 +97,21 @@ func Test_calculateFees(t *testing.T) {
},
want: cns(a(1300)),
},
{
name: "can pay fee to provision third party",
args: args{
submitter: submitAddr,
addr: utilAddr,
powerFlags: []string{"power1"},
powerFlagFees: []types.PowerFlagFee{
{
PowerFlag: "power1",
Fee: cns(a(1000)),
},
},
},
want: cns(a(1000)),
},
{
name: "later menu entries do not override",
args: args{
Expand Down Expand Up @@ -173,7 +179,7 @@ func Test_calculateFees(t *testing.T) {
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
got, err := calculateFees(tt.args.balances, tt.args.submitter, tt.args.addr, tt.args.powerFlags, tt.args.powerFlagFees)
got, err := calculateFees(tt.args.balances, tt.args.powerFlags, tt.args.powerFlagFees)
var errMsg string
if err != nil {
errMsg = err.Error()
Expand Down
2 changes: 1 addition & 1 deletion golang/cosmos/x/swingset/keeper/msg_server.go
Original file line number Diff line number Diff line change
Expand Up @@ -158,7 +158,7 @@ func (keeper msgServer) provisionIfNeeded(ctx sdk.Context, owner sdk.AccAddress)
func (keeper msgServer) Provision(goCtx context.Context, msg *types.MsgProvision) (*types.MsgProvisionResponse, error) {
ctx := sdk.UnwrapSDKContext(goCtx)

err := keeper.ChargeForProvisioning(ctx, msg.Submitter, msg.Address, msg.PowerFlags)
err := keeper.ChargeForProvisioning(ctx, msg.Submitter, msg.PowerFlags)
if err != nil {
return nil, err
}
Expand Down
Loading