2 个版本
0.3.2 | 2024 年 3 月 12 日 |
---|---|
0.3.1 | 2024 年 3 月 12 日 |
#3 在 #sdn
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