Skip to content
This repository was archived by the owner on Jul 5, 2024. It is now read-only.
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 1 addition & 2 deletions .gitmodules
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,7 @@
url = https://github.com/google/brotli.git
[submodule "contracts"]
path = contracts
url = https://github.com/OffchainLabs/nitro-contracts.git
branch = develop
url = https://github.com/Layr-Labs/nitro-contracts.git
[submodule "arbitrator/wasm-testsuite/testsuite"]
path = arbitrator/wasm-testsuite/testsuite
url = https://github.com/WebAssembly/testsuite.git
Expand Down
1 change: 1 addition & 0 deletions arbitrator/arbutil/src/types.rs
Original file line number Diff line number Diff line change
Expand Up @@ -13,4 +13,5 @@ pub enum PreimageType {
Keccak256,
Sha2_256,
EthVersionedHash,
EigenDAHash,
}
8 changes: 8 additions & 0 deletions arbitrator/prover/src/host.rs
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@ pub enum Hostio {
WavmReadKeccakPreimage,
WavmReadSha256Preimage,
WavmReadEthVersionedHashPreimage,
WavmReadEigenDAHashPreimage,
WavmReadInboxMessage,
WavmReadDelayedInboxMessage,
WavmHaltAndSetFinished,
Expand All @@ -76,6 +77,7 @@ impl FromStr for Hostio {
("env", "wavm_read_keccak_256_preimage") => WavmReadKeccakPreimage,
("env", "wavm_read_sha2_256_preimage") => WavmReadSha256Preimage,
("env", "wavm_read_eth_versioned_hash_preimage") => WavmReadEthVersionedHashPreimage,
("env", "wavm_read_eigen_da_hash_preimage") => WavmReadEigenDAHashPreimage,
("env", "wavm_read_inbox_message") => WavmReadInboxMessage,
("env", "wavm_read_delayed_inbox_message") => WavmReadDelayedInboxMessage,
("env", "wavm_halt_and_set_finished") => WavmHaltAndSetFinished,
Expand Down Expand Up @@ -114,6 +116,7 @@ impl Hostio {
WavmReadKeccakPreimage => func!([I32, I32], [I32]),
WavmReadSha256Preimage => func!([I32, I32], [I32]),
WavmReadEthVersionedHashPreimage => func!([I32, I32], [I32]),
WavmReadEigenDAHashPreimage => func!([I32, I32], [I32]),
WavmReadInboxMessage => func!([I64, I32, I32], [I32]),
WavmReadDelayedInboxMessage => func!([I64, I32, I32], [I32]),
WavmHaltAndSetFinished => func!(),
Expand Down Expand Up @@ -188,6 +191,11 @@ impl Hostio {
opcode!(LocalGet, 1);
opcode!(ReadPreImage, PreimageType::EthVersionedHash);
}
WavmReadEigenDAHashPreimage => {
opcode!(LocalGet, 0);
opcode!(LocalGet, 1);
opcode!(ReadPreImage, PreimageType::EigenDAHash);
}
WavmReadInboxMessage => {
opcode!(LocalGet, 0);
opcode!(LocalGet, 1);
Expand Down
5 changes: 5 additions & 0 deletions arbitrator/prover/src/machine.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2322,6 +2322,11 @@ impl Machine {
prove_kzg_preimage(hash, &preimage, offset, &mut data)
.expect("Failed to generate KZG preimage proof");
}
PreimageType::EigenDAHash => {
// TODO - Add eigenDA kzg preimage verification here
println!("Generating proof for EigenDA preimage");
data.extend(preimage);
}
}
} else if next_inst.opcode == Opcode::ReadInboxMessage {
let msg_idx = self
Expand Down
1 change: 1 addition & 0 deletions arbitrator/prover/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -166,6 +166,7 @@ fn main() -> Result<()> {
.insert(hash.into(), buf.as_slice().into());
}
}

let preimage_resolver =
Arc::new(move |_, ty, hash| preimages.get(&ty).and_then(|m| m.get(&hash)).cloned())
as PreimageResolver;
Expand Down
4 changes: 4 additions & 0 deletions arbitrator/prover/src/utils.rs
Original file line number Diff line number Diff line change
Expand Up @@ -281,5 +281,9 @@ pub fn hash_preimage(preimage: &[u8], ty: PreimageType) -> Result<[u8; 32]> {
commitment_hash[0] = 1;
Ok(commitment_hash)
}
PreimageType::EigenDAHash => {
// TODO: Add support for generating hashes for an eigenDA kzg commitment
Ok(Sha256::digest(preimage).into())
}
}
}
5 changes: 5 additions & 0 deletions arbitrator/prover/test-cases/go/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -140,5 +140,10 @@ func main() {
}
}

_, err = wavmio.ResolveTypedPreimage(arbutil.EigenDaPreimageType, common.HexToHash("b071b0cf4fc3288ada3977d7b5b0ff621d238f0f8bebb1def70cf7cf0aa59f41"))
if err != nil {
panic(fmt.Sprintf("failed to resolve eigenda preimage: %v", err))
}

println("verified preimage resolution!\n")
}
11 changes: 11 additions & 0 deletions arbitrator/prover/test-cases/rust/src/bin/host-io.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ extern "C" {
pub fn wavm_read_keccak_256_preimage(ptr: *mut u8, offset: usize) -> usize;
pub fn wavm_read_sha2_256_preimage(ptr: *mut u8, offset: usize) -> usize;
pub fn wavm_read_eth_versioned_hash_preimage(ptr: *mut u8, offset: usize) -> usize;
pub fn wavm_read_eigen_da_hash_preimage(ptr: *mut u8, offset: usize) -> usize;
pub fn wavm_read_inbox_message(msg_num: u64, ptr: *mut u8, offset: usize) -> usize;
pub fn wavm_read_delayed_inbox_message(seq_num: u64, ptr: *mut u8, offset: usize) -> usize;
pub fn wavm_halt_and_set_finished();
Expand Down Expand Up @@ -102,6 +103,16 @@ fn main() {
expected_hash[32-scalar_bytes.len()..].copy_from_slice(&scalar_bytes);
assert_eq!(bytebuffer.0, expected_hash);
}

println!("eigenda preimage");
let eigen_hash = hex!("b071b0cf4fc3288ada3977d7b5b0ff621d238f0f8bebb1def70cf7cf0aa59f41");
bytebuffer = Bytes32(eigen_hash);
let expected_len = 32;

let actual_len = wavm_read_eigen_da_hash_preimage(bytebuffer.0.as_mut_ptr(), 0);
assert_eq!(actual_len, expected_len);
// Ensure that 0th index is zero padded
assert_eq!(bytebuffer.0[..actual_len][0] as u8, 0);
}
println!("Done!");
}
2 changes: 2 additions & 0 deletions arbitrator/wasm-libraries/host-io/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ extern "C" {
pub fn wavm_read_keccak_256_preimage(ptr: *mut u8, offset: usize) -> usize;
pub fn wavm_read_sha2_256_preimage(ptr: *mut u8, offset: usize) -> usize;
pub fn wavm_read_eth_versioned_hash_preimage(ptr: *mut u8, offset: usize) -> usize;
pub fn wavm_read_eigen_da_hash_preimage(ptr: *mut u8, offset: usize) -> usize;
pub fn wavm_read_inbox_message(msg_num: u64, ptr: *mut u8, offset: usize) -> usize;
pub fn wavm_read_delayed_inbox_message(seq_num: u64, ptr: *mut u8, offset: usize) -> usize;
}
Expand Down Expand Up @@ -152,6 +153,7 @@ pub unsafe extern "C" fn go__github.com_offchainlabs_nitro_wavmio_resolveTypedPr
PreimageType::Keccak256 => wavm_read_keccak_256_preimage,
PreimageType::Sha2_256 => wavm_read_sha2_256_preimage,
PreimageType::EthVersionedHash => wavm_read_eth_versioned_hash_preimage,
PreimageType::EigenDAHash => wavm_read_eigen_da_hash_preimage,
};
let read = preimage_reader(our_ptr, offset as usize);
assert!(read <= 32);
Expand Down
2 changes: 1 addition & 1 deletion arbstate/inbox.go
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@ func parseSequencerMessage(ctx context.Context, batchNum uint64, batchBlockHash
// If the parent chain sequencer inbox smart contract authenticated this batch,
// an unknown header byte must mean that this node is out of date,
// because the smart contract understands the header byte and this node doesn't.
if len(payload) > 0 && IsL1AuthenticatedMessageHeaderByte(payload[0]) && !IsKnownHeaderByte(payload[0]) {
if len(payload) > 0 && IsL1AuthenticatedMessageHeaderByte(payload[0]) && !IsKnownHeaderByte(payload[0]) && !eigenda.IsEigenDAMessageHeaderByte(payload[0]) {
return nil, fmt.Errorf("%w: batch has unsupported authenticated header byte 0x%02x", arbosState.ErrFatalNodeOutOfDate, payload[0])
}

Expand Down
1 change: 1 addition & 0 deletions arbutil/preimage_type.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,4 +11,5 @@ const (
Keccak256PreimageType PreimageType = iota
Sha2_256PreimageType
EthVersionedHashPreimageType
EigenDaPreimageType
)
6 changes: 3 additions & 3 deletions das/eigenda/eigenda.go
Original file line number Diff line number Diff line change
Expand Up @@ -187,10 +187,10 @@ func RecoverPayloadFromEigenDABatch(ctx context.Context,
log.Info("Start recovering payload from eigenda: ", "data", hex.EncodeToString(sequencerMsg))
var shaPreimages map[common.Hash][]byte
if preimages != nil {
if preimages[arbutil.Sha2_256PreimageType] == nil {
preimages[arbutil.Sha2_256PreimageType] = make(map[common.Hash][]byte)
if preimages[arbutil.EigenDaPreimageType] == nil {
preimages[arbutil.EigenDaPreimageType] = make(map[common.Hash][]byte)
}
shaPreimages = preimages[arbutil.Sha2_256PreimageType]
shaPreimages = preimages[arbutil.EigenDaPreimageType]
}
var daRef EigenDARef
daRef.BlobIndex = binary.BigEndian.Uint32(sequencerMsg[:4])
Expand Down
4 changes: 2 additions & 2 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,8 @@ replace github.com/cockroachdb/pebble => github.com/cockroachdb/pebble v0.0.0-20

require (
github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible
github.com/Layr-Labs/eigenda v0.6.0
github.com/Layr-Labs/eigenda v0.6.1
github.com/Layr-Labs/eigenda/api v0.6.1
github.com/Shopify/toxiproxy v2.1.4+incompatible
github.com/alicebob/miniredis/v2 v2.21.0
github.com/andybalholm/brotli v1.0.4
Expand Down Expand Up @@ -312,7 +313,6 @@ require (
)

require (
github.com/Layr-Labs/eigenda/api v0.6.0
github.com/StackExchange/wmi v1.2.1 // indirect
github.com/VictoriaMetrics/fastcache v1.12.1 // indirect
github.com/cespare/xxhash/v2 v2.2.0 // indirect
Expand Down
8 changes: 4 additions & 4 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -55,10 +55,10 @@ github.com/Joker/hpp v1.0.0/go.mod h1:8x5n+M1Hp5hC0g8okX3sR3vFQwynaX/UgSOM9MeBKz
github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible h1:1G1pk05UrOh0NlF1oeaaix1x8XzrfjIDK47TY0Zehcw=
github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0=
github.com/Kubuxu/go-os-helper v0.0.1/go.mod h1:N8B+I7vPCT80IcP58r50u4+gEEcsZETFUpAzWW2ep1Y=
github.com/Layr-Labs/eigenda v0.6.0 h1:CSoXJX3KboRtq3SJAs1AKdSXOhjUfafX94Kg1KU0dUw=
github.com/Layr-Labs/eigenda v0.6.0/go.mod h1:XongI0xM6ks66DzxvTpF2yi4x2QH0X2RgEbKl/WFebY=
github.com/Layr-Labs/eigenda/api v0.6.0 h1:TrmmeklRIqR91C48V9malQEFMHEcfv2iF+2aTA4Hw+s=
github.com/Layr-Labs/eigenda/api v0.6.0/go.mod h1:kVXqWM13s/1hXyv9QdHweWAbKin9MeOBbS4i8c9rLbU=
github.com/Layr-Labs/eigenda v0.6.1 h1:uU04t+dsR5oHsbr+A5XIeJdyZIfNW3YvG03dMTKLSK4=
github.com/Layr-Labs/eigenda v0.6.1/go.mod h1:XongI0xM6ks66DzxvTpF2yi4x2QH0X2RgEbKl/WFebY=
github.com/Layr-Labs/eigenda/api v0.6.1 h1:TAstOttTmFZQoFlZtgu/rNktNOhx62TwRFMxGOhUx8M=
github.com/Layr-Labs/eigenda/api v0.6.1/go.mod h1:kVXqWM13s/1hXyv9QdHweWAbKin9MeOBbS4i8c9rLbU=
github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow=
github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM=
github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU=
Expand Down
15 changes: 15 additions & 0 deletions scripts/create-test-preimages.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,20 @@ def kzg_test_data():
data.extend(h)
return bytes(data)

def eigen_test_data():
data = []
# generate a 32 byte blob
for i in range(0, 1):
bytes_64 = bytearray(hashlib.sha512(bytes(str(i), encoding='utf8')).digest())
bytes_32 = bytes_64[0:32]

# 0 padding for 1st byte of 32 byte word
bytes_32[0] = 0
data.extend(bytes_32)

print(bytes(data))
return bytes(data)

if len(sys.argv) < 2:
print("Usage: python3 create-test-preimages.py <filename>")
sys.exit(1)
Expand All @@ -34,6 +48,7 @@ def kzg_test_data():
(0, b'hello world'),
(1, b'hello world'),
(2, kzg_test_data()),
(3, eigen_test_data())
]

write_data_to_file(filename, preimages)