重叠快递
BSV BLOCCHAIN QQ 重叠快车
有意见但可配置的重叠服务部署系统:
- 给定本地端口的 HTTP 使用快取
- 只需私人密钥和主机 URL 即可设置
- 按您想要的方式导入和配置您的话题管理器
- 添加查询服务, 为 Mongo 和 Knex 提供简易工厂
- 执行可配置的网络用户界面,向世界显示您的自定义覆盖服务
- 使用所有服务的通用Knex/SQL和Mongo数据库提高效率
- 支持 SHIP, SLAP,以及 GASP 同步出框( 或者可以禁用)
- 本地支持Arc召回生产( 或本地开发时为简单而禁用)
- 支持Arcade-First广播/防弹检查,Arc倒背广播, 链轨头验证、 BASM 重置流线和活动 监测驱动维护
内建的发现外溢探测器使用最多1000行的确定性页. 已配置的引擎结果上限和排外溢出错误仍在执行,包括标准和高通量配置.
发行候选人将包装的重叠依赖推进到支持可选保留录取历史. 这个软件包保留了它现有的行为,不能自动保留历史. 不需要消费者或数据库迁移.
可选 @bsv/overlay-express/private-publication 已核实条目曝光
通过共享的BRC-103/104获得私营出版商地位
认证实例 。 提供同样的持久服务和披露所有人;
在通用解析器和响应转换前挂起 。 检查原件
选中项和当前记录授权在签名后再次发送, 仅发送边框
公共预测和固定错误,并通过
默认。 它从不自动挂载或安装支付处理器. 见
私人出版指南。 。 。 .
要求和安装
未公布的2.8.0名候选人还提供了可选条件
@bsv/overlay-express/root-eviction-response 伴侣 用中间器件2.3.0,
SDK 3.3.0和一个共享根日记, guardRootAdvertisementResponse 检查当前
访问和每次在签名后披露的广告并排队 HTTP
在日记门下的反应。 全部答复改为:
单独授权签名重置。 在水合物和
提供完整的目标库存和安全控制反应头。 这个
基础协调指南
解释储存、政策和全程一体化义务。 现有路线
不变; 导入此伴奏无法启用 BRC-199 配置 .
可选 @bsv/overlay-express/root-eviction 条目构成共享
RootEvictionService 带有精确认证的请求/状态路线。 它保存着
收到UTF-8字节限制并检查观察到的修订和当前访问
在寄件和 HTTP 签名后再次在本地排队。 常规前挂载
解析相同来源的认证中间软件和耐用日记.
Creditive-free 通配符 CORS 是默认; 确切的出处是选入. 没错
不发布能力或安装决策调度器或服务适配器.
打电话 configureRootEviction 在此之前 start() 为当地东道方融合服务。 这个
配置的根身份必须匹配服务器钱包; root, 认证的查找
和管理员路线共享认证和主机请求能力。 关闭根
起源继承了主机的边缘策略,字节限制不能超过主机限制.
注入的日记和工人保留应用程序的所有权。 见根
安装和剩余债务的协调指南.
可选的查询路由器和 configureOutputLookup 接受结构
disclosure hTTP 签名后进行最后的当前会话检查.
LookupResponseDisclosure 从 @bsv/output-knowledge/lookup 组成端口
带有持久 SQLite 会话. 它可以替换一次不合格数据响应
带有新授权的签名错误,或在控制时关闭无机
访问被拒绝。 选择此选项会保留已有的行为 。 见
耐用查找指南
共享写作门、现行政策、实际工作和召回义务.
重叠快车需要节点.js 22或更新并单独安装
@bsv/sdk 相对依赖.
npm install @bsv/overlay-express @bsv/sdk
该套件提供了与无害环境管理和共同JS的切入点相匹配的组合 具体条件的声明:
import OverlayExpress, { OverlayMonitor } from '@bsv/overlay-express'
const { default: OverlayExpress, OverlayMonitor } = require('@bsv/overlay-express')
5条公共BASM JSON POST路线验证非负安全整形高地
(包括已存在的数字字符串),32字节十六进制散列/xids,以及
请求计数限制。 空的原始交易请求仍然有效; 复合
证明请求需要 txid 。 原始交易路线不需要
x-bsv-topic缺少引擎/存储BASM能力保留了HTTP 400
{ status: 'error', message, code: 'BASM_UNSUPPORTED' }. CORS,准入规则,
配置限制,自动同步默认不变.
注入的话题锁定头解析器可能额外返回
blockTransactionCount 独立获得的同一峡谷块
散货 现有的链轨/提供者适配器仍然只有头;它们不
声称这种较强的立场证据。 见核心引擎的
BASM 验证和回收限额。 。 。 .
GASP 路由失败使用已配置的日志并将已丢入的值序列化 单项逃出字段,在不允许请求的情况下保留诊断上下文 用于伪造更多日志记录的内容。 HTTP出错反应保持不变.
示例使用
这里有一个简单的例子:
import OverlayExpress from '@bsv/overlay-express'
import dotenv from 'dotenv'
dotenv.config()
// Hi there! Let's configure Overlay Express!
const main = async () => {
// We'll make a new server for our overlay node.
const server = new OverlayExpress(
// Name your overlay node with a one-word lowercase string
`testnode`,
// Provide the private key that gives your node its identity
process.env.SERVER_PRIVATE_KEY!,
// Provide the public FQDN without a scheme (for example, overlay.example)
process.env.HOSTING_FQDN!
)
// Decide what port you want the server to listen on.
server.configurePort(8080)
// Public CORS is the default so wallet UIs and mobile-backed web apps can
// call the protocol from previously unknown domains. Deployments with a
// closed caller set can opt into exact origins and customize the UI CSP.
server.configureEdgePolicy({
allowedOrigins: process.env.OVERLAY_CORS_ALLOWED_ORIGINS?.split(','),
securityHeaders: {
contentSecurityPolicy: process.env.OVERLAY_CONTENT_SECURITY_POLICY
}
})
// Connect to your SQL database with Knex
await server.configureKnex(process.env.KNEX_URL!)
// Also, be sure to connect to MongoDB
await server.configureMongo(process.env.MONGO_URL!)
// Here, you will configure the overlay topic managers and lookup services you want.
// - Topic managers decide what outputs can go in your overlay
// - Lookup services help people find things in your overlay
// - Make use of functions like `configureTopicManager` and `configureLookupServiceWithMongo`
// ADD YOUR OVERLAY SERVICES HERE
// For simple local deployments, sync can be disabled.
server.configureEnableGASPSync(false)
// Production deployments should configure at least one transaction
// propagation provider. Arcade can be used as the primary provider with Arc
// as a fallback. A callback token is required before /arc-ingest is enabled.
server.configureArcade(process.env.ARCADE_URL!, {
apiKey: process.env.ARCADE_API_KEY,
deploymentId: process.env.ARCADE_DEPLOYMENT_ID,
chaintracksApiPrefix: '/chaintracks/v2'
})
if (process.env.ARC_API_KEY) {
server.configureArcApiKey(process.env.ARC_API_KEY)
}
if (process.env.ARC_CALLBACK_TOKEN) {
server.configureArcCallbackToken(process.env.ARC_CALLBACK_TOKEN)
}
// Chaintracks-compatible services provide block headers for BASM and can
// stream reorg notifications. Arcade exposes go-chaintracks under
// /chaintracks/v2.
server.configureChaintracks(process.env.CHAINTRACKS_URL ?? process.env.ARCADE_URL!, {
apiPrefix: '/chaintracks/v2',
reorgStream: true,
scanDepth: 3
})
// TerraTestNet nodes additionally select TTN. WhatsOnChain does not serve
// this network, so configureChaintracks() (or an explicit ChainTracker) is
// required before engine initialization.
// server.configureNetwork('ttn')
// Lastly, configure the engine and start the server!
await server.configureEngine()
await server.start()
// Stop accepting work, stop background synchronization, and close the SQL
// and MongoDB clients during process or embedding-runtime shutdown.
const shutdown = async () => {
await server.close()
}
process.once('SIGTERM', () => void shutdown())
process.once('SIGINT', () => void shutdown())
}
// Happy hacking :)
main()
完整 API 文档
检查出来 API.md (英语) aPI 文档.
其他特征
公共 HTTP 边缘政策
重叠节点为公共协议服务. 没有CORS配置,
重叠Express 返回 Access-Control-Allow-Origin: * 绝不允许
饼干证书。 设定 OVERLAY_CORS_MODE=allowlist 准确
OVERLAY_CORS_ALLOWED_ORIGINS,通过 allowedOrigins 改为
configureEdgePolicy,或使用 OVERLAY_CORS_MODE=disabled 为故意
关闭浏览器表面 .
configureEdgePolicy 也控制 JSON/二进制身体限制,每个进程
货币,节点HTTP超时,CSP等安全头. 环境
覆盖在 .env.example. 协议认证,管理员
仍然需要认证、召回符和输入验证
无论CORS模式.
CSP适用于这一过程所送达的文件;它不批准或拒绝API 召来者. 独立配置UI CSP和API COORS. 认证的交叉来源 请求需要准确的允许来源,决不能与 通配符来源.
打电话 await server.close() 在关闭期间。 这是天分,关闭
HTTP收听器,BASM维护计时器,再接回流,克能克克斯,和蒙戈DB.
Janitor, Arcade, 链轨, 重置电流, 并监视输出的连接
接受无证书的公共 HTTPS, 将解析后的公共地址精确到
源代码,不默认跟踪方向。 响应信头和流线
机构受时间限制. allowPrivateHosts: true 允许 HTTP 和
私人目标只针对明确孤立的地方发展;从未将目标结合起来
拥有生产证书。 选入必须是文字布尔 true 内
两者 OverlayExpress 配置和直接导出供应商构造器;
供应商证书和自定义信头在
构造,所以后来的调用器突变不能改变网络权威.
重置SSE流只是加速提示. 每一个报告的孤儿 块将降级到已承认状态的选项与配置 突变前的犬形头部解析器,以及缺失或仍然匹配 canonical header 关闭失败 。 溪流在被限制的闲置后重新连接 间隔和每次重接时,都会进行正常的再验证扫描,因为 上游流没有回放光标 .
行政页面为无记名UI. 它使用每个响应的非CSP, 将服务文件进行消毒,只装入精确版本 完整性固定显示库。 它不下载钱包 SDK 运行时间。 所提供的行政无记名证必须是独立的 生成至少 32 个 UTF-8 字节的随机秘密; 省略时, OverlayExpress 生成一个。 钱包相互认证仍然为直接管理API提供支持 客户端配置了服务器管理员身份密钥 .
高级引擎配置
我们采用了一种新的方法, configureEngineParams,这样您就可以将高级配置选项传递到基本的重叠引擎。 这里有一个例子:
server.configureEngineParams({
logTime: true,
throwOnBroadcastFailure: true,
overlayBroadcastFacilitator: new MyCustomFacilitator()
})
throwOnBroadcastFailure 仍应保留 true 对于大多数生产覆盖。 与
配置了供应商链广播,这意味着交易没有承诺
覆盖状态, 除非至少有一个提供者接受或返回已知的状态
成功吗? 准备吧 false 仅用于当地特意脱机/脱机工作流程
在不进行目前的网络传播的情况下,可以进行覆盖式接收.
交易传播供应商
重叠快递可以构成多个交易传播和证明来源:
server.configureArcade('https://arcade-v2-us-1.bsvblockchain.tech', {
apiKey: process.env.ARCADE_API_KEY,
deploymentId: 'my-overlay-node',
chaintracksApiPrefix: '/chaintracks/v2'
})
server.configureArcApiKey(process.env.ARC_API_KEY!)
server.configureArcCallbackToken(process.env.ARC_CALLBACK_TOKEN!)
server.configureChaintracks('https://arcade-v2-us-1.bsvblockchain.tech', {
apiPrefix: '/chaintracks/v2',
reorgStream: true,
scanDepth: 3
})
configureArcade将街机登记为第一选择的广播机和证据 寻取供养.configureArcApiKey将标准Arc广播机登记为倒置.configureArcCallbackToken为了实现/arc-ingest; 输入 回调时必须显示预期的符号为Authorization: Bearer ...或者说x-callback-token使用至少32个独立的高强度秘密 UTF-8 字节( 偏好 256 个随机比特), 远离 URL 和日志, 然后旋转 作为证书。 短、 有控制或白空加值 拒绝.configureChaintracks为块配置相容的链路服务 头部查找,BASM主播头部解析,可选重置SSE.
发送到 /arc-ingest 被归类为成功的证据,
终端无效,双重开支,或瞬态状态。 双笔和其他
终端无效状态从已接受的交易中删除受影响的交易
覆盖状态, 因此查询层不会继续服务网络拥有的数据
拒绝。 只有在Merkle路径包含
同意索赔的高度,并肯定地核实
对已配置的链式跟踪器.
重置 SSE 适配器将每个事件视为状态批判:一个畸形的事件或 处理器故障关闭溪流, 重新连接, 并运行追赶重验证 在以后的事件被消耗之前。 它将框架和孤儿设定并拒绝 重复或畸形散列而不是跳过事件的一部分.
巴哈马 还有未经证实的维护
BASM是选入的,因为它需要直接证明和块头解析:
server.configureEnableBASMSync(true)
server.configureBASMBlockPollInterval(10 * 60 * 1000)
server.configureUnprovenMaintenance({
intervalMs: 60 * 60 * 1000,
thresholdBlocks: 144
})
配置时, 未验证的维护先尝试配置的证明提供者 用于未证实超过阈值的交易。 只有交易 仍然无法证明是被驱逐的。 运算符也可以手动通过 行政终点如下.
注册其他路由器
registerRouter(path, factory) 在服务器内挂载自己的路由器。 工厂经营
期间 start(),在BRC-103认证中间软件之后,在管理员路线和
404处理器,所以路由器继承了CORS,正体剖析,响应大小限制,以及
req.auth.identityKey。没有 BRC-103 信头的请求随 req.auth.identityKey
等于 'unknown';需要认证的路径必须拒绝。 打电话之前
start()。 。 。 .
server.registerRouter('/', ({ engine, wallet }) => {
if (wallet === undefined) throw new Error('A server wallet is required')
const router = express.Router()
router.get('/status', (_req, res) => res.json({ ok: true }))
return router
})
这个 wallet 上下文为 BRC-103 认证钱包。 它没有储存
提供商,所以它会标出并验证但不能创造或内部化的动作: createAction 财务报告和审定财务报表
internalizeAction 掷出. 一个接受付款的路由器,例如BRC-178主机 @bsv/eqc, (中文(简体) ),
必须从与服务器相同的根密钥中构建自己的存储后背钱包,以便其
身份等于 BRC-103 会话密钥和 SLAP 广告密钥.
已注册路由器继承响应大小限制( R)MAX_RESPONSE_BYTES: 4个米B small
配置文件, 8 MiB 打开 standard) (中文(简体) ). 一个更大的JSON身体在操作员跑后被413所取而代之,所以
在回答之前支付的路由器必须将其自己的响应绑定在这个限度以下.
行政保护终点
我们还为先进的行动提供行政保护终点,如人工操作
同步广告,启动GASP/BASM同步,运行未经证实的维护,
驱逐特定的出入口, 并管理清洁工。 这些终点需要
手持证相. 您可以在构造器中提供自定义符号
OverlayExpress,或通过调用获取自动生成的符号
server.getAdminToken(). 经认证和拒绝的行政答复
以 Cache-Control: no-store 财务报告和审定财务报表 Pragma: no-cache; 维护
在任何反向代理中执行政策。 SHIP/SLAP记录搜索是一种有界限的文字搜索,
不是一个调用用户提供的 MongoDB 正则表达式, 并且只接受 pagination
精确正整数(加上文件 -1编号 :unlimited 限制表).
共同管理端点 :
POST /admin/syncAdvertisementsPOST /admin/startGASPSyncPOST /admin/startBASMSyncPOST /admin/refreshUnprovenProofsPOST /admin/evictUnprovenPOST /admin/maintainUnprovenPOST /admin/evictOutpointPOST /admin/janitor
卫生终点
重叠快车现在暴露出三个健康终点:
GET /health/live:用于进程级检查的仅活性状态.GET /health/ready: Overlay 引擎, Knex 和 MongoDB 等关键依赖的准备状态.GET /health:完整内容报告,结合活性,准备状态,服务元数据,以及任何已注册的自定义检查.
您可以附加额外的应用程序识别检查和上下文 :
server.configureHealth({
// Details and context are public only when deliberately enabled.
includeDetails: true,
contextProvider: async () => ({
deployment: 'cars-project-backend',
network: process.env.NETWORK
})
})
server.registerHealthCheck({
name: 'custom-cache',
critical: false,
handler: async () => ({
status: 'ok',
details: { warmed: true }
})
})
健康细节和上下文默认被禁用,因为终点是
公开和组件细节可能披露部署地形。 明确
启用细节/文本对象为 JSON 序列化、大小限制和主题
到配置的 1–60,000 ms 检查截止日期。 所有健康反应都有标记
no-store门卫服务也理解富人 /health 回应
格式,因此现有的 Ship/SLAP 健康验证仍然兼容.
重叠监视器
OverlayMonitor 提供可重复使用的工人,用于监测重叠快件查询
行为,并在配置了管理员符后,运行维护动作.
已配置 /lookup 对任何重叠快递部署的探测器,措施
响应大小, 解析返回的 BEEF, 并报告是否响应输出
交易有直接的默克勒证明或正在提供更深入的证据
祖师相传.
计划通过部署作为长期监测程序或分组安排来进行。 它没有与具体的部署平台挂钩.
import { OverlayMonitor } from '@bsv/overlay-express'
const monitor = new OverlayMonitor({
intervalMs: 24 * 60 * 60 * 1000,
targets: [
{
name: 'example-overlay',
baseUrl: 'https://overlay.example',
probes: [
{
name: 'example-topic',
service: 'ls_example',
query: { topic: 'tm_example' },
maxOutputs: 20
}
],
maintenance: {
adminToken: process.env.OVERLAY_ADMIN_TOKEN,
startBASMSync: true,
maintainUnproven: {
thresholdBlocks: 144
},
janitor: true
}
}
],
onReport: async report => {
console.log(JSON.stringify(report.summary))
}
})
monitor.start()
维护请求与探测器一起报告,以便操作人员能够发出警报
与检查/防形状警告分开处理。 显示器
每个探测器默认时最多分析100个返回的BEEF输出,并在
每个响应最多64个米B; 调 maxAnalyzedOutputs 财务报告和审定财务报表 maxResponseBytes
当部署需要不同的上限时. maxOutputs 可以设置
更小的每个测试分析上限.
发展
从寄存器根 :
pnpm --filter @bsv/overlay-express format:check
pnpm --filter @bsv/overlay-express lint
pnpm --filter @bsv/overlay-express typecheck
pnpm --filter @bsv/overlay-express test
pnpm --filter @bsv/overlay-express test:coverage
pnpm --filter @bsv/overlay-express test:live
pnpm --filter @bsv/overlay-express pack:check
包检查为 Overlay Express 构建本地包装的放行对象
及其工作空间重叠的依赖关系,然后用 npm 沥青球验证
publint,严格类型的分辨率,以及清洁的无害环境管理/共同JS消费者项目.
test:live 单独核查无终点的公共拱廊/Chaintracks
私人证书;是预定/释放的证据,而不是决定性公关
覆盖.
许可证
当前 TS Stack 更改根据 Open BSV 许可证版本 6 获得许可; 参见
LICENSE.txt (英语)。该软件包还保留了统一前代码
在开放BSV许可证版本4下. 补给者必须保留
第三次议会 NoTICES.md 和适用的文本在
LICENSES/。 。 。 .
感谢您参与BSV区块链重叠快车项目. 让我们一起打造BSV区块链的未来!
可选的进步和现场调查
打电话 configureOutputLookup 在此之前 start,或导入 createOutputLookupRouter
从 @bsv/overlay-express/output-lookup 独立快递的构成。 这个
新的适配器需要SDK 3.3.0 耐用提供者伴机,签名匹配
能力显示、当前授权和明确的浏览器来源。 这个
常规根仅在启用时加载此适配器 。 现有的有限查询路线
而默认启动保持不变.
主机共享其认证实例, 验证服务钱包身份 并贴出广告 字节预算到其现有的边缘极限。 供应商存储 生命周期仍由呼叫者负责。 见 提供者指南 用于初始化,精确的再试恢复, 披露守护,多程序唤醒, 保留和独立的路由器命令 。 候选人未公布 完成BRC-192-199的整合仍符合资格.
可选经认证的建议
configureProposals 在此之前 start 或单独的
@bsv/overlay-express/proposals 路由器是耐用建议服务,
服务拥有的披露验证器和共享的日记/内存门.
本条目需要 SDK 3.3.0 和 认证中件 2.3; 遗留的根对等层
路线保持不变。 读取的当前信道不同于回收
保留出版物ACK。 两者均需当前授权和原件
合同在答复签署后具有约束力。 一个消毒替换错误可能是
签名,在本地排队前需要独立检查控制许可.
主机共享认证和手握所有权 与浏览/根相伴, 通过结算、夹子字节限制和 继承主机 CORS 政策,除非明确推翻。 储存能力 出版物、经核实的恢复、期满和入境工作人员仍然是东道主. 见 建议书指南 组成和回收合同.
私人购置和出版
明确 configurePrivateAcquisition 财务报告和审定财务报表 configurePrivatePublication 方法
以主机的单一认证组成已安装的私人服务
钱包/会话。 出版物名称空间之前的私人收购路线
倒背和普通身体剖析器 默认的公用CORS政策仍然存在
无证书;保留了明确的起源和主机字节天花板.
获取配置的听众单独选择一个有边框的 128-KiB HTTP 标题
bRC-105付款证据的备抵。 独立应用程序可以导入
createPrivateAcquisitionRouter 从 @bsv/overlay-express/private-acquisition。 。 。 .
应用程序拥有耐用保管、权限、钱包回收和工人
关闭。 见 购置和回收
构成、原始义务语义、付款/回收请求和
代理限制 。 这些选入配置需要新的 SDK 输出 API; 遗留启动
保留其支持的SDK地板.
公约采购伙伴
configurePrivatePurchase 或可选
@bsv/overlay-express/private-purchase 路由器增加了拟议的BRC-196
/overlay/v1/purchases/prepare, (中文(简体) ), /submit 财务报告和审定财务报表 /recover 业务
配置了基础路径 。 使用共享主机认证钱包, 准确
选定能力和本地实物披露所有人。 《公约》规定的付款
在独立验证的交易中发生; 这些路径拒绝 HTTP
付款头,不采用第二次BRC-105收费.
采购、购置和出版共用一个握手所有人并保存
普通类 /submit/寻找行为,要求天花板和无证书的CORS.
该应用程序拥有原始的保护保管,全域/释放验证
并停止/裁员协调员,然后关闭其本土领域。 见
购买权 联 合 国
组件边界和其余端到端的资格要求.
SDK4 热补丁对等要求
SDK4 对等替代开始于 @bsv/sdk ^4.0.1,恢复数字
钱包结果和遗留线条相容性。 现有的SDK2/3替代品和
下限不变。 SDK4 用户应安装 4. 0.1 个热补丁; 不
需要应用程序-wallet线或数据迁移.