#near #token #values #ergonomically #u128 #borsh #near-protocol

no-std near-token

a small crate to work with NEAR token values ergonomically and efficiently (NEAR Protocol)

5 releases (3 breaking)

0.3.0 Aug 12, 2024
0.2.3 Aug 12, 2024
0.2.1 Jul 31, 2024
0.2.0 Oct 28, 2023
0.0.1 Oct 22, 2023

#2 in #near-protocol

Download history 852/week @ 2024-06-27 826/week @ 2024-07-04 699/week @ 2024-07-11 1122/week @ 2024-07-18 1476/week @ 2024-07-25 1769/week @ 2024-08-01 2270/week @ 2024-08-08 1641/week @ 2024-08-15 1077/week @ 2024-08-22 1552/week @ 2024-08-29 1968/week @ 2024-09-05 1288/week @ 2024-09-12 1048/week @ 2024-09-19 1151/week @ 2024-09-26 1008/week @ 2024-10-03 1308/week @ 2024-10-10

4,694 downloads per month
Used in 19 crates (6 directly)

MIT/Apache

40KB
754 lines

Crates.io (latest) Docs.rs Rust Version

near-token

near-token is crate for work with tokens in near-protocol.

The crate includes NearToken type and constructors for converting data as NearToken and as u128 type values.

Examples

Basic

Add near-token to your dependencies:

cargo add near-token

Here is the basic usage of near-token crate:

use near_token::NearToken;

fn main() {
    const TEN_NEAR: NearToken = NearToken::from_near(10);

    assert_eq!(TEN_NEAR.to_string(), "10.00 NEAR");
    assert_eq!(TEN_NEAR.as_near(), 10);
    assert_eq!(TEN_NEAR.as_millinear(), 10000);
    assert_eq!(TEN_NEAR.as_yoctonear(), 10000000000000000000000000);

    let input_str = "0.123456 NEAR";
    let input_near: NearToken = input_str.parse().unwrap();
    assert_eq!(
        input_near,
        NearToken::from_yoctonear(123456000000000000000000)
    );

}

serde support

In order to use NearToken in serde-serializable structs, enable serde feature:

cargo add near-token --features serde

Here is the basic usage of near-token crate with serde:

// When `serde` feature is enabled, NearToken can be used in serde-serializable structs.
// NearToken will be serialized to a token-precision u128 value encoded as string.
#[derive(serde::Serialize)]
struct TransferDetails {
    amount: NearToken,
}

fn main() {
    const TEN_NEAR: NearToken = NearToken::from_near(10);

    let details = TransferDetails { amount: TEN_NEAR };
    assert_eq!(
        serde_json::to_string(&details).unwrap(),
        r#"{"amount":"10000000000000000000000000"}"#
    );
}

borsh support

In order to use NearToken in borsh-serializable structs, enable borsh feature:

cargo add near-token --features borsh

Here is the basic usage of near-token crate with borsh:

use borsh::{to_vec, BorshSerialize};
use near_token::NearToken;

#[derive(BorshSerialize)]
struct TransferDetails {
    amount: NearToken,
}

fn main() {
    const TEN_NEAR: NearToken = NearToken::from_near(10);

    let details = TransferDetails { amount: TEN_NEAR };
    assert_eq!(
        to_vec(&details).unwrap(),
        vec![0, 0, 0, 74, 72, 1, 20, 22, 149, 69, 8, 0, 0, 0, 0, 0]
    );
}

NearToken information

NEAR is used to price computation and storage on the NEAR infrastructure. The network charges transaction fees in NEAR to process changes and transactions.

License

This project is licensed under the MIT license and Apache-2.0 license.

Dependencies

~0–600KB
~12K SLoC