-
Notifications
You must be signed in to change notification settings - Fork 1
/
end_block_deposit.go
58 lines (52 loc) · 1.93 KB
/
end_block_deposit.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
package abci
import (
"context"
"fmt"
sdk "github.com/cosmos/cosmos-sdk/types"
seiutils "github.com/fibonacci-chain/core/utils"
"github.com/fibonacci-chain/core/x/dex/keeper/utils"
"github.com/fibonacci-chain/core/x/dex/types"
dexutils "github.com/fibonacci-chain/core/x/dex/utils"
"go.opentelemetry.io/otel/attribute"
otrace "go.opentelemetry.io/otel/trace"
)
func (w KeeperWrapper) HandleEBDeposit(ctx context.Context, sdkCtx sdk.Context, tracer *otrace.Tracer, contractAddr string) error {
_, span := (*tracer).Start(ctx, "SudoDeposit")
span.SetAttributes(attribute.String("contractAddr", contractAddr))
defer span.End()
typedContractAddr := types.ContractAddress(contractAddr)
msg := w.GetDepositSudoMsg(sdkCtx, typedContractAddr)
if msg.IsEmpty() {
return nil
}
_, err := utils.CallContractSudo(sdkCtx, w.Keeper, contractAddr, msg, dexutils.ZeroUserProvidedGas) // deposit
if err != nil {
sdkCtx.Logger().Error(fmt.Sprintf("Error during deposit: %s", err.Error()))
return err
}
return nil
}
func (w KeeperWrapper) GetDepositSudoMsg(ctx sdk.Context, typedContractAddr types.ContractAddress) types.SudoOrderPlacementMsg {
depositMemState := dexutils.GetMemState(ctx.Context()).GetDepositInfo(ctx, typedContractAddr).Get()
contractDepositInfo := seiutils.Map(
depositMemState,
func(d *types.DepositInfoEntry) types.ContractDepositInfo { return d.ToContractDepositInfo() },
)
escrowed := sdk.NewCoins()
for _, deposit := range depositMemState {
escrowed = escrowed.Add(sdk.NewCoin(deposit.Denom, deposit.Amount.TruncateInt()))
}
contractAddr, err := sdk.AccAddressFromBech32(string(typedContractAddr))
if err != nil {
panic(err)
}
if err := w.BankKeeper.SendCoinsFromModuleToAccount(ctx, types.ModuleName, contractAddr, escrowed); err != nil {
panic(err)
}
return types.SudoOrderPlacementMsg{
OrderPlacements: types.OrderPlacementMsgDetails{
Orders: []types.Order{},
Deposits: contractDepositInfo,
},
}
}