3个版本

0.0.2 2021年10月27日
0.0.1 2021年8月14日
0.0.0 2021年8月5日

#3 in #agora


agora 中使用

CC0 许可证

38KB
490

Agora


crate build chat on telegram

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

公共Agora实例

Agora是由 @casey@soenkehahn 开发的免费软件。

支持、反馈和讨论

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

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

运行

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

请参见 agora --help 以获取更多配置选项。

安装

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

从源码构建

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

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

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

使用Docker运行

可以从ghcr拉取agora的Docker镜像。

构建Agora Docker镜像

也可以直接从仓库内部构建Docker镜像。

构建镜像

docker build --tag agora:latest .

在Docker中运行Agora

Docker镜像可以用于从您的宿主机上提供服务,并连接到您现有的LND节点。

要使用本地目录~/my-files运行agora

docker run \
  --network="host" \
  -e FILES_DIR=/files \
  -e AGORA_PORT=8080 \
  -v ~/my-files:/files \
  agora:latest

要使用连接到Lightning实例(假设LND RPC运行在localhost和端口10009,数据目录位于~/.lnd)的agora运行。

docker run \
  --network="host" \
  -e FILES_DIR=/files \
  -e AGORA_PORT=8080 \
  -e LND_RPC_AUTHORITY=localhost:10009 \
  -e TLS_CERT_PATH=/.lnd/tls.cert \
  -e INVOICES_MACAROON_PATH=/.lnd/data/chain/bitcoin/testnet/invoice.macaroon \
  -v ~/my-files:/files \
  -v ~/.lnd:/.lnd \
  agora:latest

发布通知

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

此外,还发布了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 实例并浏览托管文件。Agora 实例可以托管免费和付费文件混合。对于付费文件,Agora 将向您展示一个需要付款才能下载文件的 Lightning Network 发票。这些发票可以使用 Lightning Network 钱包支付。流行的钱包包括

  • Satoshi 钱包,适用于 Android 和 iOS 的托管钱包。
  • Strike,适用于 Android、iOS 和 Google Chrome 的托管钱包。
  • Phoenix,适用于 iOS 和 Android 的自托管钱包。
  • Breez,适用于 iOS 和 Android 的自托管钱包。
  • River Financial,是一个能够以美元买卖比特币并制作和接收 Lightning 付款的比特币金融服务平台,适用于网页、iOS 和 Android。

使用 Agora 出售文件

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

设置 bitcoind 和 LND

设置 bitcoind 和 LND 是一个复杂的话题,有多种不同的方法。关于在 Linux 上设置 LND 的优秀指南可在此处找到 这里,以及一个设置 bitcoind 的配套指南,为 Lightning 网络节点提供有关区块链的信息,可在 这里找到。

使用 Agora 处理支付

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

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

入金流动性

流动性管理是 Lightning 网络最复杂的方面之一,也是最具反直觉性的。

构成 Lightning 网络的基本原语是“支付通道”,通常简称为“通道”。一个通道是在两个 Lightning 网络节点之间,具有固定容量,通过一条链上比特币交易打开,通过另一条链上比特币交易关闭。

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

作为一个具体的例子,假设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的链上比特币交易资助的,所以无法从初始资金交易中支付给Alice 2 BTC。由于支付通道的双方可以随时关闭通道,Alice将不得不信任Bob保持通道开启,直到他不再有负余额。这既不可扩展也不安全,而避免信任正是闪电网络最初的目的,否则我们都可以简单地来回交易不可执行的欠条。

入境流动性可以通过多种方式获得,并且正在开发的提案应该会在未来使其变得更加容易。目前,我们建议从Bitrefill购买入境流动性。Bitrefill提供了一种服务,即闪电节点运营商可以向Bitrefill支付以使用该运营商的闪电节点开启一个通道。运营商支付一小笔比特币,并得到一个具有更多入境流动性的通道作为回报。

开发

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

许可协议

Agora在CC0许可下发布,但排除了ATTRIBUTION.md中列出的第三方组件。

依赖项

~11-23MB
~350K SLoC