# WINkLink 價格服務

# 概覽

為確保智能合約能反映真實世界的代幣價格,需經常對合約的價格信息進行更新。 其中,DeFi 資產的價格尤其需要和現實世界資產緊密掛鉤, 否則可能導致套利或合約攻擊,給用戶和開發者造成損失。

WINkLink 價格服務專註於數字貨幣價格對,為去中心化應用(DApp)提供準確穩定的外部世界數字貨幣價格信息。 WINkLink 打造了聚合多個預言機節點價格數據的解決方案,從而提供穩定的價格服務,稱作餵價合約(Price Feed Contract)。

# 支持的價格對列表及配置

# 主網

價格對 合約地址(代理)
BTC-TRX TX4rin6u2SaF3TqANqRgzfSCGi95azQNVY
BTC-USD TQoijQ1iZKRgJsAAWNPMu6amgtCJ3WMUV7
BTT-TRX TS26cn4GmmipyGTcgvRRwqL6AyEU6vK4rw
BTT-USD TBAAW545oJ6iTxqzezGvagrSUzCpz1S8eR
BTTOLD-TRX TUjTmKMxGmH78t5DmY7YsfJFoGw6XyX9VZ
BTTOLD-USD TEEnwU47Fgx4Ehii7Xs9bLWK3XKo4fs6sV
ETH-TRX TXZ9AUk6nC2454NSDGUWvPB72JxSNJrezX
ETH-USD TR2yWYWovJaSM7TfZq7L7sT7ZRugdJJQmL
JST-TRX TC19QPF2mjP1ZhXxD8JNKJs4ksxMZkCuNP
JST-USD TE5rKoDzKmpVAQp1sn7x6V8biivR3d5r47
LIVE-USD TNdLmxVhdj1H1yGjhhSp33cMaAJKjyTAM4
LTC-TRX TVJPFXKMysYsRWEXJ3JkSnAUPucinUFUB6
LTC-USD TGxGL85kN3W5sGdBiobgWabWFcMEtoqRJJ
NFT-TRX TKtc1V6QAY1Gpy511QjzXkLUphG8Dre8CY
STRX-TRX TW9bNueyJZA9iZnNXGYkJuPJJ7KFN3o5qw
NFT-USD TEC8b2oL6sAQFMiea73tTgjtTLwyV1GuZU
SUN-TRX TLLyqXr5cbYEMjzeThe1esss1SVBbxxubu
SUN-USD TRMgzSPsuWEcVpd5hv19XtLeCk8Z799sZa
SUNOLD-TRX TWAob1YsNzh7bfgkjfAD9MAdarcoSWScWw
SUNOLD-USD TEEuSdqyv2NFREtNoUXMTDSmJVK3KCuLac
TRX-USD TR5HtpPK4gX4RFC4DCBUHfFgsGkGFEzSAb
TUSD-TRX TLXMULb1SRpv841Q54C4DhWkmmGfRA2rUH
TUSD-USD TBc3yBP8xcyQ1E3hDTUhRxToMrgekLH2kh
USDC-TRX TNTm5ezUGHxYc9Mvst58yYTAjxDmqWWGZc
USDC-USD TNu3zS55MP4KnBBP6Maw1nHSzRpc3CXAxm
USDD-TRX TWW4P2pck8rFcxx3H8NfnH4qhNPu1V35Pb
USDD-USD TJ7jEgoYVaeymVfYZ3bS57dYArwVDS1mhW
USDJ-TRX TCBKyYMP4YQFHxYznuUaResHDTaEWLuJNW
USDJ-USD TB1MyT7pDCNg8w7cSW1QvYKs4WPzErzP5k
USDT-TRX TUfV7S4RYtdmBvtHzedfFPVsK9nvndtETp
USDT-USD TKePc46n5CiUCR8LL788TFeKA4kjvNnuem
WIN-TRX TQvCG1U2jGTVwXLqvFWR27LDtEJZVgRbEg
WIN-USD TSCef3LT3jpLwwXCWhZe3hZoMsYk1ZLif2
WSTUSDT-TRX TKcTU5vCPqBBfuULEGXg9kkLx6Tzs2Zo3x
USDDOLD-USD TJrtqTiWkzsdCSU7Jz4JiBswc3Sv8FCw1i
USDDOLD-TRX TGJ7FspL9bftnXKrRFah1yU7VxHkgBpzVB
USD1-TRX TVRD5vMZDnmBXF3AxBiHVJYeykVFzC8eLB

# Nile 測試網

  • WIN 代幣合約地址: TNDSHKGBmgRx9mDYA9CnxPx55nu672yQw2
  • WinkMid 合約地址: TLDU7C8K3Gd3pXrAj9gtpVVNRHZHuHHZ8P

價格服務合約地址列表:

價格對 Nile(代理)
BTC-TRX TFETSL1Yc8dCJM7z6uBkHhAsPbqP5UaCDE
BTC-USD TAX8Pm3FgN74za72TFZrn5gPBxJTKgnnpE
BTT-TRX TKbeHN2hdrgSShG6iF3mDsJTu9fFzNrHjo
BTT-USD TJdzg4wqBt4JkP1ehbYQufg1cLjbomT2j7
BTTOLD-TRX TETkTRbnyB4ptWiK9qXgiyFxQQ9d8ZacT6
BTTOLD-USD TRpRfFzubR7oheDCwHRbwJRfeFa85L6tWE
ETH-TRX TSVJwLrhWBF7K6BkEG6hStjMxQJXAzBABQ
ETH-USD TQGyY3mWTTzKKBLBg3wQTSbAGqBnGqYSzX
JST-TRX TSf6ZwFrDg5Jvyci1PnRHrrZvPpCCKNTjj
JST-USD TJ7SizJiCAjMPAri1CFAxzg4xCRLycumMj
LIVE-USD TPxNjLNrn3WAwoyGQgqJyw3dLo9E79mUdH
LTC-TRX TWProfbHdGBCf7HVNys5KAbVT4vhUwpu22
LTC-USD TRSFTb2seuQxQqUsyeJ8Wg8XhX1e2g3T19
NFT-TRX TWP99RnyMVKFjzuu9XT5J21qBZu8DwhCum
NFT-USD TX5KVe4sp24w5HJ4nfk2ZstRhV8RTFm67W
STRX-TRX TEbUQ4gohuK5wdtKmpnGd2kvyzhhznJDCx
SUN-TRX TTxxeWGpSDV3zPDxnYXzG1ue7RpTYTvDpY
SUN-USD TJjENuVH7TD8RJdGtj22ac6Bt1ktpBGURR
SUNOLD-TRX TNfn4qt4QJ7LAndM2aWbxrGGH8CRGvzxui
SUNOLD-USD TMKzWKMA1gSwjYSL6VpfCUXLuwPKdjEsQ2
TRX-USD TCeXRh9vcb78j2Eb2oJk4YwwnoHQDT64T1
TUSD-TRX TM1bvBzHkRrQqvvHGi1CC1Heb8ESWreiNW
TUSD-USD TUuxMFxv6qPn1ymZoYY45SSK1hhEVAvyKz
USDC-TRX TWio8JqYx2aey49ua2ohLoyBPbVVWos8RB
USDC-USD TF5a2qhfxtWzUQnAocPoxgKXLe1vEE8oER
USDD-TRX TFr7TWdb5RWPNCfecr3HNfnCmNNL8qvgmJ
USDD-USD TX264fxRmdhNfUgkruk9orzAVvtCehyowq
USDJ-TRX TDJtnT7JRNqmNaqY1mK9i1xWN4GnX1UfGd
USDJ-USD TKZUQTYAhH1LTG67QmhX4HxTWZdvLfH9d1
USDT-TRX TJL5M1QqL7oF2ceazAFJ2ump9jf87jUqnK
USDT-USD TT2ETLY1Mmx2DKYT9S6fMvKGPqbWH3LDEJ
WIN-TRX TP7aHYuXUkKPKsojs9BNJDVyAJeQ2KtfCj
WIN-USD TYYMqsRNZTwsiFkRtn2NewvXT9GnnsPBH9
WSTUSDT-TRX TZGEUihByCHG79Hbpider6pGZfY9S8ct6P
USDDOLD-USD THoshmYmTfmcNTqYLKAhMYTDNYBhJH3mbt
USDDOLD-TRX TKxxkv4CkJANRVNay8C2eY9E2zMjmWViE7
USD1-TRX TNeep6gumLAPU4ZfPkyhjJyyu7akMKKjrT

# 申請新價格對

如您想在 WINkLink 申請添加新價格對,請填寫並提交此表格。 (opens new window)

# 獲取最新價格

使用 AggregatorInterface 接口獲取 Consumer 合約的最新價格數據。

這一接口定義了餵價合約提供給用戶的函數。 下方的代碼示例展示了如何使用 AggregatorInterface 接口獲取最新價格:


pragma solidity ^0.5.0;

interface AggregatorInterface {
function latestAnswer() external view returns (int256);
function latestTimestamp() external view returns (uint256);
function latestRound() external view returns (uint256);
function getAnswer(uint256 roundId) external view returns (int256);
function getTimestamp(uint256 roundId) external view returns (uint256);
}

contract PriceConsumer {
AggregatorInterface internal priceFeed;

    /**
     * Price Aggregator Address: TYZxQSHAhxGgUWzxYEZAohvWc9cQWXtNBt
     */
    constructor() public {
        priceFeed = AggregatorInterface(0xF7e52418572834722ED87E9425d673FEdBD55a0e);
    }

    /**
     * Returns the latest price
     */
    function getLatestPrice() public view returns (int) {
        // If the round is not complete yet, timestamp is 0
        require(priceFeed.latestTimestamp() > 0, "Round not complete");
        return priceFeed.latestAnswer();
    }
}

# 獲取價格歷史

AggregatorInterface 接口使用 getAnswer(uint256 roundId) 函數獲取價格歷史, 對應的時間戳可通過 getTimestamp(uint256 roundId) 獲得。

# 設置餵價合約

# 部署合約

WINkLink 生態采用去中心化架構,所有智能合約開源,任何組織和個人都可以部署自己的 WINkLink 預言機合約, 並對外公布所提供的服務。

用戶可以從各個公開 WINkLink 服務中選擇自己所需的組合,創建自己的聚合數據合約,享受去中心化機制帶來的便利。

項目合約可點此查看:https://github.com/tron-oracle/winklink-libocr/tree/main/tvm-contracts (opens new window) - 連接您的 Github 賬戶

您可以使用以下任一工具或程序庫進行合約部署和調用測試::

# 聚合器合約

聚合器合約部署在波場 TRON 公鏈上,具有以下功能:

  • 接受來自 WINkLink 節點的鏈下聚合傳輸
  • 計算數據請求的 WIN 代幣費用,準許預言機節點領取獎勵;
  • 實現 Owned 接口, 進而對聚合器合約暴露的不同方法提供權限控制。

合約代碼可於 AccessControlledOCRAggregator.sol 查看。

# 為節點添加任務

節點的任務代表其所支持的數據服務,每個任務都有一個 32 字節的唯一 ID。 對終端用戶而言, (預言機地址,任務 ID) 唯一標識了一個 WINkLink 節點提供的數據服務。 每個 WINkLink 節點都可以提供多項數據服務。

WINkLink 節點正常運行後,就可以通過 Operator UI 為節點添加任務:

示例:(將下列參數修改為上述步驟中部署的預言機合約地址)

TIP

如涉及引導節點,請在配置文件中設置 DefaultBootstrapPeers。

Example: DefaultBootstrapPeers = ['/ip4/127.0.0.1/tcp/6788/p2p/12D3KooWMrKGdnH6nBrf7hDz25NXFSFNk7vgsTxj9bHskWEct4xh']

# 引导节点

type               = "offchainreporting"
schemaVersion      = 1
tvmChainID         = 1
name               = "TUSD-TRX"
contractAddress    = "ACCESS-CONTROLLED-OCR-AGGREGATOR-ADDRESS"
p2pBootstrapPeers  = [
  "/ip4/127.0.0.1/tcp/6788/p2p/P2P-PEER-ID",
]
isBootstrapPeer = true
keyBundleID = "NODE-KEY-BUNDLE"
forwardingAllowed = false
maxTaskDuration = "0s"

TIP

確保引導節點和預言機節點被配置為單獨的實體,每個實體鏈接到其唯一的數據庫實例。 在本地進行操作時,通過修改 config.toml 文件為每個實例指定不同的端口號,以便訪問每個實例各自的 Operator UI。

[WebServer]
HTTPPort = 3000
SecureCookies = false # Default

# 預言機節點

type               = "offchainreporting"
schemaVersion      = 1
tvmChainID         = 2
name               = "OCR: TUSD-TRX"
contractAddress    = "ACCESS-CONTROLLED-OCR-AGGREGATOR-ADDRESS"
p2pBootstrapPeers  = [
"/ip4/127.0.0.1/tcp/6788/p2p/P2P-PEER-ID",
]
isBootstrapPeer    = false
keyBundleID        = "NODE-KEY-BUNDLE"
transmitterAddress = "THE-CURRENT-NODE-EIP55-ADDRESS"
observationTimeout = "10s"
blockchainTimeout  = "20s"
contractConfigTrackerSubscribeInterval = "2m"
contractConfigTrackerPollInterval = "1m"
contractConfigConfirmations = 3
observationSource   = """
ds_http           [type="http" method=GET url="https://www.okx.com/api/v5/market/index-tickers?instId=TUSD-USD"]
    ds_parse          [type="jsonparse" path="data,0,idxPx"]
ds_converttrx     [type="converttrx" url="https://www.okx.com/api/v5/market/index-tickers?instId=TRX-USD" path="data.0.idxPx"]
ds_multiply       [type="multiply" times=1000000]

    ds_http -> ds_parse -> ds_converttrx -> ds_multiply
"""

# 查詢任務

開發者可以在 Operator UI 的任務選項卡下檢索任務。

子選項卡如下:

  • 概覽:最近的運行任務和任務流列表
  • 定義:任務規範
  • 錯誤:自任務創建以來累計遇到的不同錯誤
  • 運行:所有任務運行的列表

job-page-ui.png