Skip to content

Commit

Permalink
updated conformance
Browse files Browse the repository at this point in the history
  • Loading branch information
mjain-jump committed Jan 16, 2025
1 parent e2b44eb commit 08209e7
Show file tree
Hide file tree
Showing 4 changed files with 75 additions and 62 deletions.
4 changes: 4 additions & 0 deletions src/test_suite/fuzz_context.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
import test_suite.vm_pb2 as vm_pb

import test_suite.syscall.codec_utils as syscall_codec
import test_suite.syscall.transform_utils as syscall_transform


ElfLoaderHarness = HarnessCtx(
Expand All @@ -42,6 +43,7 @@
context_human_encode_fn=syscall_codec.encode_input,
effects_human_encode_fn=syscall_codec.encode_output,
context_human_decode_fn=syscall_codec.decode_input,
regenerate_transformation_fn=syscall_transform.transform_fixture,
)

CpiHarness = HarnessCtx(
Expand All @@ -50,6 +52,7 @@
context_human_encode_fn=syscall_codec.encode_input,
effects_human_encode_fn=syscall_codec.encode_output,
context_human_decode_fn=syscall_codec.decode_input,
regenerate_transformation_fn=syscall_transform.transform_fixture,
)

VmInterpHarness = HarnessCtx(
Expand All @@ -58,6 +61,7 @@
context_human_encode_fn=syscall_codec.encode_input,
effects_human_encode_fn=syscall_codec.encode_output,
context_human_decode_fn=syscall_codec.decode_input,
regenerate_transformation_fn=syscall_transform.transform_fixture,
)

VmValidateHarness = HarnessCtx(
Expand Down
4 changes: 0 additions & 4 deletions src/test_suite/syscall/codec_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,6 @@ def encode_input(input: vm_pb.SyscallContext):
if input.vm_ctx:
if input.vm_ctx.rodata:
input.vm_ctx.rodata = encode_hex_compact(input.vm_ctx.rodata)
for i in range(len(input.vm_ctx.input_data_regions)):
input.vm_ctx.input_data_regions[i].content = encode_hex_compact(
input.vm_ctx.input_data_regions[i].content
)
if input.vm_ctx.call_whitelist:
input.vm_ctx.call_whitelist = encode_hex_compact(
input.vm_ctx.call_whitelist
Expand Down
32 changes: 32 additions & 0 deletions src/test_suite/syscall/transform_utils.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
import fd58
import test_suite.invoke_pb2 as invoke_pb
import test_suite.vm_pb2 as vm_pb
import test_suite.context_pb2 as context_pb


def transform_fixture(fixture: vm_pb.SyscallFixture):
"""
Example:
accounts = fixture.input.instr_ctx.accounts
program_id = fixture.input.instr_ctx.program_id
program_account = context_pb.AcctState()
program_account.address = program_id
program_account.lamports = 123456789
program_account.executable = True
program_account.data = b'\x00' * 100
program_account.rent_epoch = (1 << 64) - 1
program_account.owner = fd58.dec32(b"BPFLoaderUpgradeab1e11111111111111111111111")
for i in range(len(accounts)):
if accounts[i].address == program_id:
if accounts[i].owner == fd58.dec32(b"BPFLoader1111111111111111111111111111111111"):
return
fixture.input.instr_ctx.accounts[i].CopyFrom(program_account)
return
fixture.input.instr_ctx.accounts.extend([program_account])
"""
pass
97 changes: 39 additions & 58 deletions src/test_suite/vm_pb2.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
package="org.solana.sealevel.v1",
syntax="proto3",
serialized_pb=_b(
'\n\x08vm.proto\x12\x16org.solana.sealevel.v1\x1a\x0cinvoke.proto\x1a\rcontext.proto\x1a\x0emetadata.proto"G\n\x0fInputDataRegion\x12\x0e\n\x06offset\x18\x01 \x01(\x04\x12\x0f\n\x07content\x18\x02 \x01(\x0c\x12\x13\n\x0bis_writable\x18\x03 \x01(\x08"\x87\x04\n\tVmContext\x12\x10\n\x08heap_max\x18\x01 \x01(\x04\x12\x0e\n\x06rodata\x18\x02 \x01(\x0c\x12"\n\x1arodata_text_section_offset\x18\x03 \x01(\x04\x12"\n\x1arodata_text_section_length\x18\x04 \x01(\x04\x12C\n\x12input_data_regions\x18\x05 \x03(\x0b2\'.org.solana.sealevel.v1.InputDataRegion\x12\n\n\x02r0\x18\x06 \x01(\x04\x12\n\n\x02r1\x18\x07 \x01(\x04\x12\n\n\x02r2\x18\x08 \x01(\x04\x12\n\n\x02r3\x18\t \x01(\x04\x12\n\n\x02r4\x18\n \x01(\x04\x12\n\n\x02r5\x18\x0b \x01(\x04\x12\n\n\x02r6\x18\x0c \x01(\x04\x12\n\n\x02r7\x18\r \x01(\x04\x12\n\n\x02r8\x18\x0e \x01(\x04\x12\n\n\x02r9\x18\x0f \x01(\x04\x12\x0b\n\x03r10\x18\x10 \x01(\x04\x12\x0b\n\x03r11\x18\x11 \x01(\x04\x12\x13\n\x0bcheck_align\x18\x12 \x01(\x08\x12\x12\n\ncheck_size\x18\x13 \x01(\x08\x12\x10\n\x08entry_pc\x18\x14 \x01(\x04\x12\x16\n\x0ecall_whitelist\x18\x15 \x01(\x0c\x12\x17\n\x0ftracing_enabled\x18\x16 \x01(\x08\x127\n\x0breturn_data\x18\x17 \x01(\x0b2".org.solana.sealevel.v1.ReturnData\x12\x14\n\x0csbpf_version\x18\x18 \x01(\r"U\n\x11SyscallInvocation\x12\x15\n\rfunction_name\x18\x01 \x01(\x0c\x12\x13\n\x0bheap_prefix\x18\x02 \x01(\x0c\x12\x14\n\x0cstack_prefix\x18\x03 \x01(\x0c"ÿ\x01\n\x0eSyscallContext\x121\n\x06vm_ctx\x18\x01 \x01(\x0b2!.org.solana.sealevel.v1.VmContext\x127\n\tinstr_ctx\x18\x02 \x01(\x0b2$.org.solana.sealevel.v1.InstrContext\x12E\n\x12syscall_invocation\x18\x03 \x01(\x0b2).org.solana.sealevel.v1.SyscallInvocation\x12:\n\x0cexec_effects\x18\x04 \x01(\x0b2$.org.solana.sealevel.v1.InstrEffects"\x9e\x03\n\x0eSyscallEffects\x12\r\n\x05error\x18\x01 \x01(\x03\x123\n\nerror_kind\x18\x0c \x01(\x0e2\x1f.org.solana.sealevel.v1.ErrKind\x12\n\n\x02r0\x18\x02 \x01(\x04\x12\x10\n\x08cu_avail\x18\x03 \x01(\x04\x12\x0c\n\x04heap\x18\x04 \x01(\x0c\x12\r\n\x05stack\x18\x05 \x01(\x0c\x12\x11\n\tinputdata\x18\x06 \x01(\x0c\x12C\n\x12input_data_regions\x18\x0b \x03(\x0b2\'.org.solana.sealevel.v1.InputDataRegion\x12\x13\n\x0bframe_count\x18\x07 \x01(\x04\x12\x0b\n\x03log\x18\x08 \x01(\x0c\x12\x0e\n\x06rodata\x18\t \x01(\x0c\x12\n\n\x02pc\x18\n \x01(\x04\x12\n\n\x02r1\x18k \x01(\x04\x12\n\n\x02r2\x18l \x01(\x04\x12\n\n\x02r3\x18m \x01(\x04\x12\n\n\x02r4\x18n \x01(\x04\x12\n\n\x02r5\x18o \x01(\x04\x12\n\n\x02r6\x18p \x01(\x04\x12\n\n\x02r7\x18q \x01(\x04\x12\n\n\x02r8\x18r \x01(\x04\x12\n\n\x02r9\x18s \x01(\x04\x12\x0b\n\x03r10\x18t \x01(\x04\x01\n\x0eSyscallFixture\x129\n\x08metadata\x18\x01 \x01(\x0b2\'.org.solana.sealevel.v1.FixtureMetadata\x125\n\x05input\x18\x02 \x01(\x0b2&.org.solana.sealevel.v1.SyscallContext\x126\n\x06output\x18\x03 \x01(\x0b2&.org.solana.sealevel.v1.SyscallEffects"x\n\rFullVmContext\x121\n\x06vm_ctx\x18\x01 \x01(\x0b2!.org.solana.sealevel.v1.VmContext\x124\n\x08features\x18\x03 \x01(\x0b2".org.solana.sealevel.v1.FeatureSet"4\n\x11ValidateVmEffects\x12\x0e\n\x06result\x18\x01 \x01(\x05\x12\x0f\n\x07success\x18\x02 \x01(\x08"¿\x01\n\x11ValidateVmFixture\x129\n\x08metadata\x18\x01 \x01(\x0b2\'.org.solana.sealevel.v1.FixtureMetadata\x124\n\x05input\x18\x02 \x01(\x0b2%.org.solana.sealevel.v1.FullVmContext\x129\n\x06output\x18\x03 \x01(\x0b2).org.solana.sealevel.v1.ValidateVmEffects".\n\nReturnData\x12\x12\n\nprogram_id\x18\x01 \x01(\x0c\x12\x0c\n\x04data\x18\x02 \x01(\x0c*B\n\x07ErrKind\x12\x0f\n\x0bUNSPECIFIED\x10\x00\x12\x08\n\x04EBPF\x10\x01\x12\x0b\n\x07SYSCALL\x10\x02\x12\x0f\n\x0bINSTRUCTION\x10\x03b\x06proto3'
'\n\x08vm.proto\x12\x16org.solana.sealevel.v1\x1a\x0cinvoke.proto\x1a\rcontext.proto\x1a\x0emetadata.proto"G\n\x0fInputDataRegion\x12\x0e\n\x06offset\x18\x01 \x01(\x04\x12\x0f\n\x07content\x18\x02 \x01(\x0c\x12\x13\n\x0bis_writable\x18\x03 \x01(\x08\x03\n\tVmContext\x12\x10\n\x08heap_max\x18\x01 \x01(\x04\x12\x0e\n\x06rodata\x18\x02 \x01(\x0c\x12"\n\x1arodata_text_section_offset\x18\x03 \x01(\x04\x12"\n\x1arodata_text_section_length\x18\x04 \x01(\x04\x12\n\n\x02r0\x18\x06 \x01(\x04\x12\n\n\x02r1\x18\x07 \x01(\x04\x12\n\n\x02r2\x18\x08 \x01(\x04\x12\n\n\x02r3\x18\t \x01(\x04\x12\n\n\x02r4\x18\n \x01(\x04\x12\n\n\x02r5\x18\x0b \x01(\x04\x12\n\n\x02r6\x18\x0c \x01(\x04\x12\n\n\x02r7\x18\r \x01(\x04\x12\n\n\x02r8\x18\x0e \x01(\x04\x12\n\n\x02r9\x18\x0f \x01(\x04\x12\x0b\n\x03r10\x18\x10 \x01(\x04\x12\x0b\n\x03r11\x18\x11 \x01(\x04\x12\x13\n\x0bcheck_align\x18\x12 \x01(\x08\x12\x12\n\ncheck_size\x18\x13 \x01(\x08\x12\x10\n\x08entry_pc\x18\x14 \x01(\x04\x12\x16\n\x0ecall_whitelist\x18\x15 \x01(\x0c\x12\x17\n\x0ftracing_enabled\x18\x16 \x01(\x08\x127\n\x0breturn_data\x18\x17 \x01(\x0b2".org.solana.sealevel.v1.ReturnData\x12\x14\n\x0csbpf_version\x18\x18 \x01(\r"U\n\x11SyscallInvocation\x12\x15\n\rfunction_name\x18\x01 \x01(\x0c\x12\x13\n\x0bheap_prefix\x18\x02 \x01(\x0c\x12\x14\n\x0cstack_prefix\x18\x03 \x01(\x0c"ÿ\x01\n\x0eSyscallContext\x121\n\x06vm_ctx\x18\x01 \x01(\x0b2!.org.solana.sealevel.v1.VmContext\x127\n\tinstr_ctx\x18\x02 \x01(\x0b2$.org.solana.sealevel.v1.InstrContext\x12E\n\x12syscall_invocation\x18\x03 \x01(\x0b2).org.solana.sealevel.v1.SyscallInvocation\x12:\n\x0cexec_effects\x18\x04 \x01(\x0b2$.org.solana.sealevel.v1.InstrEffects"\x9e\x03\n\x0eSyscallEffects\x12\r\n\x05error\x18\x01 \x01(\x03\x123\n\nerror_kind\x18\x0c \x01(\x0e2\x1f.org.solana.sealevel.v1.ErrKind\x12\n\n\x02r0\x18\x02 \x01(\x04\x12\x10\n\x08cu_avail\x18\x03 \x01(\x04\x12\x0c\n\x04heap\x18\x04 \x01(\x0c\x12\r\n\x05stack\x18\x05 \x01(\x0c\x12\x11\n\tinputdata\x18\x06 \x01(\x0c\x12C\n\x12input_data_regions\x18\x0b \x03(\x0b2\'.org.solana.sealevel.v1.InputDataRegion\x12\x13\n\x0bframe_count\x18\x07 \x01(\x04\x12\x0b\n\x03log\x18\x08 \x01(\x0c\x12\x0e\n\x06rodata\x18\t \x01(\x0c\x12\n\n\x02pc\x18\n \x01(\x04\x12\n\n\x02r1\x18k \x01(\x04\x12\n\n\x02r2\x18l \x01(\x04\x12\n\n\x02r3\x18m \x01(\x04\x12\n\n\x02r4\x18n \x01(\x04\x12\n\n\x02r5\x18o \x01(\x04\x12\n\n\x02r6\x18p \x01(\x04\x12\n\n\x02r7\x18q \x01(\x04\x12\n\n\x02r8\x18r \x01(\x04\x12\n\n\x02r9\x18s \x01(\x04\x12\x0b\n\x03r10\x18t \x01(\x04\x01\n\x0eSyscallFixture\x129\n\x08metadata\x18\x01 \x01(\x0b2\'.org.solana.sealevel.v1.FixtureMetadata\x125\n\x05input\x18\x02 \x01(\x0b2&.org.solana.sealevel.v1.SyscallContext\x126\n\x06output\x18\x03 \x01(\x0b2&.org.solana.sealevel.v1.SyscallEffects"x\n\rFullVmContext\x121\n\x06vm_ctx\x18\x01 \x01(\x0b2!.org.solana.sealevel.v1.VmContext\x124\n\x08features\x18\x03 \x01(\x0b2".org.solana.sealevel.v1.FeatureSet"4\n\x11ValidateVmEffects\x12\x0e\n\x06result\x18\x01 \x01(\x05\x12\x0f\n\x07success\x18\x02 \x01(\x08"¿\x01\n\x11ValidateVmFixture\x129\n\x08metadata\x18\x01 \x01(\x0b2\'.org.solana.sealevel.v1.FixtureMetadata\x124\n\x05input\x18\x02 \x01(\x0b2%.org.solana.sealevel.v1.FullVmContext\x129\n\x06output\x18\x03 \x01(\x0b2).org.solana.sealevel.v1.ValidateVmEffects".\n\nReturnData\x12\x12\n\nprogram_id\x18\x01 \x01(\x0c\x12\x0c\n\x04data\x18\x02 \x01(\x0c*B\n\x07ErrKind\x12\x0f\n\x0bUNSPECIFIED\x10\x00\x12\x08\n\x04EBPF\x10\x01\x12\x0b\n\x07SYSCALL\x10\x02\x12\x0f\n\x0bINSTRUCTION\x10\x03b\x06proto3'
),
dependencies=[
invoke__pb2.DESCRIPTOR,
Expand Down Expand Up @@ -47,8 +47,8 @@
],
containing_type=None,
options=None,
serialized_start=2045,
serialized_end=2111,
serialized_start=1976,
serialized_end=2042,
)
_sym_db.RegisterEnumDescriptor(_ERRKIND)
ErrKind = enum_type_wrapper.EnumTypeWrapper(_ERRKIND)
Expand Down Expand Up @@ -208,28 +208,10 @@
options=None,
file=DESCRIPTOR,
),
_descriptor.FieldDescriptor(
name="input_data_regions",
full_name="org.solana.sealevel.v1.VmContext.input_data_regions",
index=4,
number=5,
type=11,
cpp_type=10,
label=3,
has_default_value=False,
default_value=[],
message_type=None,
enum_type=None,
containing_type=None,
is_extension=False,
extension_scope=None,
options=None,
file=DESCRIPTOR,
),
_descriptor.FieldDescriptor(
name="r0",
full_name="org.solana.sealevel.v1.VmContext.r0",
index=5,
index=4,
number=6,
type=4,
cpp_type=4,
Expand All @@ -247,7 +229,7 @@
_descriptor.FieldDescriptor(
name="r1",
full_name="org.solana.sealevel.v1.VmContext.r1",
index=6,
index=5,
number=7,
type=4,
cpp_type=4,
Expand All @@ -265,7 +247,7 @@
_descriptor.FieldDescriptor(
name="r2",
full_name="org.solana.sealevel.v1.VmContext.r2",
index=7,
index=6,
number=8,
type=4,
cpp_type=4,
Expand All @@ -283,7 +265,7 @@
_descriptor.FieldDescriptor(
name="r3",
full_name="org.solana.sealevel.v1.VmContext.r3",
index=8,
index=7,
number=9,
type=4,
cpp_type=4,
Expand All @@ -301,7 +283,7 @@
_descriptor.FieldDescriptor(
name="r4",
full_name="org.solana.sealevel.v1.VmContext.r4",
index=9,
index=8,
number=10,
type=4,
cpp_type=4,
Expand All @@ -319,7 +301,7 @@
_descriptor.FieldDescriptor(
name="r5",
full_name="org.solana.sealevel.v1.VmContext.r5",
index=10,
index=9,
number=11,
type=4,
cpp_type=4,
Expand All @@ -337,7 +319,7 @@
_descriptor.FieldDescriptor(
name="r6",
full_name="org.solana.sealevel.v1.VmContext.r6",
index=11,
index=10,
number=12,
type=4,
cpp_type=4,
Expand All @@ -355,7 +337,7 @@
_descriptor.FieldDescriptor(
name="r7",
full_name="org.solana.sealevel.v1.VmContext.r7",
index=12,
index=11,
number=13,
type=4,
cpp_type=4,
Expand All @@ -373,7 +355,7 @@
_descriptor.FieldDescriptor(
name="r8",
full_name="org.solana.sealevel.v1.VmContext.r8",
index=13,
index=12,
number=14,
type=4,
cpp_type=4,
Expand All @@ -391,7 +373,7 @@
_descriptor.FieldDescriptor(
name="r9",
full_name="org.solana.sealevel.v1.VmContext.r9",
index=14,
index=13,
number=15,
type=4,
cpp_type=4,
Expand All @@ -409,7 +391,7 @@
_descriptor.FieldDescriptor(
name="r10",
full_name="org.solana.sealevel.v1.VmContext.r10",
index=15,
index=14,
number=16,
type=4,
cpp_type=4,
Expand All @@ -427,7 +409,7 @@
_descriptor.FieldDescriptor(
name="r11",
full_name="org.solana.sealevel.v1.VmContext.r11",
index=16,
index=15,
number=17,
type=4,
cpp_type=4,
Expand All @@ -445,7 +427,7 @@
_descriptor.FieldDescriptor(
name="check_align",
full_name="org.solana.sealevel.v1.VmContext.check_align",
index=17,
index=16,
number=18,
type=8,
cpp_type=7,
Expand All @@ -463,7 +445,7 @@
_descriptor.FieldDescriptor(
name="check_size",
full_name="org.solana.sealevel.v1.VmContext.check_size",
index=18,
index=17,
number=19,
type=8,
cpp_type=7,
Expand All @@ -481,7 +463,7 @@
_descriptor.FieldDescriptor(
name="entry_pc",
full_name="org.solana.sealevel.v1.VmContext.entry_pc",
index=19,
index=18,
number=20,
type=4,
cpp_type=4,
Expand All @@ -499,7 +481,7 @@
_descriptor.FieldDescriptor(
name="call_whitelist",
full_name="org.solana.sealevel.v1.VmContext.call_whitelist",
index=20,
index=19,
number=21,
type=12,
cpp_type=9,
Expand All @@ -517,7 +499,7 @@
_descriptor.FieldDescriptor(
name="tracing_enabled",
full_name="org.solana.sealevel.v1.VmContext.tracing_enabled",
index=21,
index=20,
number=22,
type=8,
cpp_type=7,
Expand All @@ -535,7 +517,7 @@
_descriptor.FieldDescriptor(
name="return_data",
full_name="org.solana.sealevel.v1.VmContext.return_data",
index=22,
index=21,
number=23,
type=11,
cpp_type=10,
Expand All @@ -553,7 +535,7 @@
_descriptor.FieldDescriptor(
name="sbpf_version",
full_name="org.solana.sealevel.v1.VmContext.sbpf_version",
index=23,
index=22,
number=24,
type=13,
cpp_type=3,
Expand All @@ -578,7 +560,7 @@
extension_ranges=[],
oneofs=[],
serialized_start=155,
serialized_end=674,
serialized_end=605,
)
_SYSCALLINVOCATION = _descriptor.Descriptor(
name="SyscallInvocation",
Expand Down Expand Up @@ -650,8 +632,8 @@
syntax="proto3",
extension_ranges=[],
oneofs=[],
serialized_start=676,
serialized_end=761,
serialized_start=607,
serialized_end=692,
)
_SYSCALLCONTEXT = _descriptor.Descriptor(
name="SyscallContext",
Expand Down Expand Up @@ -741,8 +723,8 @@
syntax="proto3",
extension_ranges=[],
oneofs=[],
serialized_start=764,
serialized_end=1019,
serialized_start=695,
serialized_end=950,
)
_SYSCALLEFFECTS = _descriptor.Descriptor(
name="SyscallEffects",
Expand Down Expand Up @@ -1156,8 +1138,8 @@
syntax="proto3",
extension_ranges=[],
oneofs=[],
serialized_start=1022,
serialized_end=1436,
serialized_start=953,
serialized_end=1367,
)
_SYSCALLFIXTURE = _descriptor.Descriptor(
name="SyscallFixture",
Expand Down Expand Up @@ -1229,8 +1211,8 @@
syntax="proto3",
extension_ranges=[],
oneofs=[],
serialized_start=1439,
serialized_end=1625,
serialized_start=1370,
serialized_end=1556,
)
_FULLVMCONTEXT = _descriptor.Descriptor(
name="FullVmContext",
Expand Down Expand Up @@ -1284,8 +1266,8 @@
syntax="proto3",
extension_ranges=[],
oneofs=[],
serialized_start=1627,
serialized_end=1747,
serialized_start=1558,
serialized_end=1678,
)
_VALIDATEVMEFFECTS = _descriptor.Descriptor(
name="ValidateVmEffects",
Expand Down Expand Up @@ -1339,8 +1321,8 @@
syntax="proto3",
extension_ranges=[],
oneofs=[],
serialized_start=1749,
serialized_end=1801,
serialized_start=1680,
serialized_end=1732,
)
_VALIDATEVMFIXTURE = _descriptor.Descriptor(
name="ValidateVmFixture",
Expand Down Expand Up @@ -1412,8 +1394,8 @@
syntax="proto3",
extension_ranges=[],
oneofs=[],
serialized_start=1804,
serialized_end=1995,
serialized_start=1735,
serialized_end=1926,
)
_RETURNDATA = _descriptor.Descriptor(
name="ReturnData",
Expand Down Expand Up @@ -1467,10 +1449,9 @@
syntax="proto3",
extension_ranges=[],
oneofs=[],
serialized_start=1997,
serialized_end=2043,
serialized_start=1928,
serialized_end=1974,
)
_VMCONTEXT.fields_by_name["input_data_regions"].message_type = _INPUTDATAREGION
_VMCONTEXT.fields_by_name["return_data"].message_type = _RETURNDATA
_SYSCALLCONTEXT.fields_by_name["vm_ctx"].message_type = _VMCONTEXT
_SYSCALLCONTEXT.fields_by_name["instr_ctx"].message_type = invoke__pb2._INSTRCONTEXT
Expand Down

0 comments on commit 08209e7

Please sign in to comment.