# TokenFactory

Smart contract responsible for deploying tokens, sets wallet, root, platform codes and managing ownership.

Derives following classes and interfaces: *ITokenFactory, IUpgradable*.

### **`constructor`**

```
constructor(address _owner) public
```

Parameters:

| Name    | Type    | Description                        |
| ------- | ------- | ---------------------------------- |
| \_owner | address | Address of the token factory owner |

## Token

### **`createToken`**

```
function createToken(uint32 callId, string name, string symbol, uint8 decimals, address initialSupplyTo, uint128 initialSupply, uint128 deployWalletValue, bool mintDisabled, bool burnByRootDisabled, bool burnPaused, address remainingGasTo) public override
```

Fills the token data taken from function params, creates token root address calling `TokenRootUpgradable`, emits `TokenCreated` event and `onTokenRootDeployed` callback.

Parameters:

| Name               | Type    | Description                                                    |
| ------------------ | ------- | -------------------------------------------------------------- |
| callId             | uint32  | ID of the operation call                                       |
| name               | string  | Token name                                                     |
| symbol             | string  | Token symbol                                                   |
| decimals           | uint8   | Number of decimals                                             |
| initialSupplyTo    | address | Address which will hold initial supply of newly created token  |
| initialSupply      | uint128 | Number of tokens initially available                           |
| deployWalletValue  | uint128 | Value necessary for deploying new token’s wallet               |
| mintDisabled       | bool    | True if minting is disabled, false if not                      |
| burnByRootDisabled | bool    | True if burn is disabled, false if not                         |
| burnPaused         | bool    | True if burn is paused, false if not                           |
| remainingGasTo     | address | Address where to store remaining gas after creating token root |

## Owner

### **`transferOwner`**

```
function transferOwner(address newOwner) external responsible onlyOwner returns(address)
```

Takes new owner address, delegate it to the `pendingOwner` and returns `pendingOwner` (new owner address).

Parameters:

| Name     | Type    | Description            |
| -------- | ------- | ---------------------- |
| newOwner | address | Address of a new owner |

Return Value:

| Type    | Description             |
| ------- | ----------------------- |
| address | Pending owner’s address |

### **`acceptOwner`**

```
function acceptOwner() external responsible returns(address)
```

If sender is pending owner, owner takes `pendingOwner` address and returns it, meaning the new owner is accepted.

Return Value:

| Type    | Description              |
| ------- | ------------------------ |
| address | Address of the new owner |

## Code

### **`setRootCode`**

```
function setRootCode(TvmCell _rootCode) public onlyOwner
```

Takes `_rootCode` from function params, delegates it to `rootCode` and returns it.

Parameters:

| Name       | Type    | Description         |
| ---------- | ------- | ------------------- |
| \_rootCode | TvmCell | New token root code |

### **`setWalletCode`**

```
function setWalletCode(TvmCell _walletCode) public onlyOwner
```

Same as root.

Parameters:

| Name         | Type    | Description     |
| ------------ | ------- | --------------- |
| \_walletCode | TvmCell | New wallet code |

### **`setWalletPlatformCode`**

```
function setWalletPlatformCode(TvmCell _walletPlatformCode) public onlyOwner
```

Same as root.

Parameters:

| Name                 | Type    | Description                  |
| -------------------- | ------- | ---------------------------- |
| \_walletPlatformCode | TvmCell | New platform code for wallet |

## Upgrade

### **`upgrade`**

```
function upgrade(TvmCell code) public override onlyOwner
```

upgrades token to a new version with a new code taken from params.

Parameters:

| Name | Type    | Description                               |
| ---- | ------- | ----------------------------------------- |
| code | TvmCell | New version code used for upgrading token |

## Key Events

### **`TokenCreated`**

```
TokenCreated(address tokenRoot);
```


---

# 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.flatqube.io/integrate/smart-contracts/tokenfactory.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.
