Skip to content

Commit

Permalink
feat: Pass calldata ids to the backend (#7875)
Browse files Browse the repository at this point in the history
Resolves #1070
  • Loading branch information
sirasistant authored and AztecBot committed Aug 13, 2024
1 parent 6776d22 commit 0587144
Show file tree
Hide file tree
Showing 5 changed files with 10 additions and 28 deletions.
1 change: 0 additions & 1 deletion cpp/src/barretenberg/dsl/acir_format/acir_format.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -190,7 +190,6 @@ void build_constraints(Builder& builder,
}

// Add block constraints
assign_calldata_ids<Builder>(constraint_system.block_constraints);
for (size_t i = 0; i < constraint_system.block_constraints.size(); ++i) {
const auto& constraint = constraint_system.block_constraints.at(i);
create_block_constraints(builder, constraint, has_valid_witness_assignments);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -518,6 +518,7 @@ BlockConstraint handle_memory_init(Program::Opcode::MemoryInit const& mem_init)
// array.
if (std::holds_alternative<Program::BlockType::CallData>(mem_init.block_type.value)) {
block.type = BlockType::CallData;
block.calldata_id = std::get<Program::BlockType::CallData>(mem_init.block_type.value).value;
} else if (std::holds_alternative<Program::BlockType::ReturnData>(mem_init.block_type.value)) {
block.type = BlockType::ReturnData;
}
Expand Down
16 changes: 0 additions & 16 deletions cpp/src/barretenberg/dsl/acir_format/block_constraint.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -213,20 +213,4 @@ void process_return_data_operations(const BlockConstraint& constraint, std::vect
ASSERT(constraint.trace.size() == 0);
}

// Do nothing for Ultra since it does not support Databus
template <> void assign_calldata_ids<UltraCircuitBuilder>([[maybe_unused]] std::vector<BlockConstraint>& constraints) {}

template <> void assign_calldata_ids<MegaCircuitBuilder>(std::vector<BlockConstraint>& constraints)
{
// Assign unique ID to each calldata block constraint
uint32_t calldata_id = 0;
for (auto& constraint : constraints) {
if (constraint.type == BlockType::CallData) {
constraint.calldata_id = calldata_id++;
}
}
// The backend only supports 2 calldata columns
ASSERT(calldata_id <= 2);
}

} // namespace acir_format
10 changes: 0 additions & 10 deletions cpp/src/barretenberg/dsl/acir_format/block_constraint.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -48,16 +48,6 @@ void process_call_data_operations(Builder& builder,
template <typename Builder>
void process_return_data_operations(const BlockConstraint& constraint, std::vector<bb::stdlib::field_t<Builder>>& init);

/**
* @brief Assign a unique ID to each calldata block constraint based on the order in which it was recieved
* TODO(https://github.com/AztecProtocol/barretenberg/issues/1070): this is a workaround to allow calldata inputs to be
* distinguished by the backend since no identifiers are received from noir.
*
* @tparam Builder
* @param constraints
*/
template <typename Builder> void assign_calldata_ids(std::vector<BlockConstraint>& constraints);

template <typename B> inline void read(B& buf, MemOp& mem_op)
{
using serialize::read;
Expand Down
10 changes: 9 additions & 1 deletion cpp/src/barretenberg/dsl/acir_format/serde/acir.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -1107,6 +1107,8 @@ struct BlockType {
};

struct CallData {
uint32_t value;

friend bool operator==(const CallData&, const CallData&);
std::vector<uint8_t> bincodeSerialize() const;
static CallData bincodeDeserialize(std::vector<uint8_t>);
Expand Down Expand Up @@ -5578,6 +5580,9 @@ namespace Program {

inline bool operator==(const BlockType::CallData& lhs, const BlockType::CallData& rhs)
{
if (!(lhs.value == rhs.value)) {
return false;
}
return true;
}

Expand All @@ -5604,14 +5609,17 @@ template <>
template <typename Serializer>
void serde::Serializable<Program::BlockType::CallData>::serialize(const Program::BlockType::CallData& obj,
Serializer& serializer)
{}
{
serde::Serializable<decltype(obj.value)>::serialize(obj.value, serializer);
}

template <>
template <typename Deserializer>
Program::BlockType::CallData serde::Deserializable<Program::BlockType::CallData>::deserialize(
Deserializer& deserializer)
{
Program::BlockType::CallData obj;
obj.value = serde::Deserializable<decltype(obj.value)>::deserialize(deserializer);
return obj;
}

Expand Down

0 comments on commit 0587144

Please sign in to comment.