Skip to content

Commit 5c89230

Browse files
authored
exchanges: Okx Update (#1420)
* update acccount ratelimits and added missing endpoints * completed mapping missing trade accoung REST endpoints and Rate Limit * added orderbook trading missing REST endpoints * Added few missing endpoints and unit tests * Completed grid trading and signal bot trading with unit tests * Added Recurring Buy endpoints and corresponding unit tests * Added copy trading endpoints and unit tests * added newly added block trading and spread endpoints * completed mapping spread endpoints * Added new endpoints and unit tests * Added round 1: Okx types and converts update. * Update endpoints handling and types update * Removed constants, updated unit tests, and updated endpoint methods * Slight endpoint and unit test update * Added spread and other websocket endpoints and update * completed Spread WS Orderbook handler * Added missing spread channels and handlers * Adding Bussinss websocket and missing subscriptions, update unit tests, and endpoints * Added spread endpoints to wrapper and unit tests update * Added missing websocket subscriptions and copy trading endpoints * Added missing endpoints and re-organize business websocket handlers * Docs update * Endpoints code updates * types, unit test and endpoints update * Minor unit tests update * spelling fix * fix unit test issues * Updating unit tests error handling * Updating unit tests error handling * Unit tests assertion handling update * Unit tests update * Resolve linter issues * linter issues fix * Orderbook unit test error fix * Minor fixes * Change on test handling and types * Updating unit tests and cleanups * Fix unit test issues * Add ratelimit test and update unit tests and methods * Update method parameters and error declarations * Added lending endpoints, unit tests, and update endpoint methods and error declarations * Update ratelimiters, add missing lending and trading endpoints and unit tests * Update websocket authentication and subscription handling * Minor update to unit test and types * Types, error handling, and other minor updates * Update unit tests and endpoint functions * error declarations update and unit tests * Overall update on unit endpoint, unit tests, and types * Adding review fixes * Update on endpoints, order types, and unit tests * Update unit tests and endpoint functions * Update on endpoint and update missing parameters * Implemented and tested newly added trading endpoints * endpoints update and unit tests * Update missing endpoints and update overall code * added and testing funding and fiat related endpoints * Update on convert and fiat related endpoints * linter fix, types, endpoints, and unit tests update * linter issues fix * revert changes on tempos * Fix Panic and update websocket auth calls handling * config linter issue fix * Fix panic issues and update unit tests * Fix race condition, TestAllExchangeWrappers unit test issues * Fix withdrawal manager test issue * Rename ClosePositionForContractrID --> ClosePositionForContractID * Rename ClosePositionForContractrID --> ClosePositionForContractID * Fix error * endpoints update and fix unit test issues * added unit tests, updated comments, and code sections * revert change in defaultSubscriptions * few types comments update * Minor changes * remove lending endpoints * rm mistakenly added code * fix unit test * minor unit test fix * Adding offline error tests, update endpoints function, config update * Update unit test coverage for offline error handliing * Updating wrapper algo order coverage, endpoint calls, and unit tests * Updating wrapper trade functions to accomodate algo orders * update wrapper unit tests * Fix wrapper order functions offline errors handling * Tested and updated wrapper order functions * Address review comments * update order unit tests, and okx endpoint functions * finalize affected order, endpoint, and margin endpoints * Slight change on margin unit test * fix margin unit test issues * Minor change on unit test * updates on contract settlement and future contract wrapper function * add test coverage for contract functions and minor fix on wrapper * Overall update and unit testing * codespell, unit tests, type declaration and naming, and code-structure updates * margin types value and validation function fix * Update tests and helper funcs * Improve test coverage * helper functions and unit tests update * Fix margin unit test * Minor review updates * minor fix on if statement * Update helper functions * error handling and functions naming update * update comment * minor error return fixes * minor unit test fix * Minor fix on spread websocket orders handling * codespell fix * skip orderbook depth with incomplete price * skip orderbook depth with incomplete price
1 parent e6d4561 commit 5c89230

29 files changed

+16683
-7903
lines changed

common/common.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ var (
6868
ErrCannotCalculateOffline = errors.New("cannot calculate offline, unsupported")
6969
ErrNoResponse = errors.New("no response")
7070
ErrTypeAssertFailure = errors.New("type assert failure")
71+
ErrNoResults = errors.New("no results found")
7172
ErrUnknownError = errors.New("unknown error")
7273
ErrGettingField = errors.New("error getting field")
7374
ErrSettingField = errors.New("error setting field")

config_example.json

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2135,7 +2135,8 @@
21352135
"margin",
21362136
"option",
21372137
"perpetualswap",
2138-
"spot"
2138+
"spot",
2139+
"spread"
21392140
],
21402141
"pairs": {
21412142
"futures": {
@@ -2162,6 +2163,11 @@
21622163
"assetEnabled": true,
21632164
"enabled": "BTC-USDT,ETH-USDT,OKB-USDT",
21642165
"available": "OKT-USDT,LTC-USDT,DOT-USDT,DOGE-USDT,LUNC-USDT,ETHW-USDT,LUNA-USDT,FIL-USDT,XRP-USDT,CITY-USDT,MENGO-USDT,ARG-USDT,POR-USDT,1INCH-USDT,AAVE-USDT,ABT-USDT,ACA-USDT,ADA-USDT,AERGO-USDT,AGLD-USDT,XMR-ETH,YFI-ETH,ZEC-ETH,LTC-OKB,XRP-OKB,ETC-OKB,BTC-USDT,ETH-USDT,OKB-USDT,OKT-USDT,LTC-USDT,DOT-USDT,DOGE-USDT,LUNC-USDT,ETHW-USDT,LUNA-USDT,FIL-USDT,XRP-USDT,CITY-USDT,MENGO-USDT,ARG-USDT,POR-USDT,1INCH-USDT,AAVE-USDT,ABT-USDT,ACA-USDT,ADA-USDT,AERGO-USDT,AGLD-USDT,AKITA-USDT,ALCX-USDT,ALGO-USDT,ALPHA-USDT,ANC-USDT,ANT-USDT,ANW-USDT,APE-USDT,APIX-USDT,API3-USDT,APM-USDT,AR-USDT,ARK-USDT,AST-USDT,ASTR-USDT,ATOM-USDT,AUCTION-USDT,AVAX-USDT,AXS-USDT,AZY-USDT,BABYDOGE-USDT,BADGER-USDT,BAL-USDT,BAND-USDT,BAT-USDT,BCD-USDT,BCH-USDT,BETH-USDT,BHP-USDT,BICO-USDT,BLOK-USDT,BNT-USDT,BORING-USDT,BORA-USDT,BRWL-USDT,BSV-USDT,BTG-USDT,BTM-USDT,BTT-USDT,BZZ-USDT,CELO-USDT,CEL-USDT,CELR-USDT,CELT-USDT,CFG-USDT,CFX-USDT,CGS-USDT,CHAT-USDT,CHE-USDT,CHZ-USDT,CLV-USDT,CMT-USDT,CNTM-USDT,COMP-USDT,CONV-USDT,COVER-USDT,CQT-USDT,CRO-USDT,CRV-USDT,CSPR-USDT,CTC-USDT,CTXC-USDT,CVC-USDT,CVP-USDT,CVT-USDT,CVX-USDT,DAI-USDT,DAO-USDT,DASH-USDT,DCR-USDT,DEP-USDT,DEVT-USDT,DGB-USDT,DHT-USDT,DIA-USDT,DMD-USDT,DNA-USDT,DOME-USDT,DORA-USDT,DOSE-USDT,DYDX-USDT,EC-USDT,EDEN-USDT,EFI-USDT,EGLD-USDT,EGT-USDT,ELF-USDT,ELON-USDT,ELT-USDT,EM-USDT,ENJ-USDT,ENS-USDT,EOS-USDT,ERN-USDT,ETC-USDT,EURT-USDT,FAIR-USDT,FAME-USDT,FITFI-USDT,FLM-USDT,FLOW-USDT,FODL-USDT,FORTH-USDT,FRONT-USDT,FSN-USDT,FTM-USDT,GALA-USDT,GALFT-USDT,GARI-USDT,GAS-USDT,GF-USDT,GHST-USDT,GLM-USDT,GLMR-USDT,GM-USDT,GMT-USDT,GODS-USDT,GOG-USDT,GRT-USDT,GTO-USDT,GUSD-USDT,HBAR-USDT,HC-USDT,HDAO-USDT,HEGIC-USDT,HYC-USDT,ICP-USDT,ICX-USDT,ILV-USDT,IMX-USDT,INT-USDT,INX-USDT,IOST-USDT,IOTA-USDT,IQ-USDT,JFI-USDT,JOE-USDT,JST-USDT,KAN-USDT,KAR-USDT,KCASH-USDT,KDA-USDT,KINE-USDT,KISHU-USDT,KLAY-USDT,KNC-USDT,KOL-USDT,KONO-USDT,KP3R-USDT,KSM-USDT,LAMB-USDT,LAT-USDT,LBA-USDT,LDN-USDT,LDO-USDT,LEASH-USDT,LEO-USDT,LET-USDT,LINK-USDT,LING-USDT,LITH-USDT,LON-USDT,LOON-USDT,LOOKS-USDT,LPT-USDT,LRC-USDT,LSK-USDT,MAGIC-USDT,MANA-USDT,MASK-USDT,MATIC-USDT,MCO-USDT,MDA-USDT,MDT-USDT,MEME-USDT,METIS-USDT,MILO-USDT,MINA-USDT,MIR-USDT,MITH-USDT,MKR-USDT,MLN-USDT,MOF-USDT,MON-USDT,MOVR-USDT,MOVEZ-USDT,MXC-USDT,MXT-USDT,NAS-USDT,NEAR-USDT,NEO-USDT,NFT-USDT,NMR-USDT,NULS-USDT,NYM-USDT,OM-USDT,OMG-USDT,OMI-USDT,ONE-USDT,ONT-USDT,OP-USDT,ORBS-USDT,ORB-USDT,ORS-USDT,OXT-USDT,PAY-USDT,PCI-USDT,PEOPLE-USDT,PERP-USDT,PHA-USDT,PICKLE-USDT,PIT-USDT,PLG-USDT,PNK-USDT,POLS-USDT,POLYDOGE-USDT,PPT-USDT,PRQ-USDT,PST-USDT,PSTAKE-USDT,QOM-USDT,QTUM-USDT,RACA-USDT,RAY-USDT,REN-USDT,REP-USDT,REVV-USDT,RFUEL-USDT,RIO-USDT,RNT-USDT,ROAD-USDT,RON-USDT,RSR-USDT,RSS3-USDT,RVN-USDT,SAITAMA-USDT,SAMO-USDT,SAND-USDT,SC-USDT,SD-USDT,SFG-USDT,SHIB-USDT,SIS-USDT,SKEB-USDT,SKL-USDT,SLP-USDT,SNT-USDT,SNX-USDT,SOC-USDT,SOL-USDT,SOS-USDT,SPELL-USDT,SRM-USDT,STARL-USDT,STC-USDT,STORJ-USDT,STRK-USDT,STX-USDT,SUN-USDT,SUSHI-USDT,SWEAT-USDT,SWFTC-USDT,SWRV-USDT,T-USDT,TAI-USDT,TAKI-USDT,TCT-USDT,THETA-USDT,THG-USDT,TON-USDT,TOPC-USDT,TORN-USDT,TOWN-USDT,TRADE-USDT,TRA-USDT,TRB-USDT,TRUE-USDT,TRX-USDT,TUP-USDT,TUSD-USDT,UMA-USDT,UMEE-USDT,UNI-USDT,USDC-USDT,USDP-USDT,USTC-USDT,UTK-USDT,VALUE-USDT,VELO-USDT,VRA-USDT,VSYS-USDT,WAVES-USDT,WAXP-USDT,WBTC-USDT,WEMIX-USDT,WGRT-USDT,WING-USDT,WIN-USDT,WNCG-USDT,WNXM-USDT,WOO-USDT,WSB-USDT,WXT-USDT,XAUT-USDT,XCH-USDT,XEC-USDT,XEM-USDT,XETA-USDT,XLM-USDT,XMR-USDT,XNO-USDT,XPR-USDT,XTZ-USDT,YEE-USDT,YFI-USDT,YFII-USDT,YGG-USDT,YOU-USDT,YOYO-USDT,ZBC-USDT,ZEC-USDT,ZEN-USDT,ZIL-USDT,ZKS-USDT,ZRX-USDT,ZYRO-USDT,BTC-USDC,ETH-USDC,ETH-BTC,OKB-USDC,OKT-USDC,LTC-USDC,DOT-USDC,DOGE-USDC,LUNC-USDC,ETHW-USDC,LUNA-USDC,FIL-USDC,XRP-USDC,1INCH-USDC,AAVE-USDC,ADA-USDC,AGLD-USDC,ALGO-USDC,ANC-USDC,ANT-USDC,APE-USDC,API3-USDC,AR-USDC,ASTR-USDC,ATOM-USDC,AVAX-USDC,AXS-USDC,AZY-USDC,BABYDOGE-USDC,BAT-USDC,BCH-USDC,BICO-USDC,BSV-USDC,CEL-USDC,CELO-USDC,CELT-USDC,CHZ-USDC,COMP-USDC,CRO-USDC,CRV-USDC,CSPR-USDC,DASH-USDC,DEP-USDC,DOME-USDC,DYDX-USDC,EGLD-USDC,ELT-USDC,ENS-USDC,EOS-USDC,ETC-USDC,FITFI-USDC,FLM-USDC,FLOW-USDC,FTM-USDC,GALA-USDC,GALFT-USDC,GARI-USDC,GLMR-USDC,GMT-USDC,GODS-USDC,GRT-USDC,HBAR-USDC,ICP-USDC,IMX-USDC,IOST-USDC,JST-USDC,KISHU-USDC,KLAY-USDC,KNC-USDC,KSM-USDC,LINK-USDC,LOOKS-USDC,LRC-USDC,MANA-USDC,MASK-USDC,MATIC-USDC,MINA-USDC,MKR-USDC,MOF-USDC,MOVEZ-USDC,MXC-USDC,NEAR-USDC,NFT-USDC,NMR-USDC,NYM-USDC,OMG-USDC,OP-USDC,PEOPLE-USDC,PERP-USDC,RACA-USDC,RSR-USDC,SAITAMA-USDC,SAND-USDC,SHIB-USDC,SLP-USDC,SNX-USDC,SOC-USDC,SOL-USDC,SOS-USDC,SRM-USDC,STARL-USDC,STC-USDC,STORJ-USDC,STX-USDC,SUSHI-USDC,SWFTC-USDC,THETA-USDC,TON-USDC,TORN-USDC,TRB-USDC,TRX-USDC,UNI-USDC,USDP-USDC,USTC-USDC,VRA-USDC,WAVES-USDC,XCH-USDC,XEM-USDC,XLM-USDC,XMR-USDC,XNO-USDC,XTZ-USDC,YFI-USDC,YFII-USDC,YGG-USDC,ZEC-USDC,ZIL-USDC,BTC-DAI,ETH-DAI,BTC-USDK,ETH-USDK,USDT-USDK,OKB-BTC,OKT-BTC,LTC-BTC,DOT-BTC,DOGE-BTC,FIL-BTC,XRP-BTC,AAVE-BTC,ADA-BTC,ALGO-BTC,ALPHA-BTC,ANT-BTC,ATOM-BTC,AVAX-BTC,BADGER-BTC,BAT-BTC,BCD-BTC,BCH-BTC,BNT-BTC,BSV-BTC,BTG-BTC,BTM-BTC,CELO-BTC,CELT-BTC,CHZ-BTC,COMP-BTC,CQT-BTC,CRO-BTC,CRV-BTC,CTC-BTC,CVC-BTC,DASH-BTC,DCR-BTC,DGB-BTC,EGLD-BTC,ELF-BTC,ENJ-BTC,EOS-BTC,ETC-BTC,FLOW-BTC,GAS-BTC,GRT-BTC,GTO-BTC,HBAR-BTC,HC-BTC,ICP-BTC,ICX-BTC,INT-BTC,IOST-BTC,IOTA-BTC,KLAY-BTC,KNC-BTC,KSM-BTC,LINK-BTC,LRC-BTC,LSK-BTC,MANA-BTC,MITH-BTC,MKR-BTC,NAS-BTC,NEAR-BTC,NEO-BTC,NULS-BTC,OMG-BTC,ONT-BTC,PST-BTC,QTUM-BTC,REN-BTC,RSR-BTC,RVN-BTC,SC-BTC,SNT-BTC,SOL-BTC,SRM-BTC,STX-BTC,SWFTC-BTC,THETA-BTC,TRUE-BTC,TRX-BTC,UNI-BTC,VSYS-BTC,WAVES-BTC,WBTC-BTC,WXT-BTC,XCH-BTC,XEM-BTC,XLM-BTC,XMR-BTC,XTZ-BTC,YFI-BTC,YOU-BTC,ZEC-BTC,ZEN-BTC,ZIL-BTC,ZRX-BTC,OKB-ETH,OKT-ETH,LTC-ETH,DOT-ETH,DOGE-ETH,FIL-ETH,XRP-ETH,AAVE-ETH,ADA-ETH,API3-ETH,ATOM-ETH,AVAX-ETH,BETH-ETH,CRV-ETH,DASH-ETH,EOS-ETH,ETC-ETH,FLOW-ETH,GAS-ETH,GHST-ETH,HEGIC-ETH,INT-ETH,IOST-ETH,KSM-ETH,LINK-ETH,MANA-ETH,MKR-ETH,NEAR-ETH,NEO-ETH,NULS-ETH,OM-ETH,QTUM-ETH,SNX-ETH,SOL-ETH,SUSHI-ETH,SWFTC-ETH,TRX-ETH,UNI-ETH,WBTC-ETH,XLM-ETH,XMR-ETH,YFI-ETH,ZEC-ETH,LTC-OKB,XRP-OKB,ETC-OKB,OKDOT1-DOT,OKDOT2-DOT,BTC-EURT,ETH-EURT"
2166+
},
2167+
"spread": {
2168+
"assetEnabled": true,
2169+
"enabled": "BTC-USDT-SWAP_BTC-USDT-250328,ETH-USDT-SWAP_ETH-USD-SWAP,ETH-USDT_ETH-USD-250627",
2170+
"available": "BTC-USDT-SWAP_BTC-USDT-250328,ETH-USDT-SWAP_ETH-USD-SWAP,ETH-USDT_ETH-USD-250627,BTC-USD-241220_BTC-USD-250328,BTC-USDT-SWAP_BTC-USDT-250228,BTC-USDT_BTC-USDT-250131,BTC-USD-SWAP_BTC-USD-250328,BTC-USDT-241220_BTC-USDT-250627,ETH-USDT-241220_ETH-USDT-250328,BTC-USD-250228_BTC-USD-250627,ETH-USDT-SWAP_ETH-USDT-250328,BTC-USD-241220_BTC-USD-250228,ETH-USDT-250328_ETH-USDT-250627,DOGE-USDT_DOGE-USDT-SWAP,ETH-USD-SWAP_ETH-USD-241227,BTC-USDT_BTC-USD-241227,BTC-USDT-SWAP_BTC-USDT-250131,ETH-USDT-241220_ETH-USDT-250627,ETH-USD-SWAP_ETH-USD-241220,BTC-USD-SWAP_BTC-USD-250228,ETH-USD-241227_ETH-USD-250228,BTC-USDT_BTC-USDT-250328,LTC-USDT_LTC-USDT-SWAP,ETH-USDT_ETH-USD-250328,ETH-USD-250328_ETH-USD-250627,ETH-USD-241227_ETH-USD-250328,BTC-USD-SWAP_BTC-USD-250131,BTC-USDT_BTC-USDT-250228,ETH-USD-250228_ETH-USD-250328,SOL-USDT_SOL-USDT-SWAP,ETH-USDT_ETH-USD-SWAP,BTC-USD-241220_BTC-USD-241227,ETH-USD-250131_ETH-USD-250328,ETH-USD-SWAP_ETH-USD-250131,BTC-USDT-241227_BTC-USDT-250131,ETH-USDT_ETH-USDT-250627,ETH-USDT-SWAP_ETH-USDT-250627,BTC-USDT_BTC-USDT-SWAP,BTC-USDT-SWAP_BTC-USDT-250627,BTC-USDT_BTC-USD-SWAP,BTC-USDT-SWAP_BTC-USD-SWAP,ETH-USDT-241220_ETH-USDT-241227,ETH-USD-241220_ETH-USD-250131,ETH-USD-SWAP_ETH-USD-250228,ETH-USD-241227_ETH-USD-250131,BTC-USDT_BTC-USD-250627,BTC-USD-241220_BTC-USD-250131,ETH-USD-241220_ETH-USD-241227,BTC-USD-SWAP_BTC-USD-250627,BTC-USD-241227_BTC-USD-250131,ETH-USD-SWAP_ETH-USD-250328,ETH-USD-250228_ETH-USD-250627,BTC-USDT-241227_BTC-USDT-250228,BTC-USDT_BTC-USD-250328,ETH-USD-250131_ETH-USD-250627,BTC-USDT_BTC-USDT-250627,BTC-USDT-241227_BTC-USDT-250328,BTC-USD-241227_BTC-USD-250328,BTC-USDT-250131_BTC-USDT-250328,BCH-USDT_BCH-USDT-SWAP,BTC-USDT-250228_BTC-USDT-250328,BTC-USD-250328_BTC-USD-250627,BTC-USDT-241220_BTC-USDT-241227,BTC-USD-241227_BTC-USD-250228,ETH-USDT_ETH-USDT-250328,BTC-USDT-250131_BTC-USDT-250228,BTC-USD-250131_BTC-USD-250627,ETH-USD-SWAP_ETH-USD-250627,ETH-USD-241220_ETH-USD-250228,BTC-USD-SWAP_BTC-USD-241227,BTC-USD-SWAP_BTC-USD-241220,BTC-USD-250131_BTC-USD-250328,BTC-USDT-241227_BTC-USDT-250627,ETH-USD-250131_ETH-USD-250228,ETH-USD-241220_ETH-USD-250328,ETH-USDT_ETH-USDT-241227,ETH-USDT-SWAP_ETH-USDT-241220,BTC-USDT-241220_BTC-USDT-250328,BTC-USD-250228_BTC-USD-250328,ETH-USDT-SWAP_ETH-USDT-241227,BTC-USDT-SWAP_BTC-USDT-241220,ETH-USDT_ETH-USDT-241220,ETH-USDT-241227_ETH-USDT-250627,BTC-USD-241227_BTC-USD-250627,BTC-USDT-241220_BTC-USDT-250228,BTC-USDT-250131_BTC-USDT-250627,BTC-USD-241220_BTC-USD-250627,BTC-USDT-SWAP_BTC-USDT-241227,BTC-USD-250131_BTC-USD-250228,BTC-USDT-250328_BTC-USDT-250627,ETH-USD-241220_ETH-USD-250627,XRP-USDT_XRP-USDT-SWAP,ETH-USD-241227_ETH-USD-250627,BTC-USDT_BTC-USDT-241227,BTC-USDT-250228_BTC-USDT-250627,BTC-USDT_BTC-USDT-241220,ETH-USDT_ETH-USD-241227,BTC-USDT-241220_BTC-USDT-250131,ETH-USDT_ETH-USDT-SWAP,ETH-USDT-241227_ETH-USDT-25032"
21652171
}
21662172
}
21672173
},

database/repository/withdraw/withdraw.go

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,10 @@ package withdraw
33
import (
44
"context"
55
"database/sql"
6-
"errors"
76
"time"
87

98
"github.com/gofrs/uuid"
9+
"github.com/thrasher-corp/gocryptotrader/common"
1010
"github.com/thrasher-corp/gocryptotrader/currency"
1111
"github.com/thrasher-corp/gocryptotrader/database"
1212
modelPSQL "github.com/thrasher-corp/gocryptotrader/database/models/postgres"
@@ -19,11 +19,6 @@ import (
1919
"github.com/thrasher-corp/sqlboiler/queries/qm"
2020
)
2121

22-
var (
23-
// ErrNoResults is the error returned if no results are found
24-
ErrNoResults = errors.New("no results found")
25-
)
26-
2722
// Event stores Withdrawal Response details in database
2823
func Event(res *withdraw.Response) {
2924
if database.DB.SQL == nil {
@@ -424,7 +419,7 @@ func getByColumns(q []qm.QueryMod) ([]*withdraw.Response, error) {
424419
}
425420
}
426421
if len(resp) == 0 {
427-
return nil, ErrNoResults
422+
return nil, common.ErrNoResults
428423
}
429424
return resp, nil
430425
}

database/repository/withdraw/withdraw_test.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import (
88
"testing"
99
"time"
1010

11+
"github.com/thrasher-corp/gocryptotrader/common"
1112
"github.com/thrasher-corp/gocryptotrader/currency"
1213
"github.com/thrasher-corp/gocryptotrader/database"
1314
"github.com/thrasher-corp/gocryptotrader/database/drivers"
@@ -159,7 +160,7 @@ func withdrawHelper(t *testing.T) {
159160

160161
_, err := GetEventByUUID(withdraw.DryRunID.String())
161162
if err != nil {
162-
if !errors.Is(err, ErrNoResults) {
163+
if !errors.Is(err, common.ErrNoResults) {
163164
t.Fatal(err)
164165
}
165166
}
@@ -181,7 +182,7 @@ func withdrawHelper(t *testing.T) {
181182
if len(v) > 0 {
182183
_, err = GetEventByUUID(v[0].ID.String())
183184
if err != nil {
184-
if !errors.Is(err, ErrNoResults) {
185+
if !errors.Is(err, common.ErrNoResults) {
185186
t.Error(err)
186187
}
187188
}

exchanges/asset/asset.go

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ const (
4141
USDCMarginedFutures
4242
FutureCombo
4343
LinearContract
44+
Spread
4445
// Options asset consts must come below this comment for method `IsOptions`
4546
Options
4647
OptionCombo
@@ -58,6 +59,7 @@ const (
5859
perpetualContract = "perpetualcontract"
5960
perpetualSwap = "perpetualswap"
6061
swap = "swap"
62+
spread = "spread"
6163
futures = "futures"
6264
deliveryFutures = "delivery"
6365
upsideProfitContract = "upsideprofitcontract"
@@ -73,7 +75,7 @@ const (
7375
)
7476

7577
var (
76-
supportedList = Items{Spot, Margin, CrossMargin, MarginFunding, Index, Binary, PerpetualContract, PerpetualSwap, Futures, DeliveryFutures, UpsideProfitContract, DownsideProfitContract, CoinMarginedFutures, USDTMarginedFutures, USDCMarginedFutures, Options, LinearContract, OptionCombo, FutureCombo}
78+
supportedList = Items{Spot, Margin, CrossMargin, MarginFunding, Index, Binary, PerpetualContract, PerpetualSwap, Futures, DeliveryFutures, UpsideProfitContract, DownsideProfitContract, CoinMarginedFutures, USDTMarginedFutures, USDCMarginedFutures, Options, LinearContract, OptionCombo, FutureCombo, Spread}
7779
)
7880

7981
// Supported returns a list of supported asset types
@@ -100,6 +102,8 @@ func (a Item) String() string {
100102
return perpetualContract
101103
case PerpetualSwap:
102104
return perpetualSwap
105+
case Spread:
106+
return spread
103107
case Futures:
104108
return futures
105109
case DeliveryFutures:
@@ -220,6 +224,8 @@ func New(input string) (Item, error) {
220224
return PerpetualContract, nil
221225
case perpetualSwap, swap:
222226
return PerpetualSwap, nil
227+
case spread:
228+
return Spread, nil
223229
case futures:
224230
return Futures, nil
225231
case upsideProfitContract:

exchanges/asset/asset_test.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ func TestIsValid(t *testing.T) {
7070

7171
func TestIsFutures(t *testing.T) {
7272
t.Parallel()
73-
valid := []Item{PerpetualContract, PerpetualSwap, Futures, DeliveryFutures, UpsideProfitContract, DownsideProfitContract, CoinMarginedFutures, USDTMarginedFutures, USDCMarginedFutures, FutureCombo, LinearContract}
73+
valid := []Item{PerpetualContract, PerpetualSwap, Futures, DeliveryFutures, UpsideProfitContract, DownsideProfitContract, CoinMarginedFutures, USDTMarginedFutures, USDCMarginedFutures, FutureCombo, LinearContract, Spread}
7474
for a := range All {
7575
if slices.Contains(valid, a) {
7676
require.Truef(t, a.IsFutures(), "IsFutures must return true for %s", a)
@@ -117,6 +117,7 @@ func TestNew(t *testing.T) {
117117
{Input: "Future", Error: ErrNotSupported},
118118
{Input: "option_combo", Expected: OptionCombo},
119119
{Input: "future_combo", Expected: FutureCombo},
120+
{Input: "spread", Expected: Spread},
120121
{Input: "linearContract", Expected: LinearContract},
121122
}
122123

exchanges/collateral/collateral.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,8 @@ func (t Mode) String() string {
3434
return multiCollateralStr
3535
case PortfolioMode:
3636
return portfolioCollateralStr
37+
case SpotFuturesMode:
38+
return spotFuturesCollateralStr
3739
case UnknownMode:
3840
return unknownCollateralStr
3941
}

exchanges/collateral/collateral_test.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,9 @@ func TestValidCollateralType(t *testing.T) {
1818
if !PortfolioMode.Valid() {
1919
t.Fatal("expected 'true', received 'false'")
2020
}
21+
if !SpotFuturesMode.Valid() {
22+
t.Fatal("expected 'true', received 'false'")
23+
}
2124
if UnsetMode.Valid() {
2225
t.Fatal("expected 'false', received 'true'")
2326
}

exchanges/collateral/collateral_types.go

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,20 +24,23 @@ const (
2424
PortfolioMode
2525
// UnknownMode has collateral allocated in an unknown manner at present, but is not unset
2626
UnknownMode
27+
// SpotFuturesMode has collateral allocated across spot and futures accounts
28+
SpotFuturesMode
2729
)
2830

2931
const (
30-
unsetCollateralStr = "unset"
31-
singleCollateralStr = "single"
32-
multiCollateralStr = "multi"
33-
portfolioCollateralStr = "portfolio"
34-
unknownCollateralStr = "unknown"
32+
unsetCollateralStr = "unset"
33+
singleCollateralStr = "single"
34+
multiCollateralStr = "multi"
35+
portfolioCollateralStr = "portfolio"
36+
spotFuturesCollateralStr = "spot_futures"
37+
unknownCollateralStr = "unknown"
3538
)
3639

3740
// ErrInvalidCollateralMode is returned when converting invalid string to collateral mode
3841
var ErrInvalidCollateralMode = errors.New("invalid collateral mode")
3942

40-
var supportedCollateralModes = SingleMode | MultiMode | PortfolioMode
43+
var supportedCollateralModes = SingleMode | MultiMode | PortfolioMode | SpotFuturesMode
4144

4245
// ByPosition shows how much collateral is used
4346
// from positions

exchanges/futures/contract.go

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package futures
22

33
import (
4+
"errors"
5+
"strings"
46
"time"
57

68
"github.com/shopspring/decimal"
@@ -9,6 +11,11 @@ import (
911
"github.com/thrasher-corp/gocryptotrader/exchanges/fundingrate"
1012
)
1113

14+
// var error definitions
15+
var (
16+
ErrInvalidContractSettlementType = errors.New("invalid contract settlement type")
17+
)
18+
1219
// Contract holds details on futures contracts
1320
type Contract struct {
1421
Exchange string
@@ -41,6 +48,7 @@ const (
4148
Inverse
4249
Quanto
4350
LinearOrInverse
51+
Hybrid
4452
)
4553

4654
// String returns the string representation of a contract settlement type
@@ -56,11 +64,34 @@ func (d ContractSettlementType) String() string {
5664
return "quanto"
5765
case LinearOrInverse:
5866
return "linearOrInverse"
67+
case Hybrid:
68+
return "hybrid"
5969
default:
6070
return "unknown"
6171
}
6272
}
6373

74+
// StringToContractSettlementType for converting case insensitive contract settlement type
75+
func StringToContractSettlementType(cstype string) (ContractSettlementType, error) {
76+
cstype = strings.ToLower(cstype)
77+
switch cstype {
78+
case UnsetSettlementType.String(), "":
79+
return UnsetSettlementType, nil
80+
case Linear.String():
81+
return Linear, nil
82+
case Inverse.String():
83+
return Inverse, nil
84+
case Quanto.String():
85+
return Quanto, nil
86+
case "linearorinverse":
87+
return LinearOrInverse, nil
88+
case Hybrid.String():
89+
return Hybrid, nil
90+
default:
91+
return UnsetSettlementType, ErrInvalidContractSettlementType
92+
}
93+
}
94+
6495
// ContractType holds the various style of contracts offered by futures exchanges
6596
type ContractType uint8
6697

0 commit comments

Comments
 (0)