Skip to main content
I misunderstood the situation so I had to revise a bit
Source Link
Rohan Nero
  • 1.7k
  • 2
  • 8
  • 29

The functioncontract you are calling is on the deployed contractinteracting with is a setup()Gnosis Safe contract, however this function can neverits intended purpose isn't to be directly called dueusing its data and logic, instead it is supposed to be used as a template or master copy that proxy contracts can use. This means the threshold being set insidelogic on the constructor like you mentionedcontract is what it's used for, not its actual data/variables.

You mention the contract being newly created butQuote taken from the creation transaction forline directly above the shared Goerli etherscan link shows it being over 800 days oldGnosisSafe constructor:

This is an unusable Safe, perfect for the singleton

This constructor ensures that this contract can only be used as a master copy for Proxy contracts

However, even if you wereSince it's intended to deploy a new version of this contract just for yourselfbe used with delegatecall, you still would neveractually be ableaccessing your contract's threshold variable as opposed to callthe setup()GnosisSafe's, which means as long as theyou haven't already initialized your proxy contract logic remains, the samecall shouldn't fail.

Depending on your preference and what you are actually trying to do, you may want to deploy a new version of this existingproxy contract but rethink how you interact with it, i.e. not callingthat points to the setup()GnosisSafe, or as its implementation contract as intended; Or you may just want a different contract altogether from the one you are trying to use if you don't want to interact with your logic via an external delegatecall.

ThereAlso, there are multiplemany different options for existing multi-sig contracts you can use, here is a link to a list of resources for further reaingreading.

The function you are calling is on the deployed contract is setup(), however this function can never be called due to the threshold being set inside the constructor like you mentioned.

You mention the contract being newly created but the creation transaction for the shared Goerli etherscan link shows it being over 800 days old:

This is an unusable Safe, perfect for the singleton

However, even if you were to deploy a new version of this contract just for yourself, you still would never be able to call setup() as long as the contract logic remains the same.

Depending on what you are actually trying to do, you may want to deploy a new version of this existing contract but rethink how you interact with it, i.e. not calling setup(), or you may just want a different contract altogether from the one you are trying to use.

There are multiple different options for existing multi-sig contracts you can use, here is a link to a list of resources for further reaing.

The contract you are interacting with is a Gnosis Safe contract, its intended purpose isn't to be directly called using its data and logic, instead it is supposed to be used as a template or master copy that proxy contracts can use. This means the logic on the contract is what it's used for, not its actual data/variables.

Quote taken from the line directly above the GnosisSafe constructor:

This constructor ensures that this contract can only be used as a master copy for Proxy contracts

Since it's intended to be used with delegatecall, you would actually be accessing your contract's threshold variable as opposed to the GnosisSafe's, which means as long as you haven't already initialized your proxy contract, the call shouldn't fail.

Depending on your preference and what you are trying to do, you may want to deploy a new proxy contract that points to the GnosisSafe as its implementation contract as intended; Or you may just want a different contract altogether from the one you are trying to use if you don't want to interact with your logic via an external delegatecall.

Also, there are many different options for existing multi-sig contracts you can use, here is a link to a list of resources for further reading.

Source Link
Rohan Nero
  • 1.7k
  • 2
  • 8
  • 29

The function you are calling is on the deployed contract is setup(), however this function can never be called due to the threshold being set inside the constructor like you mentioned.

You mention the contract being newly created but the creation transaction for the shared Goerli etherscan link shows it being over 800 days old:

This is an unusable Safe, perfect for the singleton

However, even if you were to deploy a new version of this contract just for yourself, you still would never be able to call setup() as long as the contract logic remains the same.

Depending on what you are actually trying to do, you may want to deploy a new version of this existing contract but rethink how you interact with it, i.e. not calling setup(), or you may just want a different contract altogether from the one you are trying to use.

There are multiple different options for existing multi-sig contracts you can use, here is a link to a list of resources for further reaing.