From b5b49b1a8e1393523aa35b0f3138d55948f89884 Mon Sep 17 00:00:00 2001 From: guanbinrui Date: Thu, 16 Jun 2022 01:05:32 +0800 Subject: [PATCH] fix: tx overrides --- .../ArtBlocks/hooks/usePurchaseCallback.ts | 4 +- .../CryptoartAI/hooks/usePlaceBidCallback.ts | 6 +-- .../CryptoartAI/hooks/usePurchaseCallback.ts | 4 +- .../Gitcoin/hooks/useDonateCallback.ts | 8 +++- .../ITO/SNSAdaptor/hooks/useClaimCallback.ts | 4 +- .../SNSAdaptor/hooks/useDestructCallback.ts | 4 +- .../SNSAdaptor/hooks/useMaskClaimCallback.ts | 4 +- .../PoolTogether/hooks/useDepositCallback.ts | 4 +- .../SNSAdaptor/hooks/useClaimCallback.ts | 6 +-- .../hooks/useClaimNftRedpacketCallback.ts | 8 +++- .../SNSAdaptor/hooks/useCreateCallback.tsx | 12 ++++-- .../SNSAdaptor/hooks/useRefundCallback.ts | 4 +- .../Referral/SNSAdaptor/utils/referralFarm.ts | 8 ++-- .../plugins/dHEDGE/hooks/useInvestCallback.ts | 12 ++++-- .../EVM/src/state/Connection/connection.ts | 9 ++-- packages/web3-shared/evm/utils/contract.ts | 42 +++++++++++++++---- 16 files changed, 92 insertions(+), 47 deletions(-) diff --git a/packages/mask/src/plugins/ArtBlocks/hooks/usePurchaseCallback.ts b/packages/mask/src/plugins/ArtBlocks/hooks/usePurchaseCallback.ts index e9f6614dbe62..418781846fec 100644 --- a/packages/mask/src/plugins/ArtBlocks/hooks/usePurchaseCallback.ts +++ b/packages/mask/src/plugins/ArtBlocks/hooks/usePurchaseCallback.ts @@ -1,6 +1,6 @@ import { useAccount, useWeb3Connection } from '@masknet/plugin-infra/web3' import { NetworkPluginID } from '@masknet/web3-shared-base' -import { ChainId, encodeTransaction, SchemaType } from '@masknet/web3-shared-evm' +import { ChainId, encodeContractTransaction, SchemaType } from '@masknet/web3-shared-evm' import BigNumber from 'bignumber.js' import { useAsyncFn } from 'react-use' import { useArtBlocksContract } from './useArtBlocksContract' @@ -14,7 +14,7 @@ export function usePurchaseCallback(chainId: ChainId, projectId: string, amount: return useAsyncFn(async () => { if (!genArt721MinterContract) return - const tx = await encodeTransaction( + const tx = await encodeContractTransaction( genArt721MinterContract, genArt721MinterContract.methods.purchase(projectId), { diff --git a/packages/mask/src/plugins/CryptoartAI/hooks/usePlaceBidCallback.ts b/packages/mask/src/plugins/CryptoartAI/hooks/usePlaceBidCallback.ts index 2923da7193f8..316812586795 100644 --- a/packages/mask/src/plugins/CryptoartAI/hooks/usePlaceBidCallback.ts +++ b/packages/mask/src/plugins/CryptoartAI/hooks/usePlaceBidCallback.ts @@ -1,6 +1,6 @@ import { useAccount, useChainId, useWeb3Connection } from '@masknet/plugin-infra/web3' import { NetworkPluginID, toFixed } from '@masknet/web3-shared-base' -import { encodeTransaction, ZERO_ADDRESS } from '@masknet/web3-shared-evm' +import { encodeContractTransaction, ZERO_ADDRESS } from '@masknet/web3-shared-evm' import { useAsyncFn } from 'react-use' import { useCryptoArtAI_Contract } from './useCryptoArtAI_Contract' @@ -21,12 +21,12 @@ export function usePlaceBidCallback(is24Auction: boolean, editionNumber: string) value: toFixed(priceInWei), } const tx = is24Auction - ? await encodeTransaction( + ? await encodeContractTransaction( artistAcceptingBidsV2_contract!, artistAcceptingBidsV2_contract!.methods.placeBid(editionNumber), config, ) - : await encodeTransaction( + : await encodeContractTransaction( cANFTMarket_contract!, cANFTMarket_contract!.methods.placeBid(editionNumber, ZERO_ADDRESS), config, diff --git a/packages/mask/src/plugins/CryptoartAI/hooks/usePurchaseCallback.ts b/packages/mask/src/plugins/CryptoartAI/hooks/usePurchaseCallback.ts index 824d94f4f18d..29d2b654f3bd 100644 --- a/packages/mask/src/plugins/CryptoartAI/hooks/usePurchaseCallback.ts +++ b/packages/mask/src/plugins/CryptoartAI/hooks/usePurchaseCallback.ts @@ -1,6 +1,6 @@ import { useAccount, useChainId, useWeb3Connection } from '@masknet/plugin-infra/web3' import { NetworkPluginID, toFixed } from '@masknet/web3-shared-base' -import { encodeTransaction } from '@masknet/web3-shared-evm' +import { encodeContractTransaction } from '@masknet/web3-shared-evm' import { useAsyncFn } from 'react-use' import { useCryptoArtAI_Contract } from './useCryptoArtAI_Contract' @@ -17,7 +17,7 @@ export function usePurchaseCallback(editionNumber: string, priceInWei: number) { from: account, value: toFixed(priceInWei), } - const tx = await encodeTransaction( + const tx = await encodeContractTransaction( knownOriginDigitalAssetV2_contract, knownOriginDigitalAssetV2_contract.methods.purchase(editionNumber), config, diff --git a/packages/mask/src/plugins/Gitcoin/hooks/useDonateCallback.ts b/packages/mask/src/plugins/Gitcoin/hooks/useDonateCallback.ts index 4148be586ade..912802ae954a 100644 --- a/packages/mask/src/plugins/Gitcoin/hooks/useDonateCallback.ts +++ b/packages/mask/src/plugins/Gitcoin/hooks/useDonateCallback.ts @@ -2,7 +2,7 @@ import { useMemo } from 'react' import { useAsyncFn } from 'react-use' import BigNumber from 'bignumber.js' import { FungibleToken, NetworkPluginID, toFixed } from '@masknet/web3-shared-base' -import { ChainId, encodeTransaction, SchemaType, useGitcoinConstants } from '@masknet/web3-shared-evm' +import { ChainId, encodeContractTransaction, SchemaType, useGitcoinConstants } from '@masknet/web3-shared-evm' import { useAccount, useChainId, useWeb3Connection } from '@masknet/plugin-infra/web3' import { useBulkCheckoutContract } from '../contracts/useBulkCheckoutWallet' @@ -51,7 +51,11 @@ export function useDonateCallback(address: string, amount: string, token?: Fungi value, } - const tx = await encodeTransaction(bulkCheckoutContract, bulkCheckoutContract.methods.donate(donations), config) + const tx = await encodeContractTransaction( + bulkCheckoutContract, + bulkCheckoutContract.methods.donate(donations), + config, + ) return connection.sendTransaction(tx) }, [account, amount, token, donations, connection]) } diff --git a/packages/mask/src/plugins/ITO/SNSAdaptor/hooks/useClaimCallback.ts b/packages/mask/src/plugins/ITO/SNSAdaptor/hooks/useClaimCallback.ts index 0e596de1a1f3..b84b4660ef95 100644 --- a/packages/mask/src/plugins/ITO/SNSAdaptor/hooks/useClaimCallback.ts +++ b/packages/mask/src/plugins/ITO/SNSAdaptor/hooks/useClaimCallback.ts @@ -1,6 +1,6 @@ import { useAccount, useChainId, useWeb3Connection } from '@masknet/plugin-infra/web3' import { isSameAddress, NetworkPluginID } from '@masknet/web3-shared-base' -import { encodeTransaction, useITOConstants } from '@masknet/web3-shared-evm' +import { encodeContractTransaction, useITOConstants } from '@masknet/web3-shared-evm' import stringify from 'json-stable-stringify' import { useAsyncFn } from 'react-use' import { checkAvailability } from '../utils/checkAvailability' @@ -32,7 +32,7 @@ export function useClaimCallback(pids: string[], contractAddress: string | undef const config = { from: account, } - const tx = await encodeTransaction(ITO_Contract, ITO_Contract.methods.claim(pids), config) + const tx = await encodeContractTransaction(ITO_Contract, ITO_Contract.methods.claim(pids), config) return connection.sendTransaction(tx) }, [account, chainId, ITO_Contract, stringify(pids), isV1, connection]) } diff --git a/packages/mask/src/plugins/ITO/SNSAdaptor/hooks/useDestructCallback.ts b/packages/mask/src/plugins/ITO/SNSAdaptor/hooks/useDestructCallback.ts index 7ff6700b01fc..d11e1fa11684 100644 --- a/packages/mask/src/plugins/ITO/SNSAdaptor/hooks/useDestructCallback.ts +++ b/packages/mask/src/plugins/ITO/SNSAdaptor/hooks/useDestructCallback.ts @@ -1,6 +1,6 @@ import { useAccount, useChainId, useWeb3Connection } from '@masknet/plugin-infra/web3' import { NetworkPluginID } from '@masknet/web3-shared-base' -import { encodeTransaction } from '@masknet/web3-shared-evm' +import { encodeContractTransaction } from '@masknet/web3-shared-evm' import { useAsyncFn } from 'react-use' import { useITO_Contract } from './useITO_Contract' @@ -18,7 +18,7 @@ export function useDestructCallback(ito_address: string) { from: account, } - const tx = await encodeTransaction(ITO_Contract, ITO_Contract.methods.destruct(id), config) + const tx = await encodeContractTransaction(ITO_Contract, ITO_Contract.methods.destruct(id), config) return connection.sendTransaction(tx) }, [ITO_Contract, connection], diff --git a/packages/mask/src/plugins/ITO/SNSAdaptor/hooks/useMaskClaimCallback.ts b/packages/mask/src/plugins/ITO/SNSAdaptor/hooks/useMaskClaimCallback.ts index b520af5eccdc..8301eef1e8dc 100644 --- a/packages/mask/src/plugins/ITO/SNSAdaptor/hooks/useMaskClaimCallback.ts +++ b/packages/mask/src/plugins/ITO/SNSAdaptor/hooks/useMaskClaimCallback.ts @@ -1,6 +1,6 @@ import { useAccount, useChainId, useWeb3Connection } from '@masknet/plugin-infra/web3' import { NetworkPluginID } from '@masknet/web3-shared-base' -import { encodeTransaction } from '@masknet/web3-shared-evm' +import { encodeContractTransaction } from '@masknet/web3-shared-evm' import { useAsyncFn } from 'react-use' import { useMaskITO_Contract } from './useMaskITO_Contract' @@ -16,7 +16,7 @@ export function useMaskClaimCallback() { const config = { from: account, } - const tx = await encodeTransaction(MaskITO_Contract, MaskITO_Contract.methods.claim(), config) + const tx = await encodeContractTransaction(MaskITO_Contract, MaskITO_Contract.methods.claim(), config) return connection.sendTransaction(tx) }, [account, chainId, MaskITO_Contract, connection]) } diff --git a/packages/mask/src/plugins/PoolTogether/hooks/useDepositCallback.ts b/packages/mask/src/plugins/PoolTogether/hooks/useDepositCallback.ts index e3ca52a27084..701768455d51 100644 --- a/packages/mask/src/plugins/PoolTogether/hooks/useDepositCallback.ts +++ b/packages/mask/src/plugins/PoolTogether/hooks/useDepositCallback.ts @@ -1,6 +1,6 @@ import { useAccount, useChainId, useWeb3Connection } from '@masknet/plugin-infra/web3' import { FungibleToken, NetworkPluginID } from '@masknet/web3-shared-base' -import { ChainId, encodeTransaction, SchemaType } from '@masknet/web3-shared-evm' +import { ChainId, encodeContractTransaction, SchemaType } from '@masknet/web3-shared-evm' import BigNumber from 'bignumber.js' import { useAsyncFn } from 'react-use' import { usePoolTogetherPoolContract } from '../contracts/usePoolTogetherPool' @@ -36,7 +36,7 @@ export function useDepositCallback( value: new BigNumber(token.schema === SchemaType.Native ? amount : 0).toFixed(), } - const tx = await encodeTransaction( + const tx = await encodeContractTransaction( poolContract, poolContract.methods.depositTo(account, amount, controlledToken, referrer), config, diff --git a/packages/mask/src/plugins/RedPacket/SNSAdaptor/hooks/useClaimCallback.ts b/packages/mask/src/plugins/RedPacket/SNSAdaptor/hooks/useClaimCallback.ts index 09f779da6f9a..0a58672556d6 100644 --- a/packages/mask/src/plugins/RedPacket/SNSAdaptor/hooks/useClaimCallback.ts +++ b/packages/mask/src/plugins/RedPacket/SNSAdaptor/hooks/useClaimCallback.ts @@ -2,7 +2,7 @@ import { useChainId, useWeb3Connection } from '@masknet/plugin-infra/web3' import type { HappyRedPacketV1 } from '@masknet/web3-contracts/types/HappyRedPacketV1' import type { HappyRedPacketV4 } from '@masknet/web3-contracts/types/HappyRedPacketV4' import { NetworkPluginID } from '@masknet/web3-shared-base' -import { encodeTransaction } from '@masknet/web3-shared-evm' +import { encodeContractTransaction } from '@masknet/web3-shared-evm' import { useAsyncFn } from 'react-use' import Web3Utils from 'web3-utils' import { useRedPacketContract } from './useRedPacketContract' @@ -21,12 +21,12 @@ export function useClaimCallback(version: number, from: string, id: string, pass // but it is more understandable to declare respectively const tx = version === 4 - ? await encodeTransaction( + ? await encodeContractTransaction( redPacketContract, (redPacketContract as HappyRedPacketV4).methods.claim(id, password, from), config, ) - : await encodeTransaction( + : await encodeContractTransaction( redPacketContract, (redPacketContract as HappyRedPacketV1).methods.claim(id, password, from, Web3Utils.sha3(from)!), config, diff --git a/packages/mask/src/plugins/RedPacket/SNSAdaptor/hooks/useClaimNftRedpacketCallback.ts b/packages/mask/src/plugins/RedPacket/SNSAdaptor/hooks/useClaimNftRedpacketCallback.ts index a686c8434448..4ddcafb8efad 100644 --- a/packages/mask/src/plugins/RedPacket/SNSAdaptor/hooks/useClaimNftRedpacketCallback.ts +++ b/packages/mask/src/plugins/RedPacket/SNSAdaptor/hooks/useClaimNftRedpacketCallback.ts @@ -1,7 +1,7 @@ import { useAccount, useChainId, useWeb3Connection } from '@masknet/plugin-infra/web3' import type { NftRedPacket } from '@masknet/web3-contracts/types/NftRedPacket' import { NetworkPluginID } from '@masknet/web3-shared-base' -import { encodeTransaction } from '@masknet/web3-shared-evm' +import { encodeContractTransaction } from '@masknet/web3-shared-evm' import { useAsyncFn } from 'react-use' import { useNftRedPacketContract } from './useNftRedPacketContract' @@ -34,7 +34,11 @@ export function useClaimNftRedpacketCallback(id: string, totalAmount: number | u chainId, } - const tx = await encodeTransaction(nftRedPacketContract, nftRedPacketContract.methods.claim(...params), config) + const tx = await encodeContractTransaction( + nftRedPacketContract, + nftRedPacketContract.methods.claim(...params), + config, + ) return connection.sendTransaction(tx) }, [id, connection, signedMsg, account, chainId, totalAmount]) } diff --git a/packages/mask/src/plugins/RedPacket/SNSAdaptor/hooks/useCreateCallback.tsx b/packages/mask/src/plugins/RedPacket/SNSAdaptor/hooks/useCreateCallback.tsx index 8f6f29996d77..dd57a2476f68 100644 --- a/packages/mask/src/plugins/RedPacket/SNSAdaptor/hooks/useCreateCallback.tsx +++ b/packages/mask/src/plugins/RedPacket/SNSAdaptor/hooks/useCreateCallback.tsx @@ -1,11 +1,17 @@ import { useCallback } from 'react' import { useAsyncFn } from 'react-use' import Web3Utils from 'web3-utils' +import { omit } from 'lodash-unified' import { useAccount, useChainId, useWeb3Connection, useWeb3 } from '@masknet/plugin-infra/web3' import type { HappyRedPacketV4 } from '@masknet/web3-contracts/types/HappyRedPacketV4' import { FungibleToken, isLessThan, NetworkPluginID, toFixed } from '@masknet/web3-shared-base' -import { ChainId, encodeTransaction, SchemaType, useTokenConstants, decodeEvents } from '@masknet/web3-shared-evm' -import { omit } from 'lodash-unified' +import { + ChainId, + encodeContractTransaction, + SchemaType, + useTokenConstants, + decodeEvents, +} from '@masknet/web3-shared-evm' import { useRedPacketContract } from './useRedPacketContract' export interface RedPacketSettings { @@ -138,7 +144,7 @@ export function useCreateCallback(redPacketSettings: RedPacketSettings, version: gas, } - const tx = await encodeTransaction( + const tx = await encodeContractTransaction( redPacketContract, redPacketContract.methods.create_red_packet(...params), config, diff --git a/packages/mask/src/plugins/RedPacket/SNSAdaptor/hooks/useRefundCallback.ts b/packages/mask/src/plugins/RedPacket/SNSAdaptor/hooks/useRefundCallback.ts index c77012aa468f..c6c59eb27c3c 100644 --- a/packages/mask/src/plugins/RedPacket/SNSAdaptor/hooks/useRefundCallback.ts +++ b/packages/mask/src/plugins/RedPacket/SNSAdaptor/hooks/useRefundCallback.ts @@ -1,6 +1,6 @@ import { useChainId, useWeb3Connection } from '@masknet/plugin-infra/web3' import { NetworkPluginID } from '@masknet/web3-shared-base' -import { encodeTransaction } from '@masknet/web3-shared-evm' +import { encodeContractTransaction } from '@masknet/web3-shared-evm' import { useState } from 'react' import { useAsyncFn } from 'react-use' import { useRedPacketContract } from './useRedPacketContract' @@ -18,7 +18,7 @@ export function useRefundCallback(version: number, from: string, id?: string) { const config = { from, } - const tx = await encodeTransaction(redPacketContract, redPacketContract.methods.refund(id), config) + const tx = await encodeContractTransaction(redPacketContract, redPacketContract.methods.refund(id), config) const hash = await connection.sendTransaction(tx) setIsRefunded(true) return hash diff --git a/packages/mask/src/plugins/Referral/SNSAdaptor/utils/referralFarm.ts b/packages/mask/src/plugins/Referral/SNSAdaptor/utils/referralFarm.ts index 19fd0e328319..8df527027eca 100644 --- a/packages/mask/src/plugins/Referral/SNSAdaptor/utils/referralFarm.ts +++ b/packages/mask/src/plugins/Referral/SNSAdaptor/utils/referralFarm.ts @@ -1,7 +1,7 @@ import { defaultAbiCoder } from '@ethersproject/abi' import { parseUnits } from '@ethersproject/units' import BigNumber from 'bignumber.js' -import { ChainId, createContract, encodeTransaction } from '@masknet/web3-shared-evm' +import { ChainId, createContract, encodeContractTransaction } from '@masknet/web3-shared-evm' import type Web3 from 'web3' import { AbiItem, asciiToHex, padRight, toWei } from 'web3-utils' import ReferralFarmsV1ABI from '@masknet/web3-contracts/abis/ReferralFarmsV1.json' @@ -57,7 +57,7 @@ export async function runCreateERC20PairFarm( if (isNeededGrantPermission && rewardTokenContract) { const maxAllowance = new BigNumber(toWei('10000000000000', 'ether')) - const approveTx = await encodeTransaction( + const approveTx = await encodeContractTransaction( rewardTokenContract, rewardTokenContract.methods.approve(farmsAddr, maxAllowance), config, @@ -80,7 +80,7 @@ export async function runCreateERC20PairFarm( : [] if (!farms) return - const tx = await encodeTransaction( + const tx = await encodeContractTransaction( farms, farms.methods.increaseReferralFarm(rewardTokenDefn, referredTokenDefn, totalFarmRewardUint128, metaState), config, @@ -145,7 +145,7 @@ export async function adjustFarmRewards( ] if (!farms) return - const tx = await encodeTransaction( + const tx = await encodeContractTransaction( farms, farms.methods.configureMetastate(rewardTokenDefn, referredTokenDefn, metaState), config, diff --git a/packages/mask/src/plugins/dHEDGE/hooks/useInvestCallback.ts b/packages/mask/src/plugins/dHEDGE/hooks/useInvestCallback.ts index 09e1c9ba595c..ebe15d59e376 100644 --- a/packages/mask/src/plugins/dHEDGE/hooks/useInvestCallback.ts +++ b/packages/mask/src/plugins/dHEDGE/hooks/useInvestCallback.ts @@ -1,7 +1,7 @@ +import { useAsyncFn } from 'react-use' import { useAccount, useChainId, useWeb3Connection } from '@masknet/plugin-infra/web3' import { FungibleToken, NetworkPluginID, toFixed } from '@masknet/web3-shared-base' -import { ChainId, encodeTransaction, SchemaType } from '@masknet/web3-shared-evm' -import { useAsyncFn } from 'react-use' +import { ChainId, encodeContractTransaction, SchemaType } from '@masknet/web3-shared-evm' import { useDHedgePoolV1Contract, useDHedgePoolV2Contract } from '../contracts/useDHedgePool' import { Pool, PoolType } from '../types' @@ -28,8 +28,12 @@ export function useInvestCallback(pool: Pool | undefined, amount: string, token? const tx = pool?.poolType === PoolType.v1 - ? await encodeTransaction(poolV1Contract, poolV1Contract.methods.deposit(amount), config) - : await encodeTransaction(poolV2Contract, poolV2Contract.methods.deposit(token.address, amount), config) + ? await encodeContractTransaction(poolV1Contract, poolV1Contract.methods.deposit(amount), config) + : await encodeContractTransaction( + poolV2Contract, + poolV2Contract.methods.deposit(token.address, amount), + config, + ) return connection.sendTransaction(tx) }, [pool, account, amount, token, connection]) diff --git a/packages/plugins/EVM/src/state/Connection/connection.ts b/packages/plugins/EVM/src/state/Connection/connection.ts index 8188a68f4164..ce8ff0ce94ab 100644 --- a/packages/plugins/EVM/src/state/Connection/connection.ts +++ b/packages/plugins/EVM/src/state/Connection/connection.ts @@ -34,6 +34,7 @@ import { getEthereumConstants, isValidAddress, resolveIPFSLinkFromURL, + encodeTransaction, } from '@masknet/web3-shared-evm' import { Account, @@ -839,10 +840,10 @@ class Connection implements EVM_Connection { { method: EthereumMethodType.ETH_CALL, params: [ - { + encodeTransaction({ ...transaction, ...options.overrides, - }, + }), 'latest', ], }, @@ -856,10 +857,10 @@ class Connection implements EVM_Connection { { method: EthereumMethodType.ETH_SEND_TRANSACTION, params: [ - { + encodeTransaction({ ...transaction, ...options.overrides, - }, + }), ], }, options, diff --git a/packages/web3-shared/evm/utils/contract.ts b/packages/web3-shared/evm/utils/contract.ts index 0ec0d9d7a33e..db5966518bf0 100644 --- a/packages/web3-shared/evm/utils/contract.ts +++ b/packages/web3-shared/evm/utils/contract.ts @@ -1,6 +1,6 @@ import type Web3 from 'web3' import { AbiItem, toHex } from 'web3-utils' -import { pick } from 'lodash-unified' +import { identity, pickBy } from 'lodash-unified' import type { BaseContract, NonPayableTransactionObject, @@ -10,16 +10,39 @@ import type { import type { Transaction } from '../types' import { isValidAddress } from './address' -export async function encodeTransaction( +export function encodeTransaction(transaction: Transaction): PayableTx & { + maxPriorityFeePerGas?: string + maxFeePerGas?: string +} { + return pickBy( + { + from: transaction?.from as string | undefined, + to: transaction.to, + value: transaction?.value ? toHex(transaction.value) : undefined, + gas: transaction?.gas ? toHex(transaction.gas) : undefined, + gasPrice: transaction?.gasPrice ? toHex(transaction.gasPrice) : undefined, + maxPriorityFeePerGas: transaction?.maxPriorityFeePerGas + ? toHex(transaction.maxPriorityFeePerGas) + : undefined, + maxFeePerGas: transaction?.maxFeePerGas ? toHex(transaction.maxFeePerGas) : undefined, + data: transaction.data, + nonce: transaction?.nonce ? toHex(transaction.nonce) : undefined, + chainId: transaction?.chainId ? toHex(transaction.chainId) : undefined, + }, + identity, + ) +} + +export async function encodeContractTransaction( contract: BaseContract, transaction: PayableTransactionObject | NonPayableTransactionObject, overrides?: Partial, ) { - const encoded: PayableTx & { + const tx: PayableTx & { maxPriorityFeePerGas?: string maxFeePerGas?: string } = { - from: (overrides?.from as string) ?? contract.defaultAccount ?? undefined, + from: (overrides?.from as string | undefined) ?? contract.defaultAccount ?? '', to: contract.options.address, data: transaction.encodeABI(), value: overrides?.value ? toHex(overrides.value) : undefined, @@ -31,11 +54,14 @@ export async function encodeTransaction( chainId: overrides?.chainId ? toHex(overrides.chainId) : undefined, } - if (!encoded.gas) { - encoded.gas = await transaction.estimateGas(pick(encoded, ['from', 'value'])) + if (!tx.gas) { + tx.gas = await transaction.estimateGas({ + from: tx.from as string | undefined, + value: tx.value, + }) } - return encoded + return encodeTransaction(tx) } export async function sendTransaction( @@ -44,7 +70,7 @@ export async function sendTransaction( overrides?: Partial, ) { if (!contract || !transaction) throw new Error('Invalid contract or transaction.') - const tx = await encodeTransaction(contract, transaction, overrides) + const tx = await encodeContractTransaction(contract, transaction, overrides) const receipt = await transaction.send(tx as PayableTx) return receipt?.transactionHash ?? '' }