code.vegaprotocol.io/vega@v0.79.0/datanode/entities/ledgerentry.go (about) 1 // Copyright (C) 2023 Gobalsky Labs Limited 2 // 3 // This program is free software: you can redistribute it and/or modify 4 // it under the terms of the GNU Affero General Public License as 5 // published by the Free Software Foundation, either version 3 of the 6 // License, or (at your option) any later version. 7 // 8 // This program is distributed in the hope that it will be useful, 9 // but WITHOUT ANY WARRANTY; without even the implied warranty of 10 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11 // GNU Affero General Public License for more details. 12 // 13 // You should have received a copy of the GNU Affero General Public License 14 // along with this program. If not, see <http://www.gnu.org/licenses/>. 15 16 package entities 17 18 import ( 19 "context" 20 "fmt" 21 "time" 22 23 "code.vegaprotocol.io/vega/libs/ptr" 24 "code.vegaprotocol.io/vega/protos/vega" 25 26 "github.com/jackc/pgtype" 27 "github.com/shopspring/decimal" 28 ) 29 30 type LedgerEntry struct { 31 LedgerEntryTime time.Time 32 FromAccountID AccountID `db:"account_from_id"` 33 ToAccountID AccountID `db:"account_to_id"` 34 Quantity decimal.Decimal 35 TxHash TxHash 36 VegaTime time.Time 37 TransferTime time.Time 38 Type LedgerMovementType 39 FromAccountBalance decimal.Decimal `db:"account_from_balance"` 40 ToAccountBalance decimal.Decimal `db:"account_to_balance"` 41 TransferID TransferID 42 } 43 44 var LedgerEntryColumns = []string{ 45 "ledger_entry_time", 46 "account_from_id", "account_to_id", "quantity", 47 "tx_hash", "vega_time", "transfer_time", "type", 48 "account_from_balance", 49 "account_to_balance", 50 "transfer_id", 51 } 52 53 func (le LedgerEntry) ToProto(ctx context.Context, accountSource AccountSource) (*vega.LedgerEntry, error) { 54 fromAcc, err := accountSource.GetByID(ctx, le.FromAccountID) 55 if err != nil { 56 return nil, fmt.Errorf("getting from account for transfer proto:%w", err) 57 } 58 59 toAcc, err := accountSource.GetByID(ctx, le.ToAccountID) 60 if err != nil { 61 return nil, fmt.Errorf("getting to account for transfer proto:%w", err) 62 } 63 64 var transferID *string 65 if le.TransferID != "" { 66 transferID = ptr.From(le.TransferID.String()) 67 } 68 69 return &vega.LedgerEntry{ 70 FromAccount: fromAcc.ToAccountDetailsProto(), 71 ToAccount: toAcc.ToAccountDetailsProto(), 72 Amount: le.Quantity.String(), 73 Type: vega.TransferType(le.Type), 74 FromAccountBalance: le.FromAccountBalance.String(), 75 ToAccountBalance: le.ToAccountBalance.String(), 76 TransferId: transferID, 77 }, nil 78 } 79 80 func (le LedgerEntry) ToRow() []any { 81 return []any{ 82 le.LedgerEntryTime, 83 le.FromAccountID, 84 le.ToAccountID, 85 le.Quantity, 86 le.TxHash, 87 le.VegaTime, 88 le.TransferTime, 89 le.Type, 90 le.FromAccountBalance, 91 le.ToAccountBalance, 92 le.TransferID, 93 } 94 } 95 96 func CreateLedgerEntryTime(vegaTime time.Time, seqNum int) time.Time { 97 return vegaTime.Add(time.Duration(seqNum) * time.Microsecond) 98 } 99 100 type LedgerMovementType vega.TransferType 101 102 const ( 103 LedgerMovementTypeUnspecified = LedgerMovementType(vega.TransferType_TRANSFER_TYPE_UNSPECIFIED) 104 LedgerMovementTypeLoss = LedgerMovementType(vega.TransferType_TRANSFER_TYPE_LOSS) 105 LedgerMovementTypeWin = LedgerMovementType(vega.TransferType_TRANSFER_TYPE_WIN) 106 LedgerMovementTypeMTMLoss = LedgerMovementType(vega.TransferType_TRANSFER_TYPE_MTM_LOSS) 107 LedgerMovementTypeMTMWin = LedgerMovementType(vega.TransferType_TRANSFER_TYPE_MTM_WIN) 108 LedgerMovementTypeMarginLow = LedgerMovementType(vega.TransferType_TRANSFER_TYPE_MARGIN_LOW) 109 LedgerMovementTypeMarginHigh = LedgerMovementType(vega.TransferType_TRANSFER_TYPE_MARGIN_HIGH) 110 LedgerMovementTypeMarginConfiscated = LedgerMovementType(vega.TransferType_TRANSFER_TYPE_MARGIN_CONFISCATED) 111 LedgerMovementTypeMakerFeePay = LedgerMovementType(vega.TransferType_TRANSFER_TYPE_MAKER_FEE_PAY) 112 LedgerMovementTypeMakerFeeReceive = LedgerMovementType(vega.TransferType_TRANSFER_TYPE_MAKER_FEE_RECEIVE) 113 LedgerMovementTypeInfrastructureFeePay = LedgerMovementType(vega.TransferType_TRANSFER_TYPE_INFRASTRUCTURE_FEE_PAY) 114 LedgerMovementTypeInfrastructureFeeDistribute = LedgerMovementType(vega.TransferType_TRANSFER_TYPE_INFRASTRUCTURE_FEE_DISTRIBUTE) 115 LedgerMovementTypeLiquidityFeePay = LedgerMovementType(vega.TransferType_TRANSFER_TYPE_LIQUIDITY_FEE_PAY) 116 LedgerMovementTypeLiquidityFeeDistribute = LedgerMovementType(vega.TransferType_TRANSFER_TYPE_LIQUIDITY_FEE_DISTRIBUTE) 117 LedgerMovementTypeBondLow = LedgerMovementType(vega.TransferType_TRANSFER_TYPE_BOND_LOW) 118 LedgerMovementTypeBondHigh = LedgerMovementType(vega.TransferType_TRANSFER_TYPE_BOND_HIGH) 119 LedgerMovementTypeWithdraw = LedgerMovementType(vega.TransferType_TRANSFER_TYPE_WITHDRAW) 120 LedgerMovementTypeDeposit = LedgerMovementType(vega.TransferType_TRANSFER_TYPE_DEPOSIT) 121 LedgerMovementTypeBondSlashing = LedgerMovementType(vega.TransferType_TRANSFER_TYPE_BOND_SLASHING) 122 LedgerMovementTypeRewardPayout = LedgerMovementType(vega.TransferType_TRANSFER_TYPE_REWARD_PAYOUT) 123 LedgerMovementTypeTransferFundsSend = LedgerMovementType(vega.TransferType_TRANSFER_TYPE_TRANSFER_FUNDS_SEND) 124 LedgerMovementTypeTransferFundsDistribute = LedgerMovementType(vega.TransferType_TRANSFER_TYPE_TRANSFER_FUNDS_DISTRIBUTE) 125 LedgerMovementTypeClearAccount = LedgerMovementType(vega.TransferType_TRANSFER_TYPE_CLEAR_ACCOUNT) 126 LedgerMovementTypePerpFundingWin = LedgerMovementType(vega.TransferType_TRANSFER_TYPE_PERPETUALS_FUNDING_WIN) 127 LedgerMovementTypePerpFundingLoss = LedgerMovementType(vega.TransferType_TRANSFER_TYPE_PERPETUALS_FUNDING_LOSS) 128 LedgerMovementTypeRewardsVested = LedgerMovementType(vega.TransferType_TRANSFER_TYPE_REWARDS_VESTED) 129 ) 130 131 func (l LedgerMovementType) EncodeText(_ *pgtype.ConnInfo, buf []byte) ([]byte, error) { 132 ty, ok := vega.TransferType_name[int32(l)] 133 if !ok { 134 return buf, fmt.Errorf("unknown ledger movement type: %s", ty) 135 } 136 return append(buf, []byte(ty)...), nil 137 } 138 139 func (l *LedgerMovementType) DecodeText(_ *pgtype.ConnInfo, src []byte) error { 140 val, ok := vega.TransferType_value[string(src)] 141 if !ok { 142 return fmt.Errorf("unknown ledger movement type: %s", src) 143 } 144 145 *l = LedgerMovementType(val) 146 return nil 147 }