axelar-cgp-sui

Module 0xa2::transaction

use 0x1::ascii;
use 0x1::option;
use 0x1::type_name;
use 0x2::address;
use 0x2::bcs;
use 0x2::hex;

Struct Function


Structs ——-

struct Function has copy, drop, store
Fields
package_id: address
module_name: ascii::String
name: ascii::String

Struct MoveCall

Arguments are prefixed with:

struct MoveCall has copy, drop, store
Fields
function: transaction::Function
arguments: vector<vector<u8>>
type_arguments: vector<ascii::String>

Struct Transaction

struct Transaction has copy, drop, store
Fields
is_final: bool
move_calls: vector<transaction::MoveCall>

Constants


Errors ——

const EInvalidString: vector<u8> = [84, 121, 112, 101, 32, 97, 114, 103, 117, 109, 101, 110, 116, 32, 119, 97, 115, 32, 110, 111, 116, 32, 97, 32, 118, 97, 108, 105, 100, 32, 115, 116, 114, 105, 110, 103];

Function new_function


Public Functions —————-

public fun new_function(package_id: address, module_name: ascii::String, name: ascii::String): transaction::Function
Implementation
public fun new_function(
    package_id: address,
    module_name: String,
    name: String,
): Function {
    Function {
        package_id,
        module_name,
        name,
    }
}

Function new_function_from_bcs

public fun new_function_from_bcs(bcs: &mut bcs::BCS): transaction::Function
Implementation
public fun new_function_from_bcs(bcs: &mut BCS): Function {
    Function {
        package_id: bcs::peel_address(bcs),
        module_name: ascii::string(bcs::peel_vec_u8(bcs)),
        name: ascii::string(bcs::peel_vec_u8(bcs)),
    }
}

Function new_move_call

public fun new_move_call(function: transaction::Function, arguments: vector<vector<u8>>, type_arguments: vector<ascii::String>): transaction::MoveCall
Implementation
public fun new_move_call(
    function: Function,
    arguments: vector<vector<u8>>,
    type_arguments: vector<String>,
): MoveCall {
    MoveCall {
        function,
        arguments,
        type_arguments,
    }
}

Function new_move_call_from_bcs

public fun new_move_call_from_bcs(bcs: &mut bcs::BCS): transaction::MoveCall
Implementation
public fun new_move_call_from_bcs(bcs: &mut BCS): MoveCall {
    MoveCall {
        function: new_function_from_bcs(bcs),
        arguments: bcs.peel_vec_vec_u8(),
        type_arguments: vector::tabulate!(
            bcs.peel_vec_length(),
            |_| peel_type(bcs),
        ),
    }
}

Function new_transaction

public fun new_transaction(is_final: bool, move_calls: vector<transaction::MoveCall>): transaction::Transaction
Implementation
public fun new_transaction(
    is_final: bool,
    move_calls: vector<MoveCall>,
): Transaction {
    Transaction {
        is_final,
        move_calls,
    }
}

Function new_transaction_from_bcs

public fun new_transaction_from_bcs(bcs: &mut bcs::BCS): transaction::Transaction
Implementation
public fun new_transaction_from_bcs(bcs: &mut BCS): Transaction {
    Transaction {
        is_final: bcs.peel_bool(),
        move_calls: vector::tabulate!(
            bcs.peel_vec_length(),
            |_| new_move_call_from_bcs(bcs),
        ),
    }
}

Function package_id

Helper function which returns the package id of a type.

public fun package_id<T>(): address
Implementation
public fun package_id<T>(): address {
    address::from_bytes(
        hex::decode(
            *ascii::as_bytes(
                &type_name::get_address(&type_name::get<T>()),
            ),
        ),
    )
}

Function peel_type

fun peel_type(bcs: &mut bcs::BCS): ascii::String
Implementation
fun peel_type(bcs: &mut BCS): ascii::String {
    let mut type_argument = ascii::try_string(bcs.peel_vec_u8());
    assert!(type_argument.is_some(), EInvalidString);
    type_argument.extract()
}