# Open Discussion: Upgradable Contracts *These are collaborative notes from the open discussion round about "Upgradable Contracts" at the [Solidity Summit 2020](https://solidity-summit.ethereum.org/).* ```solidity contract c { uint a; uint b @1; uint c @3; struct X { uint a; uint b storageoffset 2; } } ``` ```solidity contract c { uint a; addedlater { uint b; uint c; } struct X { uint a; addedlater { uint b; } } } ``` ```solidity= @id("some_name") contract c { @id("some_variable") uint a; uint b; uint c; @id("some_struct") struct X { uint a; } } ``` https://github.com/ethereum/solidity/issues/597#issuecomment-392107980 suggested something like "modifiers": ```solidity uint a storage("some_variable"); ``` https://github.com/ethereum/solidity/issues/597#issuecomment-406582568 suggested sections/namespaces: ```solidity contract MyContract { storage("some-collection") { uint foo; uint bar; } storage("other-collection") { mapping (uint => bool) qux; MyStruct baz; } } ``` ## Constructors **TODO**: Create an issue on this How to pass a constructor code to the proxy? - Generate constructor as compiler output - Note that it's not possible to grab the constructor bytecode from the deployBytecode since the ctor argument positions are hardcoded, so a different-length runtime code would yield differ - Allow on-chain to define the constructor code - Support on-chain factory that can create a proxy and run the constructor code from a different implementation