Skip to content

Commit 7ce6050

Browse files
committed
refactor: pnlOnRepay logic
1 parent 0860f98 commit 7ce6050

File tree

10 files changed

+60
-23
lines changed

10 files changed

+60
-23
lines changed

ds/repo.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -79,8 +79,7 @@ type RepositoryI interface {
7979
AddCreditManagerStats(cms *schemas.CreditManagerStat)
8080
GetCMState(cmAddr string) *schemas.CreditManagerState
8181
GetUnderlyingDecimal(cmAddr string) int8
82-
AddRepayOnCM(blockNum int64, cm string, pnl schemas.PnlOnRepay)
83-
GetRepayOnCM(blockNum int64, cm string) *schemas.PnlOnRepay
82+
AddRepayOnCM(cm string, pnl schemas.PnlOnRepay)
8483
AddParameters(logID uint, txHash string, params *schemas.Parameters, token string)
8584
AddFastCheckParams(logID uint, txHash, cm, creditFilter string, fcParams *schemas.FastCheckParams)
8685
AfterSync(blockNum int64)

go.mod

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ module github.com/Gearbox-protocol/third-eye
33
go 1.17
44

55
require (
6-
github.com/Gearbox-protocol/sdk-go v0.0.0-20220709200223-50668e53dcce
6+
github.com/Gearbox-protocol/sdk-go v0.0.0-20220710120008-e282780fcdb2
77
github.com/ethereum/go-ethereum v1.10.17
88
github.com/go-playground/validator/v10 v10.4.1
99
github.com/heroku/x v0.0.42
@@ -59,4 +59,4 @@ require (
5959
sigs.k8s.io/yaml v1.1.0 // indirect
6060
)
6161

62-
// replace github.com/Gearbox-protocol/sdk-go v0.0.0-20220709094715-f5ee0223e270 => ../sdk-go
62+
// replace github.com/Gearbox-protocol/sdk-go v0.0.0-20220709200223-50668e53dcce => ../sdk-go

go.sum

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,8 @@ github.com/Gearbox-protocol/sdk-go v0.0.0-20220709094715-f5ee0223e270 h1:ZjCKV8A
3434
github.com/Gearbox-protocol/sdk-go v0.0.0-20220709094715-f5ee0223e270/go.mod h1:2jMzjWk66SUUXF5WG4SzMzfZ961B1nmKLJKeiIUCuXg=
3535
github.com/Gearbox-protocol/sdk-go v0.0.0-20220709200223-50668e53dcce h1:/dV+sNiPa7cNzRBW5OXxFPItE3ZsTcsARPwC94OsvcU=
3636
github.com/Gearbox-protocol/sdk-go v0.0.0-20220709200223-50668e53dcce/go.mod h1:2jMzjWk66SUUXF5WG4SzMzfZ961B1nmKLJKeiIUCuXg=
37+
github.com/Gearbox-protocol/sdk-go v0.0.0-20220710120008-e282780fcdb2 h1:7i4W1cmbIIZ0gujIHRP4qNE0sP/NZfdK8/6GWDrz4d0=
38+
github.com/Gearbox-protocol/sdk-go v0.0.0-20220710120008-e282780fcdb2/go.mod h1:2jMzjWk66SUUXF5WG4SzMzfZ961B1nmKLJKeiIUCuXg=
3739
github.com/Masterminds/semver/v3 v3.1.1 h1:hLg3sBzpNErnxhQtUy/mmLR2I9foDujNK030IGemrRc=
3840
github.com/Masterminds/semver/v3 v3.1.1/go.mod h1:VPu/7SZ7ePZ3QOrcuXROw5FAcLl4a0cBrbBpGY/8hQs=
3941
github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU=

jsonnet/close_credit_account_v2/blocks.jsonnet

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,7 @@
128128
amount: 4500,
129129
blockNum: 9,
130130
event: 'Repay',
131-
logId: 0,
131+
logId: 3,
132132
pool: '#Pool_1',
133133
sessionId: '#Account_1_4_0',
134134
txHash: '#Hash_12',

models/credit_manager/model.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ type CreditManager struct {
3636
LastTxHash string
3737
executeParams []ds.ExecuteParams
3838
State *schemas.CreditManagerState
39+
pnlOnCM *PnlCM
3940
lastEventBlock int64
4041
UpdatedSessions map[string]int
4142
ClosedSessions map[string]*SessionCloseDetails
@@ -80,6 +81,7 @@ func NewCreditManagerFromAdapter(adapter *ds.SyncAdapter) *CreditManager {
8081
UpdatedSessions: make(map[string]int),
8182
ClosedSessions: make(map[string]*SessionCloseDetails),
8283
multicall: MultiCallProcessor{},
84+
pnlOnCM: NewPnlCM(),
8385
}
8486
obj.GetAbi()
8587
switch obj.GetVersion() {

models/credit_manager/pnl_cm.go

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package credit_manager
2+
3+
import (
4+
"math/big"
5+
6+
"github.com/Gearbox-protocol/sdk-go/core/schemas"
7+
"github.com/Gearbox-protocol/sdk-go/log"
8+
)
9+
10+
type PnlCM struct {
11+
curPnl map[int64]*schemas.PnlOnRepay
12+
}
13+
14+
func NewPnlCM() *PnlCM {
15+
return &PnlCM{curPnl: map[int64]*schemas.PnlOnRepay{}}
16+
}
17+
func (mdl *PnlCM) Get(blockNum int64) *schemas.PnlOnRepay {
18+
pnlOnRepay := mdl.curPnl[blockNum]
19+
delete(mdl.curPnl, blockNum)
20+
return pnlOnRepay
21+
}
22+
23+
func (mdl *PnlCM) Set(pnl *schemas.PnlOnRepay) {
24+
oldPnl := mdl.curPnl[pnl.BlockNum]
25+
if oldPnl != nil {
26+
if oldPnl.BlockNum != pnl.BlockNum {
27+
log.Fatalf("Pool repay event has different oldPnl:%v pnl:%v for same block",
28+
oldPnl, pnl)
29+
}
30+
pnl.Profit = new(big.Int).Add(oldPnl.Profit, pnl.Profit)
31+
pnl.Loss = new(big.Int).Add(oldPnl.Loss, pnl.Loss)
32+
pnl.BorrowedAmount = new(big.Int).Add(oldPnl.BorrowedAmount, pnl.BorrowedAmount)
33+
}
34+
mdl.curPnl[pnl.BlockNum] = pnl
35+
}

models/credit_manager/state.go

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,9 @@ func (mdl *CreditManager) SetUnderlyingState(obj interface{}) {
2121
case (map[string]string):
2222
sessions := obj.(map[string]string)
2323
mdl.State.Sessions = sessions
24+
case *schemas.PnlOnRepay:
25+
pnl := obj.(*schemas.PnlOnRepay)
26+
mdl.pnlOnCM.Set(pnl)
2427
default:
2528
log.Fatal("Type assertion for credit manager state failed")
2629
}
@@ -67,13 +70,13 @@ func (mdl *CreditManager) calculateCMStat(blockNum int64) {
6770
}
6871
mdl.State.IsWETH = state.IsWETH
6972
// pnl on repay
70-
pnlOnRepay := mdl.Repo.GetRepayOnCM(blockNum, mdl.GetAddress())
71-
if pnlOnRepay != nil {
72-
mdl.State.TotalBorrowedBI = core.SubCoreAndInt(mdl.State.TotalBorrowedBI, pnlOnRepay.BorrowedAmount)
73+
pnl := mdl.pnlOnCM.Get(blockNum)
74+
if pnl != nil {
75+
mdl.State.TotalBorrowedBI = core.SubCoreAndInt(mdl.State.TotalBorrowedBI, pnl.BorrowedAmount)
7376
mdl.State.TotalBorrowed = utils.GetFloat64Decimal(mdl.State.TotalBorrowedBI.Convert(), mdl.GetUnderlyingDecimal())
74-
mdl.State.TotalLossesBI = core.AddCoreAndInt(mdl.State.TotalLossesBI, pnlOnRepay.Loss)
77+
mdl.State.TotalLossesBI = core.AddCoreAndInt(mdl.State.TotalLossesBI, pnl.Loss)
7578
mdl.State.TotalLosses = utils.GetFloat64Decimal(mdl.State.TotalLossesBI.Convert(), mdl.GetUnderlyingDecimal())
76-
mdl.State.TotalProfitBI = core.AddCoreAndInt(mdl.State.TotalProfitBI, pnlOnRepay.Profit)
79+
mdl.State.TotalProfitBI = core.AddCoreAndInt(mdl.State.TotalProfitBI, pnl.Profit)
7780
mdl.State.TotalProfit = utils.GetFloat64Decimal(mdl.State.TotalProfitBI.Convert(), mdl.GetUnderlyingDecimal())
7881
}
7982
mdl.State.MinAmount = (*core.BigInt)(state.MinAmount)

models/pool/on_log.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
package pool
22

33
import (
4+
"math/big"
5+
46
"github.com/Gearbox-protocol/sdk-go/core"
57
"github.com/Gearbox-protocol/sdk-go/core/schemas"
68
"github.com/Gearbox-protocol/sdk-go/log"
79
"github.com/Gearbox-protocol/sdk-go/utils"
810
"github.com/ethereum/go-ethereum/core/types"
9-
"math/big"
1011
)
1112

1213
func (mdl *Pool) createPoolStat() {
@@ -63,7 +64,8 @@ func (mdl *Pool) OnLog(txLog types.Log) {
6364
if err != nil {
6465
log.Fatal("[PoolServiceModel]: Cant unpack RemoveLiquidity event", err)
6566
}
66-
mdl.Repo.AddRepayOnCM(blockNum, repayEvent.CreditManager.Hex(), schemas.PnlOnRepay{
67+
mdl.Repo.AddRepayOnCM(repayEvent.CreditManager.Hex(), schemas.PnlOnRepay{
68+
BlockNum: blockNum,
6769
BorrowedAmount: repayEvent.BorrowedAmount,
6870
Profit: repayEvent.Profit,
6971
Loss: repayEvent.Loss,

repository/credit_manager.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,3 +74,8 @@ func (repo *Repository) AddAccountTokenTransfer(tt *schemas.TokenTransfer) {
7474
repo.SetBlock(tt.BlockNum)
7575
repo.accountManager.AddTokenTransfer(tt)
7676
}
77+
78+
func (repo *Repository) AddRepayOnCM(cmAddr string, pnlOnRepay schemas.PnlOnRepay) {
79+
adapter := repo.GetAdapter(cmAddr)
80+
adapter.SetUnderlyingState(&pnlOnRepay)
81+
}

repository/handlers/blocks.go

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -157,10 +157,6 @@ func (repo *BlocksRepo) AddCreditManagerStats(cms *schemas.CreditManagerStat) {
157157
repo.SetAndGetBlock(cms.BlockNum).AddCreditManagerStats(cms)
158158
}
159159

160-
func (repo *BlocksRepo) AddRepayOnCM(blockNum int64, cmAddr string, pnlOnRepay schemas.PnlOnRepay) {
161-
repo.SetAndGetBlock(blockNum).AddRepayOnCM(cmAddr, &pnlOnRepay)
162-
}
163-
164160
func (repo *BlocksRepo) AddPriceFeed(pf *schemas.PriceFeed) {
165161
repo.SetAndGetBlock(pf.BlockNumber).AddPriceFeed(pf)
166162
}
@@ -176,10 +172,3 @@ func (repo *BlocksRepo) AddPoolStat(ps *schemas.PoolStat) {
176172
func (repo *BlocksRepo) TransferAccountAllowed(obj *schemas.TransferAccountAllowed) {
177173
repo.SetAndGetBlock(obj.BlockNumber).AddTransferAccountAllowed(obj)
178174
}
179-
180-
// getter
181-
func (repo *BlocksRepo) GetRepayOnCM(blockNum int64, cmAddr string) *schemas.PnlOnRepay {
182-
repo.mu.Lock()
183-
defer repo.mu.Unlock()
184-
return repo.blocks[blockNum].GetRepayOnCM(cmAddr)
185-
}

0 commit comments

Comments
 (0)