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("username@example.com")
.lud16("yuki@getalby.com")
.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