# FAQ

A collection of frequently asked questions and answers about the INTMAX Client SDK. This page provides explanations for common developer inquiries regarding account management, fees, transactions, security, privacy, and more.

#### Q. Does the INTMAX network support smart contracts? <a href="#q-does-the-intmax-network-support-smart-contracts" id="q-does-the-intmax-network-support-smart-contracts"></a>

No, the INTMAX network does **not** support smart contracts. Instead, interaction with the network is performed through the **Client SDK**, which provides all necessary functionalities for sending transactions, managing assets, and integrating with applications.

#### Q. What is “Login” in the context of the INTMAX network? <a href="#q-what-is-login-in-the-context-of-the-intmax-network" id="q-what-is-login-in-the-context-of-the-intmax-network"></a>

**Login** is the process of generating an INTMAX address from a given Ethereum account. INTMAX addresses use a different signature scheme from typical EVM chains. Access is performed through an EVM-compatible wallet application in a browser.

#### Q. Are an Ethereum address and an INTMAX address the same? <a href="#q-are-an-ethereum-address-and-an-intmax-address-the-same" id="q-are-an-ethereum-address-and-an-intmax-address-the-same"></a>

No, they are distinct. For more details, please refer [Account System](https://docs.network.intmax.io/developers-hub/intmax-client-sdk/overview#account-system).

#### Q. How are transaction fees determined on the INTMAX network? <a href="#q-how-are-transaction-fees-determined-on-the-intmax-network" id="q-how-are-transaction-fees-determined-on-the-intmax-network"></a>

Transaction fees on the INTMAX network apply in the following cases:

* Transfers within the INTMAX network
* Withdrawals from INTMAX to Ethereum
* Claiming mining rewards

Currently, the SDK does not handle mining. Thus, the fee structure explained here applies only to transfers and withdrawals on the network.

* Transfer Fees:
  * First transaction: **2,250 - 2,500 Gwei**
  * Subsequent transactions: **1,800 - 2,000 Gwei**
* Withdrawal Fee: **32,500 Gwei**

#### Q. What happens to transaction fees when multiple transactions are batched together? <a href="#q-what-happens-to-transaction-fees-when-multiple-transactions-are-batched-together" id="q-what-happens-to-transaction-fees-when-multiple-transactions-are-batched-together"></a>

Even when many transactions (for example, 63 transactions) are batched together into a single block, each individual transaction maintains the same fee structure.

#### Q. How do we use the return value of `broadcastTransaction` and `withdraw`? <a href="#q-how-do-we-use-the-return-value-of-broadcasttransaction-and-withdraw" id="q-how-do-we-use-the-return-value-of-broadcasttransaction-and-withdraw"></a>

The `broadcastTransaction` and `withdraw` function returns a response like this:

```
{
  "txTreeRoot": "0x52146f411e84ccba11e0887a0780a558f41042300a1515c7ff2cb7e1dd8b8c77",
  "transferDigests": [
    "0x0fddb7a7b18025c8a2242a66c8c73100f272ba0fc0064c65d725badcc5f9df66",
    "0xbccada67a9ad5eafae682fe000c955b6fd2bde90b16298dac87aa23bd021aa65"
  ]
}
```

This return value will be used with a function called `waitForTransactionConfirmation`. This function will allow you to wait until the transaction is confirmed. For more details, please refer to [the waitForTransactionConfirmation section in the API Reference](https://docs.network.intmax.io/developers-hub/intmax-client-sdk/api-reference#waitfortransactionconfirmation).

```
const transferConfirmation = await client.waitForTransactionConfirmation({ txTreeRoot });
```

#### Q. What is the collateral fee? <a href="#q-what-is-the-collateral-fee" id="q-what-is-the-collateral-fee"></a>

**The collateral fee** is a fee introduced by the Block Builder to protect against spam attacks from users.

If the user cancels a transfer midway, the fee specified as the collateral fee is charged. If the transfer is completed without being canceled, the collateral fee is not used.

The collateral fee is typically set to be 2 to 10 times higher than the regular transaction fee. To initiate a transfer, the user must have a balance greater than or equal to the larger of the two: the regular fee or the collateral fee.

#### Q. What is the difference between a transfer and a transaction? <a href="#q-what-is-the-difference-between-a-transfer-and-a-transaction" id="q-what-is-the-difference-between-a-transfer-and-a-transaction"></a>

On the INTMAX network, a **transfer** refers to the movement of tokens from one sender specifically to a single recipient. In contrast, a **transaction** bundles multiple transfers originating from the same sender into one grouped operation, enabling multiple recipients to receive tokens simultaneously.

#### Q. What is `claimWithdrawal`? <a href="#q-what-is-claimwithdrawal" id="q-what-is-claimwithdrawal"></a>

There are two types of withdrawals: one for **native tokens** and one for **non-native tokens**.

* For **native tokens**, calling `withdraw` is enough—the tokens are sent directly to the specified address.
* For **non-native tokens**, after calling `withdraw`, the withdrawal status becomes `NeedToClaim`. In this case, you must explicitly call `claimWithdrawal` to complete the process.

You can also batch multiple pending withdrawals and claim them together using `claimWithdrawal`.

#### Q. What are `tokenList` and `tokenBalances`? <a href="#q-what-are-tokenlist-and-tokenbalances" id="q-what-are-tokenlist-and-tokenbalances"></a>

* `tokenList` is a list of tokens that exist on the INTMAX network.

  Any token that has ever been deposited into the INTMAX network is indexed and assigned a unique `tokenIndex` ID.
* `tokenBalances` represents all token types held by a specific address, along with the balance of each token.

#### Q. What does privacy mean in INTMAX? <a href="#q-what-does-privacy-mean-in-intmax" id="q-what-does-privacy-mean-in-intmax"></a>

INTMAX is designed with strong privacy protection. Only the owner of a wallet can view their asset balances and transaction history. This means that without the private key of a specific address, no one—not even network participants—can access this information.

#### Q. Why does the `broadcastTransaction` function take a noticeable amount of time to complete? <a href="#q-why-does-the-broadcasttransaction-function-take-a-noticeable-amount-of-time-to-complete" id="q-why-does-the-broadcasttransaction-function-take-a-noticeable-amount-of-time-to-complete"></a>

Operations such as sending or withdrawing funds must verify whether they can be executed based on the user's current and correct balance. Because the system needs to wait until the validity of the latest block is verified, the `broadcastTransaction` function requires a certain amount of time to complete. In the case of withdrawals, after broadcasting the transaction, it is necessary to synchronize the balance again to ensure it reflects the latest state. This step is required because an additional request must be sent to the node to complete the withdrawal process.

In the server-sdk, you can shorten the execution time of the `broadcastTransaction` and `withdraw` functions by completing the balance synchronization in advance using the `sync` function. For more details, please refer to [the NodeJS example](https://docs.network.intmax.io/developers-hub/intmax-client-sdk/examples#notes-for-using-nodejs).

The approximate execution time for each function is as follows. Please note that the duration may increase further when the network is congested.

### Mainnet <a href="#mainnet" id="mainnet"></a>

| Operation                                       | Time (s) |
| ----------------------------------------------- | -------- |
| broadcastTransaction (before sync)              | 164      |
| broadcastTransaction (after sync)               | 23       |
| waitForTransactionConfirmation (after transfer) | 50       |
| withdraw (before sync)                          | 302      |
| withdraw (after sync)                           | 187      |
| sync (after transfer)                           | 139      |

### Testnet <a href="#testnet" id="testnet"></a>

| Operation                                       | Time (s) |
| ----------------------------------------------- | -------- |
| broadcastTransaction (before sync)              | 256      |
| broadcastTransaction (after sync)               | 52       |
| waitForTransactionConfirmation (after transfer) | 50       |
| withdraw (before sync)                          | 472      |
| withdraw (after sync)                           | 257      |
| sync (after transfer)                           | 216      |


---

# 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://intmax-general.gitbook.io/intmax-developers-hub/intmax-network-tools/intmax-client-sdk/faq.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.
