src20_sdk 0.0.3

Sway token standard SRC-20 rust sdk
Documentation
use fuels::{
    accounts::wallet::WalletUnlocked,
    prelude::{abigen, Contract, LoadConfiguration, TxParameters},
    types::SizedAsciiString,
};

abigen!(Contract(
    name = "TokenContract",
    abi = "contract/out/debug/FRC20-abi.json"
));
pub struct DeployTokenConfig {
    pub name: String,
    pub symbol: String,
    pub decimals: u8,
}

pub async fn deploy_token_contract(
    wallet: &WalletUnlocked,
    deploy_config: &DeployTokenConfig,
    bin_path: &str,
) -> TokenContract<WalletUnlocked> {
    let mut name = deploy_config.name.clone();
    name.push_str(" ".repeat(32 - name.len()).as_str());
    let name = SizedAsciiString::<32>::new(name).unwrap();

    let mut symbol = deploy_config.symbol.clone();
    symbol.push_str(" ".repeat(8 - symbol.len()).as_str());
    let symbol = SizedAsciiString::<8>::new(symbol).unwrap();

    let configurables = TokenContractConfigurables::new()
        .set_DECIMALS(deploy_config.decimals)
        .set_NAME(name)
        .set_SYMBOL(symbol)
        .set_OWNER(wallet.address().into());

    let config = LoadConfiguration::default().set_configurables(configurables);
    let id = Contract::load_from(bin_path, config)
        .unwrap()
        .deploy(wallet, TxParameters::default().set_gas_price(1))
        .await
        .unwrap();

    TokenContract::new(id, wallet.clone())
}

pub mod token_abi_calls {

    use fuels::{programs::call_response::FuelCallResponse, types::Address};

    use super::*;

    pub async fn mint(
        instance: &TokenContract<WalletUnlocked>,
        amount: u64,
        recipient: Address,
    ) -> Result<FuelCallResponse<()>, fuels::types::errors::Error> {
        instance
            .methods()
            ._mint(amount, recipient)
            .tx_params(TxParameters::default().set_gas_price(1))
            .append_variable_outputs(1)
            .call()
            .await
    }
}