3个版本
0.0.2 | 2021年10月27日 |
---|---|
0.0.1 | 2021年8月14日 |
0.0.0 | 2021年8月5日 |
#3 in #agora
在 agora 中使用
38KB
490 行
Agora
agora
为本地目录提供内容,通过HTTP提供文件列表和下载。例如,您可以将它指向一个充满PDF的目录,允许用户在他们的网页浏览器中浏览和查看PDF文件。如果 agora
连接到一个 LND 节点,它可以配置为需要 闪电网络 支付进行下载。
公共Agora实例
- 233uki7qcwiban2uvgzapsosajjx6qrv7xizmf77prh7p56n5zmlz3ad.onion: @yzernik的 实例,可通过Tor访问
- Modulo Network挖掘电子表格。 直接链接到Agora实例。。
- 我们已退役的测试实例的静态快照可在 此处 获取。
- 如果您运行了一个Agora实例并希望它在readme中显示,请打开一个问题或提交一个PR!
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的预构建二进制文件可在 发布页面 上找到。
从源码构建
agora
用 Rust 编写,并使用 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上的发布通知,您可以使用自定义通知设置来监视此仓库。
部署
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