mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-06-21 14:14:30 +00:00
* internal: remove XDCx public API * XDCx, XDCxlending: remove api * ethclient: remove SendOrderTransaction and SendLendingTransaction * XDCx, XDCxlending: remove unused variables and function * eth, internal/ethapi: remove function `OrderStats()`
114 lines
4 KiB
Go
114 lines
4 KiB
Go
package txpool
|
|
|
|
import (
|
|
"math/big"
|
|
"strconv"
|
|
"strings"
|
|
|
|
"github.com/XinFinOrg/XDPoSChain/XDCxlending/lendingstate"
|
|
"github.com/XinFinOrg/XDPoSChain/common"
|
|
"github.com/XinFinOrg/XDPoSChain/rpc"
|
|
"golang.org/x/crypto/sha3"
|
|
)
|
|
|
|
type LendingMsg struct {
|
|
AccountNonce uint64 `json:"nonce" gencodec:"required"`
|
|
Quantity *big.Int `json:"quantity,omitempty"`
|
|
RelayerAddress common.Address `json:"relayerAddress,omitempty"`
|
|
UserAddress common.Address `json:"userAddress,omitempty"`
|
|
CollateralToken common.Address `json:"collateralToken,omitempty"`
|
|
AutoTopUp bool `json:"autoTopUp,omitempty"`
|
|
LendingToken common.Address `json:"lendingToken,omitempty"`
|
|
Term uint64 `json:"term,omitempty"`
|
|
Interest uint64 `json:"interest,omitempty"`
|
|
Status string `json:"status,omitempty"`
|
|
Side string `json:"side,omitempty"`
|
|
Type string `json:"type,omitempty"`
|
|
LendingId uint64 `json:"lendingId,omitempty"`
|
|
LendingTradeId uint64 `json:"tradeId,omitempty"`
|
|
ExtraData string `json:"extraData,omitempty"`
|
|
// Signature values
|
|
V *big.Int `json:"v" gencodec:"required"`
|
|
R *big.Int `json:"r" gencodec:"required"`
|
|
S *big.Int `json:"s" gencodec:"required"`
|
|
|
|
// This is only used when marshaling to JSON.
|
|
Hash common.Hash `json:"hash" rlp:"-"`
|
|
}
|
|
|
|
func getLendingNonce(userAddress common.Address) (uint64, error) {
|
|
rpcClient, err := rpc.DialHTTP("http://127.0.0.1:8501")
|
|
if err != nil {
|
|
return 0, err
|
|
}
|
|
defer rpcClient.Close()
|
|
var result interface{}
|
|
err = rpcClient.Call(&result, "XDCx_getLendingOrderCount", userAddress)
|
|
if err != nil {
|
|
return 0, err
|
|
}
|
|
s := result.(string)
|
|
s = strings.TrimPrefix(s, "0x")
|
|
n, err := strconv.ParseUint(s, 16, 32)
|
|
return n, err
|
|
}
|
|
|
|
func (l *LendingMsg) computeHash() common.Hash {
|
|
borrowing := l.Side == lendingstate.Borrowing
|
|
sha := sha3.NewLegacyKeccak256()
|
|
if l.Type == lendingstate.Repay {
|
|
sha.Write(common.BigToHash(big.NewInt(int64(l.AccountNonce))).Bytes())
|
|
sha.Write([]byte(l.Status))
|
|
sha.Write(l.RelayerAddress.Bytes())
|
|
sha.Write(l.UserAddress.Bytes())
|
|
sha.Write(l.LendingToken.Bytes())
|
|
sha.Write(common.BigToHash(big.NewInt(int64(l.Term))).Bytes())
|
|
sha.Write(common.BigToHash(big.NewInt(int64(l.LendingTradeId))).Bytes())
|
|
} else if l.Type == lendingstate.TopUp {
|
|
sha.Write(common.BigToHash(big.NewInt(int64(l.AccountNonce))).Bytes())
|
|
sha.Write([]byte(l.Status))
|
|
sha.Write(l.RelayerAddress.Bytes())
|
|
sha.Write(l.UserAddress.Bytes())
|
|
sha.Write(l.LendingToken.Bytes())
|
|
sha.Write(common.BigToHash(big.NewInt(int64(l.Term))).Bytes())
|
|
sha.Write(common.BigToHash(big.NewInt(int64(l.LendingTradeId))).Bytes())
|
|
sha.Write(common.BigToHash(l.Quantity).Bytes())
|
|
} else {
|
|
if l.Status == lendingstate.LendingStatusCancelled {
|
|
sha := sha3.NewLegacyKeccak256()
|
|
sha.Write(l.Hash.Bytes())
|
|
sha.Write(common.BigToHash(big.NewInt(int64(l.AccountNonce))).Bytes())
|
|
sha.Write(l.UserAddress.Bytes())
|
|
sha.Write(common.BigToHash(big.NewInt(int64(l.LendingId))).Bytes())
|
|
sha.Write([]byte(l.Status))
|
|
sha.Write(l.RelayerAddress.Bytes())
|
|
} else if l.Status == lendingstate.LendingStatusNew {
|
|
sha.Write(l.RelayerAddress.Bytes())
|
|
sha.Write(l.UserAddress.Bytes())
|
|
if borrowing {
|
|
sha.Write(l.CollateralToken.Bytes())
|
|
}
|
|
sha.Write(l.LendingToken.Bytes())
|
|
sha.Write(common.BigToHash(l.Quantity).Bytes())
|
|
sha.Write(common.BigToHash(big.NewInt(int64(l.Term))).Bytes())
|
|
if l.Type == lendingstate.Limit {
|
|
sha.Write(common.BigToHash(big.NewInt(int64(l.Interest))).Bytes())
|
|
}
|
|
sha.Write([]byte(l.Side))
|
|
sha.Write([]byte(l.Status))
|
|
sha.Write([]byte(l.Type))
|
|
sha.Write(common.BigToHash(big.NewInt(int64(l.AccountNonce))).Bytes())
|
|
sha.Write(common.BigToHash(big.NewInt(int64(l.LendingTradeId))).Bytes())
|
|
if borrowing {
|
|
autoTopUp := int64(0)
|
|
if l.AutoTopUp {
|
|
autoTopUp = int64(1)
|
|
}
|
|
sha.Write(common.BigToHash(big.NewInt(autoTopUp)).Bytes())
|
|
}
|
|
}
|
|
}
|
|
|
|
return common.BytesToHash(sha.Sum(nil))
|
|
|
|
}
|