メインコンテンツまでスキップ

Issue FT (ERC20)

What is FT?​

Fungible Token or FT, which is a token that is generally guaranteed to have the same value if they are the same FT. I think it's easier to understand if you think of it as something similar to digital money, such as digital money in a bank account.

Here, let's issue the ERC20 standard FT "My Token" and learn the mechanism of exchange. Click here for the ERC20 standard

Prerequisites​

ERC20 SDK usage​

Install ERC20 SDK​

Prepare empty folder

mkdir test-erc20
cd test-erc20

Quick initialize npm project

npm init -y

Setting npm server for G.U.SDK

echo > .npmrc
echo @gusdk:registry=https://gusdk.gu.net/ >> .npmrc

At this point, the contents of the directory are as follows.

DIRECTORY ROOT
├── .npmrc
└── package.json

Install ERC20 SDK and ethers

npm install @gusdk/erc20-basic ethers@v5

Deploy a new token using ERC20 SDK​

Create src folder and create deploy.js file

mkdir src && cd src && echo > deploy.js

Modify content deploy.js following:

const erc20BasicLib = require("@gusdk/erc20-basic")
const ethers = require('ethers')

async function deploy() {
const provider = new ethers.providers.JsonRpcProvider({ url: "https://sandbox1.japanopenchain.org:8545/" })
const signer = new ethers.Wallet(YOUR_PRIVATE_KEY, provider);

const factory = new ERC20Basic__factory(signer)
const erc20 = await factory.deploy(
YOUR_TOKEN_NAME, // Eg. "TEST"
YOUR_TOKEN_SYMBOL, // Eg. "TEST"
YOUR_TOKEN_SUPPLY, // Eg. "100"
YOUR_TOKEN_DECIMALS // Eg. "18"
);

return erc20.address
}

deploy().then(address => console.log(address));

Execute it following command

node deploy.js

NOTE:: We can using token above or exist token address with ERC20 SDK

Get token name​

Create name.js in src folder

echo > name.js

Modify content name.js following:

const erc20BasicLib = require("@gusdk/erc20-basic")
const ethers = require('ethers')

async function getTokenName(tokenAddress) {
endpointUrl = 'https://sandbox1.japanopenchain.org:8545/'
const provider = new ethers.providers.JsonRpcProvider({url:endpointUrl})

const coin = erc20BasicLib.ERC20Basic__factory.connect(tokenAddress, provider);
return await coin.name()
}

const tokenAddress = '0x9C19fB1e8c0773eE5f6B6FE95ea711279F524534'
getTokenName(tokenAddress).then(value => console.log(value));

Execute it following command

node name.js

Get token balance of my account​

Create balance.js in src folder

echo > balance.js

Modify content balance.js following:

const erc20BasicLib = require("@gusdk/erc20-basic")
const ethers = require('ethers')

async function getMyTokenBalance(tokenAddress, walletAddress) {
endpointUrl = 'https://sandbox1.japanopenchain.org:8545/'
const provider = new ethers.providers.JsonRpcProvider({url:endpointUrl})

const coin = erc20BasicLib.ERC20Basic__factory.connect(tokenAddress, provider);
return await coin.balanceOf(walletAddress)
}

const tokenAddress = '0x9C19fB1e8c0773eE5f6B6FE95ea711279F524534'
const yourWalletAddress = '0x48a1ebb823ebA4940395ddCA05b6705b3EC8755b'
getMyTokenBalance(tokenAddress, yourWalletAddress).then(value => console.log(value));

Execute it following command

node balance.js

Transfer token to another account​

Create transfer.js in src folder

echo > transfer.js

Modify content transfer.js following:

const { ERC20Basic__factory } = require("@gusdk/erc20-basic")
const ethers = require('ethers')

async function transfer(tokenAddress, to, amount) {
endpointUrl = 'https://sandbox1.japanopenchain.org:8545/'
const provider = new ethers.providers.JsonRpcProvider({url:endpointUrl})
const signer = new ethers.Wallet(YOUR_PRIVATE_KEY, provider);

const coin = ERC20Basic__factory.connect(tokenAddress, signer);
return await coin.transfer(to, amount)
}

const tokenAddress = '0x9C19fB1e8c0773eE5f6B6FE95ea711279F524534'
const toAddress = '0x48a1ebb823ebA4940395ddCA05b6705b3EC8755b'
const amount = ethers.BigNumber.from(10)
transfer(tokenAddress, toAddress, amount).then(value => console.log(value));

Execute it following command

node transfer.js

Please see the reference for other features.