Contract-Design
為什麼合約不能進行 API 呼叫?
合約只能接受和處理數據,而不是能夠從 Internet 檢索數據的模型似乎是有限的(即使不是,它也不那麼直接)。如果擔心數據或網際網路不可靠,難道不能編寫契約來處理此類情況嗎?
是否存在導致乙太坊合約無法直接“訪問網際網路”的基本技術限制?
乙太坊區塊鏈被設計成完全確定的。這意味著,如果我獲取網路的整個歷史記錄,然後在我的電腦上重放它,我應該總是以正確的狀態結束。
由於網際網路是非確定性的並且隨著時間的推移而變化,所以每次我重播網路上的所有交易時,我都會收到不同的答案。
確定性很重要,這樣節點才能達成共識。如果有合約要求對該問題的投票數,則該值可能會因時而異,甚至因地而異,從而導致將來的節點或無法訪問該站點的節點對網路狀態得出不同的結論,從而打破共識。
通過要求每個數據輸入都通過外部交易啟動,我們可以確保區塊鏈本身包含驗證自身所需的所有資訊。這種收集鏈下數據然後將其粘貼到區塊鏈的過程稱為使用預言機。
有幾種預言機服務允許智能合約看起來像是在進行 API 呼叫,但預言機實際上是在鏈下進行 API 呼叫並將結果發佈到鏈上以供智能合約使用。其中一些包括Chainlink、Provable、BandChain和Tellor。