I know a lot of dApp developers want to be more agile with their deployments but you shouldn't be changing the contract terms after the fact.
I know a lot of dApp developers want to be more agile with their deployments but you shouldn't be changing the contract terms after the fact.
Exactly. The contract having an "owner" other than the parties who agreed to it is just wrong. Any real-world contract can be changed by mutual consent of the parties. The company that printed a contract form can't change a signed copy of that form.
"An agreement to agree is not an agreement" - legal maxim.
although one of the proposed solutions involves having the contract maintain a list of owners. The list being maintained by ... the owner...<doh>:
https://github.com/christianlundkvist/simple-multisig/blob/m...
It seems to me that you'd need to extend Ethereum such that contracts were created with multiple owners, by having each owner sign the creation txn. Once created, contracts could subsequently permit additions to the owner list by quorum logic implemented within the contract.
That retains the control-freak EULA approach common to web design. The site is in charge, and you peons will take what we give you.
Basically, use a proxy contract with some form of governance built in to it. The governance is comprised of all Dapp users/token holders/parties/whatever. Using this system, an upgrade can be proposed. The upgrade is a hash of the new contract's EVM bytecode. Then, there are X days for all parties to vote, until Y% approve it (of course, deny or not getting enough votes means nothing happens). Once approved, someone must deploy the new contract code to the blockchain. After the new contract has an address, the proxy contract gets a "finalization" command with the new address. The proxy contract then reads the bytecode of the new contract, hashes it, and compares the hash to the voted on hash. If it matches, then it points to this new contract. Depending on the details, there might be a migration command sent to the old contract, telling it to send coins, state, etc to the new contract and to self destruct. If there are no coins held by the contract, then the state and old code can remain on the blockchain for people who disagreed... Of course, this is stupidly difficult to fully realize in Solidity, but Ethereum has all the features necessary in the EVM. I personally think the faster we can move away from EVM and Solidity, the better off the smart contract world will be.
Since this isn't very likely, it strongly implies the smart contract model isn't a good one for writing software.
[1]: https://www.reddit.com/r/ethereum/comments/57ork1/ive_made_a...