4#include <gtest/gtest.h>
18using simulation::Instruction;
19using IB = testing::InstructionBuilder;
21using testing::PublicTxSimulationTester;
22using testing::TestEnqueuedCall;
36Instruction calldatacopy(uint16_t copy_size, uint16_t cd_start, uint16_t dst)
48Instruction ret(uint16_t copy_size, uint16_t return_offset)
55std::vector<uint8_t> make_inner_bytecode()
69std::vector<uint8_t> make_outer_bytecode()
75 calldatacopy(1, 0, 3),
80 for (uint16_t i = 0; i < 8; ++i) {
81 instructions.push_back(set8(
static_cast<uint8_t
>(10 + i),
MemoryTag::U32, 0));
86 for (uint16_t i = 0; i < 15; ++i) {
87 instructions.push_back(set8(
static_cast<uint8_t
>(19 + i),
MemoryTag::U32, 0));
90 instructions.push_back(sha256compression(34, 10, 18));
91 instructions.push_back(ret(0, 0));
95PublicSimulatorConfig proving_config()
97 PublicSimulatorConfig config = PublicTxSimulationTester::default_config();
98 config.collect_hints =
true;
99 config.collect_public_inputs =
true;
108TEST(AvmCompleteness, BitwiseSha256ErrorRowCollision)
110 PublicTxSimulationTester tester;
111 const auto inner = tester.deploy_contract(make_inner_bytecode());
112 const auto outer = tester.deploy_contract(make_outer_bytecode());
115 const TxSimulationResult fast_result =
116 tester.simulate_tx({ TestEnqueuedCall{ .contract_address = outer.address, .calldata = { inner.address } } });
120 const TxSimulationResult hint_result = tester.simulate_tx(
121 { TestEnqueuedCall{ .contract_address = outer.address, .calldata = { inner.address } } }, proving_config());
122 ASSERT_TRUE(hint_result.public_inputs.has_value());
123 ASSERT_TRUE(hint_result.hints.has_value());
125 const AvmProvingInputs proving_inputs{ .public_inputs = *hint_result.public_inputs, .hints = *hint_result.hints };
127 EXPECT_TRUE(api.check_circuit(proving_inputs));
std::vector< uint8_t > encode_to_bytecode(const std::vector< Instruction > &instructions)
Instruction
Enumeration of VM instructions that can be executed.
TEST(BoomerangMegaCircuitBuilder, BasicCircuit)
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
bb::VectorAffineElementPushSpan< BaseParams > out