#download #lightning #payment #file-server #bitcoin #lnd #up

app agora

接受闪电网络支付以供下载的文件服务器

11 个版本

0.1.2 2021年11月29日
0.1.1 2021年10月27日
0.0.7 2021年8月18日
0.0.1 2021年6月1日
0.0.0 2021年5月29日

#5 in #lnd

CC0 许可证

155KB
3.5K SLoC

Agora


crate build chat on telegram

agora 提供本地目录的内容,通过 HTTP 提供文件列表和下载。例如,您可以将其指向一个包含 PDF 的目录,允许用户在他们的网页浏览器中浏览和查看 PDF。如果 agora 连接到一个 LND 节点,它可以配置为在下载时要求 闪电网络 支付。

公共 Agora 实例

  • agora.download:主网的开发实例
  • test.agora.download:测试网的开发实例
  • 如果您运行了一个 Agora 实例并希望将其添加到列表中,请打开一个问题或提交一个 PR!

Agora 是由 @casey@soenkehahn 开发的免费软件。我们非常欢迎捐款,我们的比特币捐款地址是

bc1qpyg4schsrglnunrcc74rkd7xam22xvf9v0yk0y

支持、反馈和讨论

如果您有任何问题、想要请求一个功能或发现一个错误,请随时 打开一个问题加入我们的 Telegram 群组

开发者 Casey 和 Sönke 也可以通过 电子邮件 联系。

运行

$ mkdir files
$ echo 'amazing content' > files/file.txt
$ agora --directory files --http-port 1234
$ curl http://127.0.0.1:1234/files/file.txt

有关更多配置选项,请参阅 agora --help

安装

Linux、MacOS 和 Windows 的预构建二进制文件可以在 发行页面 上找到。

从源代码构建

agora 使用 Rust 编写,并使用 cargo 构建。您可以使用 rustup 安装 Rust。

在签出的仓库中,运行 cargo build --release 将会构建 agora 并将二进制文件复制到 ./target/release/agora

在仓库内部,您还可以运行,例如 cargo install --locked --path . --root /usr/local,这会将 agora 复制到 /usr/local/bin/agora

发布通知

要接收 GitHub 上的发布通知,您可以使用自定义通知设置来关注此仓库

此外,agora 发布的 RSS 源在此发布

部署

agora 二进制文件包含其静态资源,因此可以从文件系统的任何位置复制和运行。默认情况下,cargo 会动态链接到系统库。您可以通过使用 x86_64-unknown-linux-musl 目标来避免此操作:cargo build --target=x86_64-unknown-linux-musl --release。这将生成一个静态链接的二进制文件,可以在例如 Alpine 和 CentOS Linux 上运行。

配置

您可以配置 agora 监听的网络端口和地址以及它服务的目录。有关详细信息,请参阅 agora --help

HTTPS 配置

如果您在公共域名上运行 agora,它可以配置为通过 Let's Encrypt 使用 ACME 协议自动请求 TLS 证书进行 HTTPS。有关详细信息,请参阅 agora --help 中的 --acme-*--https-* 标志。

LND 配置

默认情况下,agora 免费提供文件服务。要收费下载,agora 必须连接到 LND 实例。有多个命令行标志可以配置此连接,有关详细信息,请参阅 agora --help

要配置哪些文件是免费的,哪些是付费的,请参阅下面的访问配置

访问配置

您可以将一个 .agora.yaml 配置文件放入 agora 服务的目录中,以配置该目录中文件的访问。

一个示例配置是

# whether or not to charge for files
paid: true
# price for files in satoshis
base-price: 1000 sat

访问配置会递归应用于子目录中的文件。例如,您可以在您的基目录中放入此配置

paid: false
base-price: 500 sat

然后在某些子目录中,您可以通过创建一个如下的 subdir/.agora.yaml 来收费文件下载

paid: true

默认配置是

paid: false
# `base-price` does not have a default. Setting `paid` to `true`
# while not having a `base-price` causes an error.
base-price: null

自定义索引页面

agora用于目录文件列表。如果一个目录中存在.index.md文件,agora会将其中的Markdown渲染为HTML,并将其包含在文件列表中。agora期望使用Commonmark Markdown,并扩展了脚注、删除线表格任务列表等功能。

开发Agora实例

可以在agora.downloadtest.agora.download访问Agora实例。agora.download在比特币主网上运行,它生成的发票可以使用任何主网雷电网络钱包支付。http://test.agora.download在比特币测试网上运行,它生成的发票只能使用测试网雷电网络钱包支付,例如htlc.me

从Agora实例购买文件

您可以浏览任何Agora实例中的托管文件。Agora实例可以托管免费和付费文件混合。对于付费文件,Agora将向您展示一个雷电网络发票,您必须支付此发票才能下载文件。这些发票可以使用雷电网络钱包支付。流行的钱包包括

  • Wallet of Satoshi,适用于Android和iOS的托管钱包。
  • Strike,适用于Android、iOS和Google Chrome的托管钱包。
  • Phoenix,适用于iOS和Android的自托管钱包。
  • Breez,适用于iOS和Android的自托管钱包。
  • River Financial,一个比特币金融服务平台,可以用于用美元买卖比特币,以及在网上、iOS和Android上发送和接收雷电支付。

使用Agora销售文件

Agora不是一个托管平台。如果您想通过它销售文件,您将必须托管自己的Agora实例。Agora实例需要访问一个LND实例来创建发票并查询其支付状态。反过来,LND需要访问一个比特币节点——例如bitcoind——以查询比特币区块链的状态。

设置bitcoind和LND

设置bitcoind和LND是一个复杂的话题,存在许多不同的方法。关于在Linux上设置LND的绝佳指南可在此找到,以及设置bitcoind的配套指南,以向雷电网络节点提供有关区块链的信息,可在此找到

使用Agora处理支付

为了处理支付,Agora需要连接到一个LND实例。请参阅--lnd-*标志,在agora --help中。

此外,LND节点只有在有足够的入站流动性时才能接收支付。

入站流动性

流动性管理是雷电网络最复杂的问题之一,也是最难以理解的。

构成闪电网络的底层基本单元是“支付通道”,通常简称为“通道”。通道是在两个闪电网络节点之间建立的,具有固定容量,通过链上比特币交易来开启,并通过链上比特币交易来关闭。

当通道开启时,通道的两方可以在彼此之间进行支付,但不必为每笔支付发布一个比特币交易。他们只需在想要关闭通道时发布一个比特币交易,这样就可以结算自通道开启以来的所有中间交易。

作为一个具体的例子,假设Alice和Bob开启了一个通道,当通道开启时,Alice贡献了1 BTC,而Bob贡献了0 BTC。最初,他们在通道上的余额是

Alice: 1 BTC
Bob:   0 BTC

在这个状态下,Alice可以向Bob发送0.1 BTC的支付,通道余额将变为

Alice: 0.9 BTC
Bob:   0.1 BTC

Alice和Bob可以互相发送金钱,但只能发送他们通道那一侧的金额。在这个时候,Alice可以向Bob发送最多0.9 BTC,而Bob可以向Alice发送最多0.1 BTC。

然而,在Bob的余额最初为0 BTC时,Alice无法从Bob那里收到任何钱。这是因为缺少流入流动性,简单来说,就是通道另一侧的钱,可以发送给你。

这是闪电网络与其他支付系统和链上比特币支付非常不同的一点。你必须安排足够的流入流动性来接收支付。

你可能会有一个疑问,如果我只想假设客户有钱,然后在我有足够的流动性时自己排队结算呢?

让我们假设我们处于初始状态,Alice在通道中有1 BTC,Bob有0 BTC,Alice允许Bob向她支付1 BTC。新的余额将是

Alice:  2 BTC
Bob:   -1 BTC

然而!当闪电网络通道关闭时,你将根据资金交易的资金在通道各方之间分配。通道是通过1 BTC的链上比特币交易来资助的,因此无法从初始资金交易中支付2 BTC给Alice。由于支付通道的双方都可以随时关闭通道,Alice将不得不信任Bob保持通道开启,直到他没有负余额。这既不可扩展也不安全,而避免信任需求正是闪电网络最初的目的,否则我们都可以简单地互相交换不可执行的债务。

流入流动性可以通过多种方式获得,并且正在开发中的提案将在未来使其更加容易。目前,我们建议从Bitrefill购买流入流动性。Bitrefill提供一项服务,即闪电节点运营商可以向Bitrefill支付以打开与该运营商的闪电节点之间的通道。运营商支付少量比特币,并换取一个具有更多流入流动性的通道。

开发

您可以使用cargo test在本地运行测试。Pull requests在github actions上测试,工作流程在.github/workflows/build.yaml中定义。您可以使用just all在本地运行大约相同的测试。(参见just。)

许可

爱果拉(Agora)遵循CC0协议,但除ATTRIBUTION.md中列出的第三方组件外。

依赖项

~40–62MB
~1M SLoC