跳转到内容
中文

开发者

签名与数据流

Ora API 中少数需要你自己的钱包签名的流程,以及如何读取实时数据流。

大多数链上操作完全在 Ora 一侧执行,使用的是 Ora 为你的代币管理的钱包:发射、买入、卖出、清仓、销毁、锁定、策略和奖励领取。对于这些操作,你的脚本永远不会接触私钥。

少数流程会 从你自己的钱包 转出资金,因此它们会返回需要由该钱包签名的交易:

流程 构建 然后
为发射注资 POST /engine/fund 签名并发送,然后调用 POST /engine/fund/confirm
取消发射 POST /engine/cancel 调用 POST /engine/cancel/submit,附上已签名的交易
收取收益 POST /engine/collect 调用 POST /engine/collect/submit,附上已签名的交易
购买老钱包 POST /portfolio/marketplace/quote 调用 POST /portfolio/marketplace/buy,附上已签名的存入交易

要以无人值守的方式运行这些流程,你的脚本需要该钱包的密钥。如果用的是你注册时创建的内嵌钱包,请改为在应用中签名。

实时数据以 Server-Sent Events 的形式推送。浏览器的 EventSource 无法发送请求头,因此请在你的服务器、脚本或扩展中用 fetch 读取数据流:

stream.mjs
const res = await fetch(`https://api.useora.xyz/engine/tokens/${mint}/stream`, {
headers: { Authorization: `Bearer ${process.env.ORA_API_KEY}`, Accept: 'text/event-stream' },
});
const reader = res.body.pipeThrough(new TextDecoderStream()).getReader();
let buf = '';
for (;;) {
const { value, done } = await reader.read();
if (done) break; // reconnect with backoff
buf += value;
for (let i; (i = buf.indexOf('\n\n')) >= 0; buf = buf.slice(i + 2)) {
const frame = buf.slice(0, i); // "event: …" and "data: {…}" lines
console.log(frame);
}
}

每个打开的数据流在你的速率限制中计为一个请求。

数据流 内容
/engine/tokens/{mint}/stream 在一个连接上获取一个代币的数据:先是一个 snapshot,随后是状态事件;先是 trades_snapshot,随后是每一笔 trade;还有已知的持有该代币的钱包,以及持有者统计。
/user/tracked-wallets/trades/stream 你所追踪钱包的实时交易。
/sol-usd/events SOL/USD 价格。
/blockhash/events 最新的区块哈希和区块高度,大约每 220 毫秒一次。
/jito/tip-lamports/events Jito 小费下限的各分位数。
/jito/tip-accounts/events Jito 小费账户列表。