31

When Serenity comes around, the network will undergo many changes, some of which may have unexpected consequences on existing Smart Contracts. How can I plan so that I am best prepared to take advantage of new features in Serenity and least likely to see unexpected bugs and security flaws?

36

It's not certain yet, but:

  1. Do NOT rely on very fine-grained calculations of current gas costs. Assume that gas costs of contract calling may go up or down by up to an order of magnitude in a future hard fork.
  2. If creating contracts in assembly (ie. not serpent, solidity or LLL), do NOT use dynamic JUMP/JUMPI operations (ie. every JUMP/JUMPI should be immediately preceded by a PUSH value specifying the exact point in the code to jump to)
  3. Do NOT do anything important based on the DIFFICULTY opcode.
  4. Do NOT rely on the assumption of a block time between 12-20 seconds.
  5. Do NOT assume that BLOCKHASHes will be a reliable source of randomness.
  6. Do NOT assume that tx.origin will continue to be usable or meaningful.
  7. Do NOT assume that opcodes other than 0xfe will continue to be invalid.

It's not certain that all of those steps will be required, or that they will be sufficient, but that should get you most of the way there.

  • So if tx.origin is not meaningful, will msg.sender still be? – Tjaden Hess Jan 21 '16 at 8:14
  • 2
    Yes, msg.sender will remain meaningful. – Vitalik Buterin Jan 21 '16 at 11:56
  • 1
    It's likely that we'll make the entry point something other than 0x0 if we see many applications using 0x0 as a stand-in for "no account yet exists in this slot" to the point where making 0x0 the entry point compromises security. – Vitalik Buterin Feb 5 '16 at 21:06
  • 1
    @VitalikButerin What is a reliable source of the initiator of a call chain going forward if not tx.origin? – Shiri May 29 '18 at 10:58
  • 1
    @VitalikButerin how do we prevent contracts from becoming recipients of value, i.e., malicious fallback function throws in send patterns, without requiring tx.origin == message sender? – GViz Sep 18 '18 at 0:33

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.