预言机系统
Savitri 预言机系统向链上合约提供经过验证的外部数据馈送。它支持数据请求、提供者响应、证明验证和数据模式验证。
架构
External Data Source
│
Oracle Provider (off-chain)
│
submit_response()
│
Oracle Registry Contract (on-chain)
│
verify_data() + proof
│
Consumer Contract
组件
预言机注册表(oracle_registry.rs)
预言机提供者和数据馈送的中央注册表:
- 提供者注册和管理
- 数据馈送配置
- 访问控制
预言机馈送(oracle/feed.rs)
数据馈送管理:
- 馈送创建和更新
- 历史数据跟踪
- 聚合支持
预言机证明(oracle/proof.rs)
预言机数据的加密验证:
- 基于签名的证明
- 多提供者共识
- 篡改检测
预言机模式(oracle/schema.rs)
数据格式验证:
- 数据类型的模式定义
- 输入/输出验证
- 类型检查
通过 SDK 使用预言机
请求数据
use savitri_sdk::ContractClient;
let contract = ContractClient::from_url_and_wallet(url, wallet)?;
let oracle = contract.oracle();
// Request temperature data
let tx = oracle.request_data(
&oracle_address,
"temperature",
b"sensor_001",
).await?;
提交响应(提供者)
let tx = oracle.submit_response(
&oracle_address,
request_id, // u64
b"25.5", // response bytes
).await?;
验证数据
let is_valid = oracle.verify_data(
&oracle_address,
b"data_to_verify",
).await?;
使用 TransactionBuilder
use savitri_sdk::TransactionBuilder;
let tx = TransactionBuilder::new()
.oracle_call(
"oracle_contract_address",
"request_data",
b"params",
)
.nonce(nonce)
.fee(5_000_000_000_000_000)
.build_and_sign(&wallet)?;
预言机数据类型
| 类型 | 格式 | 使用场景 |
|---|---|---|
| 价格馈送 | u128(18位小数) | 代币价格、汇率 |
| 传感器数据 | bytes | IoT 温度、湿度等 |
| 随机数 | [u8; 32] | 可验证随机性 |
| 时间戳 | u64 | 外部事件时间戳 |
| 布尔值 | bool | 是/否结果 |
与 IoT 集成
预言机系统与 IoT 连接器集成以获取传感器数据:
let tx = TransactionBuilder::new()
.oracle_call(
"iot_oracle_address",
"submit_sensor_data",
&encode_sensor_data(sensor_id, value, timestamp),
)
.nonce(nonce)
.fee(50_000_000_000_000) // IoT rate: 0.00005 SAVT
.build_and_sign(&wallet)?;