9 个版本
新版本 0.12.4 | 2024年8月18日 |
---|---|
0.12.3 | 2024年8月6日 |
0.12.1 | 2024年6月11日 |
0.12.0 | 2024年5月21日 |
0.11.4 | 2024年4月17日 |
#321 in 神奇豆子
每月243次下载
175KB
4K SLoC
Mostro 🧌
概述
由于越来越多的人需要能够在不放弃个人数据的情况下使用比特币,我在2021年开始了一个项目,允许人们通过闪电网络进行比特币的买卖,无需保管资金和KYC,这个项目是一个名为@lnp2pbot的Telegram机器人。
@lnp2pBot 正在稳步有机地增长,它在全球范围内被使用,并在拉丁美洲产生了更大的影响,在拉丁美洲,没有必要向人们解释货币是破败的,它越来越多地在古巴和委内瑞拉等独裁政权中使用,那里的人们正在通过使用较少的当地货币和更多的比特币来抵抗暴政和抗议。
尽管这个机器人工作得很好,但它运行在Telegram平台上,这是一个伟大的平台,但我们不知道有一天它是否会受到强大政府的触角,要求政治异见者,或者只是尴尬的公众人物。
在这个时候,Nostr作为一个平台,可以在这个平台上运行,而不会受到强大实体的审查。本文档解释了如何创建一个具有抗审查性和无需托管的闪电网络点对点交易所,该交易所没有单点故障,如Telegram机器人。
它如何工作?
Mostro在Nostr之上进行点对点通信,Mostro将作为担保人,允许买家和卖家进行交易,降低双方的风险。
Mostro将通过闪电网络节点处理比特币,节点将为卖家创建持有发票,并为买家支付常规发票。
Mostro将需要私钥才能在Nostr网络上创建、签名和发送事件。
在下一张图表中,我们可以看到Mostro、卖家和闪电节点的交互的简化版本,更详细的解释可以在这里找到:这里
sequenceDiagram
autonumber
Seller->>Mostro: I want to sell Bitcoin
Mostro-->>LN-Node: Give me a hold invoice
LN-Node->>Mostro: Hold invoice
Mostro->>Seller: Please pay this hold invoice
Seller->>LN-Node: Paying through lightning
LN-Node-->>Mostro: Payment received
Mostro-->>Seller: Thanks! talk to buyer now
在这个仓库中,我们正在用Rust构建一个Mostro守护进程。
客户端
买家和卖家需要Mostro的客户端来买卖比特币和闪电钱包,为此,我们至少需要构建一个Web客户端来开始,我们计划将来构建移动和桌面客户端。
消除单点故障
为了让这个想法能够工作,我们需要尽可能简化成为Mostro的过程,我们不需要数十个Mostro,但我们需要运行中的Mostro是可靠的,这就是为什么在这个实现中,我们鼓励创建自己的Mostro,并给用户更多选项。
管理Mostro并不容易,Mostro管理员需要有一个运行中的闪电节点,它需要有足够的流动性以便用户能够快速操作,节点必须的在线时间接近99.9%,所有这些都需要资源,这些资源可以通过卖家在每个成功订单上支付的费用来获得,这是一个在Mostro之间可以变化的百分比。
Mostro的声誉
用户将能够对Mostro进行评分,Mostro将竞争以获得更多用户以生存。差劲的Mostro应该被用户拒绝,并将失去保持存在的动力。
要求
- 您需要Rust版本1.74或更高版本才能编译。
- 您需要一个闪电网络节点。
安装依赖项
要在Ubuntu/Pop!_OS上编译,请安装cargo,然后运行以下命令
$ sudo apt update
$ sudo apt install -y cmake build-essential libsqlite3-dev pkg-config libssl-dev
安装
如果您想在您的本地机器上运行Mostro,可以按照以下说明操作,如果您想在服务器上运行它,可以按照INSTALL.md文件中的说明操作。
克隆仓库,然后根据settings.tpl.toml
文件创建一个新的settings.toml
文件。
$ git clone https://github.com/MostroP2P/mostro.git
$ cd mostro
$ cp settings.tpl.toml settings.toml
要连接到LND节点,您必须在settings.toml文件的[lightning]部分中定义4个变量。
lnd_cert_file: LND节点TLS证书文件路径。
lnd_macaroon_file: Macaroon文件路径,macaroon文件包含在lnd节点上执行操作权限。
lnd_grpc_host: LND节点的IP地址或域名,例如:127.0.0.1
。
lnd_grpc_port: 连接到LND节点的端口,例如:10009
。
数据库
数据保存在默认名为mostro.db
的sqlite db文件中,该文件保存在项目的根目录中,可以通过编辑[database]
部分中的url
变量来更改该文件。
在开始构建之前,我们需要初始化数据库,为此我们需要使用sqlx_cli
。
$ cargo install sqlx-cli --version 0.6.2
$ ./init_db.sh
运行它
在运行之前,您需要在settings.toml
文件的[nostr]
部分中将nsec_privkey
设置为您Mostro的私钥,如果您没有nostr私钥,可以使用rana 🐸生成一个新的。
您必须在/home/user/目录下创建一个.mostro目录,并将settings.toml和mostro.db文件复制到其中。
$ mkdir $HOME/.mostro/ && cp settings.toml mostro.db $HOME/.mostro/
最后运行它
$ cargo run
连接到中继
选项1:使用私有docker化中继运行Mostro
cd relay
docker compose up -d
这将启动一个新的docker容器,包含一个实例nostr-rs-relay,它将监听端口7000
。
所以您要连接的中继URL是:ws://localhost:7000
。
您需要设置relays
在[nostr]
部分settings.toml
文件:relays = 'ws://127.0.0.1:7000'
故障排除
如果在中继日志中出现错误:unable to open database file: /usr/src/app/db/nostr.db
,您需要修改中继目录下的docker-compose.yml文件
version: '3.8'
services:
nostr-relay:
image: scsibug/nostr-rs-relay
container_name: nostr-relay
ports:
- '${MOSTRO_RELAY_LOCAL_PORT:-7000}:8080'
volumes:
- 'mostro_data:/usr/src/app/db:Z'
- './config.toml:/usr/src/app/config.toml:ro,Z'
volumes:
mostro_data:
选项2:连接到任何其他中继
您只需要在[nostr]
部分设置settings.toml
文件中的中继。
贡献
您可能对为Mostro做出贡献感兴趣。如果您正在寻找开始贡献的地方,请查看good first issue列表。
更多信息请参阅我们的贡献指南。
奖励板
为了激励贡献者,我们有一个奖励板,我们必须明确Mostro不是一个公司,而是一个开源项目,提供的金额是感谢合作的方式,我们可以提供它,这要归功于贡献者的慷慨捐赠,主要是匿名的,但也有两个重要的机构给了我们拨款,您可以在这里查看这里。
许可证
Mostro是在MIT许可证下许可的。
依赖项
~86MB
~1.5M SLoC