# RegisterToken

## Description

Function to register any asset that is not supported by default. The token will then be supported throughout the SDK - eg. it will be returned in the `assets` field of the `RetrieveUser` function if the user has a non-zero balance of the token.

Please note that by default, we support native tokens that have been outlined in [Assets](https://docs.usemeta.fi/js-sdk/constants/asset).

## Details

### Signature

`RegisterToken(name, symbol, chain, image, contractAddress, decimal, tokenStandard)`

### Arguments

<table><thead><tr><th width="248">Parameter</th><th width="156">Type</th><th>Definition</th></tr></thead><tbody><tr><td><code>name</code></td><td>String</td><td>Name of the currency, eg. "USD Coin"</td></tr><tr><td><code>symbol</code></td><td>String</td><td>Symbol for the currency, eg. "USDC"</td></tr><tr><td><code>chain</code></td><td>String</td><td>Chain on which the contract is deployed. eg. for USDC on ETH, pass in <code>chains.eth</code></td></tr><tr><td><code>image</code></td><td>String</td><td>Link to png image of the token. Max size is 50KB</td></tr><tr><td><code>contractAddress</code></td><td>String</td><td>Contract address of the ERC20 token, eg. for USDC on ETH, it is 0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48</td></tr><tr><td><code>decimal</code></td><td>Number</td><td>Number of decimal places of precision for the asset. eg. 18 for ETH</td></tr><tr><td><code>tokenStandard</code></td><td>Object</td><td><p>Specify the token standard. eg:</p><pre class="language-json"><code class="lang-json">{
    "name": "erc20",
}
</code></pre></td></tr></tbody></table>

### Return Value

Instance of the new Asset

## Example

First, create an instance of the token by calling `RegisterToken`:

{% code title="custom-token.js" lineNumbers="true" %}

```jsx
import { RegisterToken, chains } from '@metafi/metafi-js-package';

export const WETH = RegisterToken(
    'Goerli Wrapped Ethereum', 
    'WETH', 
    chains.goerli,
    'https://d2qdyxy3mxzsfv.cloudfront.net/images/logo/ethereum.png',  
    '0xb4fbf271143f4fbf7b91a5ded31805e42b2208d6',
    18,
    {
        "name": "erc20",
    }
)

```

{% endcode %}

Then, pass in the custom token(s) you have created while initializing the MetafiProvider:

{% code title="App.js" lineNumbers="true" %}

```jsx
import { 
    TransferTokens,
} from '@metafi/metafi-js-package';
import { WETH } from "./tokens/custom-token.js";

function App() {
    const transferWETH = () => {
        TransferTokens({
                to: "0xd4594dECd0ed8BA4C7d5810dbB8D004C74250BD5",
                amount: "1",
                currency: WETH,
                callback: (result) => {
                    console.log("callback result", result);
                },
            },
            "YOUR-API-KEY"
        );
    }
    
    return (
        <div>
	    <button onClick={transferWETH}>Transfer 1 WETH</button>
        </div>
    );
}

export default App;

```

{% endcode %}

And voila! Your token will now be accessible throughout the wallet.
