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

FTの発行(ERC20)

FTとは?

Fungible TokenまたはFTは、一般的に同じFTであれば同じ価値が保証されるトークンです。これは、銀行口座のデジタルマネーなど、デジタルマネーに類似したものと考えると理解しやすいと思います。

ここでは、ERC20標準のFT「マイ・トークン」を発行し、交換のメカニズムを学びます。ERC20標準についてはこちらをクリックしてください。

前提条件

ERC20 SDKの使用方法

ERC20 SDKのインストール

空のフォルダを準備します

mkdir test-erc20
cd test-erc20

npmプロジェクトを素早く初期化します

npm init -y

G.U.SDK用のnpmサーバーを設定します

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

この時点で、ディレクトリの内容は以下のようになります。

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

ERC20 SDKとethersをインストールします

npm install @gusdk/erc20-basic ethers@v5

ERC20 SDKを使用して新しいトークンをデプロイする

srcフォルダを作成し、deploy.jsファイルを作成します

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

以下の内容に従ってdeploy.jsを修正します:

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, // 例:「TEST」
YOUR_TOKEN_SYMBOL, // 例:「TEST」
YOUR_TOKEN_SUPPLY, // 例:「100」
YOUR_TOKEN_DECIMALS // 例:「18」
);

return erc20.address
}

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

次のコマンドを実行します

node deploy.js

注意: 上記のトークンを使用するか、またはERC20 SDKで既存のトークンアドレスを使用できます

トークン名を取得する

srcフォルダにname.jsを作成します

echo > name.js

次の内容にname.jsを変更します:

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));

次のコマンドを実行します

node name.js

私のアカウントのトークン残高を取得する

srcフォルダにbalance.jsを作成します

echo > balance.js

次の内容にbalance.jsを変更します:

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));

次のコマンドを実行します

node balance.js

他のアカウントにトークンを送信する

srcフォルダにtransfer.jsを作成します

echo > transfer.js

次の内容にtransfer.jsを変更します:

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));

次のコマンドを実行します

node transfer.js

他の機能については、リファレンスをご覧ください。