• 吃人一口,還人一斗 我思故我在

    字面上意思是說,受別人一點幫助,就要思考如何回報他更多。

    同義的:受人點滴,湧泉以報

    我覺得更值得更深入思考的是,

    當你輕易地要求別人的幫助時,你就得有心理準備,要返還十倍或更多。

    所以,當自己能做到,不輕易要求別人的幫忙。

    (說到這裡,小伙伴會覺得跟我以前說的”情感投入報酬”不一樣,情境不同暫不展開)

    這是台灣的俗語,用台語發音更有味道。

  • 瘋狂宇宙 我思故我在

    這個宇宙太瘋狂,大海掀翻了小池塘。

  • 區塊鏈是工具,要合理的使用;而非商品炒作。我思故我在

  • 賀賀郎,哇嗄哩供喂 我思故我在

    意思就是說,我是一個好好的、正常的人,我幹嘛跟你講話。

    一般用於朋友間小小辨論時,無法說服對方而使用。

    請不要企圖說服價值觀不在同個方向上的人或朋友。

  • Ethereum 塞車體驗 我思故我在
    下午四點,第一次體驗到 Eethereum 的塞車,一個 Uniswap 的交易等了一個鐘頭

    約1600 左右的交易,到 1702 收到通知完成

    不是說好的幾秒鐘,幾分鐘哦。造成這個情況的這是 TPS 限制嗎?還是真的有大量垃圾訊息或攻擊導致的?

  • 中心思想 我思故我在

    行為會改變、技術會改變,但中心思想不會變
    如同你會隨著環境而適應,但你的價值觀沒那麼容易改變

    中心思想、價值觀要改變,需要非常深刻的思考及體會,一般人在成長階段接受了某種價值觀,就不容易再改變了。

  • 現在想想,還好選了 ethereum 入門 我思故我在
    當時本來是想跟 Bruce 在公司的決定一樣,從 Fabric 開始。最近沒聯絡不知道發展得如何?

    還好選了 ethereum 入門

  • 成大事者不拘小節 魔鬼藏在細節裡 我思故我在

    兩句話看似相互矛盾,但其實使用的場景是不同的
    年輕人,把這兩句話串在一起,就定位成幹話

    真的這淺薄嗎?

  • 想像力比知識更重要?我思故我在

    你的問題在於書讀得太少,想得太多。

    如果是可比較的,那請您思考:想像力固然重要,是不是應該讓你的知識追上你的想像力?

  • 學士碩士博士的不同 我思故我在
    學士 學習知識 判斷問題(價值)
    碩士 運用知識 解決問題
    博士 創造知識 發現問題

如何在智能合約中取得鏈下價格數據

以太坊 ethereum andy 3周前 (09-28) 142次浏览 已收录 0个评论 扫描二维码
文章目录[隐藏]

如何在智能合約中取得鏈下價格數據

近期與讀書會的前輩討論開發產品的可能性,當我在思考如何完成一個最佳化的一鍵行為時,想到一個問題,如何在類似閃電貸的交易內進行價格的比對,比如在某個價格區間內買賣以完成套利。價格數據一般都是存在於交易所,不同交易所會有不同買賣價格,因此存在套利的空間。要進行套利時,取得各交易所即時的價格,就變成是關鍵的要素之一。
本篇文章主要提到的鎖定價格的參考,就是由外部取得,因此我把這篇文章當是成入門的文章之一。

服務商 Chainlink 提供一個平台,讓開發者可以從智能合約內調用外部的 API 以及給 solidity 使用的可驗証的隨機數函數(Verifiable Random Function, VRF) 。
在智能合約裡,基本的 request 和 receive 循環都不是即時返回數據,在一個交易裡面請求數據之後,在另一個交易裡面接收數據。
本文主要說的是另一個方式,在同一個交易裡可以請求及取得鏈下數據。

速度的要求

在本篇文章撰寫的時候,DeFi 的鎖定金額已經超過30億美元。這裡的鎖定金額,指的是參考其他資產價值例如穩定幣。任何去中心化穩定幣的背後都有其他資產,所以任何人都允許拿回原來的資產。

如何展示價格

以 SAI為例。SAI 背後的資產是 ETH,如果你想取得 SAI 就必須存入 ETH 到 MakerDAO 協議裡。存入 ETH 到協議裡面之後,協議就會鑄造等值的 SAI ,你能拿到多少 SAI 的數量取決於 ETH 的價格,以及你存入多少 ETH。
例如:假設 ETH 是200元,你存入2 ETH ,那你就可以拿到400SAI。存入 1ETH 就拿到 200 SAI

如果 ETH 的價格變化了,能拿到的SAI 數量就會跟著變化,所以如果 ETH 的價格如果變成 100 元,就變成可以拿到100 SAI 。

由於協議是依賴 ETH的價格,所以必須有一個可靠的價格來源,讓系統隨時追綜價格,才能保持系統中的平衡。在這個例子裡,request 和 receive 循環也許可行,但是因為不在同一個交易裡面取得價格,所以就不能用來鑄幣。價格同時也須要被其他功能追綜,因為在鑄幣完成的同時,價格也過期了,會有新的價格。如果鑄幣的功能不在同一個交易裡面,用戶就要花一點時間等待,才能取得 SAI。

解決這個差距

我們可以使用Chainlink Price Feeds 的服務來解決這個問題。

Price Feeds 是一個鏈上的資源,包括價格數據,來自於多個獨立的數據源。它們具有 快速、可靠的特性,可以在同一個交易裡執行,而且也容易使用。

如何使用價格數據

這些數據,是設計做為特殊用途的特別是 DeFi 領域。如果需要完整的價格數據列表,可以到 Chainlink 官網查詢。
我們接下來的程式碼,以Ropsten 測試網路上的 ETH/USD做為範例

如何在智能合約中取得鏈下價格數據

我們來看代碼
第3行,我們引入 Chainlink 提供的的智能合約程式庫 AggregatorInterface 。這個合約裡面定義了一些功能,讓開發者可以請求數據。
第14-16行,在建構函數裡,使用 AggregatorInterface 初始化 priceFeed 狀態變數,參數是數據的地址。在這個範例裡,是 Ropsten 測試網路的 ETH/USD 數據。
第 21-23 行,調用最後一筆價格數據,priceFeed.lastestAnswer() ,返回最後一筆價格數據。
第 28-30 行,也可以取得最後一筆數據的時間戳。

結論

Chainlink price feeds 是很容易使用的價格服務,而且快速、可靠的價格。

參考

https://medium.com/better-programming/how-to-retrieve-price-data-in-smart-contracts-9e0467dfd280
https://gist.github.com/alexroan/c7b9cd9afd58e69e951446273d252be5#file-chainlink-priceconsumer-sol
http://docs.chain.link/docs/reference-contracts


神隊友學長Andy , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:如何在智能合約中取得鏈下價格數據
喜欢 (0)
[320208045@qq.com]
分享 (0)
andy
关于作者:
中年大叔,打拼 like young students.
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址