EIPs/preEIPS/poc6.md

93 lines
3.1 KiB
Markdown

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