Skip to content

Commit

Permalink
Merge pull request #2 from ramonamela/feature-read-input-challenge
Browse files Browse the repository at this point in the history
Feature read input challenge
  • Loading branch information
ramonamela authored Oct 23, 2024
2 parents c5a9170 + 669d142 commit e8931a7
Show file tree
Hide file tree
Showing 3 changed files with 90 additions and 4 deletions.
2 changes: 1 addition & 1 deletion BitVMX-CPU
Submodule BitVMX-CPU updated 94 files
+2 −0 .github/workflows/rust.yml
+2 −9 .gitignore
+3 −0 .gitmodules
+9 −9 README.md
+4 −2 bitcoin-script-riscv/src/riscv/instruction_mapping.rs
+13 −4 bitcoin-script-riscv/src/riscv/instructions.rs
+1 −1 bitcoin-script-riscv/src/riscv/operations.rs
+135 −46 bitcoin-script-riscv/src/riscv/script_utils.rs
+1 −0 docker-riscv32
+0 −56 docker-riscv32/Dockerfile
+0 −55 docker-riscv32/README.md
+0 −24 docker-riscv32/build.sh
+0 −3 docker-riscv32/build_with_m.sh
+0 −9 docker-riscv32/compliance/Dockerfile
+0 −15 docker-riscv32/compliance/README.md
+0 −3 docker-riscv32/compliance/build.sh
+ docker-riscv32/compliance/build/add.elf
+ docker-riscv32/compliance/build/addi.elf
+ docker-riscv32/compliance/build/and.elf
+ docker-riscv32/compliance/build/andi.elf
+ docker-riscv32/compliance/build/auipc.elf
+ docker-riscv32/compliance/build/beq.elf
+ docker-riscv32/compliance/build/bge.elf
+ docker-riscv32/compliance/build/bgeu.elf
+ docker-riscv32/compliance/build/blt.elf
+ docker-riscv32/compliance/build/bltu.elf
+ docker-riscv32/compliance/build/bne.elf
+ docker-riscv32/compliance/build/div.elf
+ docker-riscv32/compliance/build/divu.elf
+ docker-riscv32/compliance/build/jal.elf
+ docker-riscv32/compliance/build/jalr.elf
+ docker-riscv32/compliance/build/lb.elf
+ docker-riscv32/compliance/build/lbu.elf
+ docker-riscv32/compliance/build/lh.elf
+ docker-riscv32/compliance/build/lhu.elf
+ docker-riscv32/compliance/build/lui.elf
+ docker-riscv32/compliance/build/lw.elf
+ docker-riscv32/compliance/build/ma_data.elf
+ docker-riscv32/compliance/build/mul.elf
+ docker-riscv32/compliance/build/mulh.elf
+ docker-riscv32/compliance/build/mulhsu.elf
+ docker-riscv32/compliance/build/mulhu.elf
+ docker-riscv32/compliance/build/or.elf
+ docker-riscv32/compliance/build/ori.elf
+ docker-riscv32/compliance/build/rem.elf
+ docker-riscv32/compliance/build/remu.elf
+ docker-riscv32/compliance/build/sb.elf
+ docker-riscv32/compliance/build/sh.elf
+ docker-riscv32/compliance/build/simple.elf
+ docker-riscv32/compliance/build/sll.elf
+ docker-riscv32/compliance/build/slli.elf
+ docker-riscv32/compliance/build/slt.elf
+ docker-riscv32/compliance/build/slti.elf
+ docker-riscv32/compliance/build/sltiu.elf
+ docker-riscv32/compliance/build/sltu.elf
+ docker-riscv32/compliance/build/sra.elf
+ docker-riscv32/compliance/build/srai.elf
+ docker-riscv32/compliance/build/srl.elf
+ docker-riscv32/compliance/build/srli.elf
+ docker-riscv32/compliance/build/sub.elf
+ docker-riscv32/compliance/build/sw.elf
+ docker-riscv32/compliance/build/xor.elf
+ docker-riscv32/compliance/build/xori.elf
+0 −15 docker-riscv32/compliance/build_all.sh
+0 −3 docker-riscv32/compliance/build_mul.sh
+0 −18 docker-riscv32/compliance/link.ld
+0 −14 docker-riscv32/compliance/riscv_test.h
+0 −2 docker-riscv32/compliance/run.bat
+0 −17 docker-riscv32/emulator.h
+0 −35 docker-riscv32/entrypoint.s
+0 −18 docker-riscv32/hello-world.c
+ docker-riscv32/hello-world.elf
+0 −40 docker-riscv32/link.ld
+0 −84 docker-riscv32/plainc.c
+0 −2 docker-riscv32/run.bat
+0 −2 docker-riscv32/run.sh
+0 −15 docker-riscv32/run_and_build.bat
+0 −20 docker-riscv32/test_input.c
+0 −16 docker-riscv32/verifier/Dockerfile
+0 −15 docker-riscv32/verifier/Dockerfile.mul
+0 −8 docker-riscv32/verifier/README.md
+0 −1 docker-riscv32/verifier/build.bat
+0 −8 docker-riscv32/verifier/build.sh
+0 −1 docker-riscv32/verifier/build_mul.bat
+0 −2 docker-riscv32/verifier/run.bat
+0 −2 docker-riscv32/verifier/run_and_build.bat
+0 −1 docker-riscv32/verifier/sample_input.hex
+ docker-riscv32/verifier/zkverifier
+22 −9 emulator/src/executor/fetcher.rs
+2 −1 emulator/src/executor/mod.rs
+181 −0 emulator/src/executor/utils.rs
+31 −2 emulator/src/loader/program.rs
+27 −4 emulator/src/main.rs
+4 −5 emulator/tests/compliance.rs
3 changes: 2 additions & 1 deletion Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,10 @@ RUN pip install -r /tmp/requirements/base.txt

## We need to install it manually due to the existent bug

#RUN pip install --no-cache-dir git+https://github.com/karask/python-bitcoin-utils.git@65a4a49c84a4e1c23b08c0527f8b2d0000e5d5ca
#RUN pip install --no-cache-dir git+https://github.com/karask/python-bitcoin-utils.git@0c99998136e21f4ec055f2842bdf674aae611c18
#RUN pip install --no-cache-dir git+https://github.com/ramonamela/python-bitcoin-utils.git@5392fec4f6b149cf7d913d65640b619727e976ef
RUN pip install --no-cache-dir git+https://github.com/ramonamela/python-bitcoin-utils.git@3e8c2a0bf1b080ed5f80f4e78f71005f42eb52c5
#RUN pip install --no-cache-dir git+https://github.com/ramonamela/python-bitcoin-utils.git@5b213cb10a6fe810fb9c0606608bfbc05789cd3a

RUN pip install --no-cache-dir git+https://github.com/ramonamela/pybitvmbinding.git@2cb13f79fca1e0da47305a102eeb66fc5982a9e1

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,27 @@
import os
import re
import subprocess
from enum import Enum
from typing import Optional

import pandas as pd


def _tweak_input(input_hex: str):
return input_hex[:-1] + hex(15 - int(input_hex[-1], 16))[2:]


class ReadErrorType(Enum):
BEFORE = "before"
SAME = "same"
AFTERWARDS = "afterwards"


class ReadErrorPosition(Enum):
ONE = "one"
TWO = "two"


class BitVMXWrapper:

def __init__(self, base_path: str):
Expand All @@ -21,7 +35,7 @@ def __init__(self, base_path: str):
self.fail_step = None
self.fail_type = "--fail-execute"
# self.fail_type = "--fail-hash"
self.fail_input = True
self.fail_input = False
self.fail_actor_input = "prover"
self.contains_fail = (
self.fail_actor is not None
Expand All @@ -35,6 +49,26 @@ def __init__(self, base_path: str):
and self.fail_input
)

self.fail_read = True
self.fail_actor_read = "prover"
self.fail_read_type = ReadErrorType.SAME
self.fail_read_position = ReadErrorPosition.ONE
# DO NOT CHANGE THIS AS OF NOW (WE HARDCODE THE EXAMPLE)
self.fail_read_step = 14
# read1_add 4026531872
# read1_val 3766484992
# read1_last_step 4
# read2_add 3766484972
# read2_val 2852126720
# read2_last_step 7
self.contains_read_fail = (
self.fail_read_type is not None
and self.fail_read_position is not None
and self.fail_actor_read in self.base_path
and self.fail_read
and self.fail_read_step is not None
)

# def get_static_addresses(self, elf_file: str):
# directory = self.base_path
# command = [
Expand Down Expand Up @@ -65,7 +99,9 @@ def __init__(self, base_path: str):
# print("Errors:\n", e.stderr)
# raise Exception("Some problem with the computation")

def get_execution_trace(self, setup_uuid: str, index: int, input_hex: Optional[str] = None):
def get_execution_trace(
self, setup_uuid: str, index: int, input_hex: Optional[str] = None, fail_read=True
):
base_point = (
math.floor((index - 1) / self.execution_checkpoint_interval)
* self.execution_checkpoint_interval
Expand Down Expand Up @@ -109,6 +145,30 @@ def get_execution_trace(self, setup_uuid: str, index: int, input_hex: Optional[s
if self.contains_fail and int(self.fail_step) <= index:
command.extend([self.fail_type, self.fail_step])

if self.contains_read_fail and int(self.fail_read_step) <= index and fail_read:
if self.fail_read_position == ReadErrorPosition.ONE:
command.append("--fail-read-1")
command.append(str(self.fail_read_step))
command.append(str(4026531872))
command.append(str(3766484992 + 1))
command.append(str(4026531872))
base_last_step = 4
elif self.fail_read_position == ReadErrorPosition.TWO:
command.append("--fail-read-2")
command.append(str(self.fail_read_step))
command.append(str(3766484972))
command.append(str(2852126720 + 1))
command.append(str(3766484972))
base_last_step = 7
else:
raise Exception("Fail read not recognized")
if self.fail_read_type == ReadErrorType.SAME:
command.append(str(base_last_step))
elif self.fail_read_type == ReadErrorType.AFTERWARDS:
command.append(str(base_last_step + 1))
elif self.fail_read_type == ReadErrorType.BEFORE:
command.append(str(base_last_step - 1))

execution_directory = self.base_path + setup_uuid

try:
Expand Down Expand Up @@ -171,6 +231,31 @@ def generate_execution_checkpoints(
)
if self.contains_fail:
command.extend([self.fail_type, self.fail_step])

if self.contains_read_fail:
if self.fail_read_position == ReadErrorPosition.ONE:
command.append("--fail-read-1")
command.append(str(self.fail_read_step))
command.append(str(4026531872))
command.append(str(3766484992 + 1))
command.append(str(4026531872))
base_last_step = 4
elif self.fail_read_position == ReadErrorPosition.TWO:
command.append("--fail-read-2")
command.append(str(self.fail_read_step))
command.append(str(3766484972))
command.append(str(2852126720 + 1))
command.append(str(3766484972))
base_last_step = 7
else:
raise Exception("Fail read not recognized")
if self.fail_read_type == ReadErrorType.SAME:
command.append(str(base_last_step))
elif self.fail_read_type == ReadErrorType.AFTERWARDS:
command.append(str(base_last_step + 1))
elif self.fail_read_type == ReadErrorType.BEFORE:
command.append(str(base_last_step - 1))

execution_directory = self.base_path + setup_uuid

try:
Expand Down

0 comments on commit e8931a7

Please sign in to comment.