Skip to content

Commit 65d0a37

Browse files
committed
fix(x/escrow): use auth authorization interface to reach to spend limit
Signed-off-by: Artur Troian <troian@users.noreply.github.com>
1 parent a8c65a8 commit 65d0a37

File tree

3 files changed

+20
-21
lines changed

3 files changed

+20
-21
lines changed

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ require (
4747
google.golang.org/grpc v1.74.2
4848
gopkg.in/yaml.v3 v3.0.1
4949
gotest.tools/v3 v3.5.2
50-
pkg.akt.dev/go v0.0.3-rc15
50+
pkg.akt.dev/go v0.0.3-rc16
5151
pkg.akt.dev/go/cli v0.0.3-rc13
5252
pkg.akt.dev/go/sdl v0.0.2-rc6
5353
)

go.sum

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3278,8 +3278,8 @@ nhooyr.io/websocket v1.8.11/go.mod h1:rN9OFWIUwuxg4fR5tELlYC04bXYowCP9GX47ivo2l+
32783278
nullprogram.com/x/optparse v1.0.0/go.mod h1:KdyPE+Igbe0jQUrVfMqDMeJQIJZEuyV7pjYmp6pbG50=
32793279
pgregory.net/rapid v0.5.5 h1:jkgx1TjbQPD/feRoK+S/mXw9e1uj6WilpHrXJowi6oA=
32803280
pgregory.net/rapid v0.5.5/go.mod h1:PY5XlDGj0+V1FCq0o192FdRhpKHGTRIWBgqjDBTrq04=
3281-
pkg.akt.dev/go v0.0.3-rc15 h1:tGerlRilP0zS3hF/p1l63nFOw9d200hQo+Ai1JKZ+Ns=
3282-
pkg.akt.dev/go v0.0.3-rc15/go.mod h1:TF85k1RuubGnnESQud3FYoDT4/SWWHlccJ/JPw7gDzo=
3281+
pkg.akt.dev/go v0.0.3-rc16 h1:xhJlm1IC395ZtWeep9z0XJEU8k4NlPz2u80A6aIuZ+0=
3282+
pkg.akt.dev/go v0.0.3-rc16/go.mod h1:TF85k1RuubGnnESQud3FYoDT4/SWWHlccJ/JPw7gDzo=
32833283
pkg.akt.dev/go/cli v0.0.3-rc13 h1:6DgFfrIFLZ3Ii14rYvvH8CP2BaORcz93rjCk7OXnYq8=
32843284
pkg.akt.dev/go/cli v0.0.3-rc13/go.mod h1:hqpNxZAa4yqn6sODAQf/phzX4FQJ9FJIeUQGw4N7Mak=
32853285
pkg.akt.dev/go/sdl v0.0.2-rc6 h1:rlaiBL2xTl06Rq/MNePmMRyl6ucWweA5q4Mt9tZzwzM=

x/escrow/keeper/keeper.go

Lines changed: 17 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -211,52 +211,51 @@ func (k *keeper) AuthorizeDeposits(sctx sdk.Context, msg sdk.Msg) ([]etypes.Depo
211211
msgTypeUrl := (&ev1.DepositAuthorization{}).MsgTypeURL()
212212

213213
k.authzKeeper.GetGranteeGrantsByMsgType(sctx, owner, msgTypeUrl, func(ctx context.Context, granter sdk.AccAddress, authorization authz.Authorization, expiration *time.Time) bool {
214-
deplAuthz, valid := authorization.(*ev1.DepositAuthorization)
214+
depositAuthz, valid := authorization.(ev1.Authorization)
215215
if !valid {
216216
return false
217217
}
218218

219-
authorizedSpend := sdk.Coin{
220-
Denom: denom,
221-
Amount: sdkmath.NewInt(deplAuthz.SpendLimit.Amount.Int64()),
222-
}
219+
spendableAmount := depositAuthz.GetSpendLimit()
220+
requestedSpend := sdk.NewCoin(denom, remainder)
223221

224222
// bc authz.Accepts take sdk.Msg as an argument, the deposit amount from incoming message
225223
// has to be modified in place to correctly calculate what deposits to take from grants
226224
switch mt := msg.(type) {
227225
case *ev1.MsgAccountDeposit:
228-
mt.Deposit.Amount = sdk.NewCoin(denom, sdkmath.NewIntFromBigInt(remainder.BigInt()))
226+
mt.Deposit.Amount = requestedSpend
229227
case *dv1beta.MsgCreateDeployment:
230-
mt.Deposit.Amount = sdk.NewCoin(denom, sdkmath.NewIntFromBigInt(remainder.BigInt()))
228+
mt.Deposit.Amount = requestedSpend
231229
case *mv1beta.MsgCreateBid:
232-
mt.Deposit.Amount = sdk.NewCoin(denom, sdkmath.NewIntFromBigInt(remainder.BigInt()))
230+
mt.Deposit.Amount = requestedSpend
233231
}
234232

235-
resp, err := authorization.Accept(ctx, msg)
233+
resp, err := depositAuthz.TryAccept(ctx, msg, true)
236234
if err != nil {
237235
return false
238236
}
239237

240-
if resp.Delete {
241-
err = k.authzKeeper.DeleteGrant(ctx, owner, granter, msgTypeUrl)
242-
} else if resp.Updated != nil {
243-
err = k.authzKeeper.SaveGrant(ctx, owner, granter, resp.Updated, expiration)
238+
if !resp.Accept {
239+
return false
244240
}
245241

246-
if !resp.Accept {
242+
// Delete is ignored here as not all fund may be used during deployment lifetime.
243+
// also, there can be another deployment using same authorization and may return funds before deposit is fully used
244+
err = k.authzKeeper.SaveGrant(ctx, owner, granter, resp.Updated, expiration)
245+
if err != nil {
247246
return false
248247
}
249248

250-
deplAuthz = resp.Updated.(*ev1.DepositAuthorization)
249+
depositAuthz = resp.Updated.(ev1.Authorization)
251250

252-
authorizedSpend = authorizedSpend.Sub(deplAuthz.SpendLimit)
251+
spendableAmount = spendableAmount.Sub(depositAuthz.GetSpendLimit())
253252

254253
depositors = append(depositors, etypes.Depositor{
255254
Owner: granter.String(),
256255
Height: sctx.BlockHeight(),
257-
Balance: sdk.NewDecCoinFromCoin(authorizedSpend),
256+
Balance: sdk.NewDecCoinFromCoin(spendableAmount),
258257
})
259-
remainder = remainder.Sub(authorizedSpend.Amount)
258+
remainder = remainder.Sub(spendableAmount.Amount)
260259

261260
return remainder.IsZero()
262261
})

0 commit comments

Comments
 (0)