Skip to main content

Module sui::accumulator

use std::address;
use std::ascii;
use std::bcs;
use std::option;
use std::string;
use std::type_name;
use std::vector;
use sui::address;
use sui::dynamic_field;
use sui::hex;
use sui::object;
use sui::transfer;
use sui::tx_context;

Struct Accumulator

public struct Accumulator has key
Click to open
Fields

Struct Key

public struct Key has copy, drop, store
Click to open
Fields
address: address
ty: vector<u8>

Constants

const ENotSystemAddress: u64 = 0;

Function accumulator_id

public fun accumulator_id(acc: &mut sui::accumulator::Accumulator): &mut sui::object::UID
Click to open
Implementation
public fun accumulator_id(acc: &mut Accumulator): &mut UID {
    &mut acc.id
}

Function create

fun create(ctx: &sui::tx_context::TxContext)
Click to open
Implementation
fun create(ctx: &TxContext) {
    assert!(ctx.sender() == @0x0, ENotSystemAddress);
    transfer::share_object(Accumulator {
        id: object::sui_accumulator_root_object_id(),
    })
}

Function commit_to_checkpoint

No-op called by settlement transactions to ensure that they are unique.

entry fun commit_to_checkpoint(_epoch: u64, _checkpoint_height: u64, _idx: u64, ctx: &sui::tx_context::TxContext)
Click to open
Implementation
entry fun commit_to_checkpoint(_epoch: u64, _checkpoint_height: u64, _idx: u64, ctx: &TxContext) {
    assert!(ctx.sender() == @0x0, ENotSystemAddress);
}

Function get_accumulator_field_name

public(package) fun get_accumulator_field_name<T>(address: address): sui::accumulator::Key
Click to open
Implementation
public(package) fun get_accumulator_field_name<T>(address: address): Key {
    let ty = type_name::get_with_original_ids<T>().into_string().into_bytes();
    Key { address, ty }
}

Function get_accumulator_field_address

public(package) fun get_accumulator_field_address<T>(address: address): address
Click to open
Implementation
public(package) fun get_accumulator_field_address<T>(address: address): address {
    let key = get_accumulator_field_name<T>(address);
    dynamic_field::hash_type_and_key(sui_accumulator_root_address(), key)
}