From 758311b2f03b3fed543f8e9b4f6ad28040bfc45b Mon Sep 17 00:00:00 2001 From: nuanyang233 Date: Mon, 11 Jul 2022 16:35:31 +0800 Subject: [PATCH 1/2] fix: bugfix for swap callback --- .../Wallet/ContractInteraction/index.tsx | 30 +++++------ .../Trader/trader/0x/useTradeCallback.ts | 4 +- .../trader/balancer/useTradeCallback.ts | 50 ++++++++----------- .../Trader/trader/bancor/useTradeCallback.ts | 7 ++- .../Trader/trader/dodo/useTradeCallback.ts | 7 ++- .../trader/openocean/useTradeCallback.ts | 7 ++- 6 files changed, 57 insertions(+), 48 deletions(-) diff --git a/packages/mask/src/extension/popups/pages/Wallet/ContractInteraction/index.tsx b/packages/mask/src/extension/popups/pages/Wallet/ContractInteraction/index.tsx index 51fd41a3fd22..5271c1b4515f 100644 --- a/packages/mask/src/extension/popups/pages/Wallet/ContractInteraction/index.tsx +++ b/packages/mask/src/extension/popups/pages/Wallet/ContractInteraction/index.tsx @@ -173,11 +173,22 @@ const ContractInteraction = memo(() => { const type = request?.formatterTransaction?.type if (!type) return {} - const methods = request.transactionContext?.methods - if (!methods?.length) return {} - switch (type) { case TransactionDescriptorType.INTERACTION: + const methods = request.transactionContext?.methods + if (!methods?.length) + return { + isNativeTokenInteraction: true, + typeName: t('popups_wallet_contract_interaction'), + tokenAddress: request.computedPayload?.to, + to: request.computedPayload?.to, + gas: request.computedPayload?.gas, + gasPrice: request.computedPayload?.gasPrice, + maxFeePerGas: request.computedPayload?.maxFeePerGas, + maxPriorityFeePerGas: request.computedPayload?.maxPriorityFeePerGas, + amount: request.computedPayload?.value, + } + for (const method of methods) { const parameters = method.parameters @@ -214,17 +225,8 @@ const ContractInteraction = memo(() => { } } } - return { - isNativeTokenInteraction: true, - typeName: t('popups_wallet_contract_interaction'), - tokenAddress: request.computedPayload?.to, - to: request.computedPayload?.to, - gas: request.computedPayload?.gas, - gasPrice: request.computedPayload?.gasPrice, - maxFeePerGas: request.computedPayload?.maxFeePerGas, - maxPriorityFeePerGas: request.computedPayload?.maxPriorityFeePerGas, - amount: request.computedPayload?.value, - } + + return {} case TransactionDescriptorType.TRANSFER: return { isNativeTokenInteraction: true, diff --git a/packages/mask/src/plugins/Trader/trader/0x/useTradeCallback.ts b/packages/mask/src/plugins/Trader/trader/0x/useTradeCallback.ts index c1f87753caf5..244996e993d9 100644 --- a/packages/mask/src/plugins/Trader/trader/0x/useTradeCallback.ts +++ b/packages/mask/src/plugins/Trader/trader/0x/useTradeCallback.ts @@ -9,6 +9,7 @@ import { TargetChainIdContext } from '@masknet/plugin-infra/web3-evm' import { SUPPORTED_CHAIN_ID_LIST } from './constants' import { NetworkPluginID, ZERO } from '@masknet/web3-shared-base' import { useAccount, useWeb3Connection } from '@masknet/plugin-infra/web3' +import { toHex } from 'web3-utils' export function useTradeCallback(tradeComputed: TradeComputed | null, gasConfig?: GasOptionConfig) { const { targetChainId: chainId } = TargetChainIdContext.useContainer() @@ -36,7 +37,8 @@ export function useTradeCallback(tradeComputed: TradeComputed gas: (await connection.estimateTransaction?.({ from: account, - ...pick(tradeComputed.trade_, ['to', 'data', 'value']), + ...pick(tradeComputed.trade_, ['to', 'data']), + value: tradeComputed.trade_?.value ? toHex(tradeComputed.trade_.value) : undefined, })) ?? ZERO.toString(), } diff --git a/packages/mask/src/plugins/Trader/trader/balancer/useTradeCallback.ts b/packages/mask/src/plugins/Trader/trader/balancer/useTradeCallback.ts index b777653083d6..fc3059a63ccc 100644 --- a/packages/mask/src/plugins/Trader/trader/balancer/useTradeCallback.ts +++ b/packages/mask/src/plugins/Trader/trader/balancer/useTradeCallback.ts @@ -1,16 +1,11 @@ import type { ExchangeProxy } from '@masknet/web3-contracts/types/ExchangeProxy' -import { - SchemaType, - GasOptionConfig, - useTraderConstants, - encodeContractTransaction -} from '@masknet/web3-shared-evm' +import { SchemaType, GasOptionConfig, useTraderConstants, encodeContractTransaction } from '@masknet/web3-shared-evm' import { useAsyncFn } from 'react-use' import { SLIPPAGE_DEFAULT } from '../../constants' import { SwapResponse, TradeComputed, TradeStrategy } from '../../types' import { TargetChainIdContext } from '@masknet/plugin-infra/web3-evm' import { useAccount, useWeb3Connection } from '@masknet/plugin-infra/web3' -import { NetworkPluginID, ZERO } from '@masknet/web3-shared-base' +import { NetworkPluginID } from '@masknet/web3-shared-base' import { useTradeAmount } from './useTradeAmount' export function useTradeCallback( @@ -55,7 +50,6 @@ export function useTradeCallback( const outputTokenAddress = trade.outputToken.schema === SchemaType.Native ? BALANCER_ETH_ADDRESS : trade.outputToken.address - // trade with the native token let transactionValue = '0' if (trade.strategy === TradeStrategy.ExactIn && trade.inputToken.schema === SchemaType.Native) @@ -66,32 +60,28 @@ export function useTradeCallback( // send transaction and wait for hash const config = { from: account, - gas: await connection - .estimateTransaction?.({ - from: account, - value: transactionValue, - }) ?? ZERO.toString(), value: transactionValue, ...gasConfig, } - - const tx = await encodeContractTransaction(exchangeProxyContract, trade.strategy === TradeStrategy.ExactIn - ? exchangeProxyContract.methods.multihopBatchSwapExactIn( - swap_, - inputTokenAddress, - outputTokenAddress, - trade.inputAmount.toFixed(), - tradeAmount.toFixed(), - ) - : exchangeProxyContract.methods.multihopBatchSwapExactOut( - swap_, - inputTokenAddress, - outputTokenAddress, - tradeAmount.toFixed(), - ), config) - - + const tx = await encodeContractTransaction( + exchangeProxyContract, + trade.strategy === TradeStrategy.ExactIn + ? exchangeProxyContract.methods.multihopBatchSwapExactIn( + swap_, + inputTokenAddress, + outputTokenAddress, + trade.inputAmount.toFixed(), + tradeAmount.toFixed(), + ) + : exchangeProxyContract.methods.multihopBatchSwapExactOut( + swap_, + inputTokenAddress, + outputTokenAddress, + tradeAmount.toFixed(), + ), + config, + ) // send transaction and wait for hash const hash = await connection.sendTransaction(tx) diff --git a/packages/mask/src/plugins/Trader/trader/bancor/useTradeCallback.ts b/packages/mask/src/plugins/Trader/trader/bancor/useTradeCallback.ts index f7d91416aa61..06b2391612f0 100644 --- a/packages/mask/src/plugins/Trader/trader/bancor/useTradeCallback.ts +++ b/packages/mask/src/plugins/Trader/trader/bancor/useTradeCallback.ts @@ -8,6 +8,7 @@ import type { GasOptionConfig } from '@masknet/web3-shared-evm' import { PluginTraderRPC } from '../../messages' import type { SwapBancorRequest, TradeComputed } from '../../types' import { TargetChainIdContext } from '@masknet/plugin-infra/web3-evm' +import { toHex } from 'web3-utils' export function useTradeCallback(tradeComputed: TradeComputed | null, gasConfig?: GasOptionConfig) { const { targetChainId: chainId } = TargetChainIdContext.useContainer() @@ -35,7 +36,11 @@ export function useTradeCallback(tradeComputed: TradeComputed const config = pick(tradeTransaction.transaction, ['to', 'data', 'value', 'from']) const config_ = { ...config, - gas: (await connection.estimateTransaction?.(config)) ?? ZERO.toString(), + gas: + (await connection.estimateTransaction?.({ + ...config, + value: config.value ? toHex(config.value) : undefined, + })) ?? ZERO.toString(), ...gasConfig, } diff --git a/packages/mask/src/plugins/Trader/trader/dodo/useTradeCallback.ts b/packages/mask/src/plugins/Trader/trader/dodo/useTradeCallback.ts index f446521c02af..ad61e5f28c67 100644 --- a/packages/mask/src/plugins/Trader/trader/dodo/useTradeCallback.ts +++ b/packages/mask/src/plugins/Trader/trader/dodo/useTradeCallback.ts @@ -8,6 +8,7 @@ import type { SwapRouteSuccessResponse, TradeComputed } from '../../types' import { TargetChainIdContext } from '@masknet/plugin-infra/web3-evm' import { NetworkPluginID, ZERO } from '@masknet/web3-shared-base' import type { GasOptionConfig } from '@masknet/web3-shared-evm' +import { toHex } from 'web3-utils' export function useTradeCallback( tradeComputed: TradeComputed | null, @@ -35,7 +36,11 @@ export function useTradeCallback( // compose transaction config const config_ = { ...config, - gas: (await connection.estimateTransaction?.(config)) ?? ZERO.toString(), + gas: + (await connection.estimateTransaction?.({ + ...config, + value: config.value ? toHex(config.value) : undefined, + })) ?? ZERO.toString(), ...gasConfig, } diff --git a/packages/mask/src/plugins/Trader/trader/openocean/useTradeCallback.ts b/packages/mask/src/plugins/Trader/trader/openocean/useTradeCallback.ts index 3b081653bdec..e831f066ac88 100644 --- a/packages/mask/src/plugins/Trader/trader/openocean/useTradeCallback.ts +++ b/packages/mask/src/plugins/Trader/trader/openocean/useTradeCallback.ts @@ -7,6 +7,7 @@ import type { GasOptionConfig } from '@masknet/web3-shared-evm' import type { SwapOOSuccessResponse, TradeComputed } from '../../types' import { NetworkPluginID, ZERO } from '@masknet/web3-shared-base' import { useAccount, useChainId, useWeb3Connection } from '@masknet/plugin-infra/web3' +import { toHex } from 'web3-utils' export function useTradeCallback( tradeComputed: TradeComputed | null, @@ -34,7 +35,11 @@ export function useTradeCallback( // compose transaction config const config_ = { ...config, - gas: (await connection.estimateTransaction?.(config)) ?? ZERO.toString(), + gas: + (await connection.estimateTransaction?.({ + ...config, + value: config.value ? toHex(config.value) : undefined, + })) ?? ZERO.toString(), ...gasConfig, } From 285536c5426a3d882a9c06e7701452d6062ec2db Mon Sep 17 00:00:00 2001 From: nuanyang233 Date: Mon, 11 Jul 2022 16:50:56 +0800 Subject: [PATCH 2/2] fix: bugfix --- .../mask/src/plugins/Trader/trader/0x/useTradeCallback.ts | 4 +--- .../src/plugins/Trader/trader/bancor/useTradeCallback.ts | 7 +------ .../src/plugins/Trader/trader/dodo/useTradeCallback.ts | 7 +------ .../plugins/Trader/trader/openocean/useTradeCallback.ts | 7 +------ packages/plugins/EVM/src/state/Connection/connection.ts | 1 + packages/web3-shared/evm/constants/chains.json | 6 +++--- 6 files changed, 8 insertions(+), 24 deletions(-) diff --git a/packages/mask/src/plugins/Trader/trader/0x/useTradeCallback.ts b/packages/mask/src/plugins/Trader/trader/0x/useTradeCallback.ts index 244996e993d9..c1f87753caf5 100644 --- a/packages/mask/src/plugins/Trader/trader/0x/useTradeCallback.ts +++ b/packages/mask/src/plugins/Trader/trader/0x/useTradeCallback.ts @@ -9,7 +9,6 @@ import { TargetChainIdContext } from '@masknet/plugin-infra/web3-evm' import { SUPPORTED_CHAIN_ID_LIST } from './constants' import { NetworkPluginID, ZERO } from '@masknet/web3-shared-base' import { useAccount, useWeb3Connection } from '@masknet/plugin-infra/web3' -import { toHex } from 'web3-utils' export function useTradeCallback(tradeComputed: TradeComputed | null, gasConfig?: GasOptionConfig) { const { targetChainId: chainId } = TargetChainIdContext.useContainer() @@ -37,8 +36,7 @@ export function useTradeCallback(tradeComputed: TradeComputed gas: (await connection.estimateTransaction?.({ from: account, - ...pick(tradeComputed.trade_, ['to', 'data']), - value: tradeComputed.trade_?.value ? toHex(tradeComputed.trade_.value) : undefined, + ...pick(tradeComputed.trade_, ['to', 'data', 'value']), })) ?? ZERO.toString(), } diff --git a/packages/mask/src/plugins/Trader/trader/bancor/useTradeCallback.ts b/packages/mask/src/plugins/Trader/trader/bancor/useTradeCallback.ts index 06b2391612f0..f7d91416aa61 100644 --- a/packages/mask/src/plugins/Trader/trader/bancor/useTradeCallback.ts +++ b/packages/mask/src/plugins/Trader/trader/bancor/useTradeCallback.ts @@ -8,7 +8,6 @@ import type { GasOptionConfig } from '@masknet/web3-shared-evm' import { PluginTraderRPC } from '../../messages' import type { SwapBancorRequest, TradeComputed } from '../../types' import { TargetChainIdContext } from '@masknet/plugin-infra/web3-evm' -import { toHex } from 'web3-utils' export function useTradeCallback(tradeComputed: TradeComputed | null, gasConfig?: GasOptionConfig) { const { targetChainId: chainId } = TargetChainIdContext.useContainer() @@ -36,11 +35,7 @@ export function useTradeCallback(tradeComputed: TradeComputed const config = pick(tradeTransaction.transaction, ['to', 'data', 'value', 'from']) const config_ = { ...config, - gas: - (await connection.estimateTransaction?.({ - ...config, - value: config.value ? toHex(config.value) : undefined, - })) ?? ZERO.toString(), + gas: (await connection.estimateTransaction?.(config)) ?? ZERO.toString(), ...gasConfig, } diff --git a/packages/mask/src/plugins/Trader/trader/dodo/useTradeCallback.ts b/packages/mask/src/plugins/Trader/trader/dodo/useTradeCallback.ts index ad61e5f28c67..f446521c02af 100644 --- a/packages/mask/src/plugins/Trader/trader/dodo/useTradeCallback.ts +++ b/packages/mask/src/plugins/Trader/trader/dodo/useTradeCallback.ts @@ -8,7 +8,6 @@ import type { SwapRouteSuccessResponse, TradeComputed } from '../../types' import { TargetChainIdContext } from '@masknet/plugin-infra/web3-evm' import { NetworkPluginID, ZERO } from '@masknet/web3-shared-base' import type { GasOptionConfig } from '@masknet/web3-shared-evm' -import { toHex } from 'web3-utils' export function useTradeCallback( tradeComputed: TradeComputed | null, @@ -36,11 +35,7 @@ export function useTradeCallback( // compose transaction config const config_ = { ...config, - gas: - (await connection.estimateTransaction?.({ - ...config, - value: config.value ? toHex(config.value) : undefined, - })) ?? ZERO.toString(), + gas: (await connection.estimateTransaction?.(config)) ?? ZERO.toString(), ...gasConfig, } diff --git a/packages/mask/src/plugins/Trader/trader/openocean/useTradeCallback.ts b/packages/mask/src/plugins/Trader/trader/openocean/useTradeCallback.ts index e831f066ac88..3b081653bdec 100644 --- a/packages/mask/src/plugins/Trader/trader/openocean/useTradeCallback.ts +++ b/packages/mask/src/plugins/Trader/trader/openocean/useTradeCallback.ts @@ -7,7 +7,6 @@ import type { GasOptionConfig } from '@masknet/web3-shared-evm' import type { SwapOOSuccessResponse, TradeComputed } from '../../types' import { NetworkPluginID, ZERO } from '@masknet/web3-shared-base' import { useAccount, useChainId, useWeb3Connection } from '@masknet/plugin-infra/web3' -import { toHex } from 'web3-utils' export function useTradeCallback( tradeComputed: TradeComputed | null, @@ -35,11 +34,7 @@ export function useTradeCallback( // compose transaction config const config_ = { ...config, - gas: - (await connection.estimateTransaction?.({ - ...config, - value: config.value ? toHex(config.value) : undefined, - })) ?? ZERO.toString(), + gas: (await connection.estimateTransaction?.(config)) ?? ZERO.toString(), ...gasConfig, } diff --git a/packages/plugins/EVM/src/state/Connection/connection.ts b/packages/plugins/EVM/src/state/Connection/connection.ts index 9516ddbf3c50..cd439da4730d 100644 --- a/packages/plugins/EVM/src/state/Connection/connection.ts +++ b/packages/plugins/EVM/src/state/Connection/connection.ts @@ -794,6 +794,7 @@ class Connection implements EVM_Connection { { from: options.account, ...transaction, + value: transaction.value ? toHex(transaction.value) : undefined, }, ], }, diff --git a/packages/web3-shared/evm/constants/chains.json b/packages/web3-shared/evm/constants/chains.json index 70abf0d8c5cb..c157fb2120df 100644 --- a/packages/web3-shared/evm/constants/chains.json +++ b/packages/web3-shared/evm/constants/chains.json @@ -2782,7 +2782,7 @@ "nativeCurrency": { "chainId": 1313161554, "name": "Ether", - "symbol": "aETH", + "symbol": "AETH", "decimals": 18 }, "infoURL": "https://aurora.dev", @@ -2805,7 +2805,7 @@ "nativeCurrency": { "chainId": 1313161555, "name": "Ether", - "symbol": "aETH", + "symbol": "AETH", "decimals": 18 }, "infoURL": "https://aurora.dev" @@ -2821,7 +2821,7 @@ "nativeCurrency": { "chainId": 1313161556, "name": "Ether", - "symbol": "aETH", + "symbol": "AETH", "decimals": 18 }, "infoURL": "https://aurora.dev"