fix_: allow sending 0 value transactions

This commit is contained in:
Sale Djenic 2024-07-23 12:15:29 +02:00 committed by saledjenic
parent 625c11ced4
commit 4d2d20cff4
4 changed files with 80 additions and 1 deletions

View File

@ -438,7 +438,7 @@ func (h *HopBridgeProcessor) CalculateFees(params ProcessorInputParams) (*big.In
// Remove token fee from bonder fee as said here: // Remove token fee from bonder fee as said here:
// https://docs.hop.exchange/v/developer-docs/api/api#get-v1-quote // https://docs.hop.exchange/v/developer-docs/api/api#get-v1-quote
// `bonderFee` - The suggested bonder fee for the amount in. The bonder fee also includes the cost of the destination transaction fee. // `bonderFee` - The suggested bonder fee for the amount in. The bonder fee also includes the cost of the destination transaction fee.
tokenFee := ZeroBigIntValue //new(big.Int).Sub(h.bonderFee.AmountIn.Int, h.bonderFee.EstimatedRecieved.Int) tokenFee := new(big.Int).Sub(bonderFee.AmountIn.Int, bonderFee.EstimatedRecieved.Int)
return bonderFee.BonderFee.Int, tokenFee, nil return bonderFee.BonderFee.Int, tokenFee, nil
} }

View File

@ -133,6 +133,24 @@ func (s SendType) canUseProcessor(p pathprocessor.PathProcessor) bool {
} }
} }
func (s SendType) processZeroAmountInProcessor(amountIn *big.Int, amountOut *big.Int, processorName string) bool {
if amountIn.Cmp(pathprocessor.ZeroBigIntValue) == 0 {
if s == Transfer {
if processorName != pathprocessor.ProcessorTransferName {
return false
}
} else if s == Swap {
if amountOut.Cmp(pathprocessor.ZeroBigIntValue) == 0 {
return false
}
} else {
return false
}
}
return true
}
func (s SendType) isAvailableBetween(from, to *params.Network) bool { func (s SendType) isAvailableBetween(from, to *params.Network) bool {
if s.IsCollectiblesTransfer() || if s.IsCollectiblesTransfer() ||
s.IsEnsTransfer() || s.IsEnsTransfer() ||

View File

@ -638,6 +638,15 @@ func (r *Router) getCrossChainsOptionsForSendingAmount(input *RouteInputParams,
amountLocked := false amountLocked := false
amountToSend := input.AmountIn.ToInt() amountToSend := input.AmountIn.ToInt()
if amountToSend.Cmp(pathprocessor.ZeroBigIntValue) == 0 {
finalCrossChainAmountOptions[selectedFromChain.ChainID] = append(finalCrossChainAmountOptions[selectedFromChain.ChainID], amountOption{
amount: amountToSend,
locked: false,
})
continue
}
lockedAmount, fromChainLocked := input.FromLockedAmount[selectedFromChain.ChainID] lockedAmount, fromChainLocked := input.FromLockedAmount[selectedFromChain.ChainID]
if fromChainLocked { if fromChainLocked {
amountToSend = lockedAmount.ToInt() amountToSend = lockedAmount.ToInt()
@ -826,6 +835,10 @@ func (r *Router) resolveCandidates(ctx context.Context, input *RouteInputParams,
continue continue
} }
if !input.SendType.processZeroAmountInProcessor(amountOption.amount, input.AmountOut.ToInt(), pProcessor.Name()) {
continue
}
for _, dest := range selectedTohains { for _, dest := range selectedTohains {
if !input.SendType.isAvailableFor(network) { if !input.SendType.isAvailableFor(network) {

View File

@ -207,6 +207,54 @@ type normalTestParams struct {
func getNormalTestParamsList() []normalTestParams { func getNormalTestParamsList() []normalTestParams {
return []normalTestParams{ return []normalTestParams{
{
name: "ETH transfer - No Specific FromChain - No Specific ToChain - 0 AmountIn",
input: &RouteInputParams{
testnetMode: false,
Uuid: uuid.NewString(),
SendType: Transfer,
AddrFrom: common.HexToAddress("0x1"),
AddrTo: common.HexToAddress("0x2"),
AmountIn: (*hexutil.Big)(big.NewInt(0)),
TokenID: pathprocessor.EthSymbol,
testsMode: true,
testParams: &routerTestParams{
tokenFrom: &token.Token{
ChainID: 1,
Symbol: pathprocessor.EthSymbol,
Decimals: 18,
},
tokenPrices: testTokenPrices,
suggestedFees: testSuggestedFees,
balanceMap: testBalanceMapPerChain,
estimationMap: testEstimationMap,
bonderFeeMap: testBbonderFeeMap,
approvalGasEstimation: testApprovalGasEstimation,
approvalL1Fee: testApprovalL1Fee,
},
},
expectedCandidates: []*PathV2{
{
ProcessorName: pathprocessor.ProcessorTransferName,
FromChain: &mainnet,
ToChain: &mainnet,
ApprovalRequired: false,
},
{
ProcessorName: pathprocessor.ProcessorTransferName,
FromChain: &optimism,
ToChain: &optimism,
ApprovalRequired: false,
},
{
ProcessorName: pathprocessor.ProcessorTransferName,
FromChain: &arbitrum,
ToChain: &arbitrum,
ApprovalRequired: false,
},
},
},
{ {
name: "ETH transfer - No Specific FromChain - No Specific ToChain", name: "ETH transfer - No Specific FromChain - No Specific ToChain",
input: &RouteInputParams{ input: &RouteInputParams{