fix_: bridge tx improvements

- increase gas estimation factor increased
- amount parameter added to the key composition, that makes it unique
This commit is contained in:
Sale Djenic 2024-10-29 17:57:27 +01:00 committed by saledjenic
parent e938635d04
commit b329b158c8
5 changed files with 23 additions and 15 deletions

View File

@ -20,11 +20,15 @@ func getSigner(chainID uint64, from types.Address, verifiedAccount *account.Sele
} }
} }
func makeKey(fromChain, toChain uint64, fromTokenSymbol, toTokenSymbol string) string { func makeKey(fromChain, toChain uint64, fromTokenSymbol, toTokenSymbol string, amount *big.Int) string {
key := fmt.Sprintf("%d-%d", fromChain, toChain)
if fromTokenSymbol != "" || toTokenSymbol != "" { if fromTokenSymbol != "" || toTokenSymbol != "" {
return fmt.Sprintf("%d-%d-%s-%s", fromChain, toChain, fromTokenSymbol, toTokenSymbol) key = fmt.Sprintf("%s-%s-%s", key, fromTokenSymbol, toTokenSymbol)
} }
return fmt.Sprintf("%d-%d", fromChain, toChain) if amount != nil {
key = fmt.Sprintf("%s-%s", key, amount.String())
}
return key
} }
func getNameFromEnsUsername(ensUsername string) string { func getNameFromEnsUsername(ensUsername string) string {

View File

@ -1,7 +1,7 @@
package pathprocessor package pathprocessor
const ( const (
IncreaseEstimatedGasFactor = 1.1 IncreaseEstimatedGasFactor = 1.2
SevenDaysInSeconds = 60 * 60 * 24 * 7 SevenDaysInSeconds = 60 * 60 * 24 * 7
StatusDomain = ".stateofus.eth" StatusDomain = ".stateofus.eth"

View File

@ -201,7 +201,7 @@ func (h *HopBridgeProcessor) packTxInputDataInternally(params ProcessorInputPara
return []byte{}, createBridgeHopErrorResponse(err) return []byte{}, createBridgeHopErrorResponse(err)
} }
bonderKey := makeKey(params.FromChain.ChainID, params.ToChain.ChainID, "", "") bonderKey := makeKey(params.FromChain.ChainID, params.ToChain.ChainID, "", "", params.AmountIn)
bonderFeeIns, ok := h.bonderFee.Load(bonderKey) bonderFeeIns, ok := h.bonderFee.Load(bonderKey)
if !ok { if !ok {
return nil, ErrNoBonderFeeFound return nil, ErrNoBonderFeeFound
@ -319,7 +319,7 @@ func (h *HopBridgeProcessor) sendOrBuild(sendArgs *MultipathProcessorTxArgs, sig
return tx, createBridgeHopErrorResponse(err) return tx, createBridgeHopErrorResponse(err)
} }
bonderKey := makeKey(sendArgs.HopTx.ChainID, sendArgs.HopTx.ChainIDTo, "", "") bonderKey := makeKey(sendArgs.HopTx.ChainID, sendArgs.HopTx.ChainIDTo, "", "", (*big.Int)(sendArgs.HopTx.Amount))
bonderFeeIns, ok := h.bonderFee.Load(bonderKey) bonderFeeIns, ok := h.bonderFee.Load(bonderKey)
if !ok { if !ok {
return nil, ErrNoBonderFeeFound return nil, ErrNoBonderFeeFound
@ -386,7 +386,7 @@ func (h *HopBridgeProcessor) sendOrBuildV2(sendArgs *transactions.SendTxArgs, si
return tx, createBridgeHopErrorResponse(err) return tx, createBridgeHopErrorResponse(err)
} }
bonderKey := makeKey(sendArgs.FromChainID, sendArgs.ToChainID, "", "") bonderKey := makeKey(sendArgs.FromChainID, sendArgs.ToChainID, "", "", (*big.Int)(sendArgs.Value))
bonderFeeIns, ok := h.bonderFee.Load(bonderKey) bonderFeeIns, ok := h.bonderFee.Load(bonderKey)
if !ok { if !ok {
return nil, ErrNoBonderFeeFound return nil, ErrNoBonderFeeFound
@ -427,6 +427,9 @@ func (h *HopBridgeProcessor) Send(sendArgs *MultipathProcessorTxArgs, lastUsedNo
func (h *HopBridgeProcessor) BuildTransaction(sendArgs *MultipathProcessorTxArgs, lastUsedNonce int64) (*ethTypes.Transaction, uint64, error) { func (h *HopBridgeProcessor) BuildTransaction(sendArgs *MultipathProcessorTxArgs, lastUsedNonce int64) (*ethTypes.Transaction, uint64, error) {
tx, err := h.sendOrBuild(sendArgs, nil, lastUsedNonce) tx, err := h.sendOrBuild(sendArgs, nil, lastUsedNonce)
if err != nil {
return nil, 0, createBridgeHopErrorResponse(err)
}
return tx, tx.Nonce(), createBridgeHopErrorResponse(err) return tx, tx.Nonce(), createBridgeHopErrorResponse(err)
} }
@ -439,7 +442,7 @@ func (h *HopBridgeProcessor) BuildTransactionV2(sendArgs *transactions.SendTxArg
} }
func (h *HopBridgeProcessor) CalculateFees(params ProcessorInputParams) (*big.Int, *big.Int, error) { func (h *HopBridgeProcessor) CalculateFees(params ProcessorInputParams) (*big.Int, *big.Int, error) {
bonderKey := makeKey(params.FromChain.ChainID, params.ToChain.ChainID, "", "") bonderKey := makeKey(params.FromChain.ChainID, params.ToChain.ChainID, "", "", params.AmountIn)
if params.TestsMode { if params.TestsMode {
if val, ok := params.TestBonderFeeMap[params.FromToken.Symbol]; ok { if val, ok := params.TestBonderFeeMap[params.FromToken.Symbol]; ok {
res := new(big.Int).Sub(params.AmountIn, val) res := new(big.Int).Sub(params.AmountIn, val)
@ -504,7 +507,7 @@ func (h *HopBridgeProcessor) CalculateFees(params ProcessorInputParams) (*big.In
} }
func (h *HopBridgeProcessor) CalculateAmountOut(params ProcessorInputParams) (*big.Int, error) { func (h *HopBridgeProcessor) CalculateAmountOut(params ProcessorInputParams) (*big.Int, error) {
bonderKey := makeKey(params.FromChain.ChainID, params.ToChain.ChainID, "", "") bonderKey := makeKey(params.FromChain.ChainID, params.ToChain.ChainID, "", "", params.AmountIn)
bonderFeeIns, ok := h.bonderFee.Load(bonderKey) bonderFeeIns, ok := h.bonderFee.Load(bonderKey)
if !ok { if !ok {
return nil, ErrNoBonderFeeFound return nil, ErrNoBonderFeeFound

View File

@ -190,14 +190,14 @@ func (s *SwapParaswapProcessor) EstimateGas(params ProcessorInputParams) (uint64
return 0, createSwapParaswapErrorResponse(err) return 0, createSwapParaswapErrorResponse(err)
} }
key := makeKey(params.FromChain.ChainID, params.ToChain.ChainID, params.FromToken.Symbol, params.ToToken.Symbol) key := makeKey(params.FromChain.ChainID, params.ToChain.ChainID, params.FromToken.Symbol, params.ToToken.Symbol, params.AmountIn)
s.priceRoute.Store(key, &priceRoute) s.priceRoute.Store(key, &priceRoute)
return priceRoute.GasCost.Uint64(), nil return priceRoute.GasCost.Uint64(), nil
} }
func (s *SwapParaswapProcessor) GetContractAddress(params ProcessorInputParams) (address common.Address, err error) { func (s *SwapParaswapProcessor) GetContractAddress(params ProcessorInputParams) (address common.Address, err error) {
key := makeKey(params.FromChain.ChainID, params.ToChain.ChainID, params.FromToken.Symbol, params.ToToken.Symbol) key := makeKey(params.FromChain.ChainID, params.ToChain.ChainID, params.FromToken.Symbol, params.ToToken.Symbol, params.AmountIn)
priceRouteIns, ok := s.priceRoute.Load(key) priceRouteIns, ok := s.priceRoute.Load(key)
if !ok { if !ok {
err = ErrPriceRouteNotFound err = ErrPriceRouteNotFound
@ -212,7 +212,7 @@ func (s *SwapParaswapProcessor) GetContractAddress(params ProcessorInputParams)
func (s *SwapParaswapProcessor) prepareTransaction(sendArgs *MultipathProcessorTxArgs) error { func (s *SwapParaswapProcessor) prepareTransaction(sendArgs *MultipathProcessorTxArgs) error {
slippageBP := uint(sendArgs.SwapTx.SlippagePercentage * 100) // convert to basis points slippageBP := uint(sendArgs.SwapTx.SlippagePercentage * 100) // convert to basis points
key := makeKey(sendArgs.SwapTx.ChainID, sendArgs.SwapTx.ChainIDTo, sendArgs.SwapTx.TokenIDFrom, sendArgs.SwapTx.TokenIDTo) key := makeKey(sendArgs.SwapTx.ChainID, sendArgs.SwapTx.ChainIDTo, sendArgs.SwapTx.TokenIDFrom, sendArgs.SwapTx.TokenIDTo, sendArgs.SwapTx.Value.ToInt())
priceRouteIns, ok := s.priceRoute.Load(key) priceRouteIns, ok := s.priceRoute.Load(key)
if !ok { if !ok {
return ErrPriceRouteNotFound return ErrPriceRouteNotFound
@ -258,7 +258,7 @@ func (s *SwapParaswapProcessor) prepareTransaction(sendArgs *MultipathProcessorT
func (s *SwapParaswapProcessor) prepareTransactionV2(sendArgs *transactions.SendTxArgs) error { func (s *SwapParaswapProcessor) prepareTransactionV2(sendArgs *transactions.SendTxArgs) error {
slippageBP := uint(sendArgs.SlippagePercentage * 100) // convert to basis points slippageBP := uint(sendArgs.SlippagePercentage * 100) // convert to basis points
key := makeKey(sendArgs.FromChainID, sendArgs.ToChainID, sendArgs.FromTokenID, sendArgs.ToTokenID) key := makeKey(sendArgs.FromChainID, sendArgs.ToChainID, sendArgs.FromTokenID, sendArgs.ToTokenID, sendArgs.Value.ToInt())
priceRouteIns, ok := s.priceRoute.Load(key) priceRouteIns, ok := s.priceRoute.Load(key)
if !ok { if !ok {
return ErrPriceRouteNotFound return ErrPriceRouteNotFound
@ -326,7 +326,7 @@ func (s *SwapParaswapProcessor) Send(sendArgs *MultipathProcessorTxArgs, lastUse
} }
func (s *SwapParaswapProcessor) CalculateAmountOut(params ProcessorInputParams) (*big.Int, error) { func (s *SwapParaswapProcessor) CalculateAmountOut(params ProcessorInputParams) (*big.Int, error) {
key := makeKey(params.FromChain.ChainID, params.ToChain.ChainID, params.FromToken.Symbol, params.ToToken.Symbol) key := makeKey(params.FromChain.ChainID, params.ToChain.ChainID, params.FromToken.Symbol, params.ToToken.Symbol, params.AmountIn)
priceRouteIns, ok := s.priceRoute.Load(key) priceRouteIns, ok := s.priceRoute.Load(key)
if !ok { if !ok {
return nil, ErrPriceRouteNotFound return nil, ErrPriceRouteNotFound

View File

@ -44,7 +44,7 @@ func TestParaswapWithPartnerFee(t *testing.T) {
chainIDs := []uint64{walletCommon.EthereumMainnet, walletCommon.ArbitrumMainnet, walletCommon.OptimismMainnet, walletCommon.UnknownChainID} chainIDs := []uint64{walletCommon.EthereumMainnet, walletCommon.ArbitrumMainnet, walletCommon.OptimismMainnet, walletCommon.UnknownChainID}
for _, chainID := range chainIDs { for _, chainID := range chainIDs {
key := makeKey(chainID, chainID, fromToken.Symbol, toToken.Symbol) key := makeKey(chainID, chainID, fromToken.Symbol, toToken.Symbol, testPriceRoute.SrcAmount.Int)
processor.priceRoute.Store(key, testPriceRoute) processor.priceRoute.Store(key, testPriceRoute)
testInputParams := ProcessorInputParams{ testInputParams := ProcessorInputParams{
@ -52,6 +52,7 @@ func TestParaswapWithPartnerFee(t *testing.T) {
ToChain: &params.Network{ChainID: chainID}, ToChain: &params.Network{ChainID: chainID},
FromToken: &fromToken, FromToken: &fromToken,
ToToken: &toToken, ToToken: &toToken,
AmountIn: testPriceRoute.SrcAmount.Int,
} }
partnerAddress, partnerFeePcnt := getPartnerAddressAndFeePcnt(chainID) partnerAddress, partnerFeePcnt := getPartnerAddressAndFeePcnt(chainID)