Skip to main content

Module iota::iota

Coin<IOTA> is the token used to pay for gas in IOTA. It has 9 decimals, and the smallest unit (10^-9) is called "nano".

use iota::address; use iota::bag; use iota::balance; use iota::coin; use iota::config; use iota::deny_list; use iota::dynamic_field; use iota::dynamic_object_field; use iota::event; use iota::hex; use iota::object; use iota::transfer; use iota::tx_context; use iota::types; use iota::url; use std::address; use std::ascii; use std::bcs; use std::option; use std::string; use std::type_name; use std::vector;

Struct IOTA

Name of the coin

public struct IOTA has drop

Fields

Struct IotaTreasuryCap

The IOTA token treasury capability. Protects the token from unauthorized changes.

public struct IotaTreasuryCap has store

Fields

Constants

const EAlreadyMinted: u64 = 0;

Sender is not @0x0 the system address.

const ENotSystemAddress: u64 = 1;

Function new

Register the IOTA Coin to acquire IotaTreasuryCap. This should be called only once during genesis creation.

fun new(ctx: &mut iota::tx_context::TxContext): iota::iota::IotaTreasuryCap

Implementation

fun new(ctx: &mut TxContext): IotaTreasuryCap { assert!(ctx.sender() == @0x0, ENotSystemAddress); assert!(ctx.epoch() == 0, EAlreadyMinted); let (treasury, metadata) = coin::create_currency( IOTA {}, 9, b"IOTA", b"IOTA", b"The main (gas)token of the IOTA Network.", option::some(url::new_unsafe_from_bytes(b"https://iota.org/logo.png")), ctx, ); transfer::public_freeze_object(metadata); IotaTreasuryCap { inner: treasury, } }

Function transfer

public entry fun transfer(c: iota::coin::Coin<iota::iota::IOTA>, recipient: address)

Implementation

public entry fun transfer(c: coin::Coin<IOTA>, recipient: address) { transfer::public_transfer(c, recipient) }

Function mint

Create an IOTA coin worth value and increase the total supply in cap accordingly.

public fun mint(cap: &mut iota::iota::IotaTreasuryCap, value: u64, ctx: &mut iota::tx_context::TxContext): iota::coin::Coin<iota::iota::IOTA>

Implementation

public fun mint(cap: &mut IotaTreasuryCap, value: u64, ctx: &mut TxContext): Coin<IOTA> { assert!(ctx.sender() == @0x0, ENotSystemAddress); cap.inner.mint(value, ctx) }

Function mint_balance

Mint some amount of IOTA as a Balance and increase the total supply in cap accordingly. Aborts if value + cap.inner.total_supply >= U64_MAX

public fun mint_balance(cap: &mut iota::iota::IotaTreasuryCap, value: u64, ctx: &iota::tx_context::TxContext): iota::balance::Balance<iota::iota::IOTA>

Implementation

public fun mint_balance(cap: &mut IotaTreasuryCap, value: u64, ctx: &TxContext): Balance<IOTA> { assert!(ctx.sender() == @0x0, ENotSystemAddress); cap.inner.mint_balance(value) }

Function burn

Destroy the IOTA coin c and decrease the total supply in cap accordingly.

public fun burn(cap: &mut iota::iota::IotaTreasuryCap, c: iota::coin::Coin<iota::iota::IOTA>, ctx: &iota::tx_context::TxContext): u64

Implementation

public fun burn(cap: &mut IotaTreasuryCap, c: Coin<IOTA>, ctx: &TxContext): u64 { assert!(ctx.sender() == @0x0, ENotSystemAddress); cap.inner.burn(c) }

Function burn_balance

Destroy the IOTA balance b and decrease the total supply in cap accordingly.

public fun burn_balance(cap: &mut iota::iota::IotaTreasuryCap, b: iota::balance::Balance<iota::iota::IOTA>, ctx: &iota::tx_context::TxContext): u64

Implementation

public fun burn_balance(cap: &mut IotaTreasuryCap, b: Balance<IOTA>, ctx: &TxContext): u64 { assert!(ctx.sender() == @0x0, ENotSystemAddress); cap.inner.supply_mut().decrease_supply(b) }

Function total_supply

Return the total number of IOTA's in circulation.

public fun total_supply(cap: &iota::iota::IotaTreasuryCap): u64

Implementation

public fun total_supply(cap: &IotaTreasuryCap): u64 { cap.inner.total_supply() }