Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support EIP-1559 transaction #177

Open
wants to merge 2 commits into
base: main
Choose a base branch
from
Open

Conversation

samuerio
Copy link

@samuerio samuerio commented Jun 2, 2023

Allows creation of EIP-1559 deployment transaction if the blockchain supports EIP-1559.

Note: Filecoin network only supports EIP-1559 transaction and does not support legacy transaction. This feature is added for adaptation.

@FroghubMan FroghubMan mentioned this pull request Jun 2, 2023
})
const provider = new ethers.providers.JsonRpcProvider(process.env.RPC)
const signer = ethers.Wallet.fromMnemonic(process.env.MNEMONIC!!).connect(provider)
//if the network supports EIP-1155 transaction, use the EIP-1155 transaction type
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

the comment seems to mention the incorrect eip number

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

thank you for your review, it's fixed now.

@Uxio0 Uxio0 requested a review from rmeissner June 2, 2023 10:18
const signer = ethers.Wallet.fromMnemonic(process.env.MNEMONIC!!).connect(provider)
//if the network supports EIP-1559 transaction, use the EIP-1559 transaction type
const tx = await signer.populateTransaction({
nonce, gasPrice, gasLimit, value, data, chainId
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

How are you using EIP-1559 here? You haven't specified the transaction type and you are not using the maxPriorityFeePerGas or maxBaseFeePerGas here, right

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I was also confused for a while, but the key here seems to be using the .populateTransaction method that adds all the necessary fields, including EIP-1559 gas fields. So the comment could be better 100%.

Also, possibly we'd need to support multiple transaction types because, like networks only supporting eip-1559 transactions, there are networks that only support legacy ones.

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I see, didn't know the populateTransaction method does that by default

Copy link

@FroghubMan FroghubMan Jun 3, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The function sendTransaction in ethers.js' abstract Signer is as follows:

// Populates all fields in a transaction, signs it and sends it to the network
async sendTransaction(transaction: Deferrable<TransactionRequest>): Promise<TransactionResponse> {
    this._checkProvider("sendTransaction");
    const tx = await this.populateTransaction(transaction);
    const signedTx = await this.signTransaction(tx);
    return await this.provider.sendTransaction(signedTx);
}

Before signing the transaction, it calls the populateTransaction method to fill in the relevant transaction fields, including the identification of the transaction type. If the type field is not provided, it checks whether the current chain supports EIP-1559. If it does, it populates the maxFeePerGas and maxPriorityFeePerGas fields and generates an EIP-1559 transaction. Otherwise, it generates a Legacy Transaction.

The current adaptation is made to align with the default behavior of the ethers.js library in order to support all EVM-compatible chains.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

sendTransaction does not work with all clients, and therefore should not be static. The main issue I have with doing any of these integrations is whether or not a joint library should be created to merge both ethers and ethers-quorum together.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I apologize for missing my point. There are several methods of doing things to accomplish the goals in mind, and where I really was going with my comment was that the use of: populateTransaction should not be allowed if there are not corresponding calls in the other main clients.

@samuerio
Copy link
Author

@rmeissner We would like to request your review on our PR as your feedback would be greatly appreciated 😄

@AlcibiadesCleinias
Copy link

AlcibiadesCleinias commented Mar 13, 2024

Hi, @rmeissner, @rmeissner I kindly want to up this thread, as I and my colleagues from FluenceLabs want to manage our contract deployment and contract calls based on chains without legacy transaction support (like Calibration and Filecoin mainnet).

Also, I want to note, that it seems that for now I and my colleagues will go with our-self fork, but I am ready to contribute to this PR to be delivered to main

@defi-oracle
Copy link

defi-oracle commented Mar 14, 2024 via email

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

6 participants