はじまりは・・・。
まず、はじめた経緯はお仕事。
おおよそ1ヶ月ほど四苦八苦して独自トークンをRopstenにデプロイするところまでは行けた。
でも、そこまで。
やはり少し困ったこともある。
基本的に今までやって来たwebアプリの概念が抜けないこと。
IDとかアカウントとかオーナーとか、そのへんどうなってんの?
トークンを作る
作ったトークンはこんな感じ
ICOやSolidityのことを書いてるブログをいくつも参考して書いてみた。
$ npm install -g truffle
$ truffle init
$ npm install zeppelin-solidity --save
pragma solidity ^0.4.18;
import "zeppelin-solidity/contracts/token/ERC20/StandardToken.sol";
contract minaToken is StandardToken {
string public name = "minaToken";
string public symbol = "MNTK";
uint public decimals = 3;
uint public INITIAL_SUPPLY = 10000 * (10 ** decimals);
address public owner;
function minaToken() public {
totalSupply_ = INITIAL_SUPPLY;
balances[msg.sender] = INITIAL_SUPPLY;
owner = msg.sender;
}
}
const minaToken = artifacts.require('./minaToken.sol')
module.exports = function(deployer) {
deployer.deploy(minaToken)
}
基本的にこれくらいであとは、truffle.jsに、Ropstenの設定。
Privateは、別に入れてるGanache-cliだったりするけけど、その辺は割愛。
あとはRopstenにデプロイするのにINFURAに登録したのとMETAMASKを入れたことくらい。このあたりの解説は他でも沢山やってる。
var HDWalletProvider = require("truffle-hdwallet-provider");
var mnemonic = process.env.ROPSTEN_MNEMONIC;
var accessToken = process.env.INFURA_ACCESS_TOKEN;
module.exports = {
// See <http://truffleframework.com/docs/advanced/configuration>
// to customize your Truffle configuration!
networks: {
private: {
host: "localhost",
port: 7545,
network_id: "*",
gas: 4721975,
gasPrice: 20000000000
},
ropsten: {
provider: function() {
return new HDWalletProvider(
mnemonic,
"https://ropsten.infura.io/" + accessToken
);
},
network_id: 3,
gas: 4721975,
gasPrice: 20000000000
}
}
};
それでこれを・・・
$ truffle compile
$ truffle migrate --network ropsten
して、Ropstenにデプロイする訳だけど、その前にprivateにデプロイして問題がないかは確認は行う。
ここまでは、良い。
ここから・・なのですよね。
#前置き長くて何がしたいか?
基本的にここまではいろんなBlogや何かで書かれてること。
これを元に知りたいことがいくつか
##「Tokenが足りないから、もう一度追加発行してみたい」
zeppelin-solidityのMintableが使えるかもと、試行錯誤。
pragma solidity ^0.4.18;
import "zeppelin-solidity/contracts/token/ERC20/MintableToken.sol";
import "./minaToken.sol";
contract minaMintable is MintableToken, minaToken {
address public owner;
function minaMintable() public {
owner = msg.sender;
}
}
const Mintable = artifacts.require('./minaMintable.sol')
module.exports = function(deployer) {
deployer.deploy(Mintable)
}
こういうのをやってみたけど、元のところでなくて新しいトークンが発行されてた。
Migrationのところが同じだから続いてるのじゃないか?という考えだったけど、別っぽい。
あとはTokenのコントラクトアドレスを、これのOwnerに指定してみたりとか・・・何だかうまく行かなかった。
考え方が違うのだろうな・・・。
「一度デプロイしたトークンを破棄してみたい」
これ以前に実験でデプロイしたminaTokenがあって、別のコントラクトアドレスで存在するのだけど、そこのトークンを操作しようとできないから、いっそ無駄だし破棄しちゃいたい。
・・・でも、コントラクトアドレスが分かるだけで破棄もできない。
「ハードフォークとかソフトフォークとかってことよね」
実際、元のスマートコントラクト相手にちょっと追加したいとか、取り消ししたいとか、できるはずなんだけど・・・やり方がいまいち不明。
そんな感じにちょっと困ってる。
調べてみようかと、でも、分かってることをとりあえず残すこととしたのが、これ、きっかけ。