Sui 날씨 오라클을 통해 실시간 날씨 데이터 얻기

날씨 데이터를 앱에 통합하거나 예측할 수 없는 날씨를 무작위성을 위한 씨앗으로 활용하세요.

Sui 날씨 오라클을 통해 실시간 날씨 데이터 얻기

새로운 Sui 날씨 오라클은 전 세계 1,000개 이상의 도시에 대한 날씨 데이터를 제공하며, 신뢰할 수 있는 무작위 결과가 필요한 게임 및 베팅 앱에 적합한 고유한 무작위성 생성기 역할을 합니다. Sui 기반 스마트 컨트랙트와 날씨 데이터를 가져오는 백엔드 서비스로 구성되어 있습니다. OpenWeather API에서 날씨 데이터를 가져오는 백엔드 서비스로 구성되어 누구나 날씨 데이터를 앱에 통합할 수 있습니다.

Sui 날씨 오라클은 지원되는 모든 도시에 대해 온도, 습도, 바람 등의 정보를 제공합니다. 이 오라클은 여행, 보험, 농업, 도박, 게임 등 다양한 목적으로 신뢰할 수 있고 분산된 날씨 정보를 필요로 하는 다른 스마트 컨트랙트나 애플리케이션에서 사용할 수 있습니다.

OpenWeather의 프랑스 파리 날씨 페이지
Sui 날씨 오라클을 사용하면 날씨 추적 및 OpenWeather API 데이터를 사용하는 기타 앱을 사용할 수 있습니다.

하지만 날씨의 무작위성을 활용하면 흥미로운 사용 사례를 만들 수 있습니다. 날씨는 자연에서 가장 예측하기 어렵고 복잡한 현상 중 하나입니다. 일기 예보관들은 대부분 비가 오거나 맑은 하늘을 예측하는 훌륭한 일을 하지만, 특정 온도나 풍속과 같은 세세한 부분은 현재 과학으로 정확히 파악할 수 없습니다. 

과학, 수학, 공학의 여러 분야에서 기본 개념으로 사용되는 무작위성은 안전한 암호화 키를 생성하거나 가설을 테스트하거나 복잡한 시스템을 시뮬레이션하는 데 사용될 수 있습니다. 하지만 대부분의 물리적 또는 계산적 프로세스는 어떤 식으로든 결정론적이거나 편향되어 있기 때문에 진정한 무작위성을 생성하는 것은 쉽지 않습니다. 날씨 데이터를 오라클 입력으로 사용하면 균일하게 분포되고 이전 출력과 무관한 무작위 출력을 제공합니다.

앱의 오라클 데이터

Sui 및 기타 블록체인의 오라클은 스포츠 점수, 주가, 날씨 등 오프체인 데이터의 통로 역할을 합니다. 이러한 데이터를 앱에 직접 표시하는 것이 가장 확실한 사용 방법이며, 이를 통해 개발자는 주식 포트폴리오 관리 도구, 날씨 추적기, 실시간 축구 순위 등을 만들 수 있습니다. 물론 이러한 방식으로 데이터를 사용하는 것은 더 복잡해질 수 있으며, 한 가지 예로 스포츠 점수를 사용하여 판타지 리그에 정보를 제공하는 앱을 들 수 있습니다. 

게임은 오라클 데이터를 직접 기반으로 할 수 있습니다. 예를 들어, 오라클은 스포츠 경기, 정치 선거 또는 복권 추첨과 같은 다양한 베팅의 배당률과 결과를 제공할 수 있습니다. 그러면 플레이어는 오라클이 제공한 배당률에 따라 결과에 베팅할 수 있습니다. 

빌더가 예측할 수 없는 데이터를 제공하는 오라클을 사용하여 무작위성을 생성하면 상황이 더욱 흥미로워집니다. 예를 들어, 오라클은 날씨 데이터, 스포츠 결과, 주가 등 실제 이벤트를 사용하여 게임에 무작위 결과를 생성할 수 있습니다. 또는 해시 함수나 디지털 서명과 같은 암호화 방법을 사용하여 안전하고 증명 가능한 난수를 생성할 수도 있습니다. 오라클 데이터는 앱과 독립적인 검증 가능한 소스에서 제공되므로 무작위 결과를 신뢰할 수 있습니다.

날씨 데이터는 게임에서 캐릭터 행동의 결과를 결정하는 무작위성의 씨앗으로 사용할 수 있습니다. (이미지 출처: RPGMaker)

오라클의 예측할 수 없는 데이터를 기반으로 한 무작위성을 게임 메커니즘에 통합할 수 있습니다. 예를 들어 롤플레잉 게임에서 오라클은 주문 시전, 컴퓨터 해킹, NPC 설득과 같은 캐릭터의 행동의 성공 여부를 결정할 수 있습니다. 또한 오라클은 날씨를 바꾸거나 적을 생성하거나 이벤트를 트리거하는 등 게임 세계에 영향을 줄 수도 있습니다. 게임에서는 오라클의 데이터를 사용하여 게임 개발자나 플레이어의 영향을 받지 않는 공정하고 일관된 무작위성을 생성할 수 있습니다.

Sui 날씨 오라클

오라클은 실제 데이터를 고성능 플랫폼에 연결하여 Sui 에서 차세대 앱을 지원합니다. OpenWeather API의 접근성과 데이터의 유용성을 고려할 때, 날씨 오라클은 Sui 에 좋은 추가 기능이 될 것입니다. 

사용 사례

Sui 날씨 오라클은 다음과 같이 날씨 데이터가 필요한 많은 애플리케이션에 유용합니다:

  • 무작위성: 날씨 데이터는 난수 생성, 당첨자 선정, 고유한 NFT 생성 등 다양한 목적을 위해 무작위성의 소스로 사용될 수 있습니다. 예를 들어 난수 생성기는 특정 시간에 특정 위치의 온도, 습도 또는 풍속을 시드로 사용할 수 있습니다.
  • 베팅 및 게임: 앱은 Sui 날씨 오라클 데이터를 사용하여 날씨 예측 베팅, 날씨 테마 게임 또는 날씨 기반 보상을 제공할 수 있습니다. 예를 들어, 게임에서 사용자가 도시의 날씨에 베팅할 수 있도록 하거나 앱에서 사용자에게 다양한 위치의 날씨에 기반한 NFT를 제공할 수 있습니다.
  • 기타 사용 사례: 보험, 여행, 교육, 연구용 앱에서 날씨 데이터를 사용할 수 있습니다. 예를 들어, 앱은 날씨 데이터를 고려하여 자연 재해의 위험을 계산하거나, 여행 일정을 계획하거나, 학생들에게 날씨 패턴에 대해 가르치거나, 과학 실험을 설정하는 데 도움을 줄 수 있습니다.

구조

전 세계 1,000개 이상의 도시에 대한 최신 날씨 정보를 제공하는 Sui 날씨 오라클은 외부 서비스, 내부 서비스, 스마트 계약의 세 가지 구성 요소로 이루어져 있습니다. 외부 서비스인 OpenWeather API는 다양한 소스로부터 최신 날씨 데이터를 제공합니다. 내부 서비스는 날씨 오라클 백엔드로, 10분마다 OpenWeather API에서 날씨 데이터를 가져와 각 도시의 기상 조건을 업데이트합니다. 스마트 컨트랙트는 Sui 날씨 오라클 컨트랙트로, 날씨 데이터를 Sui 블록체인에 저장하고 사용자가 안전하고 투명한 방식으로 액세스할 수 있도록 합니다. 또한 사용자는 게임과 같이 날씨에 의존하는 다양한 탈중앙화 애플리케이션에 날씨 데이터를 활용할 수 있습니다.

스토리지 리베이트 적립

Sui 날씨 오라클은 스토리지 리베이트 메커니즘을 통해 네트워크에 실시간 데이터를 저장하는 비용을 완화합니다. Sui 인프라 및 토큰 노믹스 모델에서 온체인 스토리지를 지원하여 스토리지 수수료 를 추가하여 온체인 스토리지를 지원합니다. 스토리지 수수료로 조성된 기금은 네트워크 운영자가 데이터를 저장하고 트랜잭션을 처리하기 위한 하드웨어를 유지하는 데 필요한 비용을 상환하는 데 도움이 됩니다. 온체인 데이터의 양을 통제하기 위한 수단으로, 온체인 데이터를 삭제하면 스토리지 기금을 환급받게 됩니다. 

Sui 날씨 오라클은 날씨 데이터를 블록체인에 저장하고 업데이트합니다. 관리자는 일회성 수수료를 지불하여 초기 CityWeatherOracle 개체 목록을 생성하고 각 도시의 날씨 데이터를 업데이트할 때마다 리베이트를 받습니다. 리베이트는 업데이트된 데이터의 양과 업데이트 빈도에 비례합니다. 이렇게 하면 관리자는 저렴한 비용으로 블록체인에 날씨 데이터를 저장하고 업데이트할 수 있습니다.

Sui 개체 디스플레이 활용

Sui 날씨 오라클은 Sui 개체 표시 표준 을 사용하여 현재 날씨 상태에 따라 각 도시의 아이콘을 동적으로 업데이트하여 비구름이나 태양 등을 표시합니다. Sui 오브젝트 디스플레이 표준은 모든 유형의 오브젝트에 대한 오프체인 디스플레이를 온체인에서 관리할 수 있는 템플릿 엔진입니다. 이는 도시의 날씨 ID와 같이 객체의 데이터로 대체할 수 있는 템플릿 문자열을 사용합니다. 오프체인 디스플레이는 지원되는 각 도시에 대한 아이콘을 Sui 탐색기에 제공하는 백엔드 서비스에 의해 처리됩니다. 아이콘은 맑음, 흐림, 비, 눈 등 다양한 날씨 상태를 나타내는 사전 정의된 아이콘 세트에서 선택됩니다.

다양한 날씨 아이콘
Sui 개체 표시 표준을 활용하여 다양한 기상 조건을 나타내는 아이콘을 제공할 수 있습니다. (Coolvector의 이미지 이미지)

Sui 날씨 오라클 스마트 계약 

Sui 웨더 오라클 스마트 컨트랙트는 전 세계 1,000개 이상의 지역에 대한 실시간 및 과거 날씨 데이터를 제공하며, 도시의 날씨 데이터를 기반으로 날씨 NFT를 발행할 수 있도록 지원합니다. 또한 스마트 컨트랙트는 Sui 객체 디스플레이 표준을 사용하여 날씨 데이터와 날씨 NFT를 블록체인에 동적이고 사용자 정의 가능한 방식으로 표시할 수 있습니다. 스마트 컨트랙트에는 네 가지 주요 기능이 있습니다: add_city, remove_city, 업데이트민트

The 오라클::날씨 모듈은 다음을 정의합니다:

관리자 캡오라클 소유자의 관리자 기능을 나타내는 구조체입니다.

struct AdminCap has key, store { id: UID }

날씨게시자를 설정하는 구조체입니다.

구조체 WEATHER가 {}를 떨어뜨립니다.

날씨 오라클는 구조체로서 오라클 자체를 나타냅니다. 이 구조체에는 다음과 같은 필드가 있습니다. id, 주소, 이름설명 오라클의 식별자, 소유자의 주소, 이름 및 설명을 각각 저장합니다.

struct WeatherOracle has key {
    id: UID,
    address: address,
    name: String,
    description: String,
}

도시 날씨 오라클는 특정 도시의 날씨 데이터를 나타내는 구조체입니다. 이 구조체에는 다음과 같은 필드가 있습니다. id, geoname_id, 이름, 국가, 위도, positive_latitude, 경도, positive_longitude, weather_id, temp, 압력, 습도, 가시성, wind_speed, wind_deg, wind_gust, 구름dt 는 각각 도시의 고유 ID, 지명 ID, 이름, 국가, 위도, 경도, 날씨 ID, 온도, 기압, 습도, 가시거리, 풍속, 풍향, 돌풍, 흐림 및 타임스탬프를 저장합니다.

struct CityWeatherOracle has key, store {
    id: UID,
    geoname_id: u32,
    name: String,
    country: String,
    latitude: u32,
    positive_latitude: bool,
    longitude: u32,
    positive_longitude: bool,
    weather_id: u16,
    temp: u32,
    pressure: u32,
    humidity: u8,
    visibility: u16,
    wind_speed: u16,
    wind_deg: u16,
    wind_gust: Option<u16>,
    clouds: u8,
    dt: u32
}

An init 함수를 사용하여 배포 중에 컨트랙트를 초기화하여 새로운 날씨 오라클 를 생성하고 공개적으로 공유한 다음 관리자 캡 을 클릭하고 발신자에게 전송합니다.

fun init(otw: WEATHER, ctx: &mut TxContext) {
    package::claim_and_keep(otw, ctx);

    let cap = AdminCap { id: object::new(ctx) };
    transfer::share_object(WeatherOracle {
        id: object::new(ctx),
        address: tx_context::sender(ctx),
        name: string::utf8(b"SuiMeteo"),
        description: string::utf8(b"A weather oracle for posting weather updates (temperature, pressure, humidity, visibility, wind metrics and cloud state) for major cities around the world. Currently the data is fetched from https://openweathermap.org. SuiMeteo provides the best available information, but it does not guarantee its accuracy, completeness, reliability, suitability, or availability. Use it at your own risk and discretion."),
    });
    transfer::public_transfer(cap, tx_context::sender(ctx));
}

The add_city 공용 함수의 소유자가 관리자 캡 오라클 서비스에 새 도시를 추가하여 해당 도시의 geoname_ID, 이름, 국가, 위도경도. 이 함수는 새 인스턴스를 생성합니다. 도시 날씨 오라클 를 기본 날씨 데이터와 함께 사용하여 오라클에 동적 필드로 추가합니다. geoname_ID 를 키로 사용합니다.

public fun add_city(
    _: &AdminCap, 
    oracle: &mut WeatherOracle, 
    geoname_id: u32,
    name: String,
    country: String,
    latitude: u32,
    positive_latitude: bool,
    longitude: u32,
    positive_longitude: bool,
    ctx: &mut TxContext
) {
    dof::add(&mut oracle.id, geoname_id, 
        CityWeatherOracle {
            id: object::new(ctx),
            geoname_id,
            name, 
            country, 
            latitude, 
            positive_latitude, 
            longitude, 
            positive_longitude,
            weather_id: 0,
            temp: 0,
            pressure: 0,
            humidity: 0,
            visibility: 0,
            wind_speed: 0,
            wind_deg: 0,
            wind_gust: option::none(),
            clouds: 0,
            dt: 0
        }
    );
}

The remove_city 공용 함수의 소유자가 관리자 캡 오라클 서비스에서 기존 도시를 제거합니다. geoname_ID. 이 함수는 해당 인스턴스를 제거합니다. 도시 날씨 오라클 를 오라클의 동적 필드에서 가져와 객체를 삭제합니다.

public fun remove_city(_: &AdminCap, oracle: &mut WeatherOracle, geoname_id: u32) {
    let CityWeatherOracle { id, geoname_id: _, name: _, country: _, latitude: _, positive_latitude: _, longitude: _, positive_longitude: _, weather_id: _, temp: _, pressure: _, humidity: _, visibility: _, wind_speed: _, wind_deg: _, wind_gust: _, clouds: _, dt: _ } = dof::remove(&mut oracle.id, geoname_id);
    object::delete(id);
}

The 업데이트 공개 함수를 사용하여 오라클 소유자가 기존 도시의 날씨 데이터를 업데이트할 수 있습니다. geoname_ID 와 새로운 날씨 데이터를 가져옵니다. 이 함수는 해당 인스턴스를 변경합니다. 도시 날씨 오라클 새로운 날씨 데이터와 함께.

public fun update(
    _: &AdminCap,
    oracle: &mut WeatherOracle,
    geoname_id: u32,
    weather_id: u16,
    temp: u32,
    pressure: u32,
    humidity: u8,
    visibility: u16,
    wind_speed: u16,
    wind_deg: u16,
    wind_gust: Option<u16>,
    clouds: u8,
    dt: u32
) {
    let city_weather_oracle_mut = dof::borrow_mut<u32, CityWeatherOracle>(&mut oracle.id, geoname_id);
    city_weather_oracle_mut.weather_id = weather_id;
    city_weather_oracle_mut.temp = temp;
    city_weather_oracle_mut.pressure = pressure;
    city_weather_oracle_mut.humidity = humidity;
    city_weather_oracle_mut.visibility = visibility;
    city_weather_oracle_mut.wind_speed = wind_speed;
    city_weather_oracle_mut.wind_deg = wind_deg;
    city_weather_oracle_mut.wind_gust = wind_gust;
    city_weather_oracle_mut.clouds = clouds;
    city_weather_oracle_mut.dt = dt;
}

Sui 날씨 오라클 통합

Move 프로젝트에서 Sui 날씨 오라클을 사용하려면 프로젝트의 종속성으로 추가해야 합니다. Move.toml 파일을 만듭니다:

[package]
name = "..."version = "..."

[dependencies]
Sui = { git = "<https://github.com/MystenLabs/sui.git>", subdir = "crates/sui-framework/packages/sui-framework", rev = "..." }
oracle = { git = "<https://github.com/MystenLabs/apps>", subdir = "weather-oracle", rev = "db04fbd17d6ba91ade45c32f609b949fb47d209b" }

[addresses]
...
oracle = "0x8378b3bd39931aa74a6aa3a820304c1109d327426e4275183ed0b797eb6660a8"

이 종속성을 생성하면 빌더는 오라클::날씨 모듈을 Move 코드에 추가하여 날씨 오라클과 그 기능을 활용하세요. Sui 날씨 오라클은 전 세계 여러 도시에 대한 온도, 습도, 풍속 등의 실시간 날씨 데이터를 제공합니다. 날씨 오라클의 CITY_WEATER_ORACLE_TEMP 함수는 켈빈 단위로 도시의 온도에 1,000을 곱한 값을 반환합니다. geoname_ID.

예를 들어, 다음 코드는 프랑스 파리의 현재 기온을 검색합니다(2988507):

use oracle::weather::{WeatherOracle};

fun get_temp(weather_oracle: &WeatherOracle): u32 {
    let geoname_id = 2988507; // Paris, France
    oracle::weather::city_weather_oracle_temp(weather_oracle, geoname_id)
}

다음 대상으로 데이터 연결 Sui

지난 수십 년 동안 빅 데이터의 부상으로 해류부터 맨해튼의 교통 흐름에 이르기까지 모든 종류의 실제 현상과 활동을 나타내는 방대한 저장소가 만들어졌습니다. 이러한 데이터를 책임감 있게 활용하면 산불 위험을 예측하거나 인기 콘서트 티켓을 공평하게 배분하는 등 사람들의 삶에 긍정적인 영향을 미치는 앱이 탄생할 수 있습니다. 

Sui 의 오라클이 확산되면 사람들의 일상 생활과 앱의 관련성이 높아져 네트워크는 현대 디지털 인프라의 필수적인 부분이 될 것입니다.