Skip to content

Commit

Permalink
Merge pull request #13 from ramonamela/master
Browse files Browse the repository at this point in the history
Feature wrong init value trace
  • Loading branch information
ramonamela authored Nov 26, 2024
2 parents f7bc289 + 4a1e169 commit 3384118
Show file tree
Hide file tree
Showing 16 changed files with 689 additions and 31 deletions.
2 changes: 1 addition & 1 deletion Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ RUN pip install -r /tmp/requirements/base.txt
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
RUN pip install --no-cache-dir git+https://github.com/ramonamela/pybitvmbinding.git@32e970dc3d4321453dae949c36308f816352ffa3

RUN mkdir /bitvmx-backend

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,10 @@ class ExecutionTraceDTO(BaseModel):
write_PC_address: str
write_micro: str

@staticmethod
def not_written_last_step() -> str:
return "ffffffff"

@staticmethod
def halt_opcode() -> int:
return 115
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,17 +7,44 @@
class MemoryRegionDTO(BaseModel, ABC):
# We consider words of 32 bits, 4 bytes
address: str
amount_of_words: int

@property
def init(self):
return self.address

@property
def end(self):
return hex(int(self.init, 16) + (self.amount_of_words - 1) * 4)[2:]


class InputMemoryRegionDTO(MemoryRegionDTO):
pass
amount_of_words: int


class ConstantsMemoryRegionDTO(MemoryRegionDTO):
values: List[str]

@property
def amount_of_words(self):
return len(self.values)


class MemoryRegionsDTO(BaseModel):
input: InputMemoryRegionDTO
constants: Dict[str, str]

def memory_regions(self) -> List[MemoryRegionDTO]:
memory_regions_list = []
memory_regions_list.append(self.input)
constants_keys = list(sorted(self.constants.keys()))
for i in range(len(constants_keys)):
current_address = constants_keys[i]
if (int(memory_regions_list[-1].end, 16) + 4) == int(current_address, 16):
memory_regions_list[-1].values.append(self.constants[current_address])
else:
memory_regions_list.append(
ConstantsMemoryRegionDTO(
address=current_address, values=[self.constants[current_address]]
)
)
return memory_regions_list
Original file line number Diff line number Diff line change
Expand Up @@ -34,8 +34,8 @@ def __init__(self, base_path: str):
self.fail_actor = "prover"
# self.fail_step = "1234567890"
# self.fail_step = "1"
# self.fail_step = "29"
self.fail_step = None
self.fail_step = "29"
# self.fail_step = None
# self.fail_type = "--fail-execute"
self.fail_type = "--fail-hash"
# self.fail_type = "--fail-pc"
Expand All @@ -56,8 +56,8 @@ def __init__(self, base_path: str):
self.fail_read = False
self.fail_actor_read = "prover"
# This is the latter one
self.fail_read_type = ReadErrorType.BEFORE
# self.fail_read_type = ReadErrorType.SAME
# self.fail_read_type = ReadErrorType.BEFORE
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 = 16
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,8 @@ class BitVMXBitcoinScriptsDTO(BaseModel):
input_2_equivocation_challenge_scripts: BitcoinScriptList
constants_1_equivocation_challenge_scripts: BitcoinScriptList
constants_2_equivocation_challenge_scripts: BitcoinScriptList
wrong_init_value_1_challenge_script: BitcoinScript
wrong_init_value_2_challenge_script: BitcoinScript
cached_trigger_trace_challenge_address: Dict[str, str] = Field(default_factory=dict)
hash_read_search_scripts: List[BitcoinScript]
choice_read_search_scripts: List[BitcoinScript]
Expand Down Expand Up @@ -116,6 +118,8 @@ def trigger_trace_challenge_scripts_list(self) -> BitcoinScriptList:
+ BitcoinScriptList(self.trigger_wrong_halt_step_challenge_script)
+ BitcoinScriptList(self.trigger_no_halt_in_halt_step_challenge_script)
+ self.last_hash_equivocation_script_list.script_list()
+ self.wrong_init_value_1_challenge_script
+ self.wrong_init_value_2_challenge_script
)

@property
Expand Down Expand Up @@ -386,6 +390,35 @@ def trigger_last_hash_equivocation_challenge_index(self, choice: int) -> int:
+ 2
) + self.last_hash_equivocation_script_list.list_index_from_choice(choice=choice)

def trigger_wrong_init_value_1_challenge_index(self):
return (
len(self.trigger_challenge_scripts)
+ len(self.wrong_hash_challenge_script_list)
+ len(self.wrong_program_counter_challenge_scripts_list)
+ 1
+ len(self.input_1_equivocation_challenge_scripts)
+ len(self.input_2_equivocation_challenge_scripts)
+ len(self.constants_1_equivocation_challenge_scripts)
+ len(self.constants_2_equivocation_challenge_scripts)
+ 2
+ len(self.last_hash_equivocation_script_list)
)

def trigger_wrong_init_value_2_challenge_index(self):
return (
len(self.trigger_challenge_scripts)
+ len(self.wrong_hash_challenge_script_list)
+ len(self.wrong_program_counter_challenge_scripts_list)
+ 1
+ len(self.input_1_equivocation_challenge_scripts)
+ len(self.input_2_equivocation_challenge_scripts)
+ len(self.constants_1_equivocation_challenge_scripts)
+ len(self.constants_2_equivocation_challenge_scripts)
+ 2
+ len(self.last_hash_equivocation_script_list)
+ 1
)

def trigger_read_wrong_hash_challenge_index(self, choice: int):
return self.trigger_read_wrong_hash_challenge_scripts.list_index_from_choice(choice=choice)

Expand Down Expand Up @@ -502,6 +535,22 @@ def serialize_constants_2_equivocation_challenge_scripts(
)
)

@field_serializer("wrong_init_value_1_challenge_script", when_used="always")
def serialize_wrong_init_value_1_challenge_script(
wrong_init_value_1_challenge_script: BitcoinScript,
) -> str:
return BitVMXBitcoinScriptsDTO.bitcoin_script_to_str(
script=wrong_init_value_1_challenge_script
)

@field_serializer("wrong_init_value_2_challenge_script", when_used="always")
def serialize_wrong_init_value_2_challenge_script(
wrong_init_value_2_challenge_script: BitcoinScript,
) -> str:
return BitVMXBitcoinScriptsDTO.bitcoin_script_to_str(
script=wrong_init_value_2_challenge_script
)

@field_serializer("hash_read_search_scripts", when_used="always")
def serialize_hash_read_search_scripts(hash_read_search_scripts: List[BitcoinScript]) -> str:
return json.dumps(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,10 @@
from bitvmx_protocol_library.script_generation.services.script_generation.verifier.trigger_wrong_halt_step_challenge_script_generator_service import (
TriggerWrongHaltStepChallengeScriptGeneratorService,
)
from bitvmx_protocol_library.script_generation.services.script_generation.verifier.trigger_wrong_init_value_script_generator_service import (
TriggerWrongInitValue1ScriptGeneratorService,
TriggerWrongInitValue2ScriptGeneratorService,
)
from bitvmx_protocol_library.script_generation.services.script_generation.verifier.trigger_wrong_latter_step_challenge_script_generator_service import (
TriggerWrongLatterStep1ChallengeScriptGeneratorService,
TriggerWrongLatterStep2ChallengeScriptGeneratorService,
Expand Down Expand Up @@ -152,6 +156,12 @@ def __init__(self):
self.trigger_read_search_equivocation_scripts_generator_service = (
TriggerReadSearchEquivocationScriptsGeneratorService()
)
self.trigger_wrong_init_value_1_script_generator_service = (
TriggerWrongInitValue1ScriptGeneratorService()
)
self.trigger_wrong_init_value_2_script_generator_service = (
TriggerWrongInitValue2ScriptGeneratorService()
)

def __call__(
self,
Expand Down Expand Up @@ -600,6 +610,36 @@ def __call__(
bits_per_digit_checksum=bitvmx_protocol_setup_properties_dto.bitvmx_protocol_properties_dto.amount_of_bits_per_digit_checksum,
)

input_and_constant_addresses_generation_service = (
InputAndConstantAddressesGenerationService(
instruction_commitment=ExecutionTraceGenerationService.commitment_file()
)
)
input_and_constant_addresses = input_and_constant_addresses_generation_service(
input_length=bitvmx_protocol_setup_properties_dto.bitvmx_protocol_properties_dto.amount_of_input_words
)
read_only_memory_regions = input_and_constant_addresses.memory_regions()

trigger_wrong_init_value_1_script = self.trigger_wrong_init_value_1_script_generator_service(
signature_public_keys=[
bitvmx_protocol_setup_properties_dto.verifier_signature_public_key
],
trace_words_lengths=trace_words_lengths,
read_only_memory_regions=read_only_memory_regions,
trace_prover_public_keys=bitvmx_protocol_setup_properties_dto.bitvmx_prover_winternitz_public_keys_dto.trace_prover_public_keys,
amount_of_bits_per_digit_checksum=bitvmx_protocol_setup_properties_dto.bitvmx_protocol_properties_dto.amount_of_bits_per_digit_checksum,
)

trigger_wrong_init_value_2_script = self.trigger_wrong_init_value_2_script_generator_service(
signature_public_keys=[
bitvmx_protocol_setup_properties_dto.verifier_signature_public_key
],
trace_words_lengths=trace_words_lengths,
read_only_memory_regions=read_only_memory_regions,
trace_prover_public_keys=bitvmx_protocol_setup_properties_dto.bitvmx_prover_winternitz_public_keys_dto.trace_prover_public_keys,
amount_of_bits_per_digit_checksum=bitvmx_protocol_setup_properties_dto.bitvmx_protocol_properties_dto.amount_of_bits_per_digit_checksum,
)

return BitVMXBitcoinScriptsDTO(
hash_result_script=hash_result_script,
trigger_protocol_script=trigger_protocol_script,
Expand All @@ -615,6 +655,8 @@ def __call__(
input_2_equivocation_challenge_scripts=trigger_input_2_equivocation_challenge_scripts_generator_service,
constants_1_equivocation_challenge_scripts=trigger_constant_1_equivocation_challenge_scripts_generator_service,
constants_2_equivocation_challenge_scripts=trigger_constant_2_equivocation_challenge_scripts_generator_service,
wrong_init_value_1_challenge_script=trigger_wrong_init_value_1_script,
wrong_init_value_2_challenge_script=trigger_wrong_init_value_2_script,
hash_read_search_scripts=hash_read_search_scripts,
choice_read_search_scripts=choice_read_search_scripts,
trigger_read_search_equivocation_scripts=trigger_read_search_equivocation_scripts,
Expand Down
Loading

0 comments on commit 3384118

Please sign in to comment.