(Solidity0.4.23)openzeppelinからStandardToken.solをインポートした上での継承がエラーになった

ブロックチェーンアプリケーション開発の教科書を見ながらERC20トークンを作っているとつまづいたのでメモ。

(P228 8-2 ERC20準拠トークン作成 コード8.2.3.1参照)

DappsToken.solで

6e5706117a7e06c15783338b285e56cb.png

さらにデプロイする際に必要なjsのスクリプトとテストコードを記述し、

$truffle initでテストを実行すると以下のエラーが出る

truffle(develop)> test

Compiling ./contracts/DappsToken.sol...
Compiling ./contracts/Migrations.sol...
Compiling openzeppelin-solidity/contracts/ownership/Ownable.sol...

/Users/m_okamoto/okamotchan-token/contracts/DappsToken.sol:4:24: DeclarationError: Identifier not found or not unique.
contract DappsToken is StandardToken {
^-----------^
Compilation failed. See above.

ここで上のファイルにimport "openzeppelin-solidity/contracts/token/ERC20/StandardToken.sol";を追加した上でテストを実行する

truffle(develop)> test

Compiling ./contracts/DappsToken.sol...
Compiling ./contracts/Migrations.sol...
Compiling openzeppelin-solidity/contracts/math/SafeMath.sol...
Compiling openzeppelin-solidity/contracts/ownership/Ownable.sol...
Compiling openzeppelin-solidity/contracts/token/ERC20/BasicToken.sol...
Compiling openzeppelin-solidity/contracts/token/ERC20/ERC20.sol...
Compiling openzeppelin-solidity/contracts/token/ERC20/ERC20Basic.sol...
Compiling openzeppelin-solidity/contracts/token/ERC20/StandardToken.sol...

Contract: DappsToken
1) should put 1000 DappsToken in the first account
> No events were emitted

0 passing (62ms)
1 failing

1) Contract: DappsToken
should put 1000 DappsToken in the first account:
Error: DappsToken has not been deployed to detected network (network/artifact mismatch)
at /usr/local/lib/node_modules/truffle/build/webpack:/packages/truffle-contract/contract.js:454:1
at <anonymous>
at process._tickDomainCallback (internal/process/next_tick.js:229:7)

というわけでtestは諦めて$truffle compileすると成功したのでそのまま$truffle develop、そしてmigrateする.

そうするとjsonが返ってきたりプライベートキーが表示されるのでうまくいく。

これが終わったら指定する。

truffle(develop)> dappsToken = DappsToken.at(DappsToken.address)

トークンの名前とか残高を確認するとこうなる。

truffle(develop)> dappsToken.name()

'DappsToken'
truffle(develop)> dappsToken.totalSupply()
BigNumber { s: 1, e: 22, c: [ 500000000 ] }