Skip to content

Commit

Permalink
fix: update deposit authorization with with unused amount
Browse files Browse the repository at this point in the history
fixes akash-network/support#88

Signed-off-by: Artur Troian <[email protected]>
  • Loading branch information
troian committed Apr 18, 2024
1 parent 279cdbc commit 0e59ccb
Show file tree
Hide file tree
Showing 13 changed files with 356 additions and 44 deletions.
1 change: 1 addition & 0 deletions app/app_configure.go
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,7 @@ func (app *AkashApp) setAkashKeepers() {
app.Keepers.Cosmos.Bank,
app.Keepers.Akash.Take,
app.Keepers.Cosmos.Distr,
app.Keepers.Cosmos.Authz,
)

app.Keepers.Akash.Deployment = deployment.NewKeeper(
Expand Down
2 changes: 1 addition & 1 deletion make/init.mk
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ endif
GOLANGCI_LINT_VERSION ?= v1.51.2
STATIK_VERSION ?= v0.1.7
GIT_CHGLOG_VERSION ?= v0.15.1
MOCKERY_VERSION ?= 2.24.0
MOCKERY_VERSION ?= 2.42.0
COSMOVISOR_VERSION ?= v1.5.0

# ==== Build tools version tracking ====
Expand Down
3 changes: 2 additions & 1 deletion testutil/state/suite.go
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ type Keepers struct {
Provider pkeeper.IKeeper
Bank *emocks.BankKeeper
Distr *emocks.DistrKeeper
Authz *emocks.AuthzKeeper
}

// SetupTestSuite provides toolkit for accessing stores and keepers
Expand Down Expand Up @@ -91,7 +92,7 @@ func SetupTestSuiteWithKeepers(t testing.TB, keepers Keepers) *TestSuite {
}

if keepers.Escrow == nil {
keepers.Escrow = ekeeper.NewKeeper(etypes.ModuleCdc, app.GetKey(etypes.StoreKey), keepers.Bank, keepers.Take, keepers.Distr)
keepers.Escrow = ekeeper.NewKeeper(etypes.ModuleCdc, app.GetKey(etypes.StoreKey), keepers.Bank, keepers.Take, keepers.Distr, keepers.Authz)
}
if keepers.Market == nil {
keepers.Market = mkeeper.NewKeeper(mtypes.ModuleCdc, app.GetKey(mtypes.StoreKey), app.GetSubspace(mtypes.ModuleName), keepers.Escrow)
Expand Down
11 changes: 11 additions & 0 deletions upgrades/software/v0.34.0/init.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
// Package v0_34_0
// nolint revive
package v0_34_0

import (
utypes "github.com/akash-network/node/upgrades/types"
)

func init() {
utypes.RegisterUpgrade(UpgradeName, initUpgrade)
}
47 changes: 47 additions & 0 deletions upgrades/software/v0.34.0/upgrade.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
// Package v0_34_0
// nolint revive
package v0_34_0

import (
"fmt"

"github.com/tendermint/tendermint/libs/log"

storetypes "github.com/cosmos/cosmos-sdk/store/types"
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/cosmos/cosmos-sdk/types/module"
upgradetypes "github.com/cosmos/cosmos-sdk/x/upgrade/types"

apptypes "github.com/akash-network/node/app/types"
utypes "github.com/akash-network/node/upgrades/types"
)

const (
UpgradeName = "v0.34.0"
)

type upgrade struct {
*apptypes.App
log log.Logger
}

var _ utypes.IUpgrade = (*upgrade)(nil)

func initUpgrade(log log.Logger, app *apptypes.App) (utypes.IUpgrade, error) {
up := &upgrade{
App: app,
log: log.With("module", fmt.Sprintf("upgrade/%s", UpgradeName)),
}

return up, nil
}

func (up *upgrade) StoreLoader() *storetypes.StoreUpgrades {
return &storetypes.StoreUpgrades{}
}

func (up *upgrade) UpgradeHandler() upgradetypes.UpgradeHandler {
return func(ctx sdk.Context, _ upgradetypes.Plan, fromVM module.VersionMap) (module.VersionMap, error) {
return up.MM.RunMigrations(ctx, up.Configurator, fromVM)
}
}
2 changes: 2 additions & 0 deletions upgrades/upgrades.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package upgrades

import (
// nolint: revive
_ "github.com/akash-network/node/upgrades/software/v0.34.0"
// nolint: revive
_ "github.com/akash-network/node/upgrades/software/v0.32.0"
// nolint: revive
Expand Down
23 changes: 17 additions & 6 deletions x/deployment/handler/mocks/authz_keeper.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

10 changes: 10 additions & 0 deletions x/escrow/keeper/external.go
Original file line number Diff line number Diff line change
@@ -1,7 +1,10 @@
package keeper

import (
"time"

sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/cosmos/cosmos-sdk/x/authz"
distrtypes "github.com/cosmos/cosmos-sdk/x/distribution/types"
)

Expand All @@ -22,3 +25,10 @@ type DistrKeeper interface {
GetFeePool(ctx sdk.Context) distrtypes.FeePool
SetFeePool(ctx sdk.Context, pool distrtypes.FeePool)
}

//go:generate mockery --name AuthzKeeper --output ./mocks
type AuthzKeeper interface {
DeleteGrant(ctx sdk.Context, grantee, granter sdk.AccAddress, msgType string) error
GetCleanAuthorization(ctx sdk.Context, grantee, granter sdk.AccAddress, msgType string) (cap authz.Authorization, expiration time.Time)
SaveGrant(ctx sdk.Context, grantee, granter sdk.AccAddress, authorization authz.Authorization, expiration time.Time) error
}
48 changes: 30 additions & 18 deletions x/escrow/keeper/keeper.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,10 @@ package keeper
import (
"fmt"

dtypes "github.com/akash-network/akash-api/go/node/deployment/v1beta3"
types "github.com/akash-network/akash-api/go/node/escrow/v1beta3"
"github.com/cosmos/cosmos-sdk/codec"
sdk "github.com/cosmos/cosmos-sdk/types"

types "github.com/akash-network/akash-api/go/node/escrow/v1beta3"
distrtypes "github.com/cosmos/cosmos-sdk/x/distribution/types"
)

Expand Down Expand Up @@ -35,22 +35,24 @@ type Keeper interface {
SavePayment(sdk.Context, types.FractionalPayment)
}

func NewKeeper(cdc codec.BinaryCodec, skey sdk.StoreKey, bkeeper BankKeeper, tkeeper TakeKeeper, dkeeper DistrKeeper) Keeper {
func NewKeeper(cdc codec.BinaryCodec, skey sdk.StoreKey, bkeeper BankKeeper, tkeeper TakeKeeper, dkeeper DistrKeeper, akeeper AuthzKeeper) Keeper {
return &keeper{
cdc: cdc,
skey: skey,
bkeeper: bkeeper,
tkeeper: tkeeper,
dkeeper: dkeeper,
cdc: cdc,
skey: skey,
bkeeper: bkeeper,
tkeeper: tkeeper,
dkeeper: dkeeper,
authzKeeper: akeeper,
}
}

type keeper struct {
cdc codec.BinaryCodec
skey sdk.StoreKey
bkeeper BankKeeper
tkeeper TakeKeeper
dkeeper DistrKeeper
cdc codec.BinaryCodec
skey sdk.StoreKey
bkeeper BankKeeper
tkeeper TakeKeeper
dkeeper DistrKeeper
authzKeeper AuthzKeeper

hooks struct {
onAccountClosed []AccountHook
Expand Down Expand Up @@ -499,12 +501,12 @@ func (k *keeper) accountWithdraw(ctx sdk.Context, obj *types.Account) error {
return nil
}

if !obj.Balance.Amount.LT(sdk.NewDec(1)) {
owner, err := sdk.AccAddressFromBech32(obj.Owner)
if err != nil {
return err
}
owner, err := sdk.AccAddressFromBech32(obj.Owner)
if err != nil {
return err
}

if !obj.Balance.Amount.LT(sdk.NewDec(1)) {
withdrawal := sdk.NewCoin(obj.Balance.Denom, obj.Balance.Amount.TruncateInt())
if err = k.bkeeper.SendCoinsFromModuleToAccount(ctx, types.ModuleName, owner, sdk.NewCoins(withdrawal)); err != nil {
ctx.Logger().Error("account withdraw", "err", err, "id", obj.ID)
Expand All @@ -524,7 +526,17 @@ func (k *keeper) accountWithdraw(ctx sdk.Context, obj *types.Account) error {
ctx.Logger().Error("account withdraw", "err", err, "id", obj.ID)
return err
}

obj.Funds = obj.Funds.Sub(sdk.NewDecCoinFromCoin(withdrawal))

msg := &dtypes.MsgDepositDeployment{Amount: sdk.NewCoin("uakt", sdk.NewInt(1))}
authorization, expiration := k.authzKeeper.GetCleanAuthorization(ctx, owner, depositor, sdk.MsgTypeURL(msg))

dauthz, valid := authorization.(*dtypes.DepositDeploymentAuthorization)
if valid && authorization != nil {
limitLeft := dauthz.SpendLimit.Add(withdrawal)
_ = k.authzKeeper.SaveGrant(ctx, owner, depositor, &dtypes.DepositDeploymentAuthorization{SpendLimit: limitLeft}, expiration)
}
}

k.saveAccount(ctx, obj)
Expand Down
Loading

0 comments on commit 0e59ccb

Please sign in to comment.