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
他の機能については、リファレンスをご覧ください。