maxPriorityFee param, tests fix
This commit is contained in:
parent
21d5103021
commit
d36a8fec96
|
@ -32,11 +32,9 @@ export interface TxManagerConfig {
|
|||
ESTIMATE_GAS?: boolean
|
||||
THROW_ON_REVERT?: boolean
|
||||
BLOCK_GAS_LIMIT?: number
|
||||
PRIORITY_FEE_GWEI?: number
|
||||
BASE_FEE_RESERVE_PERCENTAGE?: number
|
||||
ENABLE_EIP1559?: boolean
|
||||
DEFAULT_PRIORITY_FEE?: number
|
||||
PRIORITY_FEE_RESERVE_PERCENTAGE?: number
|
||||
}
|
||||
|
||||
export interface TxManagerParams {
|
||||
|
@ -80,7 +78,7 @@ export type MessageEvents = {
|
|||
}
|
||||
type TEventEmitter = typeof EventEmitter
|
||||
|
||||
declare interface TxManagerEventEmmiter extends TEventEmitter {
|
||||
declare interface TxManagerEventEmitter extends TEventEmitter {
|
||||
on<U extends TxManagerEvents>(event: U, listener: MessageEvents[U]): this
|
||||
|
||||
on(event: 'confirmations', listener: MessageEvents['confirmations']): Promise<TransactionReceipt>
|
||||
|
@ -92,7 +90,7 @@ export class Transaction {
|
|||
manager: TxManager
|
||||
tx: TransactionData
|
||||
private _promise: typeof PromiEvent
|
||||
private _emitter: TxManagerEventEmmiter
|
||||
private _emitter: TxManagerEventEmitter
|
||||
executed: boolean
|
||||
retries: number
|
||||
currentTxHash: string
|
||||
|
@ -100,7 +98,7 @@ export class Transaction {
|
|||
|
||||
constructor(tx: TransactionData, manager: TxManager)
|
||||
|
||||
send(): TxManagerEventEmmiter
|
||||
send(): TxManagerEventEmitter
|
||||
|
||||
replace(tx: TransactionData): Promise<void>
|
||||
|
||||
|
@ -120,8 +118,6 @@ export class Transaction {
|
|||
|
||||
private _hasError(message: string, errors: (string | RegExp)[]): boolean
|
||||
|
||||
private _getGasPrice(type: 'instant' | 'fast' | 'normal' | 'slow'): Promise<string>
|
||||
|
||||
private _getLastNonce(): Promise<number>
|
||||
|
||||
private _getGasParams(): Promise<GasParams>
|
||||
|
|
|
@ -72,21 +72,27 @@ class Transaction {
|
|||
|
||||
if (!tx.gasLimit) {
|
||||
const estimatedGasLimit = await this._estimateGas(tx)
|
||||
tx.gasLimit = min(
|
||||
estimatedGasLimit.mul(Math.floor(this.manager.config.GAS_LIMIT_MULTIPLIER * 100)).div(100),
|
||||
this.manager.config.BLOCK_GAS_LIMIT,
|
||||
)
|
||||
}
|
||||
const gasLimit = estimatedGasLimit
|
||||
.mul(Math.floor(this.manager.config.GAS_LIMIT_MULTIPLIER * 100))
|
||||
.div(100)
|
||||
|
||||
tx.gasLimit = this.manager.config.BLOCK_GAS_LIMIT
|
||||
? min(gasLimit, this.manager.config.BLOCK_GAS_LIMIT)
|
||||
: gasLimit
|
||||
}
|
||||
// TODO: check if the new tx params is valid
|
||||
tx.chainId = this.tx.chainId
|
||||
tx.nonce = this.tx.nonce // can be different from `this.manager._nonce`
|
||||
|
||||
// start no less than current tx gas params
|
||||
if (this.tx.gasPrice) {
|
||||
tx.gasPrice = max(this.tx.gasPrice, tx.gasPrice || 0)
|
||||
} else {
|
||||
} else if (this.tx.maxFeePerGas) {
|
||||
tx.maxFeePerGas = max(this.tx.maxFeePerGas, tx.maxFeePerGas || 0)
|
||||
tx.maxPriorityFeePerGas = max(this.tx.maxPriorityFeePerGas, tx.maxPriorityFeePerGas || 0)
|
||||
} else {
|
||||
const gasParams = await this._getGasParams()
|
||||
tx = { ...tx, ...gasParams }
|
||||
}
|
||||
|
||||
this.tx = { ...tx }
|
||||
|
@ -418,9 +424,15 @@ class Transaction {
|
|||
*/
|
||||
async _getGasParams() {
|
||||
const maxGasPrice = parseUnits(this.manager.config.MAX_GAS_PRICE.toString(), 'gwei')
|
||||
const gasParams = await this.manager._gasPriceOracle.getTxGasParams()
|
||||
if (gasParams.gasPrice) gasParams.gasPrice = min(gasParams.gasPrice, maxGasPrice)
|
||||
else gasParams.maxFeePerGas = min(gasParams?.maxFeePerGas, maxGasPrice)
|
||||
const gasParams = await this.manager._gasPriceOracle.getTxGasParams({
|
||||
isLegacy: !this.manager.config.ENABLE_EIP1559,
|
||||
})
|
||||
if (gasParams.gasPrice) {
|
||||
gasParams.gasPrice = min(gasParams.gasPrice, maxGasPrice)
|
||||
} else {
|
||||
gasParams.maxFeePerGas = min(gasParams?.maxFeePerGas, maxGasPrice)
|
||||
gasParams.maxPriorityFeePerGas = min(gasParams?.maxPriorityFeePerGas, maxGasPrice)
|
||||
}
|
||||
gasParams.type = gasParams?.maxFeePerGas ? 2 : 0
|
||||
return gasParams
|
||||
}
|
||||
|
|
|
@ -57,54 +57,68 @@ const getOptions = async () => {
|
|||
return { network, provider, options }
|
||||
}
|
||||
|
||||
const createTx = async transaction => {
|
||||
const tx = this.manager.createTx(transaction)
|
||||
const sendTx = async tx => {
|
||||
const receipt = await tx
|
||||
.send()
|
||||
.on('transactionHash', hash => console.log('hash', hash))
|
||||
.on('mined', receipt => console.log('Mined in block', receipt.blockNumber))
|
||||
.on('confirmations', confirmations => console.log('confirmations', confirmations))
|
||||
console.log('receipt', receipt)
|
||||
return receipt
|
||||
}
|
||||
|
||||
const transactionTests = () => {
|
||||
it('should work legacy tx', async () => {
|
||||
await createTx(tx1)
|
||||
const tx = this.manager.createTx(tx1)
|
||||
const receipt = await sendTx(tx)
|
||||
receipt.type.should.equal(0)
|
||||
})
|
||||
|
||||
it('should work eip-1559 tx', async () => {
|
||||
await createTx(tx5)
|
||||
const tx = this.manager.createTx(tx5)
|
||||
const receipt = await sendTx(tx)
|
||||
receipt.type.should.equal(2)
|
||||
})
|
||||
|
||||
it('should fetch gas params', async () => {
|
||||
await createTx(tx4)
|
||||
const tx = this.manager.createTx(tx4)
|
||||
await sendTx(tx)
|
||||
})
|
||||
|
||||
it('should bump gas params', async () => {
|
||||
await createTx(tx2)
|
||||
const tx = this.manager.createTx(tx2)
|
||||
await sendTx(tx)
|
||||
})
|
||||
|
||||
it('should cancel', async () => {
|
||||
await createTx(tx2)
|
||||
const tx = this.manager.createTx(tx3)
|
||||
setTimeout(() => tx.cancel(), 1000)
|
||||
await sendTx(tx)
|
||||
})
|
||||
|
||||
it('should replace', async () => {
|
||||
await createTx(tx2)
|
||||
const tx = this.manager.createTx(tx3)
|
||||
setTimeout(() => tx.replace(tx4), 1000)
|
||||
const receipt = await sendTx(tx)
|
||||
receipt.to.should.equal(tx4.to)
|
||||
})
|
||||
|
||||
it('should increase nonce', async () => {
|
||||
const currentNonce = await this.manager._wallet.getTransactionCount('latest')
|
||||
this.manager._nonce = currentNonce - 1
|
||||
await createTx(tx4)
|
||||
const tx = this.manager.createTx(tx4)
|
||||
await sendTx(tx)
|
||||
})
|
||||
|
||||
it('should disable eip-1559 transactions', async () => {
|
||||
this.manager.config.ENABLE_EIP1559 = false
|
||||
await createTx(tx3)
|
||||
const tx = this.manager.createTx(tx3)
|
||||
const receipt = await sendTx(tx)
|
||||
receipt.type.should.equal(0)
|
||||
this.manager.config.ENABLE_EIP1559 = true
|
||||
})
|
||||
|
||||
it('should send multiple txs', async () => {
|
||||
it.skip('should send multiple txs', async () => {
|
||||
const genTx = value => ({
|
||||
value,
|
||||
to: '0x0039F22efB07A647557C7C5d17854CFD6D489eF3',
|
||||
|
|
Loading…
Reference in New Issue