try catch and ...release
ページ
ホーム
Chromeアプリ開発Tips
公開アプリ
Ubuntu
Linuxコマンド
#!/bin/bash
ブロックチェーンと暗号通貨
2016年12月27日火曜日
Monacoinのセットアップからマイニングまで
[Monacoin](https://monacoin.org/ja/index.html)とは、Bitcoinのようなブロックチェーンを利用したP2P決済ネットワークです。そして、そこで利用されている暗号通貨のことを`MONA`といいます。Monacoinは、暗号通貨としては日本初のものとなります。 MonacoinはBitcoinに比べるとまだまだ流動性は乏しいですが、一部のサイトでは決済や[Q&Aサイトなどでの投げ銭](http://askmona.org/)などにも利用できるようで、局所的には流行っている印象です。将来性はあるかもしれませんね。 なにはともあれ、まずはMonacoinアプリケーションが使えるところまで持って行きましょう。 今回は、MonacoinアプリケーションのセットアップとMONAの送金(+おまけとしてCPUマイニングも)まで行ってみたいと思います。 ちなみに、今回インストールするMonacoinアプリケーションの`monacoind`は、設定や使い方がBitcoinの`bitcoind`とほぼ互換(正確には`Litecoin`と互換)なので、bitcoindに慣れ親しんでいる人なら理解が早いかもしれません。
## 目次 (index) + [環境](#env) + [monacoindのインストール](#install-monacoind) + [monacoindのセットアップ](#setup-monacoind) + [monacoindの起動](#run-monacoind) + [アドレスの作成](#create-address) + [ウォレット](#wallet) + [ウォレットをパスフレーズで暗号化](#monacoin-cli-encryptwallet) + [ウォレットのバックアップ](#backup-wallet) + [faucetでMONAをゲット](#faucet) + [MONAを送金](#send-mona) + [マイニング](#mining) + [コメント](#my-comment) [⤒](#index) ## 環境 (env) - **OS:** Ubuntu 16.04.1 LTS - **Monacoinアプリケーション:** monacoind v0.10.4.0-gcae9e5c [⤒](#index) ## monacoindのインストール (install-monacoind) Monacoinアプリケーションの`monacoind`をインストール: ``` $ sudo add-apt-repository ppa:visvirial/monacoin $ sudo apt-get update $ sudo apt-get install monacoind // monacoindのバージョン: $ monacoind --version Monacoin Core Daemon version v0.10.4.0-gcae9e5c ... ``` [⤒](#index) ## monacoindのセットアップ (setup-monacoind) #### monacoindの設定ファイル `~/.monacoin/monacoin.conf` を作成: ``` $ mkdir ~/.monacoind/ && cd ~/.monacoind $ nano monacoin.conf ``` #### `monacoin.conf` を編集: (monacoin-conf) ``` server=1 daemon=1 rpcuser=
# <= 任意の値に変更する rpcpassword=
# <= 任意の値に変更する rpcallowip=127.0.0.1/24 rpcport=9332 # マイニングの設定: # monacoindにマイニングをさせない場合(またはサードパーティのminingツールに掘らせる場合)は、 # コメントアウトするか、または 0 に設定する: gen=1 ``` **Tips:** 先述の通り、`monacoind`は`bitcoind`と互換ですので、設定ファイルも[bitcoinのもの](https://github.com/bitcoin/bitcoin/blob/master/contrib/debian/examples/bitcoin.conf)が参考になります。 [⤒](#index) ## monacoindの起動 (run-monacoind) #### monacoindを起動します: (run-monacoind-daemon) ``` // monacoindを起動: $ monacoind -daemon ``` **Note:** 起動直後に、 ``` Failed to create backup boost::filesystem::copy_file: No such file or directory: "/home/
/.monacoin/wallet.dat", "/home/
/.monacoin/backups/wallet.dat.2016-12-26-08.43" ``` といったようなエラーログが出ますが、起動には特に問題はありません。 **Note:** monacoindを起動すると以下のようなログを大量に吐きながらブロックチェーンの同期が始まります: ``` ... =2015-05-07 12:40:44 progress=0.422546 cache=114191 2016-12-26 09:32:50 UpdateTip: new best=3570caccc046407561f726d211297c45603b3f6d001c20ddaba771d2ef5c1a8b height=388334 log2_work=59.705918 tx=1522312 date=2015-05-07 12:41:40 progress=0.422546 cache=114192 ... ``` 巨大なブロックチェーンをダウンロードするので同期には少し時間が掛かります(2016年12月現時点では、ブロードバンドを使っても約2時間ほど掛かりました)が、これはBitcoinなどの他のブロックチェーンと同様に必ず完了させる必要があります。([オンライン・ウォレット](#wallet)などを使う場合は例外です) #### 別ターミナルから起動を確認: (check-running-monacoind) ``` // monacoindのログを見てみる: $ tail -f ~/.monacoin/debug.log // ここでログがドカドカと出力されていればOK // エラーの場合はエラーログを吐いてshutdownしているはずです // monacoindと一緒にインストールされたクライアントも使ってみる: $ monacoin-cli getinfo { "version" : 100400, "protocolversion" : 70003, "walletversion" : 60000, "balance" : 0.00000000, "blocks" : 2539, "timeoffset" : 0, "connections" : 8, "proxy" : "", "difficulty" : 0.00165045, "testnet" : false, "keypoololdest" : 1482741806, "keypoolsize" : 101, "paytxfee" : 0.00000000, "relayfee" : 0.00100000, "errors" : "" } // クライアントからmonacoindを停止する場合は以下のコマンドを実行する: $ monacoin-cli stop Monacoin server stopping ``` **Tips:** monacoinのAPIもbitcoinのものと互換ですので、monacoin-cliで使うAPIも[bitcoinのもの](https://en.bitcoin.it/wiki/Original_Bitcoin_client/API_calls_list)が参考になります。 [⤒](#index) ## アドレスの作成 (create-address) #### 任意のアカウント名を指定してアドレスを生成: (monacoin-cli-getnewaddress) ``` $ monacoin-cli getnewaddress
MUw2rrRZ14Dvy18zgNSUoqYozd3jZH4GhT ## <= Mから始まるのがモナーコインのアドレス ``` #### アカウントの生成を確認: (monacoin-cli-listaccounts) ``` $ monacoin-cli listaccounts { "" : 0.00000000, "
" : 0.00000000 } ``` #### アカウントに紐付いたアドレスを確認: (monacoin-cli-getaddressesbyaccount) ``` $ monacoin-cli getaddressesbyaccount
[ "MUw2rrRZ14Dvy18zgNSUoqYozd3jZH4GhT" ] ``` [⤒](#index) ## ウォレット (wallet) アドレスを管理するためのツールを「ウォレット」といいます。先ほどインストールしたMonacoinもウォレットですが、それ以外にもサードパーティ製のウォレットもいくつか存在します。これらの中には、ブロックチェーンをダウンロードする手間が必要なかったり、便利なウォレットも多いのですが、例えばWeb上のサードパーティのオンライン・ウォレットを使うということは、すなわち**他人にあなたの Private Key を預けるということと同じです!これはオンライン・ウォレットのサーバ管理者によってあなたのウォレットからコインが奪われる可能性を意味します。**サードパーティ製ウォレットのご利用は、このへんのリスクをちゃんと理解した上で自己責任の元で行いましょう。 どうしてもオンライン・ウォレットを利用する必要がある場合は、オンライン・ウォレット上に大金を長期間保有するようなことはせず、なるべくすぐに別のアドレス(自分がMonacoinアプリケーションで作成したアドレス)に移動させるべきです。 [⤒](#index) ### ウォレットをパスフレーズで暗号化 (monacoin-cli-encryptwallet) 以下のコマンドでウォレットをパスフレーズで暗号化できます: ``` $ monacoin-cli encryptwallet
``` **ここで設定したパスフレーズは絶対に忘れないようにしてください。** [⤒](#index) ### ウォレットのバックアップ (backup-wallet) 先ほどのパスフレーズとウォレットは必ずバックアップしておきましょう。 ウォレットのバックアップ: ``` $ monacoin-cli backupwallet
``` **注意:** **ウォレットファイルとパスフレーズのどちらかを紛失してしまうと、保有する残高は二度と利用できなくなりますのでご注意を。** [⤒](#index) ## faucetでMONAをゲット (faucet) さて、いよいよMONAの送金をしてみたいところですが、、、当然、今はまだ残高はゼロ。送金テストするにも肝心のMONAがなければどうしようもないですよね。 そんな時に便利なのが **faucet** と呼ばれるWebサービスです。faucetは、自分のアドレスを入力すると少額のコインがもらえるサイトのことです。今回はこちらの [Koguma faucet(仮)](http://faucet.itniti.net/) さんのサービスを利用させていただきました。感謝♪ faucetサービスでポチった後に残高を確認: ``` $ monacoin-cli listaccounts { "" : 0.00000000, "
" : 0.05988813 <= ちゃんと入ってました♪ } ``` [⤒](#index) ## MONAを送金 (send-mona) まずはMONA受け取りtest用に`test`という名前の別アカウントを作っておきます: ``` // 'test'というアカウントを作成: $ monacoin-cli getnewaddress test // 'test'というアカウントから新たなアドレスを作成: $ monacoin-cli getaddressesbyaccount test [ "MGLNbuBFV5NCu1Dx8innzziMhn4dbroz9V" <= 受け取りtest用アドレス ] // アカウントを確認: $ monacoin-cli listaccounts { "" : 0.00000000, "
" : 0.05988813, "test" : 0.00000000 } ``` #### MONAの送金(簡易版): (monacoin-cli-sendtoaddress) では、送金してみましょう: ``` // 以下のパラメータで送金します: // 送金元: "" デフォルトアカウント // 送金先: MGLNbuBFV5NCu1Dx8innzziMhn4dbroz9V // 送金額: 0.01 MONA // 手数料: 0.001 MONA // 先に各アカウントの残高を確認しておきます: $ monacoin-cli listaccounts { "" : -0.05988813, "
" : 0.10488813, "test" : 0.01200000 } // 180秒間、ウォレットをアンロック: $ monacoin-cli walletpassphrase
180 // 手数料を設定: $ monacoin-cli settxfee 0.001 // 送金: $ monacoin-cli sendtoaddress MGLNbuBFV5NCu1Dx8innzziMhn4dbroz9V 0.01 // この時点の残高を確認: $ monacoin-cli listaccounts { "" : -0.07088813, <= 0.011減少 "
" : 0.10488813, <= 増減なし "test" : 0.01200000 <= 増減なし } // ここでconfirmationが増えるのを少し待ちます... // 改めて残高を確認: $ monacoin-cli listaccounts { "" : -0.07088813, <= 0.011減少 (送金払出額0.010 + 手数料0.001) "
" : 0.10488813, <= 増減なし "test" : 0.02200000 <= 0.010増加(送金預入額0.010) } // 想定通りに残高が変化しています! ``` #### MONAの送金(詳細版): (monacoin-cli-sendrawtransaction) ほとんどの送金は先ほどの`sendtoaddress`を使うのが簡単なのですが、理解をより深めるために処理の一つ一つを分解した送金を行ってみたいと思います。 monacoin-cliでの送金処理は以下のように分解することができます: 1. `listunspent` : UTXO一覧を取得。UTXOとはブロックチェーン上に散らばった自分の小銭のようなイメージです。 2. `createrawtransaction` : raw transactionを作成 3. `signrawtransaction` : raw transactionに署名 4. `sendrawtransaction` : raw transactionを送信(送金) では、これを踏まえて実際に送金してみましょう: ``` // 以下のパラメータで送金します: // 送金元: "" デフォルトアカウント // 送金先: MGLNbuBFV5NCu1Dx8innzziMhn4dbroz9V // 送金額: 0.002 MONA // 手数料: 0.00188813 MONA // ****************************************** // * STEP1: listunspent // ****************************************** // まずはUTXOを一覧する: $ monacoin-cli listunspent [ { "txid" : "
", "vout" : 0, "address" : "MKqZAh8HdVnfKKyay5syDE2XFAZBD9GoU2", "scriptPubKey" : "76a91482f2fdbf38c1d686c383b3110cd4337a206f024a88ac", "amount" : 0.04888813, "confirmations" : 28, "spendable" : true }, { "txid" : "2d07ce51e6b72579b2e17ce62bcadefa09632de5049475c012611de356bbfb4e", "vout" : 1, "address" : "MGLNbuBFV5NCu1Dx8innzziMhn4dbroz9V", "account" : "test", "scriptPubKey" : "76a9145c85bb3e380db720a4199cdf61223f7b85228cf488ac", "amount" : 0.01000000, "confirmations" : 28, "spendable" : true } ] // 上記の結果から、使うUTXOのtxidを設定: $ UTXO_TXID=
// voutを設定: $ UTXO_VOUT=0 // ****************************************** // * STEP2: createrawtransaction // ****************************************** // 送金先を指定: $ SEND_TO=MGLNbuBFV5NCu1Dx8innzziMhn4dbroz9V // 送金額を設定: $ SEND_AMOUNT=0.002 // raw transaction を生成: $ monacoin-cli createrawtransaction ''' [ { "txid": "'$UTXO_TXID'", "vout": '$UTXO_VOUT' } ] ''' ''' { "'$SEND_TO'": '$SEND_AMOUNT' }''' 0000000hogetransaction... <= raw transaction // raw transactionを保存: $ RAW_TX=0000000hogetransaction... // ****************************************** // * STEP3: signrawtransaction // ****************************************** // ウォレットを180秒間アンロック: $ monacoin-cli walletpassphrase
180 // raw transactionに署名: $ monacoin-cli signrawtransaction $RAW_TX { "hex" : "010000signedhogetx...", "complete" : true } // 署名されたraw transactionを保存: $ SIGNED_RAW_TX=010000signedhogetx... // ****************************************** // * STEP4: sendrawtransaction // ****************************************** // raw transactionを送信(送金): $ monacoin-cli sendrawtransaction $SIGNED_RAW_TX 5803717f622e67f9bfb414cd558f3a76d6fbb94d9dbfbb9fa3020a8d2ca6d481 // 送金完了! ``` [⤒](#index) ## マイニング (mining) おまけとして、マイニングの方法も紹介しておきます。 マイニングには2種類あり、1つは効率的な**GPUマイニング**で、もう1つは少し非効率な**CPUマイニング**です。今回は、マイニングとしては少し非効率ですが、monacoindにビルトインされていてお手軽なCPUマイニングを行ってみましょう。、、、とここまで書きましたが、実は[monacoin.conf](#monacoin-conf)に `gen=1` を設定してmonacoindを起動したことにより、裏ではすでにCPUマイニングが行われています。 その証拠に[debug.log](#check-running-monacoind)には以下のようなログが定期的に出力されているはずです: ``` ... Running MonacoinMiner with 1 transactions in block (182 bytes) ... ``` #### マイニング情報を確認: (monacoin-cli-getmininginfo) ``` $ monacoin-cli getmininginfo { "blocks" : 867631, "currentblocksize" : 1000, "currentblocktx" : 0, "difficulty" : 922.52616855, "errors" : "", "genproclimit" : -1, "networkhashps" : 26525975995, "pooledtx" : 0, "testnet" : false, "chain" : "main", "generate" : true, "hashespersec" : 65214 } ``` **Note:** 今回はお手軽なCPUマイニングを紹介しましたが、実際のところ、現状のmonacoinネットワークではCPUだけで採掘するのはほとんど不可能、というか、電気代がペイできないのではないかと思われます。 参考程度に: [Bitcoin採掘時間の計算方法2](https://en.bitcoin.it/wiki/Difficulty#How_soon_might_I_expect_to_generate_a_block.3F) [⤒](#index) ### cpuminer-multiを使ったマイニング おまけのおまけ。 せっかくなのでサードパーティの`cpuminer-multi`(`cpuminer`)を使ったマイニングも追記しておきます: #### cpuminerのインストール: (install-cpuminer) ``` $ sudo apt-get install automake autoconf pkg-config libcurl4-openssl-dev libjansson-dev libssl-dev libgmp-dev make g++ $ git clone https://github.com/tpruvot/cpuminer-multi $ cd cpuminer-multi/ // コンパイル $ ./autogen.sh $ ./configure CFLAGS="-march=native" --with-crypto --with-curl $ make $ sudo make install ``` #### cpuminerを起動: (run-cpuminer) ``` $ cpuminer -a lyra2rev2 -o localhost:9332 -O
:
--coinbase-addr=
``` [monacoin.conf](#monacoin-conf)で指定した `rpcuser` と `rpcuserpassword` を設定、マイニング報酬を受け取るアドレスを `--coinbase-addr=...` で指定します。 **Tips:** 起動後にもし以下のようなエラーが出たら: ``` [2016-12-27 07:46:49] Unrecognized block version: 4 [2016-12-27 07:46:49] json_rpc_call failed, retry after 10 seconds ``` [tpruvot/cpuminer-multiのソースコードの以下の部分](https://github.com/tpruvot/cpuminer-multi/blob/27c8861d68d2cbd6973faa921839859fa8e12192/cpu-miner.c#L700)を修正して[再コンパイル](#install-cpuminer)する: ``` ... #define BLOCK_VERSION_CURRENT 3 # <= ここを 4 に書き換えてコンパイル ... ``` [⤒](#index) ## コメント (my-comment) 「モナーコインがもっと普及したら、世の中もっと面白くなりそうだなあ」、、、この記事を書きながら自分はそう思いました。 暗号通貨やブロックチェーンに興味なかった人たちが、少しでもモナーコインのことを知り、実際に使うようになったら、ネットやリアルでの決済はもっともっと便利になっていくのでしょうね。個々人の少額決済がもっと身近になればなるほど、そこから多様な面白いサービスがどんどん生まれてきそうな予感。
0 件のコメント:
コメントを投稿
次の投稿
前の投稿
ホーム
登録:
コメントの投稿 (Atom)
0 件のコメント:
コメントを投稿