npm package: @renec-foundation/sdk-easytoken
Description: ``` npm install @renec-foundation/sdk-easytoken // or yarn add @renec-foundation/sdk-easytoken ```
Author: andt99
Latest version: 0.0.1

# Installation

```
npm install @renec-foundation/sdk-easytoken
// or
yarn add @renec-foundation/sdk-easytoken
```

# How to use

## Setup

You need to wrap your application with WalletProvider to use the library. You can either use:

1. **Renec Adapter**: `@renec-foundation/wallet-adapter-react`: https://www.npmjs.com/package/@renec-foundation/wallet-adapter-react

**_app.tsx**
```typescript jsx
import { Provider as WalletProvider } from "@renec-foundation/wallet-adapter-react";
import "@renec-foundation/wallet-adapter-react/src/style.css";
...

/**
 * params:
 *  isMainnet: this can either be true("mainnet") or false("testnet")
 *  autoConnect: default value is true. This indicates when using WalletMultiButton component, it will try to automatically ask user to connect to wallet.
 */

...
<WalletProvider
  isMainnet={true}
  autoConnect={true}
>
  {children}
</WalletProvider>
...
```

2. **Solana Adapter**: `@solana/wallet-adapter-react`: https://www.npmjs.com/package/@solana/wallet-adapter-react (refer to this guide https://github.com/solana-labs/wallet-adapter/blob/master/APP.md)


#### *In case you are using Next.js with **Renec Adapter***

Add this to your `next.config.js` to load `'@renec-foundation/wallet-adapter-react'`


``` typescript
const nextConfig = {
  transpilePackages: ['@renec-foundation/wallet-adapter-react']
}

module.exports = nextConfig
```


## Usage


```typescript jsx
import {
  WalletMultiButton,
  Provider as WalletProvider,
} from "@renec-foundation/wallet-adapter-react";
import { useConnection, useWallet } from "@solana/wallet-adapter-react";
import { useEasyToken } from "../hooks";
import { CreateToken } from "../types";


// For NextJS
// --------
import dynamic from "next/dynamic";
const MultiConnectButton = dynamic(
  async () =>
    (await import("@renec-foundation/wallet-adapter-react")).WalletMultiButton,
  { ssr: false }
);
// --------

const Demo = () => {
  const wallet = useWallet();
  const { connection } = useConnection();
  const { initializerToken, mintToken } = useEasyToken(
    wallet,
    connection,
    "en",
  );
  const walletAddress = useMemo(() => wallet.publicKey?.toBase58(), [wallet]);

  const handleInitToken = async () => {
    const data: CreateToken = {
      chainName: "renec",
      tokenName: "TEST",
      tokenSymbol: "TEST",
      description: "Test Token",
      destinationAddress: walletAddress, // Your wallet address
      logo: null, // Submit logo
      previewUrl: "https://picsum.photos/200/300",
      website: "https://example.com",
      supply: 1_000_000,
      decimals: 9,
      canMint: true,
    };

    const initResult = await initializerToken({ data, isMainnet: true });
    if (initResult.txSucceeded) {
      // ... do something when succeeded
    } else {
      // ... handle error to display in your UI
      // the errors could be
    }
  };

  const handleMintToken = async () => {
    const mintAccountAddress = "7tebQ6zbBXdNBfjpXDpBb5j4PYEju9rgnxQmE9oG38BL"; // token address
    const decimals = 9; // normally should be 9
    const amount = 1000; // amount to mint

    const mintResult = await mintToken({
      mintAccountAddress,
      decimals,
      amount,
    });
    if (mintResult.txSucceeded) {
      // ... do something when succeeded
    } else {
      // ... handle error in your UI
    }
  };

  return (
    <WalletProvider isMainnet={true} autoConnect={true}>
      <WalletMultiButton />
      <button onClick={handleInitToken}>Init Token</button>
      <button onClick={handleMintToken}>Mint Token</button>
    </WalletProvider>
  );
};

export default Demo;

```