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 ---------------------------------------------------