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
155KB
3.5K SLoC
Agora
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
二进制文件包含其静态资源,因此可以从文件系统的任何位置复制和运行。默认情况下,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.download和test.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