Skip to content
This repository has been archived by the owner on Jan 20, 2025. It is now read-only.

Latest commit

 

History

History
342 lines (263 loc) · 11.5 KB

eclair.md

File metadata and controls

342 lines (263 loc) · 11.5 KB

Table of Contents

site

usage

このページ自体はv0.2時代の内容になっていてパラメータが現在と異なっています。
今の仕様はこちらを確認してください。

2022/11/25 : usage

build

  • mavenのバージョンは3.5.4以上
    • aptではインストールできなかったので、ダウンロードした
#maven >= 3.5.4
wget http://ftp.tsukuba.wide.ad.jp/software/apache/maven/maven-3/3.6.0/binaries/apache-maven-3.6.0-bin.tar.gz
tar zxf apache-maven-3.6.0-bin.tar.gz
sudo mv apache-maven-3.6.0 /usr/local/
export PATH=/usr/local/apache-maven-3.6.0/bin:$PATH
  • integration-testのMakefileを参考にした
    • ビルドできた場合、eclair-node/target/の中にjarファイルができている
      • 4つjarファイルがあるが、一番サイズが大きいやつ
#eclair
git clone https://github.com/ACINQ/eclair.git
cd eclair
mvn package -Dmaven.test.skip=true

install/update

  • 定期的にリリースされているため、それを使用すると良い
  • Windows/Mac/Linuxで使用可能
    • ここでは何も書いていない場合、Azure上のUbuntu16.04で動作させる
    • java環境はこのようにしてインストールするとよい
      • java8にしたが、java9は確認していない
sudo add-apt-repository -y ppa:webupd8team/java
sudo apt update
sudo apt install oracle-java8-installer
mkdir path/to/somewhere
cd path/to/somewhere
wget https://raw.githubusercontent.com/ACINQ/eclair/master/eclair-core/eclair-cli
chmod u+x eclair-cli

設定

~/.bitcoin/bitcoind

testnet=1
server=1
txindex=1
rpcuser=bitcoinuser
rpcpassword=bitcoinpassword
zmqpubrawblock=tcp://127.0.0.1:29000
zmqpubrawtx=tcp://127.0.0.1:29000

~/.eclair/eclair.conf

  • bitcoin.confがデフォルト値ならば、無くてもよいはず。
  • GUI版ではない場合、APIを使えるようにしないと何もできない。
    • eclair.api.passwordの値は、ダウンロードした eclair-cliの8行目くらいにある PASSWORDも変更しておいた方がいろいろ楽だろう
eclair.bitcoind.rpcuser=bitcoinuser
eclair.bitcoind.rpcpassword=bitcoinpassword
eclair.api.enabled=true
eclair.api.password=xxxxx

regtest

  • ~/.bitcoin/bitcoin.conf
regtest=1
server=1
txindex=1

rpcuser=bitcoinuser
rpcpassword=bitcoinpassword
zmqpubrawblock=tcp://127.0.0.1:29000
zmqpubrawtx=tcp://127.0.0.1:29000
  • ~/.eclair/eclair.conf
eclair.chain=regtest
eclair.bitcoind.rpcuser=bitcoinuser
eclair.bitcoind.rpcpassword=bitcoinpassword
eclair.bitcoind.rpcport=18443
eclair.api.enabled=true
eclair.api.password=xxxxx

起動

bitcoind

  • bitcoind v0.16
bitcoind -deprecatedrpc=addwitnessaddress -daemon
  • bitcoind v0.15
bitcoind -daemon

eclair-node-x.x-yyyy.jar

java -jar eclair-node-0.2-alpha11-dbb4f5b.jar
  • 何もエラーがない場合、起動しても何も出力されないようである。

エラー

  • fatal error: could not connect to bitcoind using json-rpc

    • 原因:bitcoin.confとeclair.confの、JSON-RPC設定が不一致
    • 対策:どちらかのファイルを変更して一致させる
  • fatal error: assertion failed: In testnet mode, make sure that all your UTXOs are p2sh-of-p2wpkh (check out our README for more details)

    • 原因:(testnet) bitcoindのP2WPKH nested in BIP16 P2SHのアドレスにbalanceが全部入っていない
      • 全部のbalanceがP2WPKH(in BIP16)に割り当てられていないといけない
      • bitcoindを立ち上げたばかりであれば、P2WPKH(in BIP16)のアドレスを作って、Faucetから送金した方が楽
    • 対策:addwitnessaddressしたアドレスにすべて送金する
$ bitcoin-cli getbalance
zzzzzzzzzzzzz
$ bitcoin-cli getnewaddress
xxxxxxxxxxxxx
$ bitcoin-cli addwitnessaddress xxxxxxxxxxxxx
yyyyyyyyyyyyy
$ bitcoin-cli sendtoaddress yyyyyyyyyyyyy zzzzzzzzzzzzz
(おそらくfeeがいくら足りないというエラーになる)
$ bitcoin-cli sendtoaddress yyyyyyyyyyyyy ZZZZZZZZZZZZZ(zzzzzzzzzzzzzからfeeを引いた額)

eclair-cli

状態確認

  • getinfo
./eclair-cli getinfo
  • peers
./eclair-cli peers
  • channels
./eclair-cli channels
  • channel
    • balanceを見ることができる
./eclair-cli channel <channelId>
  • allnodes
    • おそらく、announcementされたnode
./eclair-cli allnodes

接続

  • hostはドメイン名でもよい
  • portはデフォルトでも省略できない
./eclair-cli connect <node_id> <host> <port>

  OR

./eclair-cli connect <node_id>@<host>:<port>

チャネル開設

  • fund_satoshiの単位はsatoshi
  • confirmation待ちになるとchannel createdとログが出てくるようだ
    • 自分がopenしようとした場合は、まだconfirmationが達していなくても、./eclair-cli peersではchannelsにカウントされている
    • 相手がopenしようとした場合は、./eclair-cli channelsで"WAIT_FOR_FUNDING_CONFIRMED"という状態になっているようだ
./eclair-cli open <node_id> <fund_satoshi>
  • 相手からopenされ、feerate_per_kwがあまりにも違う場合はエラーを返してくる
    • 例: local/remote feerates are too different: remoteFeeratePerKw=253 localFeeratePerKw=53760
      • このときのbitcoin-cli estimatefee 6は、0.00001015だった(estimatesmartfeeも同じ)
        • 1015satoshiなので、ptarmiganはそれを4で割り、253にしている
        • どうやって53760という値が出てきたのだろう?

invoice作成

  • amount_msatの単位はmsatoshi
  • descriptionは文字列
./eclair-cli receive <amount_msat> <description>

送金

./eclair-cli send <BOLT11 invoice>

eclair-cli help

$ ./eclair-cli help
Usage: eclair-cli [OPTION]... [COMMAND]
Client for an eclair node.

With COMMAND is one of the command listed by eclair-cli help.

  -p <password>         api's password
  -a <address>          Override the api URL with <address>
  -v                    Outputs full json returned by the API

Examples:
  eclair-cli -a localhost:1234 peers     list the peers
  eclair-cli close 006fb...              closes the channel with id 006fb...

Note: Uses the json-rpc api exposed by the node on localhost:8080. Make sure the api is enabled.
Full documentation at: <https://github.com/ACINQ/eclair>

Available commands:

[
  "connect (uri): open a secure connection to a lightning node",
  "connect (nodeId, host, port): open a secure connection to a lightning node",
  "open (nodeId, fundingSatoshi, pushMsat = 0, channelFlags = 0x01): open a channel with another lightning node",
  "peers: list existing local peers",
  "channels: list existing local channels",
  "channels (nodeId): list existing local channels to a particular nodeId",
  "channel (channelId): retrieve detailed information about a given channel",
  "allnodes: list all known nodes",
  "allchannels: list all known channels",
  "allupdates: list all channels updates",
  "allupdates (nodeId): list all channels updates for this nodeId",
  "receive (amountMsat, description): generate a payment request for a given amount",
  "send (amountMsat, paymentHash, nodeId): send a payment to a lightning node",
  "send (paymentRequest): send a payment to a lightning node using a BOLT11 payment request",
  "send (paymentRequest, amountMsat): send a payment to a lightning node using a BOLT11 payment request and a custom amount",
  "close (channelId): close a channel",
  "close (channelId, scriptPubKey): close a channel and send the funds to the given scriptPubKey",
  "checkpayment (paymentHash): returns true if the payment has been received, false otherwise",
  "checkpayment (paymentRequest): returns true if the payment has been received, false otherwise",
  "getinfo: returns info about the blockchain and this node",
  "help: display this message"
]

fee

  def estimateSmartFee(nBlocks: Int): Future[Long] =
    rpcClient.invoke("estimatesmartfee", nBlocks).map(BitcoinCoreFeeProvider.parseFeeEstimate)

  override def getFeerates: Future[FeeratesPerKB] = for {
    block_1 <- estimateSmartFee(1)
    blocks_2 <- estimateSmartFee(2)
    blocks_6 <- estimateSmartFee(6)
    blocks_12 <- estimateSmartFee(12)
    blocks_36 <- estimateSmartFee(36)
    blocks_72 <- estimateSmartFee(72)
  } yield FeeratesPerKB(
    block_1 = if (block_1 > 0) block_1 else defaultFeerates.block_1,
    blocks_2 = if (blocks_2 > 0) blocks_2 else defaultFeerates.blocks_2,
    blocks_6 = if (blocks_6 > 0) blocks_6 else defaultFeerates.blocks_6,
    blocks_12 = if (blocks_12 > 0) blocks_12 else defaultFeerates.blocks_12,
    blocks_36 = if (blocks_36 > 0) blocks_36 else defaultFeerates.blocks_36,
    blocks_72 = if (blocks_72 > 0) blocks_72 else defaultFeerates.blocks_72)