mirror of https://github.com/status-im/EIPs.git
93 lines
3.1 KiB
Markdown
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
|
||
|
|
||
|
---------------------------------------------------
|
||
|
|