ERC20
①デプロイ
コンパイルとマイグレーションを実行する
truffle compile
truffle migrate
②コントラクトのアドレスを確認
コントラクトがデプロイできているかも併せて確認できる。
GbecToken.address
ReportToken.address
③アカウントの取得
let accounts
web3.eth.getAccounts((err,res) => {accounts = res})
↓見にくいのでtoStringにする
ins = await MyToken.deployed()
balance = await ins.balanceOf(accounts[0])
balance.toString()
④トークン全体の供給量を確認
ReportToken.deployed().then(instance => instance.totalSupply())
↓見にくいのでtoStringにする
total = await ins.totalSupply()
total.toString()
⑤accounts0が全ての残高を保有していることを確認 ReportToken.deployed().then(instance =>{instance.balanceOf(accounts[0]).then(console.log) })
balance = await ins.balanceOf(accounts[0])
balance.toString()
⑥transfer関数でaccount0からaccount1に送信 ReportToken.deployed().then(instance =>{instance.transfer(accounts[1],100000) })
⑦purchaseToken関数でトークンアドレスからaccount1に送信 ReportToken.deployed().then(instance =>{instance.purchaseToken(accounts[2],100000, {value: 1000000000000000000})})
⑧withdraw関数で任意のaccount1にリワードを送金→× ReportToken.deployed().then(instance => {instance.withdraw(accounts[5], 1000000000000,{value:10000000000000000000000})})
⑨
前提としてwithdraw()ではaddress型のメソッドtransfer()を使用する。
アルゴリズムからwithdraw()を呼び出す際に、引数としてstring型を用いる。
これはfirebaseに格納されている型がstringであるうえ、address型はsolidityに固有の型なのでそのまま渡せないためである。
そこで、コントラクト内でstring→addressにParseしてaddress型のメソッドtransfer()を使用する。
ReportToken.deployed().then(instance => {instance.parseAddr("0xeEe90Fe97Dc0623Ed525212F2c63855D3EE25015").then(console.log)})
tips
bit数の関係で数字が10進数にならない場合があるので、stringにしてみるとよい
ins = await GbecToken.deployed()
balance = await ins.balanceOf(accounts[0])
balance.toString()