메인 콘텐츠로 건너뛰기

오라클 시스템

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 소수점)토큰 가격, 환율
센서 데이터bytesIoT 온도, 습도 등
난수[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)?;