> For the complete documentation index, see [llms.txt](https://archive-vn.docs.klaytn.foundation/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://archive-vn.docs.klaytn.foundation/content/smart-contract/sample-contracts/erc-20/2-erc20.md).

# 2. Triển khai hợp đồng thông minh

Bạn có thể sử dụng Remix Online IDE hoặc Truffle để triển khai hợp đồng thông minh `MyERC20`.

## 2.1 Triển khai hợp đồng thông minh bằng Remix Online IDE <a href="#id-2-1-deploying-smart-contract-using-klaytn-ide" id="id-2-1-deploying-smart-contract-using-klaytn-ide"></a>

* Vui lòng truy cập [Klaytn Plugin for Remix](https://ide.klaytn.foundation) và tạo hợp đồng `MyERC20`. Toàn bộ mã nguồn đã được cung cấp tại mục [Soạn hợp đồng thông minh ERC-20](/content/smart-contract/sample-contracts/erc-20/1-erc20.md).
* Chuẩn bị tài khoản của bạn để triển khai hợp đồng.
  * Nếu bạn chưa có tài khoản, hãy tạo một tài khoản tại <https://baobab.wallet.klaytn.foundation/create> hoặc \[<https://toolkit.klaytn.foundation/tài> khoản/tài khoảnKeyLegacy]\(<https://toolkit.klaytn.foundation/tài> khoản/tài khoảnKeyLegacy).
  * Nhận một số KLAY thử nghiệm từ faucet - <https://baobab.wallet.klaytn.foundation/faucet>
* Hãy triển khai `MyERC20.sol` với các tham số triển khai là `BAOBABTOKEN`, `BAO` và `8`.

![ERC20-1-deploy](/files/NLVyYiKgH4s6yVWtnX7H)

Sau khi triển khai, bạn có thể gọi hàm `balanceOf` với tài khoản của bạn đã được dùng để triển khai hợp đồng. Bạn sẽ thấy có `10000000000000` token có sẵn trong tài khoản của bạn như dưới đây. Vì bạn đã đặt `decimal` là `8` khi triển khai hợp đồng ở trên, nó đã tạo ra một số cố định là `100000` token trong hàm khởi tạo, với mỗi token có giá trị thập phân là `10^8`. Phương thức `totalSupply` sẽ trả về tổng cung của các token đã tạo, cũng bằng `10000000000000`.

![ERC20-2-owner-token](/files/K7sx7Vc4ooq1mFmGpdIH)

`MyERC20` hiện đang hoạt động !

## 2.2 Triển khai hợp đồng thông minh bằng truffle <a href="#id-2-2-deploying-smart-contract-using-truffle" id="id-2-2-deploying-smart-contract-using-truffle"></a>

Bạn nên cài đặt xong [node.js](https://nodejs.org/) trong môi trường của mình. Hãy xem [Hướng dẫn cài đặt Node.js qua trình quản lý gói](https://nodejs.org/en/download/package-manager/) để cài đặt node.js bằng trình quản lý gói trong các môi trường khác nhau.

```
$ mkdir klaytn
$ cd klaytn
$ npm init # initialize npm at the erc20token directory
$ npm install truffle@4.1.15
$ npm install caver-js@latest # installing caver-js
$ ln -s node_modules/truffle/build/cli.bundled.js truffle
$ export PATH=`pwd`:$PATH
```

Giờ đây, bạn đã cài đặt truffle và caver-js, hai công cụ cần thiết để triển khai hợp đồng thông minh.

Hãy chuẩn bị `truffle` và một hợp đồng thông minh `MyERC20.sol`.

```
$ mkdir myerc20
$ cd myerc20
$ truffle init
```

Giờ bạn sẽ có các cấu trúc thư mục như sau.

```
.
├── contracts
│   ├── Migrations.sol
├── migrations
│   └── 1_initial_migration.js
└── truffle-config.js
```

Giờ hãy soạn `MyERC20.sol` và đặt nó vào thư mục `contracts`.

Bạn cũng cần chỉnh sửa tập tin `1_initial_migration.js` như sau để triển khai hợp đồng `MyERC20` với các tham số ban đầu là `BAOBABTOKEN`, `BAO` và `8`. Tên của đồng token được đặt là `BAOBABTOKEN` và ký hiệu token là `BAO`. Token có giá trị thập phân là `10^8`. Lưu ý rằng ví dụ, khi bạn truy vấn `totalSupply` của `BAOBABTOKEN`, nó sẽ trả về `10^13`, không phải `10^5`, vì Solidity không hỗ trợ số thực dấu phẩy động, số lượng token luôn được biểu diễn dưới dạng số tự nhiên ở đơn vị nhỏ nhất.

```javascript
const Migrations = artifacts.require("./Migrations.sol");
const MyERC20 = artifacts.require("./MyERC20.sol");
module.exports = function(deployer) {
  deployer.deploy(Migrations);
  deployer.deploy(MyERC20, 'BAOBABTOKEN', 'BAO', 8);
};
```

Bạn cũng phải chỉnh sửa tập tin `truffle-config.js` như dưới đây để triển khai hợp đồng thông minh lên mạng lưới Klaytn. Bước này giống như bước được mô tả trong [Triển khai Hợp đồng thông minh bằng Truffle](/content/getting-started/quick-start/deploy-a-smart-contract.md#deploying-a-smart-contract-using-truffle).

```
// truffle-config.js
module.exports = {
    networks: {
        baobab: {
            host: '127.0.0.1',
            port: 8551,
            from: '0xabcdabcdabcdabcdabcdabcdabcdabcdabcdabcd', // nhập địa chỉ hợp đồng của bạn
            network_id: '1001', // id mạng Baobab
            gas: 20000000, // giới hạn gas của giao dịch
            gasPrice: 250000000000, // gasPrice của Baobab là 250 ston
        },
    },
    compilers: {
      solc: {
        version: "0.5.12"    // Chỉ định phiên bản trình biên dịch là 0.5.12
      }
  }
};
```

Giờ bạn đã sẵn sàng và có thể triển khai `MyERC20.sol` như dưới đây.

```
$ truffle deploy --network baobab --reset
Compiling ./contracts/MyERC20.sol...
Soạn các tập tin artifact trong thư mục ./build/contracts

Sử dụng mạng lưới 'baobab'.

Running migration: 1_initial_migration.js
  Replacing Migrations...
  ... 0x5a947f076f4570dff8ff18b1ae3557e27dd69c92ce38a3c97fad8f5355914066
  Migrations: 0x0d737e9865e5fc4c1ff53744fd2c13c52a44b9bc
  Deploying MyERC20...
  ... 0x1571e80552dab1d67260e8914e06d9b16ccae16fb698c750f6a09aab12517bc1
  MyERC20: 0xc4c8257ED9B4eB6422fDe29B1eCe5Ce301e637e1
Lưu quá trình di chuyển thành công lên mạng...
  ... 0x5b984b3f79c425d80470a96d5badb857fc05e7f31d94423044ae3119c639aa77
Lưu các tập tin artifact...
```

Nó hiển thị hàm băm giao dịch để triển khai hợp đồng `MyERC20` là `0x1571e80552dab1d67260e8914e06d9b16ccae16fb698c750f6a09aab12517bc1` và địa chỉ của `MyERC20` là `0xc4c8257ED9B4eB6422fDe29B1eCe5Ce301e637e1`.

Hiện `MyERC20` đang hoạt động !
