Skip to content

Commit 09c8b0f

Browse files
authored
refactor: setup epoch for act burn (#2052)
emit EventVaultFunded on deposit into bme vault Signed-off-by: Artur Troian <troian@users.noreply.github.com> Co-authored-by: Artur Troian <troian@users.noreply.github.com>
1 parent c21e4db commit 09c8b0f

8 files changed

Lines changed: 93 additions & 31 deletions

File tree

go.mod

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,8 +48,8 @@ require (
4848
google.golang.org/grpc v1.76.0
4949
gopkg.in/yaml.v3 v3.0.1
5050
gotest.tools/v3 v3.5.2
51-
pkg.akt.dev/go v0.2.0-b20
52-
pkg.akt.dev/go/cli v0.2.0-b15
51+
pkg.akt.dev/go v0.2.0-b21
52+
pkg.akt.dev/go/cli v0.2.0-b16
5353
pkg.akt.dev/go/sdl v0.2.0-b2
5454
)
5555

go.sum

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3293,10 +3293,10 @@ nhooyr.io/websocket v1.8.17 h1:KEVeLJkUywCKVsnLIDlD/5gtayKp8VoCkksHCGGfT9Y=
32933293
nhooyr.io/websocket v1.8.17/go.mod h1:rN9OFWIUwuxg4fR5tELlYC04bXYowCP9GX47ivo2l+c=
32943294
pgregory.net/rapid v0.5.5 h1:jkgx1TjbQPD/feRoK+S/mXw9e1uj6WilpHrXJowi6oA=
32953295
pgregory.net/rapid v0.5.5/go.mod h1:PY5XlDGj0+V1FCq0o192FdRhpKHGTRIWBgqjDBTrq04=
3296-
pkg.akt.dev/go v0.2.0-b20 h1:kvbuPUc1w4DtSdeqNfhH4az2KQFKmml04yW2hkPINAM=
3297-
pkg.akt.dev/go v0.2.0-b20/go.mod h1:x9Cku9yibLk4aGLTE/Yy7eEkkda0uOSRWmYwQeFw23o=
3298-
pkg.akt.dev/go/cli v0.2.0-b15 h1:D0yPDNHnwsriPG86CnKQ/95bLSGotznqAmxP+UY2ra8=
3299-
pkg.akt.dev/go/cli v0.2.0-b15/go.mod h1:MHm9lU8hb+xQ8BX3b9c9S1pMyZKUob5tVjHXQ4T1uwU=
3296+
pkg.akt.dev/go v0.2.0-b21 h1:X4cYvvZ8LSPyOxL8/Ifw8Jfxr3PBWMeXfeU5C7xF/KM=
3297+
pkg.akt.dev/go v0.2.0-b21/go.mod h1:x9Cku9yibLk4aGLTE/Yy7eEkkda0uOSRWmYwQeFw23o=
3298+
pkg.akt.dev/go/cli v0.2.0-b16 h1:BNUZY7p8s8dsCBpDWFUfNAwM7c4hY5JMa6TqlMOh8ZM=
3299+
pkg.akt.dev/go/cli v0.2.0-b16/go.mod h1:MHm9lU8hb+xQ8BX3b9c9S1pMyZKUob5tVjHXQ4T1uwU=
33003300
pkg.akt.dev/go/sdl v0.2.0-b2 h1:CJlfClgUQ6DMbeH79aIJi82vBqdW0Tnem6Lb316nBqE=
33013301
pkg.akt.dev/go/sdl v0.2.0-b2/go.mod h1:urd6091AWDy9YwFLRCsENuQ931qyRcg/RJBN9XCBs/E=
33023302
pkg.akt.dev/specs v0.0.1 h1:OP0zil3Fr4kcCuybFqQ8LWgSlSP2Yn7306meWpu6/S4=

upgrades/software/v2.0.0/upgrade.go

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -178,6 +178,23 @@ func (up *upgrade) UpgradeHandler() upgradetypes.UpgradeHandler {
178178
return toVM, fmt.Errorf("failed to set updated fee pool balance: %w", err)
179179
}
180180

181+
daddr := up.Keepers.Cosmos.Acct.GetModuleAddress(distrtypes.ModuleName)
182+
baddr := up.Keepers.Cosmos.Acct.GetModuleAddress(bmetypes.ModuleName)
183+
184+
balance := up.Keepers.Cosmos.Bank.GetBalance(sctx, baddr, bmeDepositAmount.Denom)
185+
186+
err = sctx.EventManager().EmitTypedEvent(
187+
&bmetypes.EventVaultFunded{
188+
Amount: bmeDepositAmount,
189+
Source: daddr.String(),
190+
NewVaultBalance: balance,
191+
},
192+
)
193+
194+
if err != nil {
195+
return nil, err
196+
}
197+
181198
return toVM, err
182199
}
183200
}

x/bme/handler/server.go

Lines changed: 32 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -50,15 +50,13 @@ func (ms msgServer) UpdateParams(ctx context.Context, msg *types.MsgUpdateParams
5050
}
5151

5252
func (ms msgServer) BurnMint(ctx context.Context, msg *types.MsgBurnMint) (*types.MsgBurnMintResponse, error) {
53-
src, err := sdk.AccAddressFromBech32(msg.Owner)
53+
err := msg.ValidateBasic()
5454
if err != nil {
55-
return nil, errors.Wrapf(sdkerrors.ErrInvalidAddress, "invalid owner address: %s", err)
55+
return nil, err
5656
}
5757

58-
dst, err := sdk.AccAddressFromBech32(msg.To)
59-
if err != nil {
60-
return nil, errors.Wrapf(sdkerrors.ErrInvalidAddress, "invalid to address: %s", err)
61-
}
58+
src, _ := sdk.AccAddressFromBech32(msg.Owner)
59+
dst, _ := sdk.AccAddressFromBech32(msg.To)
6260

6361
err = msg.CoinsToBurn.Validate()
6462
if err != nil {
@@ -77,6 +75,11 @@ func (ms msgServer) BurnMint(ctx context.Context, msg *types.MsgBurnMint) (*type
7775
}
7876

7977
func (ms msgServer) MintACT(ctx context.Context, msg *types.MsgMintACT) (*types.MsgMintACTResponse, error) {
78+
err := msg.ValidateBasic()
79+
if err != nil {
80+
return nil, err
81+
}
82+
8083
r, err := ms.BurnMint(ctx, &types.MsgBurnMint{
8184
Owner: msg.Owner,
8285
To: msg.To,
@@ -95,6 +98,11 @@ func (ms msgServer) MintACT(ctx context.Context, msg *types.MsgMintACT) (*types.
9598
}
9699

97100
func (ms msgServer) BurnACT(ctx context.Context, msg *types.MsgBurnACT) (*types.MsgBurnACTResponse, error) {
101+
err := msg.ValidateBasic()
102+
if err != nil {
103+
return nil, err
104+
}
105+
98106
r, err := ms.BurnMint(ctx, &types.MsgBurnMint{
99107
Owner: msg.Owner,
100108
To: msg.To,
@@ -113,6 +121,8 @@ func (ms msgServer) BurnACT(ctx context.Context, msg *types.MsgBurnACT) (*types.
113121
}
114122

115123
func (ms msgServer) FundVault(ctx context.Context, msg *types.MsgFundVault) (*types.MsgFundVaultResponse, error) {
124+
sctx := sdk.UnwrapSDKContext(ctx)
125+
116126
if ms.bme.GetAuthority() != msg.Authority {
117127
return nil, errors.Wrapf(govtypes.ErrInvalidSigner, "invalid authority; expected %s, got %s", ms.bme.GetAuthority(), msg.Authority)
118128
}
@@ -134,7 +144,22 @@ func (ms msgServer) FundVault(ctx context.Context, msg *types.MsgFundVault) (*ty
134144
return nil, errors.Wrapf(types.ErrInvalidAddress, "source address %s must not be module account", msg.Source)
135145
}
136146

137-
if err := ms.bank.SendCoinsFromAccountToModule(ctx, sourceAddr, types.ModuleName, coins); err != nil {
147+
if err = ms.bank.SendCoinsFromAccountToModule(ctx, sourceAddr, types.ModuleName, coins); err != nil {
148+
return nil, err
149+
}
150+
151+
maddr := ms.acc.GetModuleAddress(types.ModuleName)
152+
153+
balance := ms.bank.GetBalance(sctx, maddr, msg.Amount.Denom)
154+
err = sctx.EventManager().EmitTypedEvent(
155+
&types.EventVaultFunded{
156+
Amount: msg.Amount,
157+
Source: msg.Source,
158+
NewVaultBalance: balance,
159+
},
160+
)
161+
162+
if err != nil {
138163
return nil, err
139164
}
140165

x/bme/keeper/abci.go

Lines changed: 31 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"context"
55
"errors"
66

7+
"cosmossdk.io/collections"
78
"cosmossdk.io/store/prefix"
89
storetypes "cosmossdk.io/store/types"
910
"github.com/cosmos/cosmos-sdk/telemetry"
@@ -106,28 +107,44 @@ func (k *keeper) EndBlocker(ctx context.Context) error {
106107
panic(err)
107108
}
108109

109-
// settle act -> akt on every block
110-
err = iteratePending(startPrefix, func() error {
111-
return nil
112-
})
113-
if err != nil {
114-
sctx.Logger().Error("walking ledger pending records", "prefix", pid, "err", err)
110+
be, err := k.epochs.Get(sctx, epochBurn)
111+
if err != nil && !errors.Is(err, collections.ErrNotFound) {
112+
panic(err)
113+
}
114+
115+
nextBEpoch := be
116+
117+
if (be == 0) || (be == sctx.BlockHeight()) {
118+
be = sctx.BlockHeight() + params.MinEpochBlocks
119+
120+
err = iteratePending(startPrefix, func() error {
121+
return nil
122+
})
123+
if err != nil {
124+
sctx.Logger().Error("walking ledger pending records", "prefix", pid, "err", err)
125+
}
126+
}
127+
128+
if nextBEpoch != be {
129+
if err = k.epochs.Set(sctx, epochBurn, be); err != nil {
130+
panic(err)
131+
}
115132
}
116133

117134
cr, crUpdated := k.mintStatusUpdate(sctx)
118135

119-
me, err := k.mintEpoch.Get(sctx)
120-
if err != nil {
136+
me, err := k.epochs.Get(sctx, epochMint)
137+
if err != nil && !errors.Is(err, collections.ErrNotFound) {
121138
panic(err)
122139
}
123140

124-
nextEpoch := me.NextEpoch
141+
nextMEpoch := me
125142

126143
// if circuit breaker was just reset then calculate next epoch
127144
if crUpdated && (cr.PreviousStatus >= types.MintStatusHaltCR) && (cr.Status <= types.MintStatusWarning) {
128-
me.NextEpoch = sctx.BlockHeight() + cr.EpochHeightDiff
129-
} else if (cr.Status <= types.MintStatusWarning) && (me.NextEpoch == sctx.BlockHeight()) {
130-
me.NextEpoch = sctx.BlockHeight() + cr.EpochHeightDiff
145+
me = sctx.BlockHeight() + cr.EpochHeightDiff
146+
} else if (cr.Status <= types.MintStatusWarning) && (me == sctx.BlockHeight()) {
147+
me = sctx.BlockHeight() + cr.EpochHeightDiff
131148

132149
pid = types.LedgerRecordID{
133150
Denom: sdkutil.DenomUakt,
@@ -151,8 +168,8 @@ func (k *keeper) EndBlocker(ctx context.Context) error {
151168
}
152169
}
153170

154-
if nextEpoch != me.NextEpoch {
155-
if err = k.mintEpoch.Set(sctx, me); err != nil {
171+
if nextMEpoch != me {
172+
if err = k.epochs.Set(sctx, epochMint, me); err != nil {
156173
panic(err)
157174
}
158175
}

x/bme/keeper/keeper.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ type keeper struct {
7575
schema collections.Schema
7676
Params collections.Item[bmetypes.Params]
7777
status collections.Item[bmetypes.Status]
78-
mintEpoch collections.Item[bmetypes.MintEpoch]
78+
epochs collections.Map[string, int64]
7979
totalBurned collections.Map[string, sdkmath.Int]
8080
totalMinted collections.Map[string, sdkmath.Int]
8181
remintCredits collections.Map[string, sdkmath.Int]
@@ -113,7 +113,7 @@ func NewKeeper(
113113
oracleKeeper: oracleKeeper,
114114
Params: collections.NewItem(sb, ParamsKey, "params", codec.CollValue[bmetypes.Params](cdc)),
115115
status: collections.NewItem(sb, MintStatusKey, "mint_status", codec.CollValue[bmetypes.Status](cdc)),
116-
mintEpoch: collections.NewItem(sb, MintEpochKey, "mint_epoch", codec.CollValue[bmetypes.MintEpoch](cdc)),
116+
epochs: collections.NewMap(sb, MintEpochKey, "epochs", collections.StringKey, collections.Int64Value),
117117
remintCredits: collections.NewMap(sb, RemintCreditsKey, "remint_credits", collections.StringKey, sdk.IntValue),
118118
totalBurned: collections.NewMap(sb, TotalBurnedKey, "total_burned", collections.StringKey, sdk.IntValue),
119119
totalMinted: collections.NewMap(sb, TotalMintedKey, "total_minted", collections.StringKey, sdk.IntValue),

x/bme/keeper/key.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,11 @@ import (
44
"cosmossdk.io/collections"
55
)
66

7+
const (
8+
epochMint = "mint"
9+
epochBurn = "burn"
10+
)
11+
712
var (
813
RemintCreditsKey = collections.NewPrefix([]byte{0x01, 0x00})
914
TotalBurnedKey = collections.NewPrefix([]byte{0x02, 0x01})

x/market/handler/server.go

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -209,8 +209,6 @@ func (ms msgServer) CreateLease(goCtx context.Context, msg *mvbeta.MsgCreateLeas
209209
return &mvbeta.MsgCreateLeaseResponse{}, err
210210
}
211211

212-
// Convert bid price from uakt to uact if needed (account funds are in uact after BME conversion)
213-
// Swap rate: 1 uakt = 3 uact (based on oracle prices: AKT=$3, ACT=$1)
214212
paymentRate := bid.Price
215213

216214
err = ms.keepers.Escrow.PaymentCreate(ctx, msg.BidID.LeaseID().ToEscrowPaymentID(), provider, paymentRate)

0 commit comments

Comments
 (0)