4#include <gmock/gmock.h>
5#include <gtest/gtest.h>
19using ::testing::IsEmpty;
20using ::testing::Return;
21using ::testing::SizeIs;
22using ::testing::StrictMock;
30using simulation::FakePoseidon2;
32TEST(AvmSimulationAddressDerivationTest, Positive)
34 EventEmitter<AddressDerivationEvent> address_derivation_event_emitter;
35 FakePoseidon2
poseidon2 = FakePoseidon2();
36 StrictMock<MockEcc> ecc;
38 AddressDerivation address_derivation(
poseidon2, ecc, address_derivation_event_emitter);
41 AztecAddress derived_address = compute_contract_address(instance);
42 std::vector<FF> salted_init_hash_inputs = {
48 instance.original_class_id,
52 std::vector<FF> public_keys_hash_fields = instance.public_keys.to_fields();
54 for (
size_t i = 0; i < public_keys_hash_fields.size(); i += 2) {
55 public_key_hash_vec.push_back(public_keys_hash_fields[i]);
56 public_key_hash_vec.push_back(public_keys_hash_fields[i + 1]);
58 public_key_hash_vec.push_back(FF::zero());
67 EXPECT_CALL(ecc, scalar_mul(
g1, preaddress)).WillOnce(Return(preaddress_public_key));
69 EmbeddedCurvePoint address_point = preaddress_public_key + instance.public_keys.incoming_viewing_key;
70 EXPECT_CALL(ecc, add(preaddress_public_key,
EmbeddedCurvePoint(instance.public_keys.incoming_viewing_key)))
71 .WillOnce(Return(address_point));
73 address_derivation.assert_derivation(derived_address, instance);
75 auto events = address_derivation_event_emitter.dump_events();
76 EXPECT_THAT(events, SizeIs(1));
77 EXPECT_THAT(events[0].instance, instance);
78 EXPECT_THAT(events[0].address, derived_address);
79 EXPECT_THAT(events[0].address_point.x(), derived_address);
82 address_derivation.assert_derivation(derived_address, instance);
83 events = address_derivation_event_emitter.dump_events();
84 EXPECT_THAT(events, IsEmpty());
#define GENERATOR_INDEX__PUBLIC_KEYS_HASH
#define GENERATOR_INDEX__PARTIAL_ADDRESS
#define GENERATOR_INDEX__CONTRACT_ADDRESS_V1
static const StandardAffinePoint & one()
static FF hash(const std::vector< FF > &input)
Hashes a vector of field elements.
group class. Represents an elliptic curve group element. Group is parametrised by Fq and Fr
TEST(EmitUnencryptedLogTest, Basic)
ContractInstance random_contract_instance()
StandardAffinePoint< AvmFlavorSettings::EmbeddedCurve::AffineElement > EmbeddedCurvePoint
AvmFlavorSettings::G1::Fq Fq