-
Notifications
You must be signed in to change notification settings - Fork 0
/
deposit.go
94 lines (75 loc) · 2.78 KB
/
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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
package keeper
import (
sdk "github.com/cosmos/cosmos-sdk/types"
sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
"github.com/spf13/cast"
"github.com/furya-network/furya/x/house/types"
)
// SetDeposit sets a deposit.
func (k Keeper) SetDeposit(ctx sdk.Context, deposit types.Deposit) {
depositKey := types.GetDepositKey(deposit.Creator, deposit.MarketUID, deposit.ParticipationIndex)
store := k.getDepositsStore(ctx)
b := k.cdc.MustMarshal(&deposit)
store.Set(depositKey, b)
}
// GetDeposit returns a specific deposit.
func (k Keeper) GetDeposit(ctx sdk.Context, depositorAddress, marketUID string, participationIndex uint64) (val types.Deposit, found bool) {
MarketsStore := k.getDepositsStore(ctx)
depositKey := types.GetDepositKey(depositorAddress, marketUID, participationIndex)
b := MarketsStore.Get(depositKey)
if b == nil {
return val, false
}
k.cdc.MustUnmarshal(b, &val)
return val, true
}
// GetAllDeposits returns all deposits used during genesis dump.
func (k Keeper) GetAllDeposits(ctx sdk.Context) (list []types.Deposit, err error) {
store := k.getDepositsStore(ctx)
iterator := sdk.KVStorePrefixIterator(store, []byte{})
defer func() {
err = iterator.Close()
}()
for ; iterator.Valid(); iterator.Next() {
var val types.Deposit
k.cdc.MustUnmarshal(iterator.Value(), &val)
list = append(list, val)
}
return
}
// Deposit performs a deposit, set/update everything necessary within the store.
func (k Keeper) Deposit(ctx sdk.Context, creator string, marketUID string, amount sdk.Int) (participationIndex uint64, err error) {
// Create the deposit object
deposit := types.NewDeposit(creator, marketUID, amount, sdk.ZeroInt(), 0)
deposit.SetHouseParticipationFee(k.GetHouseParticipationFee(ctx))
creatorAddr, err := sdk.AccAddressFromBech32(creator)
if err != nil {
err = sdkerrors.Wrapf(sdkerrors.ErrInvalidAddress, "invalid creator address (%s)", err)
return
}
participationIndex, err = k.srKeeper.InitiateBookParticipation(
ctx, creatorAddr, marketUID, deposit.Liquidity, deposit.Fee,
)
if err != nil {
err = sdkerrors.Wrapf(types.ErrSRDepositProcessing, "%s", err)
return
}
deposit.ParticipationIndex = participationIndex
k.SetDeposit(ctx, deposit)
emitTransactionEvent(ctx, types.TypeMsgDeposit, cast.ToString(participationIndex), creator)
return participationIndex, err
}
func emitTransactionEvent(ctx sdk.Context, emitType string, participationIndex, creator string) {
ctx.EventManager().EmitEvents(sdk.Events{
sdk.NewEvent(
emitType,
sdk.NewAttribute(types.AttributeKeyParticipationIndex, participationIndex),
),
sdk.NewEvent(
sdk.EventTypeMessage,
sdk.NewAttribute(sdk.AttributeKeyModule, types.ModuleName),
sdk.NewAttribute(sdk.AttributeKeyAction, emitType),
sdk.NewAttribute(sdk.AttributeKeySender, creator),
),
})
}