Etherscan 在 Rinkeby 上用於 Oraclize 呼叫的內部 tx 的準確度如何?
我正在嘗試優化我的智能合約,並且正在分解天然氣的使用位置。
一個函式的每次執行都會花費我大約 $ 5 in gas. I looked at Etherscan and in the internal tx’s it shows a value of $ 5 發送到我的 Oraclize 呼叫的 Oraclize 地址(只是一個 URL 呼叫)。
我真的向 Oraclize 發送了那麼多氣體,還是 Etherscan 的內部 tx 價值計算器,包括放置 Oraclize 呼叫的函式中的儲存成本?我的 oraclize 呼叫我在自定義參數中輸入了 800000 的氣體。
感謝您的任何澄清。
答案是您發送給 Oraclize 的價值是準確的,而不僅僅是函式中使用了多少價值。
我查看了 Oraclize 文件。他們使用 20 Gwei 的 gasPrice,我設置了 800000 的自定義 gasLimit。Oraclize 無法退還未使用的 gas,所以他們全部拿走。
所以 20 Gwei * 800000 wei = 0.016 ETH。解決方案是將 gasPrice 從 20 Gwei 或 gasLimit 更改為更低或不使用 Oraclize。
披露:我是 Oraclize 的員工。
Oraclize API 中包含一個名為
oraclize_getPrice
. 它需要兩個參數,第一個是您要查詢的數據源,例如*“URL”或“computation”*,第二個是您提供給 Oraclize 以執行您的__callback
. 它將 Wei 的數量作為您的查詢將花費的類型“uint”返回,因此在您呼叫時取出您的契約oraclize_query
。
它的計算方法是將您提供的 gas 限制(在您的情況下為 800000)乘以您可能指定或未指定的 gas 價格。如果您沒有通過設置自定義限制,
oraclize_setCustomGasPrice
那麼它將預設為20gwei
. 然後它將添加到此查詢類型的基本價格,在本例中為“URL”,加上證明類型的任何額外費用(您可以在此處查看細分)。費用使用目前的美元/ETH 匯率以 Wei 計算。
僅計算您的費用的gas 成本(正如您在回復中所做的那樣):
800000 gasLimit * 20e8 gasPrice = 0.016 ETH
以目前的 ETH 價格來看,到目前為止,你所看到的 5 美元(~90%)費用中的大部分是你離開契約的。因此,您必須使您的
__callback
(以及 Solidity 中的任何功能)盡可能高效!
W/r/t 遠離 Oraclize,這當然是您的特權。你仍然應該微調你的合約函式的 gas 價格,因為無論你自己還是你的智能合約的使用者都需要支付這些費用。
但是 Oraclize 提供的服務是一種無需信任的模型,通過提供的證明類型,您根本不必信任 Oraclize。更好的是,您可以重視這種不信任。通過選擇 TLS_Notary 證明,您依賴於 AWS 實例,那麼黑客/破壞/更改的成本是可量化的。這意味著你知道你的 Oraclize 依賴合約在多大程度上是“安全的”,從激勵上講。
當然,您完全可以自己動手,但是如果您開始要求這種程度的可量化的不信任並因此開始實施實現這一目標所需的結構,您可能很快就會開始欣賞 0.05 美元的費用!