13 releases (4 breaking)
0.6.0 | May 6, 2021 |
---|---|
0.4.0 | Apr 14, 2021 |
0.2.0 | Mar 11, 2021 |
0.1.4 | Mar 30, 2021 |
0.0.8 | Dec 29, 2020 |
#47 in #rollup
31 downloads per month
665KB
81 lines
Contains (ELF exe/lib, 330KB) build/validator_log, (ELF exe/lib, 310KB) build/generator, (ELF exe/lib, 315KB) build/generator_log, (ELF exe/lib, 325KB) build/validator
Godwoken polyjuice
An Ethereum compatible backend for Godwoken rollup framework. It include generator and validator implementations.
Features
- All op codes
- Value transfer
- pre-compiled contracts
- ecrecover
- sha256hash
- ripemd160hash
- dataCopy
- bigModExp
- bn256AddIstanbul
- bn256ScalarMulIstanbul
- bn256PairingIstanbul (performance issue)
- blake2F
Data Structures
Polyjuice arguments
header : [u8; 8] (header[0] = 0xff,
header[1] = 0xff,
header[2] = 0xff,
header[3..7] = "POLY"
header[7] = call_kind { 0: CALL, 3: CREATE })
gas_limit : u64 (little endian)
gas_price : u128 (little endian)
value : u128 (little endian)
input_size : u32 (little endian)
input_data : [u8; input_size] (input data)
Every polyjuice argument fields must been serialized one by one and put into godwoken RawL2Transaction.args
for polyjuice to read. If the input_data
have 56 bytes, then the serialized data size is 8 + 8 + 16 + 16 + 4 + 56 = 108
bytes.
Creator account script
code_hash: polyjuice_validator_type_script_hash
hash_type: type
args:
rollup_type_hash : [u8; 32]
sudt_id : u32 (little endian, the token id)
Polyjuice creator account is a godwoken account for creating polyjuice contract account. This account can only been created by meta contract, and the account id is used as the chain id in polyjuice. The sudt_id
field in script args is the sudt token current polyjuice instance bind to.
Normal contract account script
code_hash: polyjuice_validator_type_script_hash
hash_type: type
args:
rollup_type_hash : [u8; 32]
creator_account_id : u32 (little endian, also chain id, and for reading 'sudt_id' from creator account script)
sender_account_id : u32 (little endian)
sender_nonce : u32 (little endian)
The polyjuice contract account created in polyjuice by CREATE
call kind or op code.
Create2 contract account script
code_hash: polyjuice_validator_type_script_hash
hash_type: type
args:
rollup_type_hash : [u8; 32]
creator_account_id : u32 (little endian, also chain id, and for reading 'sudt_id' from creator account script)
special_byte : u8 (value is '0xff', refer to ethereum)
sender_account_id : u32 (little endian)
create2_salt : [u8; 32] (create2 salt)
init_code_hash : [u8; 32] (keccak256(init_code))
The polyjuice contract account created in polyjuice by CREATE2
op code.
Dependencies
~0.4–1.5MB
~19K SLoC