# Burn and Mint Tokens using Zwallet

[ZCN smart contract](https://github.com/0chain/0chain/tree/staging/code/go/0chain.net/smartcontract/zcnsc) allows conversion of native ZCN token network to Ethereum wrapped WZCN token and from wrapped Ethereum WZCN token to native ZCN token through minting and burning of tokens using zwalletcli.\\

## Get Started

### Import your Ethereum Account

`./zwallet bridge-import-account` command can be used to import your ethereum account Here are the parameters for the command.

| Parameter  | Required | Description                     |
| ---------- | -------- | ------------------------------- |
| --mnemonic | Yes      | Ethereum Wallet Mnemonic Phrase |
| --password | Yes      | Ethereum Wallet Password        |

Sample Command:

```
./zwallet bridge-import-account --mnemonic "$MNEMONIC_PHRASE" --password "$ETHEREUM_WALLET_PASSWORD"
```

Sample Response:

```
Imported account $ETHEREUM_WALLET_ADDRESS 
to path: $WALLET_CONFIG_DIRECTORY
```

### Prerequisites

In order to perform DEX operations using zwalletcli basic config.yaml 0chain configuration file should be extended with the following params

```
---
block_worker: https://demo.zus.network/dns
signature_scheme: bls0chain
min_submit: 50 # in percentage
min_confirmation: 50 # in percentage
confirmation_chain_length: 3
ethereum_node_url: https://goerli.infura.io/v3/6141be73a15d47748af0dc14f53d57d7
store_unlock_duration_sec: 2

bridge:
  bridge_address: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
  token_address: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
  authorizers_address: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
  ethereum_address: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
  password: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
```

### Burn ZCN and Mint WZCN token

1. Navigate into zwalletCLI directory

```
cd zwallet
```

2\. Run the command below to list or check whether your ethereum account is imported successfully in key vault.

```
./zwallet bridge-list-accounts
```

Sample Response:

```
Ethereum available account: $ETHEREUM_WALLET_ID
```

3\. Create ZCN wallet and fill it with tokens using the `./zwallet faucet` command.

<pre><code><strong>./zwallet faucet --methodName pour --input “{Pay day}”
</strong></code></pre>

Sample Response:

```
Execute faucet smart contract success with txn :  04f9a181c87a77306d4a6aa6473385eecacfa04c12933d96f1fae74e0c017949
```

4\. Now to burn some ZCN tokens use the following command:

```
./zwallet bridge-burn-zcn --token 1 
```

Sample Response:

```
Executed smart contract successfully with txn:  $ZCN_BURN_HASH
Transaction completed successfully:
```

The response will output an zcn-burn-hash like above which can be used to fetch details about the burn transaction and mint WZCN tokens.

5\. Here is a command for checking details about the ZCN burn transaction:

<pre><code><strong>./zwallet bridge-get-zcn-burn --hash $ZCN_BURN_HASH
</strong></code></pre>

Sample Response:

```
ZCN burn ticket the completed consensus
Transaction nonce: 2
Transaction amount: 10000000000
ZCN transaction ID: $ZCN
```

6\. Mint WZCN tokens using the command below:

```
./zwallet bridge-mint-wzcn --hash "zcn-burn-hash" 
```

Sample Response:

```
Sending mint transaction to Ethereum
Payload amount: 10000000000
Payload nonce: 2
ZCN transaction ID: 67b7e0ea1d6522b62e93b22aef140dc59d2a61c6b4469a3c8f8cb8ae09b32eaa
Starting to mint WZCN
failed to prepare bridge: failed to pack arguments: argument count mismatch: got 4 for 5
```

### Burn WZCN and Mint ZCN

1. Run the command below to list or check whether your ethereum account is imported successfully in key vault. If not [import your Ethereum Account.](#import-your-ethereum-account)

   ```
   ./zwallet bridge-list-accounts
   ```

   Sample Response:

   ```
   Ethereum available account: $ETHEREUM_WALLET_ID
   ```
2. Fill your ethereum wallet with WZCN tokens can be done using [metamask](https://metamask.io/https://metamask.io/).
3. Burn WZCN tokens using the following command :

```
./zwallet bridge-burn-wzcn --amount 1  
```

### List Authorizers

`./zwallet bridge-list-auth` command can be used to list all authroizers available to validate client transactions.

**Sample Command:**

```
./zwallet bridge-list-auth
```

**Sample Response:**

```
[
  {
    "id": "2f945f7310689f17afd8c8cb291e1e3ba21677243aa1d404a2293064e7983d60",
    "url": "https://demo.zus.network/authorizer01/"
  },
  {
    "id": "7b07c0489e2f35d7c13160f4da2866b4aa69aa4e8d2b2cd9c4fc002693dca5d7",
    "url": "https://demo.zus.network/authorizer02/"
  },
  {
    "id": "896c171639937a647f9e91d5ba676be580f6d2b7e0d708e4fe6ea36610a13ffd",
    "url": "https://demo.zus.network/authorizer03/"
  }
]
```

### Show Authorizer Configuration

`./zwallet bridge-auth-config` command can be used to view authorizer configuration. Here are the parameters for the command.\\

| Parameter | Required | Description                                                                                                           |
| --------- | -------- | --------------------------------------------------------------------------------------------------------------------- |
| --id      | Yes      | Provide Authorizer ID to view its configuration . Can be fetched using[ list authorizers](#list-authorizers) command. |
| --help    |          | Syntax Help for the command                                                                                           |

Sample Command:

```
./zwallet bridge-auth-config --id $AUTHORIZER_ID
```

Sample Response:

```
{
  "id": "2f945f7310689f17afd8c8cb291e1e3ba21677243aa1d404a2293064e7983d60",
  "url": "https://demo.zus.network/authorizer01/",
  "fee": 0,
  "latitude": 0,
  "longitude": 0,
  "last_health_check": 0,
  "delegate_wallet": "",
  "min_stake": 0,
  "max_stake": 0,
  "num_delegates": 0,
  "service_charge": 0
}
```

### Show ZCNBridge Configurations

`./zwallet bridge-config` command can be used to view ZCNBridge configuration. To understand how to initialize a bridge client configurations check [Intialize a Bridge Client](#initialize-bridge-client).

Sample Command:

```
./zwallet bridge-config
```

Sample Response:

```
burn_address     0000000000000000000000000000000000000000000000000000000000000000
cost.add-authorizer      100
cost.burn        100
cost.delete-authorizer   100
cost.mint        100
max_delegates    10
max_fee          100
min_authorizers          1
min_burn         1
min_lock         0
min_mint         1
min_stake        0
owner_id         1746b06bb09f55ee01b33b5e2e055d6cc7a900cb57c0a3a5eaabb8a0e7745802
percent_authorizers      0.7

```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs-old.zus.network/guides/zwallet-cli/burn-and-mint-tokens-using-zwallet.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
