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:
parent
e938635d04
commit
b329b158c8
|
@ -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 {
|
||||||
|
|
|
@ -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"
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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: ¶ms.Network{ChainID: chainID},
|
ToChain: ¶ms.Network{ChainID: chainID},
|
||||||
FromToken: &fromToken,
|
FromToken: &fromToken,
|
||||||
ToToken: &toToken,
|
ToToken: &toToken,
|
||||||
|
AmountIn: testPriceRoute.SrcAmount.Int,
|
||||||
}
|
}
|
||||||
|
|
||||||
partnerAddress, partnerFeePcnt := getPartnerAddressAndFeePcnt(chainID)
|
partnerAddress, partnerFeePcnt := getPartnerAddressAndFeePcnt(chainID)
|
||||||
|
|
Loading…
Reference in New Issue