near-non-transferable-token

Crates.ionear-non-transferable-token
lib.rsnear-non-transferable-token
version0.0.8
sourcesrc
created_at2023-01-16 13:50:57.205903
updated_at2023-10-23 08:09:27.054351
descriptionNEAR smart contracts library.
homepagehttps://popula.io
repositoryhttps://github.com/beepopula/near-non-transferable-token
max_upload_size
id760171
size47,997
Jimmy Bai (bhc8521)

documentation

README

near-non-transferable-token

Popula Library for Non-transferable Token.

Crates.io version Download Reference Documentation

Example

use near_non_transferable_token::{impl_fungible_token_core, impl_fungible_token_storage};

#[near_bindgen]
impl Contract {
    #[init]
    pub fn new(
        owner_id: AccountId,
        metadata: FungibleTokenMetadata,
    ) -> Self {
        assert!(!env::state_exists(), "Already initialized");
        metadata.assert_valid();
        let mut this = Self {
            token: FungibleToken::new(b"a".to_vec()),
            metadata: LazyOption::new(b"m".to_vec(), Some(&metadata)),
            owner_id,
            white_list: HashSet::new()
        };
        this
    }
}

impl_fungible_token_core!(Contract, token);
impl_fungible_token_storage!(Contract, token);


#[near_bindgen]
impl FungibleTokenMetadataProvider for Contract {
    fn ft_metadata(&self) -> FungibleTokenMetadata {
        self.metadata.get().unwrap()
    }
}

See https://github.com/beepopula/Drip-contract for more details.

Features

Account Book

Separate Balances for different contracts:

#[derive(BorshDeserialize, BorshSerialize)]
pub struct Account {
    pub contract_ids: UnorderedMap<Option<AccountId>, Balance>,
    pub deposit_map: UnorderedMap<AccountId, HashMap<Option<AccountId>, Balance>>  //key: specific community drip
}

NOTES:

  • If the key for contract_ids is None then it represent the sum of Balance.
  • Deposit is a derivative function for proving that you have such balance for only once, preventing infinite proving. And the ownership should remain the same.

Versioning

Semantic Versioning

This crate follows Cargo's semver guidelines.

State breaking changes (low-level serialization format of any data type) will be avoided at all costs. If a change like this were to happen, it would come with a major version and come with a compiler error. If you encounter one that does not, open an issue!

MSRV

The minimum supported Rust version is currently 1.56. There are no guarantees that this will be upheld if a security patch release needs to come in that requires a Rust toolchain increase.

Commit count: 30

cargo fmt