51 个版本 (32 个重大变化)
新版本 0.34.0 | 2024年8月15日 |
---|---|
0.33.0 | 2024年7月16日 |
0.32.1 | 2024年6月17日 |
0.29.1 | 2024年3月31日 |
0.5.1 | 2022年11月14日 |
#78 在 网页编程
每月 3,743 次下载
用于 48 个 Crates (30 直接使用)
700KB
17K SLoC
Nostr
描述
Rust 实现的 Nostr 协议。
你可能还感兴趣
nostr-sdk
如果你想要编写典型的 Nostr 客户端或机器人nostr-database
: Nostr 应用程序的数据库nostr-relay-pool
: Nostr 中继池nostr-signer
: Nostr 应用的签名者nostr-zapper
: Nostr 应用的 Zapper 抽象nwc
:NWC
客户端和 zapper 后端用于 Nostr 应用程序
入门
use nostr::prelude::*;
fn main() -> Result<()> {
// Generate new random keys
let my_keys = Keys::generate();
// Or use your already existing (from hex or bech32)
let my_keys = Keys::parse("hex-or-bech32-secret-key")?;
// Show bech32 public key
let bech32_pubkey: String = my_keys.public_key().to_bech32()?;
println!("Bech32 PubKey: {}", bech32_pubkey);
let metadata = Metadata::new()
.name("username")
.display_name("My Username")
.about("Description")
.picture(Url::parse("https://example.com/avatar.png")?)
.banner(Url::parse("https://example.com/banner.png")?)
.nip05("[email protected]")
.lud16("[email protected]")
.custom_field("custom_field", "my value");
let event: Event = EventBuilder::metadata(&metadata).to_event(&my_keys)?;
// New text note
let event: Event = EventBuilder::text_note("Hello from rust-nostr", []).to_event(&my_keys)?;
// New POW text note
let event: Event = EventBuilder::text_note("My first POW text note from rust-nostr", []).to_pow_event(&my_keys, 20)?;
// Convert client nessage to JSON
let json = ClientMessage::event(event).as_json();
println!("{json}");
Ok(())
}
更多示例可以在 examples/ 目录中找到。
WASM
这个 crate 支持 wasm32
目标。
在 macOS 上您需要安装 llvm
brew install llvm
LLVM_PATH=$(brew --prefix llvm)
AR="${LLVM_PATH}/bin/llvm-ar" CC="${LLVM_PATH}/bin/clang" cargo build --target wasm32-unknown-unknown
注意:当前 nip03
功能不支持 WASM。
嵌入式
这个 crate 支持 no_std
环境。
检查 embedded/ 目录中的示例。
包功能标志
以下包功能标志可用
功能 | 默认 | 描述 |
---|---|---|
std |
是 | 启用 std 库 |
alloc |
否 | 在 no_std 环境中使用此库需要 |
all-nips |
是 | 启用所有 NIPs |
nip03 |
否 | 启用 NIP-03: 事件的开源时间戳证明 |
nip04 |
是 | 启用 NIP-04: 加密直接消息 |
nip05 |
是 | 启用 NIP-05: 将 Nostr 密钥映射到基于 DNS 的互联网标识符 |
nip06 |
是 | 启用 NIP-06: 从助记词种子短语进行基本密钥推导 |
nip07 |
是 | 启用 NIP-07: window.nostr 功能用于网页浏览器 (仅适用于 wasm32 !) |
nip11 |
是 | 启用 NIP-11: 中继信息文档 |
nip44 |
是 | 启用 NIP-44: 加密有效载荷(版本化) |
nip46 |
是 | 启用 NIP-46: Nostr Connect |
nip47 |
是 | 启用 NIP-47: Nostr 钱包连接 |
nip49 |
是 | 启用 NIP-49:私钥加密 |
nip57 |
是 | 启用 NIP-57:Zaps |
nip59 |
是 | 启用 NIP-59:礼品包装 |
支持的 NIPs
支持 | NIP |
---|---|
✅ | 01 - 基本协议流程描述 |
✅ | 02 - 关注列表 |
✅ | 03 - 事件 OpenTimestamps 认证 |
✅ | 04 - 加密直接消息 |
✅ | 05 - 将 Nostr 密钥映射到基于 DNS 的互联网 ID |
✅ | 06 - 从助记词种子短语的基本密钥派生 |
✅ | 07 - window.nostr 用于网页浏览器的功能 |
✅ | 09 - 事件删除 |
✅ | 10 - 在文本事件中使用 e 和 p 标签 |
✅ | 11 - 中继信息文档 |
✅ | 13 - 工作量证明 |
✅ | 14 - 文本事件中的主题标签 |
✅ | 15 - Nostr 市场交易 |
✅ | 17 - 私密直接消息 |
✅ | 18 - 转发 |
✅ | 19 - bech32 编码的实体 |
✅ | 21 - URI 方案 |
✅ | 23 - 长格式内容 |
✅ | 24 - 额外元数据字段和标签 |
✅ | 25 - 反应 |
✅ | 26 - 委托事件签名 |
❌ | 27 - 文本笔记引用 |
✅ | 28 - 公共聊天 |
❌ | 29 - 基于中继的群组 |
✅ | 30 - 自定义表情 |
✅ | 31 - 处理未知事件 |
✅ | 32 - 标签 |
❌ | 34 - git 东西 |
❌ | 35 - 种子文件 |
✅ | 36 - 敏感内容 |
❌ | 38 - 用户状态 |
✅ | 39 - 配置文件中的外部身份 |
✅ | 40 - 过期时间戳 |
✅ | 42 - 客户端对中继的认证 |
✅ | 44 - 加密的有效负载(版本化) |
✅ | 45 - 事件计数 |
✅ | 46 - Nostr Connect |
✅ | 47 - 钱包连接 |
✅ | 48 - 代理标签 |
✅ | 49 - 私钥加密 |
✅ | 50 - 搜索功能 |
✅ | 51 - 列表 |
❌ | 52 - 日历事件 |
✅ | 53 - 实时活动 |
❌ | 54 - 维基 |
- | 55 - 安卓签名应用 |
✅ | 56 - 报告 |
✅ | 57 - 晶电 Zaps |
✅ | 58 - 徽章 |
✅ | 59 - 礼品包装 |
✅ | 65 - 中继列表元数据 |
✅ | 70 - 受保护的事件 |
❌ | 71 - 视频事件 |
❌ | 72 - 管理社区 |
❌ | 75 - Zap 目标 |
✅ | 78 - 任意自定义应用程序数据 |
❌ | 89 - 推荐的应用程序处理器 |
✅ | 90 - 数据售货机 |
❌ | 92 - 媒体附件 |
✅ | 94 - 文件元数据 |
❌ | 96 - HTTP 文件存储集成 |
✅ | 98 - HTTP 认证 |
❌ | 99 - 分类列表 |
状态
这个库处于 alpha 状态,已实现的功能通常可以工作,但 API 将会以破坏性的方式改变。
捐赠
rust-nostr
是免费和开源的。这意味着我们通过销售它不赚取任何收入。相反,我们依赖您的财务支持。如果您积极使用任何 rust-nostr
库/软件/服务,那么请捐赠。
许可证
本项目采用 MIT 软件许可协议分发 - 有关详细信息,请参阅LICENSE 文件
依赖关系
~8–22MB
~278K SLoC