Monacoin用のElectrum試作版

ElectrumをMonacoinで使えるようにしてみました。 ただし、PoWとかのチェックは全く行っていませんので、あくまでもテスト用です。 また、Mで始まるアドレスの対応やBTCをMONAに変更する対応などもできていないところがあります。 サーバはCoinomiさんのものをお借りしております。

Commits · ohac/electrum · GitHub

以下のようなDockerfileを準備します。

FROM ubuntu:16.04
RUN apt-get update && \
    apt-get upgrade -y && \
    apt-get install -y vim python-pip git python-qt4 pyqt4-dev-tools && \
    apt-get clean
RUN pip install --upgrade pip && \
    pip install dnspython pyaes ecdsa qrcode pbkdf2 protobuf pip requests \
                pysocks jsonrpclib ltc_scrypt
WORKDIR /root
RUN git clone https://github.com/ohac/electrum.git
WORKDIR /root/electrum
RUN git checkout monacoin-20170514
RUN pyrcc4 icons.qrc -o gui/qt/icons_rc.py

ビルドします。

$ docker build -t elemona .

以下のようなスクリプトを準備。

#!/bin/bash
XSOCK=/tmp/.X11-unix
XAUTH=/tmp/.docker.xauth
USENET=
#USENET="--net=none"
if ! [ -a $XAUTH ]; then
  touch $XAUTH
  xauth nlist $DISPLAY | sed -e 's/^..../ffff/' | xauth -f $XAUTH nmerge -
fi
docker run -it --rm \
  -v $XSOCK:$XSOCK:rw -v $XAUTH:$XAUTH:rw \
  -e DISPLAY -e XAUTHORITY=${XAUTH} --ipc=host $USENET \
  elemona

立ち上げ。

# ./electrum

試しに少額のMONAを送信してみると表示された。

f:id:ohac:20170514153730p:plain

しかし6検証を終えているのに何故かNot Verifiedのまま。 頻繁にNot connectedになり、どこかおかしいようだ。

また、別アドレスに送信しようとしたが以下の例外が出てうまく動かなかった。 もう少し調整が必要っぽい。

Traceback (most recent call last):
  File "/root/electrum/gui/qt/main_window.py", line 576, in timer_actions
    self.do_update_fee()
  File "/root/electrum/gui/qt/main_window.py", line 1172, in do_update_fee
    fee_rate = fee * 1000 / tx.estimated_size()
  File "/root/electrum/lib/util.py", line 203, in <lambda>
    return lambda *args, **kw_args: do_profile(func, args, kw_args)
  File "/root/electrum/lib/util.py", line 199, in do_profile
    o = func(*args, **kw_args)
  File "/root/electrum/lib/transaction.py", line 788, in estimated_size
    return len(self.serialize(True)) / 2 if not self.is_complete() or self.raw is None else len(self.raw) / 2 # ASCII hex string
  File "/root/electrum/lib/transaction.py", line 737, in serialize
    nLocktime = int_to_hex(self.locktime, 4)
  File "/root/electrum/lib/bitcoin.py", line 168, in int_to_hex
    return rev_hex(s)
  File "/root/electrum/lib/bitcoin.py", line 162, in rev_hex
    return s.decode('hex')[::-1].encode('hex')
  File "/usr/lib/python2.7/encodings/hex_codec.py", line 42, in hex_decode
    output = binascii.a2b_hex(input)
TypeError: Non-hexadecimal digit found

23:53追記

blockchain_headersをダウンロード可能にしてやればうまく動きました。 electrum-serverの立て方は別途記事にします。