#study #trading #bitcoin #protocols #backward #bisq #feasibility

bin+lib risq

Bisq(https://github.com/bisq-network/bisq)在 rust 中的重新实现

15 个版本 (4 个重大更新)

0.4.1 2019年11月13日
0.4.0 2019年11月12日
0.3.5 2019年11月8日
0.3.0 2019年10月27日
0.0.7 2019年10月23日

#23#backward

每月25次 下载

AGPL-3.0

435KB
11K SLoC

Risq - 关于在 rust 中重新实现 bisq 的可行性研究

Bisq 是一个去中心化应用程序,允许通过点对点交易协议进行比特币和其他数字资产交易。目前正在进行一个关于将交易协议升级为向后不兼容的升级的讨论,该升级将依赖交易伙伴在交易时使用 BSQ 色彩币作为抵押品。这和其他改进将被提议作为 Bisq v2 发布。由于这可能会要求重写应用程序的大部分内容,因此提出了一个问题,即是否值得从头开始而不是继承现有代码库。

此存储库代表了一个高峰,以调查重写应用程序中需要与 V1 互操作的部分的可行性和所需的工作量。

目标

为了弄清楚以下问题

  • 是否可能有一个与实时 p2p 网络兼容的替代实现(即,Java <-> Rust 进程是否可以通过基于 protobuf 的协议正确通信)?
  • 从这个方法中能否获得任何显著的技术优势(例如,总体复杂性降低、风险依赖性减少、更好的开发工作流程等)?
  • 以替代实现达到生产就绪状态所需的工作量有多大?
  • 与改编现有代码相比,作为战略方法从头开始编写 V2 是否合理?

设置

您需要安装 rusttor

例如,对于 mac

$ curl https://sh.rustup.rs -sSf | sh
$ brew install tor

要尝试使用我们 发布管道 发布的最新版本,您可以

$ cargo install risq
$ risq help

(在此处了解更多有关管道设置的信息 这里

或使用 make 命令进行构建/测试/运行。例如

$ make build-all

演示

使用 make build 构建项目后,二进制文件将位于 ./target/debug/risq

$ ./target/debug/risq help
USAGE:
risq [OPTIONS] <SUBCOMMAND>

FLAGS:
    -h, --help       Prints help information
    -V, --version    Prints version information

SUBCOMMANDS:
    daemon    Runs the risq p2p node [aliases: d]
    help      Prints this message or the help of the given subcommand(s)
    offers    Subcomand to interact with offers

您可以通过以下方式查看各个子命令的帮助信息

$ ./target/debug/risq help daemon
<omitted>

在启动 tor 后运行守护进程

$ make run-tor
$ ./target/debug/risq d

从种子节点引导数据需要一些时间(目前没有数据被持久化,因此每次启动守护进程都必须执行引导)。

在另一个控制台中,您可以通过以下方式检查 API 是否正在运行

$ curl localhost:7477/ping
pong

或者使用 CLI 获取开放报价(一旦引导完成)

$ ./target/debug/risq offers --market USD | wc -l
  56

API

守护进程公开的 API 使用了一个 GraphQL 架构。您可以在这里了解 GraphQL 的背景。

要访问数据,您必须向 /graphql 发送带有查询作为请求体字符串的 POST 请求

curl --header "Content-Type:application/json" \
     -XPOST \
     --data '{ "query": "{ offers(market: \"btc_usd\") { id } }" }' \
     https://127.0.0.1:7477/graphql | jq

还有一个位于 https://127.0.0.1:7477/graphiql 下的查询探索器,可以帮助您开发查询。

限制

由于这是一个概念验证,存在一些限制。

  • 没有数据被持久化,因此每次运行都需要引导。
  • 当前仅建立了与种子节点的一个连接。如果初始数据同步失败,则守护进程无法正确引导或加入 P2P 网络。
  • 除了确认事物是活跃的之外,没有做太多努力来使输出看起来更美观或有特别的使用价值。

节点检查器

要构建和运行节点检查器,请执行以下操作

make build-with-checker
./target/debug/risq check-node 5quyxpxheyvzmb2d.onion 8000

为了与类似 Nagios 的监控工具(icingasensu 等)兼容,它成功时返回 0(Ping - Pong 成功),或者在任何错误(如建立连接、发送 ping 或从主机获取响应)发生时返回 2

依赖项

~38–50MB
~1M SLoC