2#include "../constants.hpp"
3#include "barretenberg/common/serialize.hpp"
4#include "barretenberg/common/throw_or_abort.hpp"
5#include "barretenberg/crypto/pedersen_commitment/pedersen.hpp"
6#include "barretenberg/ecc/curves/grumpkin/grumpkin.hpp"
8namespace join_split_example {
29 static constexpr uint256_t input_asset_id_a_shift = DEFI_BRIDGE_ADDRESS_ID_LEN;
30 static constexpr uint256_t input_asset_id_b_shift = input_asset_id_a_shift + DEFI_BRIDGE_OUTPUT_B_ASSET_ID_LEN;
31 static constexpr uint256_t output_asset_id_a_shift = input_asset_id_b_shift + DEFI_BRIDGE_INPUT_A_ASSET_ID_LEN;
32 static constexpr uint256_t output_asset_id_b_shift = output_asset_id_a_shift + DEFI_BRIDGE_OUTPUT_A_ASSET_ID_LEN;
33 static constexpr uint256_t bitconfig_shift = output_asset_id_b_shift + DEFI_BRIDGE_INPUT_B_ASSET_ID_LEN;
34 static constexpr uint256_t aux_data_shift = bitconfig_shift + DEFI_BRIDGE_BITCONFIG_LEN;
49 bool second_input_in_use =
false;
50 bool second_output_in_use =
false;
54 bool res = (second_input_in_use == other.second_input_in_use);
55 res = res && (second_output_in_use == other.second_output_in_use);
61 constexpr auto input_asset_id_a_shift = DEFI_BRIDGE_ADDRESS_ID_LEN;
62 constexpr auto output_asset_id_a_shift = input_asset_id_a_shift + DEFI_BRIDGE_INPUT_A_ASSET_ID_LEN;
63 constexpr auto output_asset_id_b_shift = output_asset_id_a_shift + DEFI_BRIDGE_OUTPUT_A_ASSET_ID_LEN;
64 constexpr auto input_asset_id_b_shift = output_asset_id_b_shift + DEFI_BRIDGE_OUTPUT_B_ASSET_ID_LEN;
65 constexpr auto bitconfig_shift = input_asset_id_b_shift + DEFI_BRIDGE_INPUT_B_ASSET_ID_LEN;
68 result +=
uint256_t(second_output_in_use) << 1;
69 result = result << bitconfig_shift;
75 constexpr auto input_asset_id_a_shift = DEFI_BRIDGE_ADDRESS_ID_LEN;
76 constexpr auto output_asset_id_a_shift = input_asset_id_a_shift + DEFI_BRIDGE_INPUT_A_ASSET_ID_LEN;
77 constexpr auto output_asset_id_b_shift = output_asset_id_a_shift + DEFI_BRIDGE_OUTPUT_A_ASSET_ID_LEN;
78 constexpr auto input_asset_id_b_shift = output_asset_id_b_shift + DEFI_BRIDGE_OUTPUT_B_ASSET_ID_LEN;
79 constexpr auto bitconfig_shift = input_asset_id_b_shift + DEFI_BRIDGE_INPUT_B_ASSET_ID_LEN;
80 constexpr auto bitconfig_mask = (1ULL << DEFI_BRIDGE_BITCONFIG_LEN) - 1;
81 uint32_t config_u32 = uint32_t((
bridge_call_data >> bitconfig_shift) & bitconfig_mask);
84 result.second_input_in_use = config_u32 & 1ULL;
85 result.second_output_in_use = (config_u32 >> 1) & 1ULL;
90 uint32_t bridge_address_id;
91 uint32_t input_asset_id_a;
92 uint32_t input_asset_id_b = 0;
93 uint32_t output_asset_id_a;
94 uint32_t output_asset_id_b;
96 uint64_t aux_data = 0;
102 result.bridge_address_id =
104 result.input_asset_id_a =
static_cast<uint32_t
>((
bridge_call_data >> input_asset_id_a_shift) &
105 uint256_t((one << DEFI_BRIDGE_INPUT_A_ASSET_ID_LEN) - 1));
106 result.input_asset_id_b =
static_cast<uint32_t
>((
bridge_call_data >> input_asset_id_b_shift) &
107 uint256_t((one << DEFI_BRIDGE_INPUT_B_ASSET_ID_LEN) - 1));
108 result.output_asset_id_a =
static_cast<uint32_t
>(((
bridge_call_data >> output_asset_id_a_shift) &
109 uint256_t((one << DEFI_BRIDGE_OUTPUT_A_ASSET_ID_LEN) - 1)));
110 result.output_asset_id_b =
static_cast<uint32_t
>((
bridge_call_data >> output_asset_id_b_shift) &
111 uint256_t((one << DEFI_BRIDGE_OUTPUT_B_ASSET_ID_LEN) - 1));
122 bool input_asset_id_a_check = ((input_asset_id_a >> DEFI_BRIDGE_INPUT_A_ASSET_ID_LEN) == 0);
123 bool input_asset_id_b_check = ((input_asset_id_b >> DEFI_BRIDGE_INPUT_A_ASSET_ID_LEN) == 0);
124 bool output_asset_id_a_check = ((output_asset_id_a >> DEFI_BRIDGE_OUTPUT_A_ASSET_ID_LEN) == 0);
125 bool output_asset_id_b_check = ((output_asset_id_b >> DEFI_BRIDGE_OUTPUT_B_ASSET_ID_LEN) == 0);
127 if (!(input_asset_id_a_check && input_asset_id_b_check && output_asset_id_a_check && output_asset_id_b_check)) {
128 throw_or_abort(
"Structure of the bridge_call_data incorrect!");
131 constexpr uint32_t input_asset_id_a_offset = DEFI_BRIDGE_ADDRESS_ID_LEN;
132 constexpr uint32_t input_asset_id_b_offset = input_asset_id_a_offset + DEFI_BRIDGE_OUTPUT_B_ASSET_ID_LEN;
133 constexpr uint32_t output_asset_id_a_offset = input_asset_id_b_offset + DEFI_BRIDGE_INPUT_A_ASSET_ID_LEN;
134 constexpr uint32_t output_asset_id_b_offset = output_asset_id_a_offset + DEFI_BRIDGE_OUTPUT_A_ASSET_ID_LEN;
135 constexpr uint32_t bitconfig_offset = output_asset_id_b_offset + DEFI_BRIDGE_INPUT_B_ASSET_ID_LEN;
136 constexpr uint32_t aux_data_offset = bitconfig_offset + DEFI_BRIDGE_BITCONFIG_LEN;
139 (
static_cast<uint256_t>(input_asset_id_a) << input_asset_id_a_offset) +
140 (
static_cast<uint256_t>(input_asset_id_b) << input_asset_id_b_offset) +
141 (
static_cast<uint256_t>(output_asset_id_a) << output_asset_id_a_offset) +
142 (
static_cast<uint256_t>(output_asset_id_b) << output_asset_id_b_offset) +
143 config.to_uint256_t() + (
static_cast<uint256_t>(aux_data) << aux_data_offset);
148 operator uint256_t()
const {
return to_uint256_t(); }
150 bool operator==(bridge_call_data
const& other)
const
152 bool res = bridge_address_id == other.bridge_address_id;
153 res = res && (input_asset_id_a == other.input_asset_id_a);
154 res = res && (input_asset_id_b == other.input_asset_id_b);
155 res = res && (output_asset_id_a == other.output_asset_id_a);
156 res = res && (output_asset_id_b == other.output_asset_id_b);
157 res = res && (aux_data == other.aux_data);
158 res = res && (config == other.config);
163inline std::ostream& operator<<(std::ostream& os, bridge_call_data::bit_config
const& config)
165 os <<
" second_input_in_use: " << config.second_input_in_use <<
",\n"
166 <<
" second_output_in_use: " << config.second_output_in_use <<
",\n";
170inline std::ostream& operator<<(std::ostream& os, bridge_call_data
const& bridge_call_data)
173 <<
" bridge_address_id: " << bridge_call_data.bridge_address_id <<
",\n"
174 <<
" input_asset_id_a: " << bridge_call_data.input_asset_id_a <<
",\n"
175 <<
" input_asset_id_b: " << bridge_call_data.input_asset_id_b <<
",\n"
176 <<
" output_asset_id_a: " << bridge_call_data.output_asset_id_a <<
",\n"
177 <<
" output_asset_id_b: " << bridge_call_data.output_asset_id_a <<
"\n}" << bridge_call_data.config
178 <<
" aux_data: " << bridge_call_data.aux_data <<
"\n}";
Definition: uint256.hpp:25
Definition: bridge_call_data.hpp:48
Definition: bridge_call_data.hpp:27