TRON開發者指南:關於能源消耗機制

買賣虛擬貨幣
波場協議中的資源消耗機制管理智慧合約執行。 本指南將指導開發人員瞭解部署、觸發和執行智慧合約、資源消耗流程和相關介面/欄位方面的管理規則。管理規則

部署合同

如果DeveloperEnergy <= min(EnergyOfFeelimit, EnergyOfAccount),則合同可以成功部署。 否則,會出現OUT_OF_ENERGY錯誤。

觸發合約

當 consume_user_resource_percent (% ratio user pays) = 100,呼叫方支付操作的全部費用。 呼叫方需要滿足:

CallerNeedEnergy <= min(EnergyOfFeelimit,EnergyOfAccount)

從而成功呼叫合約。 否則,會出現OUT_OF_ENERGY錯誤。

當 0 = < 消耗_user_資源_% < 100 時,這表示操作成本由開發人員和呼叫者按比例支付。 如果開發人員有足夠的能量,呼叫方需要滿足:

● CallerNeedEnergy = NeedEnergy * consume_user_resource_percent / 100
● CallerNeedEnergy <= min(EnergyOfFeelimit,EnergyOfAccount)

開發人員:

DeveloperNeedEnergy = NeedEnergy *(100-consume_user_resource_percent)/ 100

為了成功呼叫合約,DeveloperNeedEnergy <= OriginEnergyLimit 。 否則,報告OUT_OF_ENERGY 。

如果開發人員的能量不足,則剩餘的能量消耗由呼叫方提供,並且不消耗開發者的TRX。 也就是說,呼叫者需要滿足:

TotalEnergy <= min(EnergyOfFeelimit,EnergyOfAccount)+ DeveloperProvideEnergy

為了成功呼叫合約,DeveloperProvideEnergy <= OriginEnergyLimit 。 否則,會出現OUT_OF_ENERGY錯誤。

合約執行

執行合約方法時,OUT_OFO_ENERE 可以根據介面檢視詳細資訊。 呼叫/ walletsolidity / gettransactionInfoByID介面,並將返回的resMessage欄位從十六進位制轉換為字串。

resMessages包括:執行“AND”操作的能量不足:curInvokeEnergyLimit[1000],curOpEnergy[3],usedEnergy[1000] 類似資訊。

術語

定義

curInvokeEnergyLimit

表示最大能耗, 即 min(EnergyOfFeelimit,EnergyOfAccount).

curOpEnergy

當前運營仍需要能源。

usedEnergy

本地用於呼叫的能量。

能源不足解決方案

1. 如果EnergyOFAccount < curInvokeEnergyLimit,表示呼叫方剩餘能量和TRX餘額不足,需要給TRX充值。
2. 如果EnergyOfFeelimit < curInvokeEnergyLimit,表明費用限額設定太小,需要增加費用限額。 最高費用限額為1000 TRX。

消費過程

1. 根據合同中設定的 consume_user_resource_percent 比率,消耗合同建立者從凍結TRX獲得的能量。如果能量不足,繼續消耗合同建立者的剩餘能量。任何剩餘的能源短缺都由合同來電者提供。
2. 合同來電者消費過程:(首先消耗呼叫者透過凍結TRX獲得的能量,以確保合同可以正常執行,並且透過銷燬TRX來抵消不足部分)。
3. 如果合同建立者未凍結能源資源的TRX,則呼叫者需要所有消費。

專業術語

術語解釋

合約建立者

即建立合約的賬戶

合約呼叫者

即呼叫合約的賬戶

Energy

智慧合約執行時每一步指令都需要消耗一定的資源,資源的多少用energy的值來衡量。

Freeze

凍結,即將持有的trx鎖定,無法進行交易,作為抵押,並以此獲得免費使用energy的權利。具體計算與全網所有賬戶凍結有關,可參考相關部分計算。

Fee Limit

使用者在呼叫或者建立智慧合約時,指定的最高可接受的trx費用消耗,包含消耗凍結獲得資源的trx 和消耗使用者本身持有的trx兩部分,優先使用凍結資源。

Call Value

使用者在智慧合約呼叫或建立時給智慧合約本身的賬戶轉賬的trx數量,在判斷feelimit的時候會拋去這部分的值。

consume_user_resource_percent

對於一個智慧合約來說,付費是由兩大部分組成的。一部分是合約開發者付費,另一部分是由合約呼叫者支付。這個值是呼叫者付費的比例。

origin_energy_limit

開發者設定的在一次合約呼叫過程中自己消耗的energy的上限,必須大於0。對於之前老的合約,沒有提供設定該值的引數,會存成0,但是會按照1000萬energy上限計算,開發者可以透過updateEnergyLimit介面重新設定該值,設定新值時也必須大於0。

相關介面

引數getTransactionInfoById 查詢包含合約呼叫或合約建立結果的交易資訊。

getTransactionInfoById 需要1個引數,交易 ID

相關欄位

● 相關欄位

Copy

energy_usage: //本次合約呼叫者消耗的Energy數量
0
energy_fee: //本次合約呼叫者消耗TRX數量(SUN)
120
origin_energy_usage: //本次合約建立者提供的Energy數量
0
energy_usage_total: //本次合約總共消耗的Energy數量(包含energy_usage,origin_energy_usage 和energy_fee對應的Energy數量)
252
net_usage: //本次合約消耗的Bandwidth(不包含NetFee對應的)
0
net_fee: //本次合約因Bandwidth不足消耗的TRX
0

FreezeBalance 凍結TRX以獲得頻寬或能量

freezeBalance frozen_balance frozen_duration [ResourceCode:0 BANDWIDTH,1 ENERGY]

說明
引數 “fee_limit” 在部署合約和呼叫合約的過程中傳遞。 TRX 數量對應於此執行中消耗的能量。

能量部分被凍結: (凍結平衡量/凍結以獲得總能量) * 能量消耗。 銷燬TRX以獲得能量部分:按比例消耗的TRX數量。

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读

;