crates/sui-framework/docs/sui/group_ops.md
Generic Move and native functions for group operations.
Elementbytesequalfrom_bytesaddsubmuldivhash_tomulti_scalar_multiplicationpairingconvertsuminternal_validateinternal_addinternal_subinternal_mulinternal_divinternal_hash_tointernal_multi_scalar_mulinternal_pairinginternal_convertinternal_sumset_as_prefix<a name="sui_group_ops_Element"></a>
Element<a name="@Constants_0"></a>
<a name="sui_group_ops_ENotSupported"></a>
<pre><code><b>const</b> <a href="../sui/group_ops.md#sui_group_ops_ENotSupported">ENotSupported</a>: u64 = 0; </code></pre><a name="sui_group_ops_EInvalidInput"></a>
<pre><code><b>const</b> <a href="../sui/group_ops.md#sui_group_ops_EInvalidInput">EInvalidInput</a>: u64 = 1; </code></pre><a name="sui_group_ops_EInputTooLong"></a>
<pre><code><b>const</b> <a href="../sui/group_ops.md#sui_group_ops_EInputTooLong">EInputTooLong</a>: u64 = 2; </code></pre><a name="sui_group_ops_EInvalidBufferLength"></a>
<pre><code><b>const</b> <a href="../sui/group_ops.md#sui_group_ops_EInvalidBufferLength">EInvalidBufferLength</a>: u64 = 3; </code></pre><a name="sui_group_ops_bytes"></a>
bytes<a name="sui_group_ops_equal"></a>
equal<a name="sui_group_ops_from_bytes"></a>
from_bytes<a name="sui_group_ops_add"></a>
add<a name="sui_group_ops_sub"></a>
sub<a name="sui_group_ops_mul"></a>
mul<a name="sui_group_ops_div"></a>
divFails if scalar = 0. Else returns 1/scalar * e.
<pre><code><b>public</b>(<a href="../sui/package.md#sui_package">package</a>) <b>fun</b> <a href="../sui/group_ops.md#sui_group_ops_div">div</a><S, G>(type_: u8, scalar: &<a href="../sui/group_ops.md#sui_group_ops_Element">sui::group_ops::Element</a><S>, e: &<a href="../sui/group_ops.md#sui_group_ops_Element">sui::group_ops::Element</a><G>): <a href="../sui/group_ops.md#sui_group_ops_Element">sui::group_ops::Element</a><G> </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b>(<a href="../sui/package.md#sui_package">package</a>) <b>fun</b> <a href="../sui/group_ops.md#sui_group_ops_div">div</a><S, G>(type_: u8, scalar: &<a href="../sui/group_ops.md#sui_group_ops_Element">Element</a><S>, e: &<a href="../sui/group_ops.md#sui_group_ops_Element">Element</a><G>): <a href="../sui/group_ops.md#sui_group_ops_Element">Element</a><G> { <a href="../sui/group_ops.md#sui_group_ops_Element">Element</a><G> { <a href="../sui/group_ops.md#sui_group_ops_bytes">bytes</a>: <a href="../sui/group_ops.md#sui_group_ops_internal_div">internal_div</a>(type_, &scalar.<a href="../sui/group_ops.md#sui_group_ops_bytes">bytes</a>, &e.<a href="../sui/group_ops.md#sui_group_ops_bytes">bytes</a>) } } </code></pre> </details><a name="sui_group_ops_hash_to"></a>
hash_to<a name="sui_group_ops_multi_scalar_multiplication"></a>
multi_scalar_multiplicationAborts with <code><a href="../sui/group_ops.md#sui_group_ops_EInputTooLong">EInputTooLong</a></code> if the vectors are too long.
This function is currently only enabled on Devnet.
<pre><code><b>public</b>(<a href="../sui/package.md#sui_package">package</a>) <b>fun</b> <a href="../sui/group_ops.md#sui_group_ops_multi_scalar_multiplication">multi_scalar_multiplication</a><S, G>(type_: u8, scalars: &vector<<a href="../sui/group_ops.md#sui_group_ops_Element">sui::group_ops::Element</a><S>>, elements: &vector<<a href="../sui/group_ops.md#sui_group_ops_Element">sui::group_ops::Element</a><G>>): <a href="../sui/group_ops.md#sui_group_ops_Element">sui::group_ops::Element</a><G> </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b>(<a href="../sui/package.md#sui_package">package</a>) <b>fun</b> <a href="../sui/group_ops.md#sui_group_ops_multi_scalar_multiplication">multi_scalar_multiplication</a><S, G>( type_: u8, scalars: &vector<<a href="../sui/group_ops.md#sui_group_ops_Element">Element</a><S>>, elements: &vector<<a href="../sui/group_ops.md#sui_group_ops_Element">Element</a><G>>, ): <a href="../sui/group_ops.md#sui_group_ops_Element">Element</a><G> { <b>assert</b>!(scalars.length() > 0, <a href="../sui/group_ops.md#sui_group_ops_EInvalidInput">EInvalidInput</a>); <b>assert</b>!(scalars.length() == elements.length(), <a href="../sui/group_ops.md#sui_group_ops_EInvalidInput">EInvalidInput</a>); <b>let</b> <b>mut</b> scalars_bytes: vector<u8> = vector[]; <b>let</b> <b>mut</b> elements_bytes: vector<u8> = vector[]; <b>let</b> <b>mut</b> i = 0; <b>while</b> (i < scalars.length()) { <b>let</b> scalar_vec = scalars[i]; scalars_bytes.append(scalar_vec.<a href="../sui/group_ops.md#sui_group_ops_bytes">bytes</a>); <b>let</b> element_vec = elements[i]; elements_bytes.append(element_vec.<a href="../sui/group_ops.md#sui_group_ops_bytes">bytes</a>); i = i + 1; }; <a href="../sui/group_ops.md#sui_group_ops_Element">Element</a><G> { <a href="../sui/group_ops.md#sui_group_ops_bytes">bytes</a>: <a href="../sui/group_ops.md#sui_group_ops_internal_multi_scalar_mul">internal_multi_scalar_mul</a>(type_, &scalars_bytes, &elements_bytes) } } </code></pre> </details><a name="sui_group_ops_pairing"></a>
pairing<a name="sui_group_ops_convert"></a>
convert<a name="sui_group_ops_sum"></a>
sum<a name="sui_group_ops_internal_validate"></a>
internal_validate<a name="sui_group_ops_internal_add"></a>
internal_add<a name="sui_group_ops_internal_sub"></a>
internal_sub<a name="sui_group_ops_internal_mul"></a>
internal_mul<a name="sui_group_ops_internal_div"></a>
internal_div<a name="sui_group_ops_internal_hash_to"></a>
internal_hash_to<a name="sui_group_ops_internal_multi_scalar_mul"></a>
internal_multi_scalar_mul<a name="sui_group_ops_internal_pairing"></a>
internal_pairing<a name="sui_group_ops_internal_convert"></a>
internal_convert<a name="sui_group_ops_internal_sum"></a>
internal_sum<a name="sui_group_ops_set_as_prefix"></a>
set_as_prefix