EIPs/preEIPS/poc6.md

3.1 KiB

POC-7 https://ethereum.etherpad.mozilla.org/14? Latest changes:


Stateless contracts: Additional opcode: 0xf4: CALLSTATELESS Calls self, but grabbing the code from the TO argument instead of from one's own address DONE PY,C++, go/Java


0x3b EXTCODESIZE 0x3c EXTCODECOPY like CODECOPY, CODESIZE but takes an additional parameter at beginning (top of stack) containing address from which to copy. DONE C++, Go, Java,JS


  • zero-size memory reads/writes do not lead to a size increase for fee purposes

DONE PY,C++, go, Java,JS


New opcodes:

0x80...8f: DUP1 ... DUP16 0x90...9f: SWAP1...SWAP16 (for LLVM cross-compilation) 0x14: ADDMOD 0x15: MULMOD (to make ecrecover easier)

0x51, 0x52 are INVALID.

DONE C++/GO/PY/Java,JS


0xf3: POST (same as call, except 5 arguments in and 0 arguments out, and instead of immediately calling it adds the call to a postqueue, to be executed after everything else (including prior-created posts) within the scope of that transaction execution is executed)

Transaction finalisation:

  • Create contract if transaction was contract-creation
  • Keep executing earliest POST while postqueue isn't empty.
  • Refund unused gas to caller (this includes gas unused from POSTs) & give fees to miner.
  • Execute SUICIDEs.

DONE C++/GO/PY,JS


New GHOST protocol

• A block can contain as uncles headers which satisfy all of the following criteria: ◦ They are valid headers (not necessarily valid blocks) ◦ Their parent is a kth generation ancestor for k in {2, 3, 4, 5, 6, 7} ◦ They were not uncles of the kth generation ancestor for k in {1, 2, 3, 4, 5, 6} • The uncle reward is increased to 15/16x the main block reward • The nephew reward (ie. reward for including an uncle) is set to 1/32x the main block reward • The target block time is 12s (ie. s/42/9/g in the diff adjustment algo) • >= 5 -> increase • <= 4 -> reduce

SUGGESTION: target block time 4s (eg. >= 3 increase <= 2 reduce) as a temporary stress test

DONE C++/PY/node.js, go/Java


for blocks, block.hash = sha3(rlp.encode(block.header))

for accounts which don't have code, the code is "" and the codehash is "" (instead of sha3(()) as in PoC5)

for contract-creation transactions, address is empty rather than 000000000000000...

DONE C++/PY, go/Java/node.js


CALL, CREATE, CALLDATACOPY, etc should take memory indices as given, and not as mod 2^64 (this could just be implemented as a <=2^64 error check in the code, since using 2^64 memory will be prohibitively expensive)

DONE C++/PY, Go/Java


PoC-6 Networking (parallel downloads)

DONE C++, Go, node.js/Java