Trading guide
Helper functions
from eth_abi.packed import encode_abi_packed
DEPOSIT_ACTION_TYPE = {
"None": 0,
"DepositAsset": 1,
"DepositUnderlying": 2,
"DepositAssetAndMintNToken": 3,
"DepositUnderlyingAndMintNToken": 4,
"RedeemNToken": 5,
"ConvertCashToNToken": 6,
}
TRADE_ACTION_TYPE = {
"Lend": 0,
"Borrow": 1,
"AddLiquidity": 2,
"RemoveLiquidity": 3,
"PurchaseNTokenResidual": 4,
"SettleCashDebt": 5,
}
def get_balance_action(currencyId, depositActionType, **kwargs):
depositActionAmount = (
0 if "depositActionAmount" not in kwargs else kwargs["depositActionAmount"]
)
withdrawAmountInternalPrecision = (
0
if "withdrawAmountInternalPrecision" not in kwargs
else kwargs["withdrawAmountInternalPrecision"]
)
withdrawEntireCashBalance = (
False if "withdrawEntireCashBalance" not in kwargs else kwargs["withdrawEntireCashBalance"]
)
redeemToUnderlying = (
True if "redeemToUnderlying" not in kwargs else kwargs["redeemToUnderlying"]
)
return (
DEPOSIT_ACTION_TYPE[depositActionType],
currencyId,
int(depositActionAmount),
int(withdrawAmountInternalPrecision),
withdrawEntireCashBalance,
redeemToUnderlying,
)
def get_balance_trade_action(currencyId, depositActionType, tradeActionData, **kwargs):
tradeActions = [get_trade_action(**t) for t in tradeActionData]
balanceAction = list(get_balance_action(currencyId, depositActionType, **kwargs))
balanceAction.append(tradeActions)
return tuple(balanceAction)
def get_lend_action(currencyId, tradeActionData, depositUnderlying):
tradeActions = [get_trade_action(**t) for t in tradeActionData]
return (currencyId, depositUnderlying, tradeActions)
def get_trade_action(**kwargs):
tradeActionType = kwargs["tradeActionType"]
if tradeActionType == "Lend":
return encode_abi_packed(
["uint8", "uint8", "uint88", "uint32", "uint120"],
[
TRADE_ACTION_TYPE[tradeActionType],
kwargs["marketIndex"],
int(kwargs["notional"]),
int(kwargs["minSlippage"]),
0,
],
)
elif tradeActionType == "Borrow":
return encode_abi_packed(
["uint8", "uint8", "uint88", "uint32", "uint120"],
[
TRADE_ACTION_TYPE[tradeActionType],
kwargs["marketIndex"],
int(kwargs["notional"]),
int(kwargs["maxSlippage"]),
0,
],
)
elif tradeActionType == "AddLiquidity":
return encode_abi_packed(
["uint8", "uint8", "uint88", "uint32", "uint32", "uint88"],
[
TRADE_ACTION_TYPE[tradeActionType],
kwargs["marketIndex"],
int(kwargs["notional"]),
int(kwargs["minSlippage"]),
int(kwargs["maxSlippage"]),
0,
],
)
elif tradeActionType == "RemoveLiquidity":
return encode_abi_packed(
["uint8", "uint8", "uint88", "uint32", "uint32", "uint88"],
[
TRADE_ACTION_TYPE[tradeActionType],
kwargs["marketIndex"],
int(kwargs["notional"]),
int(kwargs["minSlippage"]),
int(kwargs["maxSlippage"]),
0,
],
)
elif tradeActionType == "PurchaseNTokenResidual":
return encode_abi_packed(
["uint8", "uint32", "int88", "uint128"],
[
TRADE_ACTION_TYPE[tradeActionType],
kwargs["maturity"],
int(kwargs["fCashAmountToPurchase"]),
0,
],
)
elif tradeActionType == "SettleCashDebt":
return encode_abi_packed(
["uint8", "address", "uint88"],
[
TRADE_ACTION_TYPE[tradeActionType],
kwargs["counterparty"],
int(kwargs["amountToSettle"]),
],
)
Last updated