Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
B
bridge-backend
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
movabridge
bridge-backend
Commits
1cc609f7
Commit
1cc609f7
authored
Nov 25, 2025
by
vicotor
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
profile
parent
a91214c9
Changes
4
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
125 additions
and
63 deletions
+125
-63
db.go
dao/db.go
+111
-29
model.go
model/api/model.go
+7
-0
controller.go
server/controller.go
+5
-32
router.go
server/router.go
+2
-2
No files found.
dao/db.go
View file @
1cc609f7
...
@@ -285,6 +285,52 @@ func (d *Dao) GetBridgeTokenBalance(chainId int64, user string) (balances apiMod
...
@@ -285,6 +285,52 @@ func (d *Dao) GetBridgeTokenBalance(chainId int64, user string) (balances apiMod
return
balances
,
nil
return
balances
,
nil
}
}
func
(
d
*
Dao
)
GetTokenBalance
(
chainId
int64
,
user
string
,
tokens
[]
string
)
(
balances
apiModel
.
TokenBalances
,
err
error
)
{
balances
=
apiModel
.
TokenBalances
{
Balances
:
make
([]
apiModel
.
TokenBalance
,
0
),
}
chainClient
:=
d
.
ChainClient
(
chainId
)
if
chainClient
==
nil
{
log
.
Error
(
"not found chain client for chain id:"
,
chainId
)
return
balances
,
nil
}
var
innerBalance
=
make
([]
tokenBalance
,
0
)
for
_
,
token
:=
range
tokens
{
tokenInfo
,
balance
,
err
:=
d
.
tokenRepo
.
RetriveTokenInfoAndBalance
(
chainClient
,
token
,
user
)
if
err
!=
nil
{
log
.
WithFields
(
log
.
Fields
{
"chain_id"
:
chainId
,
"token"
:
token
,
"error"
:
err
,
})
.
Error
(
"get token balance failed, skip this token"
)
continue
}
innerBalance
=
append
(
innerBalance
,
tokenBalance
{
Name
:
tokenInfo
.
Symbol
,
Decimals
:
int
(
tokenInfo
.
Decimals
),
Balance
:
balance
,
Contract
:
token
,
})
}
// sort balances by Balance desc
sort
.
Slice
(
innerBalance
,
func
(
i
,
j
int
)
bool
{
return
innerBalance
[
i
]
.
Balance
.
Cmp
(
innerBalance
[
j
]
.
Balance
)
>
0
})
for
_
,
b
:=
range
innerBalance
{
balances
.
Balances
=
append
(
balances
.
Balances
,
apiModel
.
TokenBalance
{
Name
:
b
.
Name
,
Decimals
:
b
.
Decimals
,
Balance
:
b
.
Balance
.
String
(),
Contract
:
b
.
Contract
,
})
}
return
balances
,
nil
}
func
(
d
*
Dao
)
buildBridgePayload
(
token
common
.
Address
,
amount
*
big
.
Int
,
toChainID
*
big
.
Int
,
receiver
common
.
Address
)
([]
byte
,
error
)
{
func
(
d
*
Dao
)
buildBridgePayload
(
token
common
.
Address
,
amount
*
big
.
Int
,
toChainID
*
big
.
Int
,
receiver
common
.
Address
)
([]
byte
,
error
)
{
contractAbi
,
_
:=
bridge
.
BridgeContractMetaData
.
GetAbi
()
contractAbi
,
_
:=
bridge
.
BridgeContractMetaData
.
GetAbi
()
return
contractAbi
.
Pack
(
"outTransfer"
,
token
,
amount
,
toChainID
,
receiver
)
return
contractAbi
.
Pack
(
"outTransfer"
,
token
,
amount
,
toChainID
,
receiver
)
...
@@ -440,10 +486,17 @@ func (d *Dao) GetSwapConfig(chainId int64) (*apiModel.ChainSwapConfig, error) {
...
@@ -440,10 +486,17 @@ func (d *Dao) GetSwapConfig(chainId int64) (*apiModel.ChainSwapConfig, error) {
SwapFromToken
:
bridgeToken
.
Token
,
SwapFromToken
:
bridgeToken
.
Token
,
BridgeFromToken
:
bridgeToken
.
Token
,
BridgeFromToken
:
bridgeToken
.
Token
,
})
})
tokenInfo
,
err
:=
d
.
tokenRepo
.
RetriveTokenInfo
(
chainId
,
bridgeToken
.
Token
)
if
err
!=
nil
{
log
.
WithFields
(
log
.
Fields
{
"chain_id"
:
chainId
,
"token"
:
bridgeToken
.
Token
,
})
.
Warning
(
"get token info failed"
)
}
if
len
(
toChains
)
>
0
{
if
len
(
toChains
)
>
0
{
config
.
SupportTokens
[
bridgeToken
.
Token
]
=
apiModel
.
SupportSwapTokenInfo
{
config
.
SupportTokens
[
bridgeToken
.
Token
]
=
apiModel
.
SupportSwapTokenInfo
{
TokenContract
:
bridgeToken
.
Token
,
TokenContract
:
bridgeToken
.
Token
,
TokenSymbol
:
bridgeToken
.
TokenName
,
TokenSymbol
:
tokenInfo
.
Symbol
,
SwapTokens
:
toChains
,
SwapTokens
:
toChains
,
}
}
}
}
...
@@ -460,6 +513,14 @@ func (d *Dao) GetSwapConfig(chainId int64) (*apiModel.ChainSwapConfig, error) {
...
@@ -460,6 +513,14 @@ func (d *Dao) GetSwapConfig(chainId int64) (*apiModel.ChainSwapConfig, error) {
return
config
,
err
return
config
,
err
}
}
tokenInfo
,
err
:=
d
.
tokenRepo
.
RetriveTokenInfo
(
chainId
,
swap
.
Token
)
if
err
!=
nil
{
log
.
WithFields
(
log
.
Fields
{
"chain_id"
:
chainId
,
"token"
:
swap
.
Token
,
})
.
Warning
(
"get token info failed"
)
}
toChains
:=
d
.
getTargetChainSwapTokens
(
swapChains
,
apiModel
.
SwapPath
{
toChains
:=
d
.
getTargetChainSwapTokens
(
swapChains
,
apiModel
.
SwapPath
{
SwapFromToken
:
swap
.
Token
,
SwapFromToken
:
swap
.
Token
,
BridgeFromToken
:
swap
.
ToToken
,
BridgeFromToken
:
swap
.
ToToken
,
...
@@ -467,7 +528,7 @@ func (d *Dao) GetSwapConfig(chainId int64) (*apiModel.ChainSwapConfig, error) {
...
@@ -467,7 +528,7 @@ func (d *Dao) GetSwapConfig(chainId int64) (*apiModel.ChainSwapConfig, error) {
if
len
(
toChains
)
>
0
{
if
len
(
toChains
)
>
0
{
config
.
SupportTokens
[
swap
.
Token
]
=
apiModel
.
SupportSwapTokenInfo
{
config
.
SupportTokens
[
swap
.
Token
]
=
apiModel
.
SupportSwapTokenInfo
{
TokenContract
:
swap
.
Token
,
TokenContract
:
swap
.
Token
,
TokenSymbol
:
swap
.
TokenName
,
TokenSymbol
:
tokenInfo
.
Symbol
,
SwapTokens
:
toChains
,
SwapTokens
:
toChains
,
}
}
}
}
...
@@ -689,17 +750,17 @@ func (d *Dao) getSupportedBridgeChains(fromChain int64, token string) (configs [
...
@@ -689,17 +750,17 @@ func (d *Dao) getSupportedBridgeChains(fromChain int64, token string) (configs [
return
configs
,
err
return
configs
,
err
}
}
func
(
d
*
Dao
)
justABridgePair
(
path
apiModel
.
SwapPath
)
bool
{
return
path
.
SwapFromToken
==
path
.
BridgeFromToken
&&
path
.
BridgeToToken
==
path
.
SwapToToken
}
func
(
d
*
Dao
)
getTargetChainSwapTokens
(
targetChains
[]
dbModel
.
BridgeTokenInfo
,
fromPath
apiModel
.
SwapPath
)
map
[
int64
]
map
[
string
]
apiModel
.
ToSwapToken
{
func
(
d
*
Dao
)
getTargetChainSwapTokens
(
targetChains
[]
dbModel
.
BridgeTokenInfo
,
fromPath
apiModel
.
SwapPath
)
map
[
int64
]
map
[
string
]
apiModel
.
ToSwapToken
{
toChains
:=
make
(
map
[
int64
]
map
[
string
]
apiModel
.
ToSwapToken
)
toChains
:=
make
(
map
[
int64
]
map
[
string
]
apiModel
.
ToSwapToken
)
for
_
,
sc
:=
range
targetChains
{
for
_
,
sc
:=
range
targetChains
{
if
!
sc
.
Enabled
{
if
!
sc
.
Enabled
{
continue
continue
}
}
tokens
,
exist
:=
toChains
[
sc
.
ToChainId
]
if
!
exist
{
tokens
=
make
(
map
[
string
]
apiModel
.
ToSwapToken
)
toChains
[
sc
.
ToChainId
]
=
tokens
}
toTokenInfo
,
err
:=
d
.
tokenRepo
.
RetriveTokenInfo
(
sc
.
ToChainId
,
sc
.
ToToken
)
toTokenInfo
,
err
:=
d
.
tokenRepo
.
RetriveTokenInfo
(
sc
.
ToChainId
,
sc
.
ToToken
)
if
err
!=
nil
{
if
err
!=
nil
{
log
.
WithFields
(
log
.
Fields
{
log
.
WithFields
(
log
.
Fields
{
...
@@ -708,17 +769,27 @@ func (d *Dao) getTargetChainSwapTokens(targetChains []dbModel.BridgeTokenInfo, f
...
@@ -708,17 +769,27 @@ func (d *Dao) getTargetChainSwapTokens(targetChains []dbModel.BridgeTokenInfo, f
})
.
Error
(
"get token info failed"
)
})
.
Error
(
"get token info failed"
)
continue
continue
}
}
tokens
[
sc
.
ToToken
]
=
apiModel
.
ToSwapToken
{
path
:=
apiModel
.
SwapPath
{
ToChainId
:
sc
.
ToChainId
,
ToToken
:
sc
.
ToToken
,
ToTokenSymbol
:
toTokenInfo
.
Symbol
,
Path
:
apiModel
.
SwapPath
{
SwapFromToken
:
fromPath
.
SwapFromToken
,
SwapFromToken
:
fromPath
.
SwapFromToken
,
BridgeFromToken
:
fromPath
.
BridgeFromToken
,
BridgeFromToken
:
fromPath
.
BridgeFromToken
,
BridgeToToken
:
sc
.
ToToken
,
BridgeToToken
:
sc
.
ToToken
,
SwapToToken
:
sc
.
ToToken
,
SwapToToken
:
sc
.
ToToken
,
},
}
}
if
!
d
.
justABridgePair
(
path
)
{
tokens
,
exist
:=
toChains
[
sc
.
ToChainId
]
if
!
exist
{
tokens
=
make
(
map
[
string
]
apiModel
.
ToSwapToken
)
toChains
[
sc
.
ToChainId
]
=
tokens
}
tokens
[
sc
.
ToToken
]
=
apiModel
.
ToSwapToken
{
ToChainId
:
sc
.
ToChainId
,
ToToken
:
sc
.
ToToken
,
ToTokenSymbol
:
toTokenInfo
.
Symbol
,
Path
:
path
,
}
}
// get all supported swap tokens for toChainId
// get all supported swap tokens for toChainId
targetChainSwapTokens
,
err
:=
d
.
getSupportedSwapTokens
(
sc
.
ToChainId
)
targetChainSwapTokens
,
err
:=
d
.
getSupportedSwapTokens
(
sc
.
ToChainId
)
if
err
!=
nil
{
if
err
!=
nil
{
...
@@ -730,22 +801,33 @@ func (d *Dao) getTargetChainSwapTokens(targetChains []dbModel.BridgeTokenInfo, f
...
@@ -730,22 +801,33 @@ func (d *Dao) getTargetChainSwapTokens(targetChains []dbModel.BridgeTokenInfo, f
if
err
!=
nil
{
if
err
!=
nil
{
continue
continue
}
}
path
:=
apiModel
.
SwapPath
{
SwapFromToken
:
fromPath
.
SwapFromToken
,
BridgeFromToken
:
fromPath
.
BridgeFromToken
,
BridgeToToken
:
sc
.
ToToken
,
SwapToToken
:
targetSwap
.
ToToken
,
}
if
!
d
.
justABridgePair
(
path
)
{
tokens
,
exist
:=
toChains
[
sc
.
ToChainId
]
if
!
exist
{
tokens
=
make
(
map
[
string
]
apiModel
.
ToSwapToken
)
toChains
[
sc
.
ToChainId
]
=
tokens
}
// add targetSwap.ToToken to toChains
// add targetSwap.ToToken to toChains
tokens
[
targetSwap
.
ToToken
]
=
apiModel
.
ToSwapToken
{
tokens
[
targetSwap
.
ToToken
]
=
apiModel
.
ToSwapToken
{
ToChainId
:
targetSwap
.
ChainId
,
ToChainId
:
targetSwap
.
ChainId
,
ToToken
:
targetSwap
.
ToToken
,
ToToken
:
targetSwap
.
ToToken
,
ToTokenSymbol
:
tokenInfo
.
Symbol
,
ToTokenSymbol
:
tokenInfo
.
Symbol
,
Path
:
apiModel
.
SwapPath
{
Path
:
path
,
SwapFromToken
:
fromPath
.
SwapFromToken
,
}
BridgeFromToken
:
fromPath
.
BridgeFromToken
,
BridgeToToken
:
sc
.
ToToken
,
SwapToToken
:
targetSwap
.
ToToken
,
},
}
}
}
}
}
}
if
tokens
,
exist
:=
toChains
[
sc
.
ToChainId
];
exist
&&
len
(
tokens
)
>
0
{
toChains
[
sc
.
ToChainId
]
=
tokens
toChains
[
sc
.
ToChainId
]
=
tokens
}
}
}
return
toChains
return
toChains
}
}
...
...
model/api/model.go
View file @
1cc609f7
...
@@ -87,6 +87,12 @@ type RouterQuery struct {
...
@@ -87,6 +87,12 @@ type RouterQuery struct {
User
string
`json:"user"`
User
string
`json:"user"`
}
}
type
TokenBalanceQuery
struct
{
ChainId
int64
`json:"chain_id"`
User
string
`json:"user"`
TokeList
[]
string
`json:"toke_list"`
}
type
QuoteBridgeParam
struct
{
type
QuoteBridgeParam
struct
{
FromChainId
int64
`json:"from_chain_id"`
FromChainId
int64
`json:"from_chain_id"`
ToChainId
int64
`json:"to_chain_id"`
ToChainId
int64
`json:"to_chain_id"`
...
@@ -128,6 +134,7 @@ type Querier interface {
...
@@ -128,6 +134,7 @@ type Querier interface {
GetAllChainSwapConfig
()
(
map
[
int64
]
*
ChainSwapConfig
,
error
)
GetAllChainSwapConfig
()
(
map
[
int64
]
*
ChainSwapConfig
,
error
)
GetSwapConfig
(
int64
)
(
*
ChainSwapConfig
,
error
)
GetSwapConfig
(
int64
)
(
*
ChainSwapConfig
,
error
)
GetHistoryInfo
(
user
string
)
(
history
History
,
err
error
)
GetHistoryInfo
(
user
string
)
(
history
History
,
err
error
)
GetTokenBalance
(
chainId
int64
,
user
string
,
tokens
[]
string
)
(
balances
TokenBalances
,
err
error
)
GetBridgeTokenBalance
(
chainId
int64
,
user
string
)
(
balances
TokenBalances
,
err
error
)
GetBridgeTokenBalance
(
chainId
int64
,
user
string
)
(
balances
TokenBalances
,
err
error
)
QuoteBridge
(
param
QuoteBridgeParam
)
(
quote
QuoteResult
,
err
error
)
QuoteBridge
(
param
QuoteBridgeParam
)
(
quote
QuoteResult
,
err
error
)
GetSwapTokenBalance
(
chainId
int64
,
user
string
)
(
balances
TokenBalances
,
err
error
)
GetSwapTokenBalance
(
chainId
int64
,
user
string
)
(
balances
TokenBalances
,
err
error
)
...
...
server/controller.go
View file @
1cc609f7
...
@@ -54,12 +54,7 @@ func bridgeRouters(c *gin.Context) {
...
@@ -54,12 +54,7 @@ func bridgeRouters(c *gin.Context) {
c
.
JSON
(
500
,
withError
(
constant
.
InternalError
))
c
.
JSON
(
500
,
withError
(
constant
.
InternalError
))
return
return
}
}
var
queryParam
apiModel
.
RouterQuery
if
err
:=
c
.
ShouldBindQuery
(
&
queryParam
);
err
!=
nil
{
log
.
Errorf
(
"bind query param error: %v"
,
err
)
c
.
JSON
(
200
,
withError
(
constant
.
InvalidParam
))
return
}
config
,
err
:=
_querier
.
GetBridgeConfig
()
config
,
err
:=
_querier
.
GetBridgeConfig
()
if
err
!=
nil
{
if
err
!=
nil
{
log
.
Errorf
(
"get bridge config error: %v"
,
err
)
log
.
Errorf
(
"get bridge config error: %v"
,
err
)
...
@@ -75,7 +70,7 @@ func bridgeBalance(c *gin.Context) {
...
@@ -75,7 +70,7 @@ func bridgeBalance(c *gin.Context) {
c
.
JSON
(
500
,
withError
(
constant
.
InternalError
))
c
.
JSON
(
500
,
withError
(
constant
.
InternalError
))
return
return
}
}
var
queryParam
apiModel
.
Router
Query
var
queryParam
apiModel
.
TokenBalance
Query
if
err
:=
c
.
ShouldBindQuery
(
&
queryParam
);
err
!=
nil
{
if
err
:=
c
.
ShouldBindQuery
(
&
queryParam
);
err
!=
nil
{
log
.
Errorf
(
"bind query param error: %v"
,
err
)
log
.
Errorf
(
"bind query param error: %v"
,
err
)
c
.
JSON
(
200
,
withError
(
constant
.
InvalidParam
))
c
.
JSON
(
200
,
withError
(
constant
.
InvalidParam
))
...
@@ -86,7 +81,7 @@ func bridgeBalance(c *gin.Context) {
...
@@ -86,7 +81,7 @@ func bridgeBalance(c *gin.Context) {
c
.
JSON
(
200
,
withError
(
constant
.
InvalidParam
))
c
.
JSON
(
200
,
withError
(
constant
.
InvalidParam
))
}
}
// get all tokens
// get all tokens
balances
,
err
:=
_querier
.
Get
BridgeTokenBalance
(
queryParam
.
ChainId
,
queryParam
.
User
)
balances
,
err
:=
_querier
.
Get
TokenBalance
(
queryParam
.
ChainId
,
queryParam
.
User
,
queryParam
.
TokeList
)
if
err
!=
nil
{
if
err
!=
nil
{
log
.
Errorf
(
"get bridge balance error: %v"
,
err
)
log
.
Errorf
(
"get bridge balance error: %v"
,
err
)
c
.
JSON
(
500
,
withError
(
constant
.
InternalError
))
c
.
JSON
(
500
,
withError
(
constant
.
InternalError
))
...
@@ -126,28 +121,6 @@ func bridgeQuote(c *gin.Context) {
...
@@ -126,28 +121,6 @@ func bridgeQuote(c *gin.Context) {
c
.
JSON
(
200
,
withSuccess
(
quote
))
c
.
JSON
(
200
,
withSuccess
(
quote
))
}
}
func
getSwapRouters
(
c
*
gin
.
Context
)
{
if
_querier
==
nil
{
log
.
Error
(
"querier is nil"
)
c
.
JSON
(
500
,
withError
(
constant
.
InternalError
))
return
}
var
queryParam
apiModel
.
RouterQuery
if
err
:=
c
.
ShouldBindQuery
(
&
queryParam
);
err
!=
nil
{
log
.
Errorf
(
"bind query param error: %v"
,
err
)
c
.
JSON
(
200
,
withError
(
constant
.
InvalidParam
))
return
}
configs
,
err
:=
_querier
.
GetSwapConfig
(
queryParam
.
ChainId
)
if
err
!=
nil
{
log
.
Errorf
(
"get swap config error: %v"
,
err
)
c
.
JSON
(
500
,
withError
(
constant
.
InternalError
))
return
}
c
.
JSON
(
200
,
withSuccess
(
configs
))
}
func
getAllSwapRouters
(
c
*
gin
.
Context
)
{
func
getAllSwapRouters
(
c
*
gin
.
Context
)
{
if
_querier
==
nil
{
if
_querier
==
nil
{
log
.
Error
(
"querier is nil"
)
log
.
Error
(
"querier is nil"
)
...
@@ -169,7 +142,7 @@ func swapBalance(c *gin.Context) {
...
@@ -169,7 +142,7 @@ func swapBalance(c *gin.Context) {
c
.
JSON
(
500
,
withError
(
constant
.
InternalError
))
c
.
JSON
(
500
,
withError
(
constant
.
InternalError
))
return
return
}
}
var
queryParam
apiModel
.
Router
Query
var
queryParam
apiModel
.
TokenBalance
Query
if
err
:=
c
.
ShouldBindQuery
(
&
queryParam
);
err
!=
nil
{
if
err
:=
c
.
ShouldBindQuery
(
&
queryParam
);
err
!=
nil
{
log
.
Errorf
(
"bind query param error: %v"
,
err
)
log
.
Errorf
(
"bind query param error: %v"
,
err
)
c
.
JSON
(
200
,
withError
(
constant
.
InvalidParam
))
c
.
JSON
(
200
,
withError
(
constant
.
InvalidParam
))
...
@@ -180,7 +153,7 @@ func swapBalance(c *gin.Context) {
...
@@ -180,7 +153,7 @@ func swapBalance(c *gin.Context) {
c
.
JSON
(
200
,
withError
(
constant
.
InvalidParam
))
c
.
JSON
(
200
,
withError
(
constant
.
InvalidParam
))
}
}
// get all tokens
// get all tokens
balances
,
err
:=
_querier
.
Get
SwapTokenBalance
(
queryParam
.
ChainId
,
queryParam
.
User
)
balances
,
err
:=
_querier
.
Get
TokenBalance
(
queryParam
.
ChainId
,
queryParam
.
User
,
queryParam
.
TokeList
)
if
err
!=
nil
{
if
err
!=
nil
{
log
.
Errorf
(
"get swap balance error: %v"
,
err
)
log
.
Errorf
(
"get swap balance error: %v"
,
err
)
c
.
JSON
(
500
,
withError
(
constant
.
InternalError
))
c
.
JSON
(
500
,
withError
(
constant
.
InternalError
))
...
...
server/router.go
View file @
1cc609f7
...
@@ -20,13 +20,13 @@ func initRouter(conf *config.Config, e *gin.Engine) {
...
@@ -20,13 +20,13 @@ func initRouter(conf *config.Config, e *gin.Engine) {
}
}
{
{
bridge
:=
v1
.
Group
(
"/bridge"
)
bridge
:=
v1
.
Group
(
"/bridge"
)
bridge
.
POS
T
(
"/routers"
,
bridgeRouters
)
bridge
.
GE
T
(
"/routers"
,
bridgeRouters
)
bridge
.
POST
(
"/balance"
,
bridgeBalance
)
bridge
.
POST
(
"/balance"
,
bridgeBalance
)
bridge
.
POST
(
"/quote"
,
bridgeQuote
)
bridge
.
POST
(
"/quote"
,
bridgeQuote
)
}
}
{
{
swap
:=
v1
.
Group
(
"/swap"
)
swap
:=
v1
.
Group
(
"/swap"
)
swap
.
GET
(
"/routers"
,
getSwapRouters
)
swap
.
GET
(
"/routers"
,
get
All
SwapRouters
)
swap
.
GET
(
"/routers/:chain"
,
getSwapRoutersByChainId
)
swap
.
GET
(
"/routers/:chain"
,
getSwapRoutersByChainId
)
swap
.
POST
(
"/balance"
,
swapBalance
)
swap
.
POST
(
"/balance"
,
swapBalance
)
swap
.
POST
(
"/quote"
,
swapQuote
)
swap
.
POST
(
"/quote"
,
swapQuote
)
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment