LDK example wallet
Sample node
code:shell
cargo new ldk-wallet && cd ldk-wallet
cargo add lightning
code:shell
cat ~/.bitcoin/regtest/.cookie | awk -F':' '{print $1 " " $2}' | xargs cargo run code:get cookie
cat ~/.bitcoin/regtest/.cookie | awk -F':' '{print $1 " " $2}' code:core ln command
lightning-cli connect 02d23e235fa487fbe3293264d0dc4cfa5be3483d2d7d6d102379c00d6f6a19c7a2 172.20.0.1 9999
code: fundchannel
lightning-cli fundchannel 02d23e235fa487fbe3293264d0dc4cfa5be3483d2d7d6d102379c00d6f6a19c7a2 10000
code:note
Peer tries to open channel but their announcement preference is different from ours
PeerManager
Step 12. Initialize the PeerManager
NetGraphMsgHandler は optional
0.0.107 - 2022-06-08 で rename されている
NetGraphMsgHandler has been renamed to P2PGossipSync, the network_graph module has been renamed to gossip, and NetworkUpdate::ChannelClosed has been renamed NetworkUpdate::ChannelFailure
P2PGossipSync を optional にするには IgnoringMessageHandler を使えばよい
ただし、PeerManager に SimpleArcPeerManager をそのまま使うと P2PGossipSync を使う型になってしまっているので、IgnoringMessageHandler を型パラメータに指定する必要あり
code:main.rs
pub type SimpleArcPeerManager<SD, M, T, F, L> = lightning::ln::peer_handler::PeerManager<
SD,
Arc<SimpleArcChannelManager<M, T, F, L>>,
// Arc<P2PGossipSync<Arc<NetworkGraph<Arc<L>>>, Arc<C>, Arc<L>>>,
Arc<IgnoringMessageHandler>,
Arc<L>,
Arc<IgnoringMessageHandler>,
;
pub(crate) type PeerManager = SimpleArcPeerManager<
SocketDescriptor,
ChainMonitor,
BitcoindClient,
BitcoindClient,
YourLogger,
;
リクエスト受ける
connection リクエストを処理するのは new_inbound_connection
Connection::schedule_read がその後のリクエストを処理する?
connection のリクエストを処理する?
poll_event_process
PeerManager process_events がリクエストを処理する
違う。process events はリクエストを受けて、こちらが生成した event を process するものみたい。
message_handler.chan_handler.get_and_clear_pending_msg_events();
ChannelManager channel_state.pending_msg_events
中では PeerManager の handle_message が呼び出される
こちらからメッセージを発行できるようにしたい
久々に起動したらエラーがでる
thread 'main' panicked at 'called Result::unwrap() on an Err value: Custom { kind: UnexpectedEof, error: "no status line" }'
たぶんこれだろう
curl で叩いてみても empty response だった
port の指定が間違っているだけだった、、、、18443 が regtest のデフォルト、いつも忘れる
bitcoin rpc を叩くのに cookie を password として使う方法
code:shell
// PASS="$(cat ~/.bitcoin/regtest/.cookie | awk -F':' '{print $2}')" cargo run // let rpc_user = &String::from("__cookie__");
// let rpc_password = &env::var("PASS").unwrap();