#compliance #cryptocurrency #json-api #sdn #http-server #sanctions #ofac

app crypto-sanctions-server

一个 http 服务器,允许您通过 json api 检查加密货币钱包地址是否在制裁名单上

2 个版本

0.3.2 2024 年 3 月 12 日
0.3.1 2024 年 3 月 12 日

#3#sdn

MIT 许可证

22KB
292

加密制裁服务器

一个用 Rust 编写的 http 服务器,允许您通过 json api 检查加密货币钱包地址是否在制裁名单上。

服务器设计简单、快速,可以放在反向代理或负载均衡器后面使用。但是,随着时间的推移,其中一些可能发生变化。

目前,服务器不支持 TLS 协议上的操作,因此 不应在没有终止 TLS 流量能力的部分(例如 nginx)的情况下用于互联网上的请求

设计原则

服务器必须...

  • 尽可能快,同时不将源代码变成优化后只写代码的混乱
  • 安全,遵循最佳安全实践,但不超过安全使用的需求
  • 尽可能遵循 HTTP 协议,因为需要能够与任何兼容的客户端一起工作

发布 1.0 之前需要考虑的事项

  • 启动缓存以快速启动服务器
  • 用于出站请求的 socks 代理(tor?)
  • 支持健康状态以用于负载均衡
  • 命令行界面选项
  • JSON 响应格式
  • 请求所有数据库记录
  • 批量地址检查
  • TLS 支持
  • 代码覆盖率与软件包发布

安装

使用 Cargo

您可以使用 cargo 软件包管理器命令在本地上安装服务器

cargo install crypto-sanctions-server

Docker

服务器可以在 docker 容器中运行。需要几个步骤

克隆仓库

git clone [email protected]:stdfox/crypto-sanctions-server.git

构建 docker 镜像

docker build -t crypto-sanctions-server .

运行容器

docker run --detach --rm --name=crypto-sanctions-server -p 8000:8000 -t crypto-sanctions-server

手册

克隆仓库

git clone [email protected]:stdfox/crypto-sanctions-server.git

构建和运行

cargo run

或在发布模式下构建和运行,具有优化

cargo run --release

在自定义端口上运行

您可以使用以下命令选项在自定义主机和端口上启动 http 服务器

cargo run -- --host 0.0.0.0 --port 3000

用法

检查地址

您可以使用任何可用的 http1 客户端检查加密地址,例如 curl

curl http://127.0.0.1:8000/api/crypto-sanctions/1EpMiZkQVekM5ij12nMiEwttFPcDK9XhX6

这将像这样以 JSON 格式打印响应

{"address": "1EpMiZkQVekM5ij12nMiEwttFPcDK9XhX6", "sanctioned": true}

对于所有区块链来说,效果都是相同的,例如对于以太坊地址

curl http://127.0.0.1:8000/api/crypto-sanctions/0xf3701f445b6bdafedbca97d1e477357839e4120d

它将打印

{"address": "0xf3701f445b6bdafedbca97d1e477357839e4120d", "sanctioned": true}

简写别名

如果您喜欢在桌面上使用简短的命令行,您可以将类似以下内容添加到您的shell配置文件中(.bashrc, .zshrc等)

crypto-sanctions () {
    command curl http://127.0.0.1:8000/api/crypto-sanctions/$@
}

之后,您可以使用以下命令

crypto-sanctions 0xf3701f445b6bdafedbca97d1e477357839e4120d

性能

由于该服务器与内存数据库一起工作,不使用序列化器,因此性能相当高。请参见我在2017年MacBook Pro(3,1 GHz 双核英特尔酷睿i5)上针对发布构建的基准结果

% ab -k -c 100 -n 1000000 -q http://127.0.0.1:8000/api/crypto-sanctions/0xf3701f445b6bdafedbca97d1e477357839e4120d
This is ApacheBench, Version 2.3 <$Revision: 1903618 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking 127.0.0.1 (be patient).....done


Server Software:
Server Hostname:        127.0.0.1
Server Port:            8000

Document Path:          /api/crypto-sanctions/0xf3701f445b6bdafedbca97d1e477357839e4120d
Document Length:        77 bytes

Concurrency Level:      100
Time taken for tests:   14.328 seconds
Complete requests:      1000000
Failed requests:        0
Keep-Alive requests:    1000000
Total transferred:      209000000 bytes
HTML transferred:       77000000 bytes
Requests per second:    69793.78 [#/sec] (mean)
Time per request:       1.433 [ms] (mean)
Time per request:       0.014 [ms] (mean, across all concurrent requests)
Transfer rate:          14245.02 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   0.0      0       5
Processing:     0    1   0.4      1      16
Waiting:        0    1   0.4      1      16
Total:          0    1   0.4      1      16

Percentage of the requests served within a certain time (ms)
  50%      1
  66%      1
  75%      1
  80%      2
  90%      2
  95%      2
  98%      3
  99%      3
 100%     16 (longest request)

贡献

贡献者许可协议

除非您明确声明,否则您有意提交给您的作品以供包含的任何贡献,均按MIT许可,无任何附加条款或条件。

提交信息指南

本项目对git提交信息的格式有规定。这使得在查看项目历史时,消息更加易读和易于跟踪。

提交信息格式

每个提交信息都包含强制性的类型主题

<type>: <subject>

提交信息的任何一行都不能超过100个字符。

示例

docs: add contributing guidelines to readme file
build: remove unused dependencies

撤销

如果提交撤销了之前的提交,它应该以revert:开头,后跟被撤销提交的标题。

类型

必须是以下之一

  • build:影响构建系统或外部依赖项的更改
  • docs:仅文档更改
  • feat:新功能
  • fix:错误修复
  • perf:改进性能的代码更改
  • refactor:既不修复错误也不添加功能的代码更改
  • style:不影响代码含义的更改
  • test:添加缺失的测试或修复现有测试

主题

主题包含对更改的简要描述

  • 使用祈使语气,现在时态:“change”而不是“changed”或“changes”
  • 不要大写第一个字母
  • 不要在末尾使用句号(。)

许可证

本项目使用MIT许可证

依赖关系

~10–23MB
~324K SLoC