ERC20とかtokenに関しては概念ははっきりしていたが、
作るのは初めて。
特に問題ないだろうと思って始めたが…。
開発ツールも安定してないし
そもそもEthereum(イーザリアム)って歴史が短かったし
開発した人の開発経験も短いので
毎日変わっていく感じ。
とのことで今書いている情報も明日には
使えないもんになるかもしれないので
そのまま使えるよりは
変わったら何をみるべきのかを教えたいと思います。
まず https://ethereum.org/token からTokenを作成してもいいですが、
テストごとに費用がかかったり、テストなしで本番に反映とか
コードの管理が難しくなるので
比較的によくできているtruffleとzeppelin-solidityを使ってみます。
zeppelinとopenzeppelinはコードとバージョンが異なりますので
一つを決めて使ったほうがいいと思います。
openzeppelinの場合はフォルダを決めて設定しないといけないですが、
zeppelinは決まっているフォルダで勝手に入るので初心者の方なら
zeppelin-solidityをお薦めします。
まずはtruffleのインストールですね。
npm install -g truffle
これは問題ないのでスキップ。
作業ディレクトリを空っぽにする必要があります。
mkdir giiptoken
作業フォルダに入って全て操作します。
truffle関連するファイルをダウンロード
truffle init
このコマンドでtruffle関連ファイルが勝手にダウンロードできます。
npm init
これでTokenの情報を入力。勝手に入力しても全然いいので適当に…。
もし以前設定したToken情報を読み取るには
npm init -f
で自動ダウンロードできます。
まず稼働してみようと思ったら
何処のブログでコードをコピーしても
上手く行かないのがほとんどですね。
理由は下に整理します。
なのでまずは稼働してみましょう!
truffle unbox metacoin
metacoinというERC20コインソースが勝手にダウンロードされちゃいました!
これはtruffleのbox機能で
自分で作ったソースをアップロードできちゃうんです。
詳しくは
https://truffleframework.com/boxes
ソースもできちゃったのでまずテストで稼働!
truffle dev
いきなり何らかのテキストで出ちゃいました!
これは開発モードなので
テスト用のWallet(財布)10個とキーなどをもらいました。
これで伝送テストとかできちゃいます!
色々検索してここまで来た方のために…。
他のブログのソースはなぜ上手く行かないかというと
truffleのバージョンとzeppelin-solidityのバージョンによって
ソースの形式とFunctionがかなり変わってくるんです。
今までのソフトウェアの感じで
モジュールアップデート位に考えたらいけません。
パラメタの数と形式などが
全く違うFunctionみたいに変わっちゃうんです!
なのでもしエラーが出たら
一番下のエラーのポイントを見るのが大事です!
function giipTokenCrowdsale(uint256 _startTime, uint256 _endTime, uint256 _rate, uint256 _goal, uint256 _cap, address _wallet) public
^ (Relevant source part starts here and spans across multiple lines).
,/Users/lowyshin/Downloads/Projects/gex/contracts/giipTokenCrowdsale.sol:12:5: TypeError: Wrong argument count for modifier invocation: 4 arguments given but expected 3.
Crowdsale(_startTime, _endTime, _rate, _wallet)
^--------------------------------------------------^
Compilation failed. See above.
Crowdsaleというソースを持ってきたのに4つのパラメタではなく3つだって??
じゃ、Crowdsaleが何なのか見てみましょう。
ソースは/node_modules/zeppelin-solidity/contracts/crowdsale/Crowdsale.solにありました!
中身を見ると
Crowdsale()を記述しているところを見ると
/**
* @param _rate Number of token units a buyer gets per wei
* @param _wallet Address where collected funds will be forwarded to
* @param _token Address of the token being sold
*/
と書かれています。
ちなみにブログ主が使っているzeppelin-solidityのバージョンが異なったため入力パラメタも変わったはず。
なので合わせてみました。
Crowdsale(_rate, _wallet, _token)
そうしたらまた新しいエラーが…。
function giipTokenCrowdsale(uint256 _startTime, uint256 _endTime, uint256 _rate, uint256 _goal, uint256 _cap, address _wallet) public
^ (Relevant source part starts here and spans across multiple lines).
,/Users/lowyshin/Downloads/Projects/gex/contracts/giipTokenCrowdsale.sol:20:31: DeclarationError: Undeclared identifier. Did you mean "token"?
Crowdsale(_rate, _wallet, _token)
^----^
Compilation failed. See above.
_tokenという変数の意味がわからんとか…。
じゃ、上のfunctionに入れてみる。
function giipTokenCrowdsale(uint256 _startTime, uint256 _endTime, uint256 _rate,
uint256 _goal, uint256 _cap, address _wallet, address _token) public
Crowdsale(_rate, _wallet, _token)
じゃ、またやり直し
truffle(ropsten)> migrate --reset
私はDevではなくropstenネットワークで試してます。ropstenはEthereumのテストネットの一つで何がいいかはわかりませんが適当に乗っているテストネットから一つ選んだだけです。
function giipTokenCrowdsale(uint256 _startTime, uint256 _endTime, uint256 _rate, uint256 _goal, uint256 _cap, address _wallet, address _token) public
^ (Relevant source part starts here and spans across multiple lines).
,/Users/lowyshin/Downloads/Projects/gex/contracts/giipTokenCrowdsale.sol:20:31: TypeError: Invalid type for argument in modifier invocation. Invalid implicit conversion from address to contract ERC20 requested.
Crowdsale(_rate, _wallet, _token)
^----^
Compilation failed. See above.
また出た!
Invalid implicit conversion from address to contract ERC20 requested.
と書かれたいるので
探してみたらaddress形式とERC20形式があるけどこれはaddressではなくERC20らしい。
とゆうことで修正。
function giipTokenCrowdsale(uint256 _startTime, uint256 _endTime, uint256 _rate,
uint256 _goal, uint256 _cap, address _wallet, ERC20 _token) public
Crowdsale(_rate, _wallet, _token)
では、
では、
Running migration: 1_initial_migration.js
Replacing Migrations...
... 0x136917c0c492293a82ea5f5c7d7cc1c0753fe1447f15846f4d42906f5ef353ad
Migrations: 0x668a5e5b4d191df7dbe0e34c128e038d05122cfb
Saving successful migration to network...
... 0x6fbf0e3177c759a60fa6df73f6fe9b1aa33fbba25e9a98a5f318dc4dc8fb9e5d
Saving artifacts...
Running migration: 2_deploy_giiptoken.js
Error: Web3ProviderEngine does not support synchronous requests.
まぁ、これは大したエラーではないので飛ばします。
このようにエラーを見てダウンロードしたモジュールとFunctionがソースと一致しているのかをチェックするだけでかなりのエラーは直せます!
Xtock Token:https://etherscan.io/address/0x3efe8983a02980710d9d83834baf8782fca702a3#code
Solidityがよく作られていて参考になります。
Advisorと開発チームのLock機能もちゃんと付いていてるので投資家が食い逃げじゃないと判断できるコードです。
コメント
コメントを投稿