forked from DecentralizedClimateFoundation/DCIPs
36 lines
740 B
Python
36 lines
740 B
Python
|
#!/usr/bin/env python
|
||
|
from dataclasses import dataclass
|
||
|
from hashlib import sha256 as SHA256
|
||
|
|
||
|
DEPOSIT_CONTRACT_DEPTH = 32
|
||
|
Hash32 = bytes
|
||
|
Root = bytes
|
||
|
uint64 = int
|
||
|
BLSPubkey = bytes
|
||
|
Bytes32 = bytes
|
||
|
Gwei = uint64
|
||
|
BLSSignature = bytes
|
||
|
|
||
|
@dataclass
|
||
|
class DepositData:
|
||
|
pubkey: BLSPubkey
|
||
|
withdrawal_credentials: Bytes32
|
||
|
amount: Gwei
|
||
|
signature: BLSSignature
|
||
|
|
||
|
@dataclass
|
||
|
class Eth1Data:
|
||
|
deposit_root: Root
|
||
|
deposit_count: uint64
|
||
|
block_hash: Hash32
|
||
|
|
||
|
def sha256(x) -> Hash32:
|
||
|
return SHA256(x).digest()
|
||
|
def to_le_bytes(i: int) -> bytes:
|
||
|
return i.to_bytes(32, byteorder='little')
|
||
|
|
||
|
zerohashes = [b'\x00' * 32]
|
||
|
for i in range(1, DEPOSIT_CONTRACT_DEPTH):
|
||
|
zerohashes.append(sha256(zerohashes[i-1] + zerohashes[i-1]))
|
||
|
|