오라클 시스템
Savitri의 오라클 시스템은 검증된 외부 데이터 피드를 온체인 컨트랙트에 제공합니다. 데이터 요청, 제공자 응답, 증명 검증, 스키마 검증을 지원합니다.
아키텍처
외부 데이터 소스
│
오라클 제공자 (오프체인)
│
submit_response()
│
오라클 레지스트리 컨트랙트 (온체인)
│
verify_data() + 증명
│
소비자 컨트랙트
구성 요소
오라클 레지스트리 (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();
// 온도 데이터 요청
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 요금: 0.00005 SAVT
.build_and_sign(&wallet)?;