Flutter插件ldk_flutter的使用方法

Ldk-Flutter

一个基于Lightning Development Kit(LDK)的Flutter版本插件。

Table of Contents

Requirements

Flutter

  • Flutter版本: 3.0或更高
  • Dart版本: 2.18.2或更高

Android

  • Android最低SDK版本: API 23或更高
  • Android目标SDK版本: API 29
  • Android Gradle插件: 3.0.0或更高

iOS

  • iOS基础SDK版本: 12或更高
  • 部署目标版本: iOS 12.0或更高
  • Cocoapods: 1.11.3或更高

Installation

从GitHub安装(将以下代码复制到pubspec.yaml文件中):

ldk-flutter:
    git:
      url: https://github.com/LtbLightning/ldk-flutter.git
      ref: main

Configuring iOS

请导航到项目的iOS文件夹并运行以下命令:

pod install

Usage

首先导入插件:

import 'package:ldk_flutter/ldk_flutter.dart';

以下是一个完整的示例代码,展示如何使用ldk_flutter插件来管理闪电网络节点的功能。

示例代码

import 'package:flutter/material.dart';
import 'package:ldk_flutter/ldk_flutter.dart';
import 'dart:io' show Platform;

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  runApp(const MyApp());
}

class MyApp extends StatefulWidget {
  const MyApp({Key? key}) : super(key: key);

  [@override](/user/override)
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  final ldkFlutter = LdkFlutter();

  [@override](/user/override)
  void initState() {
    super.initState();
    startLdk();
  }

  Future<String> getDir() async {
    final res = await ldkFlutter
        .getDirPath(DirectoryType.ApplicationDocumentsDirectory);
    print(res);
    return res;
  }

  startLdk() async {
    final dir = await getDir();
    await ldkFlutter.ldkInit(
        host: Platform.isAndroid ? "10.0.2.2" : "127.0.0.1",
        port: 18443,
        username: "polaruser",
        password: "polarpass",
        network: Network.REGTEST,
        path: dir);
  }

  getNodeInfo() async {
    final res = await ldkFlutter.getNodeInfo();
    print("Local Balance ${res.localBalanceMsat}");
    print("Node Pub Key ${res.nodePubKey}");
    print("No:of channels ${res.numChannels}");
    print("No:of usable channels ${res.numUsableChannels}");
    print("No:of peers ${res.numPeers}");
  }

  connectPeer() async {
    final res = await ldkFlutter.connectPeer(
        peerPubKey:
            "02e837c5c65414be833a627043c44b69ec2061298b984323e512297f142c3fae3c",
        port: 9738,
        // 请根据实际情况修改host参数
        host: Platform.isAndroid ? "10.0.2.2" : "127.0.0.1");
    print(res);
  }

  getPeers() async {
    final res = await ldkFlutter.listPeers();
    res.forEach((e) {
      print(e);
    });
  }

  openChannel() async {
    final res = await ldkFlutter.openChannel(
        peerPubKey:
            "02636a5c5d92f05e93678f7da94d927789ea4e86ab29b7bf0be14ce09a52e8654f",
        port: 9836,
        amountInSats: 10000,
        // 请根据实际情况修改host参数
        host: Platform.isAndroid ? "10.0.2.2" : "127.0.0.1",
        isPublic: true);
    print(res);
  }

  listChannels() async {
    final res = await ldkFlutter.listChannels();
    for (var e in res) {
      print("Channel Id ${e.channelId}");
      print("Balance ${e.localBalanceMsat}");
      print("Peer Pub Key ${e.peerPubkey}");
      print("Peer Alias ${e.peerAlias}");
      print("Funding Txid ${e.fundingTxid}");
      print("Is Ready  ${e.isChannelReady}");
      print("Can Send Payments  ${e.channelCanSendPayments}");
      print("Is Public  ${e.public}");
    }
  }

  closeChannel() async {
    // 替换为您的channelId和peerPubKey
    await ldkFlutter.closeChannel(
        "f88a2f73032922f45c7724b75595de4a9113b99d0808ce62f600022d83922fe7",
        "02636a5c5d92f05e93678f7da94d927789ea4e86ab29b7bf0be14ce09a52e8654f");
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('LDK Node'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              TextButton(
                  onPressed: () {
                    getDir();
                  },
                  child: Text("获取文档目录")),
              TextButton(
                  onPressed: () {
                    getNodeInfo();
                  },
                  child: Text("获取节点信息")),
              TextButton(
                  onPressed: () {
                    connectPeer();
                  },
                  child: Text("连接对等节点")),
              TextButton(
                  onPressed: () {
                    getPeers();
                  },
                  child: Text("列出对等节点")),
              TextButton(
                  onPressed: () {
                    openChannel();
                  },
                  child: Text("打开通道")),
              TextButton(
                  onPressed: () {
                    listChannels();
                  },
                  child: Text("列出通道")),
              TextButton(
                  onPressed: () {
                    closeChannel();
                  },
                  child: Text("关闭通道")),
            ],
          ),
        ),
      ),
    );
  }
}

更多关于Flutter插件ldk_flutter的使用方法的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter插件ldk_flutter的使用方法的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


ldk_flutter 是一个 Flutter 插件,用于与 Lightning Development Kit (LDK) 集成。LDK 是一个用于构建比特币闪电网络节点的库,允许开发者在其应用程序中实现闪电网络功能。通过 ldk_flutter,开发者可以在 Flutter 应用中轻松集成闪电网络功能,例如创建和管理闪电网络节点、处理支付通道、发送和接收闪电网络支付等。

以下是 ldk_flutter 插件的潜在使用场景和功能:


1. 创建和管理闪电网络节点

  • 使用 ldk_flutter,开发者可以在 Flutter 应用中创建和管理闪电网络节点。
  • 支持节点的初始化、启动和停止操作。
  • 示例代码:
    import 'package:ldk_flutter/ldk_flutter.dart';
    
    void initNode() async {
      await LDKFlutter.initNode();
      print("Lightning node initialized");
    }
    

2. 处理支付通道

  • 支持创建、打开和关闭支付通道。
  • 可以与其他闪电网络节点建立通道,以便进行支付。
  • 示例代码:
    void openChannel(String peerId, int amount) async {
      await LDKFlutter.openChannel(peerId, amount);
      print("Channel opened with $peerId");
    }
    

3. 发送和接收闪电网络支付

  • 支持生成闪电网络发票(Invoice)以供接收支付。
  • 支持通过闪电网络发送支付。
  • 示例代码:
    void createInvoice(int amount, String memo) async {
      String invoice = await LDKFlutter.createInvoice(amount, memo);
      print("Invoice created: $invoice");
    }
    
    void sendPayment(String invoice) async {
      await LDKFlutter.sendPayment(invoice);
      print("Payment sent");
    }
    

4. 监听网络事件

  • 支持监听闪电网络节点的事件,例如支付成功、通道状态变化等。
  • 示例代码:
    void listenToEvents() {
      LDKFlutter.onPaymentReceived.listen((event) {
        print("Payment received: $event");
      });
    
      LDKFlutter.onChannelUpdate.listen((event) {
        print("Channel updated: $event");
      });
    }
回到顶部