簡體   English   中英

Chainlink 是否將 Oracle 響應存儲在區塊鏈上的某處?

[英]Does Chainlink store Oracle response for a transaction somewhere on blockchain?

讓我們考慮一個交易生命周期示例,其中智能合約使用 Oracle 獲取實時更改的外部數據 ETH/USD 價格饋送。

  1. 交易在挖礦期間執行,因此它會向 Chainlink 預言機創建返回 Price1 的請求。 Price1 是否存儲/緩存在區塊鏈的某個地方?

  2. 一旦區塊被挖掘,挖掘節點將其發送到其他以太坊節點進行驗證。

  3. 驗證節點也執行該智能合約。 后續調用 Oracle 以獲取 ETH/USD 價格會發生什么? Oracle 會在塊驗證期間返回“緩存”響應 Price1 還是我們會得到 Price2。 這是否意味着如果我們獲得 Price2 則塊驗證失敗?

來自 stackexchange 的 @Patrick Collins 為我的問題提供了全面的答案,請參閱https://ethereum.stackexchange.com/a/89451/64282

首先,當您在 20c 中為表使用區塊鏈選項時,插入的新行通過計算前一個插入行的新鏈值來鏈接。 這些東西存儲在隱藏列中,可以提取但不能通過更新更改。 在插入后定義的時間后剛剛刪除。 現在到事務:默認情況下,Oracle Db 是讀提交的,並使用分配給每個 ddl、dml 執行的 SCN。 這意味着當您插入一行時,chainvalue 會立即計算出來——這意味着,開采時的 ETH/USD 匯率。 現在你可以做一個技巧:(1) 使用一個名為 txscn 的列,它存儲當前的 SCN 和 txts 類型 DATimestamp 和一個向上計數的序列。 當您的驗證過程返回時,您插入一個新行,該行創建一個具有 ETH/USD 匯率、來自 (1) 的 SCN 和當前時間戳的新鏈值。 這導致一對行中的每個 TX 用於驗證 - 如果一個進程沒有返回,則只寫入初始行 - 或者您避免寫入第二行,因為驗證落在特定的時間量內。 我假設用於區塊鏈的 REST API 以相同的方式執行此操作,因為它允許等待完成時間和 TX id。 當我正確理解文檔時,不存在某種“閃回”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM