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

[pallet-revive] do not trap the caller on instantiations with duplicate contracts #7414

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

Conversation

xermicus
Copy link
Member

@xermicus xermicus commented Jan 31, 2025

This PR changes the behavior of instantiate when the resulting contract address already exists (because the caller tried to instantiate the same contract with the same salt multiple times): Instead of trapping the caller, return an error code.

Solidity allows catching this, which doesn't work if we are trapping the caller. For example, the change makes the following snippet work:

try new Foo{salt: hex"00"}() returns (Foo) {
    // Instantiation was successful (contract address was free and constructor did not revert)
} catch {
    // This branch is expected to be taken if the instantiation failed because of a duplicate salt
}

revive PR: paritytech/revive#188

@xermicus xermicus added R0-silent Changes should not be mentioned in any release notes T7-smart_contracts This PR/Issue is related to smart contracts. labels Jan 31, 2025
@xermicus xermicus requested review from pgherveou and athei January 31, 2025 16:43
@xermicus
Copy link
Member Author

/cmd prdoc --audience runtime_dev --bump major

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
R0-silent Changes should not be mentioned in any release notes T7-smart_contracts This PR/Issue is related to smart contracts.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant