買比特幣 買比特幣
Ctrl+D 買比特幣
ads

ION:平行鏈上線技術系列二 - Substrate交易費率和Benchmark_GHT

Author:

Time:1900/1/1 0:00:00

SubstrateTransactionfees?andBenchmark

交易費用存在的意義

我們需要為我們的區塊鏈設計手續費,是為了激勵參與方更加有效的協作,調節資源的利用率,畢竟天下沒有免費的午餐。

Substrate的Fees如何計算

使用以下參數計算交易的最終費用:

basefee:這是用戶為交易支付的最低金額。它在運行時被聲明為baseweight,在runtime下配置

WeightToFee即可。

weightfee:與交易消耗的執行時間成比例的費用。

lengthfee:與交易的編碼長度成比例的費用。

tip:增加事務優先級的可選提示,使其有更高的機會被包含在事務隊列中。

base_fee、weight_fee和length_fee構成inclusionfee(包含費用)。inclusionfee(包含費用)是交易被包含在一個區塊中必須可用的最低費用。

使用?transaction?paymentpallet

pallet-transaction-payment提供了計算inclusionfee的基本邏輯。

這個pallet提供以下配置項:

Config::WeightToFee將weight轉換為基于貨幣類型的可扣除費用

Config::FeeMultiplierUpdate通過定義一個乘數來更新下一個塊的費用,基于上一個塊結束時鏈的最終狀態。

Config::OnChargeTransaction管理transactionfee的取款、退款和存款。

ps:交易費用在交易執行之前被提取。事務執行后,可以調整事務權重以反映事務使用的實際資源。如果交易使用的資源少于預期,則更正交易費用并存入調整后的交易費用。

交易費用的公式

inclusion_fee=base_fee+length_fee+;

final_fee=inclusion_fee+tip;

細化之后的公式->

在這個公式中,targeted_fee_adjustment是一個乘數,可以根據網絡的擁塞情況調整最終費用。

Genesis將與債權人的調解期限最后延長至8月16日:8月3日消息,Genesis已最后一次延長與債權人的調解期限至8月16日,Genesis律師表示,如果我們在未來兩周內原則上無法在交易方面取得實質性進展,我們認為我們不會尋求進一步延長調解期限。5月以來Genesis一直在與主要利益相關者(包括母公司DCG和Gemini)進行調解,試圖挽救由DCG支持的擬議破產退出計劃,但該計劃被其無擔保債權人官方委員會拒絕。[2023/8/3 16:15:30]

base_fee其實就是ExtrinsicBaseWeight的大小轉換為Balance的值

length_fee是交易體存儲的費用。

weight_fee通過兩個參數計算:

??a.在ExtrinsicBaseWeight運行時聲明并適用于所有外部變量的。

??b.#解釋外部復雜性的注釋。

要將權重轉換為貨幣,運行時必須定義一個WeightToFee實現轉換函數的結構體Convert.

請注意,在調用外部發件人之前,會向外部發件人收取包含費用。即使交易在執行時失敗,費用也會從發件人的余額中扣除。

基礎費用

是用戶為交易支付的最低費用。它在Runtime被聲明為baseweight,其實就是ExtrinsicBaseWeight的大小轉換為Balance的值。所以需要設計Weight轉換為Balance的公式--?WeightToFee,WeightToFee在pallet-transaction-payment處進行配置即可。

關于ExtrinsicBaseWeight的配置

通過runtime下frame_system::Config的BlockWeights的base_extrinsic進行配置。

關于WeightToFee:

WeightToFee可以理解為一單位Weight與一單位Balance之間的映射轉換。

Code實現

在代碼實現那塊主要是對一個pubstructLinearWeightToFee(sp_std::marker::PhantomData);添加WeightToFeePolynomial宏。

只需要實現這個宏里的polynomial()方法即可

polynomial()其實是在定義weight轉換為balance的多項式。

世界經濟論壇為政府、行業發布加密資產監管建議:金色財經報道,世界經濟論壇在其數字貨幣治理聯盟的協助下發布了一份關于加密資產監管的白皮書。該論文認為,全球協調對于加密資產監管來說是必要的,以防止歧義、監管仲裁和不一致的執法。白皮書指出了加密資產監管面臨的一系列挑戰,包括相同活動,相同監管的假設,聲稱,加密資產及其生態系統并不總是完全適合現有的基于活動、以中介為中心的監管方法,即使加密資產活動反映了傳統金融部門的活動。

白皮書分別向國際組織、監管機構和加密行業提出了三項廣泛的建議。政策制定者和行業利益相關者需要跨轄區合作,以確保一致性和清晰度,隨著這些新技術更加透明,可以想象出更好的監管工具來解決跨境問題。[2023/5/27 9:45:08]

關于WeightToFeeCoefficient的配置細節

這個返回的是一個多項式公式

其中negative值是控制整體多項式是加上該多項式還是減去該多項式

negative的對應關系:

true→-

flase→+

多項式的公式如下

例如:

如果我們想實現一個1:1的WeightToFee的轉換,那這里的配置應該是:

對應的多項式為:

小總結:

WeightToFee只是Weight轉換成Balance的映射轉換,只需要在pallet_transaction_payment指定WeightToFee即可。

因為交易費中涉及到weight的內容不止basefee,還有weightfee,這兩個都是把pallet_transaction_payment指定的WeightToFee作為轉換公式。

basefee公式:

字節費用

FTX領導層尋求從Embed內部人士和高管處收回約2.44億美元:金色財經報道,FTX 的領導層要求從股票交易平臺 Embed 的首席執行官 Michael Giles 及其股東那里追回 2.437 億美元,訴訟要求從 Embed 的首席執行官Michael Giles 及其股東那里收回資金,指控 FTX 為該股票交易平臺支付了 2.2 億美元的“夸大”價格。作為收購的一部分,FTX 還向 Embed 員工支付了總計 7000 萬美元的留任獎金。這筆款項的 5500 萬美元支付給了Giles。

從 Giles 于 2022 年 6 月 10 日簽署收購協議到 2022 年 9 月 30 日收購結束,他每天的報酬達到驚人的 490,000 美元。交易完成時,由于他是 Embed 的最大股東,還額外獲得了 1.03 億美元。[2023/5/19 15:13:17]

lengthfee主要計算的是交易體大小的費用。

對于lengthfee的計算公式:

Length_Fee=交易體大小*每字節所需費用

每字節的費用可以在runtime下pallet_transaction_payment的

TransactionByteFee做定制。

TransactionByteFee?=>?指定每個字節值多少Balance。

其次就是交易體的大小,但是要了解交易體的大小,首先需要了解交易體的內容構造。

關于交易體的構造:

Substrate入門-交易體-

???在Substrate中的交易不再稱為Transaction,而是稱為了Extrinsic,中文翻譯就是“外部的;外表的;外源性”,意味著被稱為Extrinsic的概念,對于區塊鏈而言是外部的輸入。這種定義脫離了本身“交易”的范疇,而是在鏈的狀態的角度下,認為交易及類似概念是一種改變狀態的外部輸入。

一個“外部輸入”至少會具備以下兩個條件:

發送者的證明

外部輸入的行為

其中第一點是顯然的,只要基于公私鑰體系,就一定需要發送者對這個發送的內容進行簽名,在鏈上通過這個簽名驗證合法性,解析出發送者的公鑰識別身份。等價于互聯網中客戶端持有的token這類的。而第二點就是這個“輸入”是到鏈上干嘛的,其相當于是用戶發送到鏈上的指令行為。

數據:11月出現史上第四大比特幣投降事件,7天實現損失達-101.6億美元:金色財經報道,據區塊鏈分析公司Glassnode最新報告顯示,11月出現了歷史上第四大投降事件,7天實現的損失為-101.6億美元。這比2018年12月的峰值大4.0倍,比2020年3月大2.2倍。比特幣的價格在超過4.5個月的時間里一直低于實現價格,目前短期持有者成本基礎為1.883萬美元,最近的買家平均損失了12%。上周市場實現了相當于-52.1萬枚比特幣的凈損失,再次接近了歷史上的最大記錄。將目前的累計凈實現損失與新冠疫情和LUNA崩潰相比較,其價格跌幅分別為44%和39%,不過在最近的投降中,市場表現出較大程度的力量,只有26%的修正。[2022/12/4 21:20:56]

關于鏈下如何構造這個signature,

插曲:鏈下一個交易體的構成:

交易bytes內容的構造:

pallet-funcindex+發起人的Account+signature(signed,signature,extra)+call

pallet-funcindex是通過palletname和functionname在metadata里查詢得到到index

交易執行之后可以在此處

explorer下觀察到signature的信息:

call里的內容主要由callindex和參數構造而成。

至此我們獲悉了交易體的byte信息

所以對于上述的例子,相對應的字節費用為

其實在這里可以觀察到由于交易體的設計,可以實現在發送之前就可以計算出交易的大小從而推導出交易的手續費。

還有其他的玩法:

交易版本與鏈上版本檢查

交易存活性檢查

數據:Binance鑄造45,355,455枚BUSD:金色財經報道,據WhaleAlert數據顯示,Binance鑄造45,355,455枚BUSD。[2022/8/19 12:36:13]

特殊交易的額外信息檢查

例如如果一個交易是轉賬transfer,可以直接檢查發送者的余額是否足夠,不用到區塊執行階段才判定。

權重費用(weight_fee)

在有限的區塊生成時間和鏈上狀態的限制下,權重被用來定義交易產生的計算復雜度即所消耗的計算資源,以及占據的鏈上狀態。system模塊定義了區塊的總權重。

#

為了保證在網絡繁忙的情況下,依然能夠實現對區塊鏈應用有效合理的管理,Substrate引入了三種不同級別的交易類型,既Normal、Operational和Mandatory類型。

Normal類型的交易是由網絡中的普通用戶提交,

Operational類型的交易是由網絡中的管理員或者管理委員會共同觸發。

Mandatory類型的交易表示網絡中區塊交易所必須的交易信息,通常是內在的交易,由驗證人觸發。

區塊資源如長度和總權重按照一定比例在這三種類型的交易中進行分配,這一比例稱為可用區塊比。Kusama網絡的設置為:

10^12weight=1s

1000weight=1ns

區塊的總權重:2,000,000,000,000weight(2秒)

可用區塊比:75%,即Normal交易最多只占用75%的區塊資源,Operational類型的交易則可以占用100%的區塊資源,新的交易如果導致對應資源使用率超過閾值后,會被拒絕。對于Mandatory類型的交易,即使在區塊已經滿了的情況下,依然可以把交易打包進區塊內。

1、默認weight注釋

Substrate中的所有可調度函數都必須指定權重。你可以使用注釋的方式

#,這個規范允許你組合包括數據庫讀/寫,權重的固定值以及基于banchmark的固定值。下面是一個基本的demo

ps:ExtrinsicBaseWeight會自動添加到聲明的權重中,以考慮將空的外部數據簡單地包含到塊中的成本。

對數據庫訪問進行參數化

為了使權重注釋獨立于部署的數據庫后端,它們被定義為一個常量,然后在表示可調度執行的數據庫訪問時在‘注釋’中使用:

2、自定義weight

可以創建自定義重量計算類型,而不是使用上述默認重量注釋。此類型必須實現以下特征:

WeighData:確定發貨重量。

ClassifyDispatch:確定調度的類。

PaysFee:確定可調度的發件人是否支付費用。

最后,weightfee的公式:

動態調節費率

設置?FeeMultiplierUpdate參數即可

細節深入——Relay-chaintransactionfeesandper-blocktransactionlimits

TokenEconomics-ResearchatW3F

區塊鏈上的交易需求通常非常不規則。一方面,在一天內的小時或一個月內的天數范圍內存在活動高峰。另一方面,有長期趨勢的交易量增長趨勢。我們需要一種機制,在考慮這些因素的情況下,隨著時間的推移自動更新交易費用。

根據供求規律,提高費用就可以減少需求,降低費用就可以促進需求。

為了應對活動高峰,我們面臨著在快速提高交易費用或可能有很長的交易包含時間之間進行權衡——兩者都是不良影響。我們提出了兩種機制。第一種快速調節機制,可以非常迅速地調整價格,與活動的高峰和低谷同步。第二種慢速調整機制,是以長期趨勢的速度進行緩慢調整,并使用小費為用戶提供在高峰時段控制等待時間的可能性。parity官方建議使用帶有tips的慢速調整機制。

關于動態調整機制的設置,也是在pallet_transaction_payment下進行配置。

小費

小費不是必須的的,具體數量是由交易發送者決定的,并且完全由區塊生產著獲得;

而交易費用的其他組成部分會根據一定的比例進行分配,國庫80%,區塊生產者20%。

題外話:最后的手續費去哪里了

至此關于交易手續費的內容,就全部介紹完畢,我們也進一步了理解了各個參數的含義,這個時候我們再回頭看細化之后的公式,就能理解底層計算的計算邏輯了。

關于手續費最終計算的代碼:https://github.com/paritytech/substrate/blob/polkadot-v0.9.18/frame/transaction-payment/src/lib.rs#L505-L537

關于Benchmark

SubstrateBenchmarkingDocumentation

benchmark主要是用于調整weight的內容,字節費用通過配置pallet_transaction_payment的runtime即可解決。

在Substrate中,10^12個weight單位=1秒,或1,000個weight單位=1納秒。

為什么需要使用benchmark

拒絕服務(DoS)是分布式系統的常見攻擊媒介。這種攻擊的一個簡單示例是用戶重復執行涉及密集計算的外部函數。為了防止用戶向網絡發送垃圾信息,我們向用戶收取發送cal的費用。調用成本應反映系統產生的計算和存儲成本,調用越復雜,費用越高。但是,我們仍然希望鼓勵用戶使用我們的區塊鏈系統,所以我們也希望這個估算成本相對準確,這樣我們就不會向用戶收取不必要的費用。

基準測試允許開發人員向最終用戶收取適當的交易費用,以更準確地表示系統上的外部成本。設置合適的權重函數,準確反映底層計算和存儲,也是Substrate中重要的安全保障。

簡單的理解:weight可以手動設置,但是每臺機器的性能可能不一致,可以使用benchmark做一個測試然后測算出指定機器下weight的大致范圍。

確定機器配置

在進行benchmark之前,我們需要先確定機器的配置信息。

Benchmark的可用選項

進行Benchmark測試

在pallet下創建benchmarking.rs文件

編寫完benchmark之后需要在生產機器下去進行benhmark測試。

關于benchmark的一些配置項:

你可以指定weight的模版生成定制之后的weight文件

模版文件

./.maintain/frame-weight-template.hbs內容:

根據模版文件生成指定的weight文件

測試完成之后,關于weights的值也就估算成功了,在pallet里引入weight即可

Otherlink

https://github.com/paritytech/subport/issues/149

中如何計算工齡在Substrate中如何計算交易權重姒煜的博客-CSDN博客

Gavin:關于Weight你必須了解的要點嗶哩嗶哩bilibili

TokenEconomics-ResearchatW3F

https://github.com/paritytech/substrate/pull/3157

Substrate入門-交易體-

play-substrate/lib.rsatmaster·kaichaosun/play-substrate

Substrate區塊鏈應用的交易費用設計

波卡Substratepallet開發的權重計算與基準測試

在Substrate中如何計算交易權重

weightandfees

postdispatchweightcorrection

calculatefees

來源:金色財經

Tags:WEIGHTTRAIONSHENGWEITUgreenlightplanetPetrachorContraction Dynamic Set Dollar

芝麻開門交易所下載
OIN:金色早報 | 歐洲央行行長:加密貨幣和 DeFi 可能對金融穩定構成真正風險_Work Force Coin

頭條▌歐洲央行行長:加密貨幣和DeFi可能對金融穩定構成“真正風險”金色財經報道,歐洲中央銀行行長ChristineLagarde表示,我們相信.

1900/1/1 0:00:00
AMM:為什么 DeFi 必須選擇 AMM 而不是訂單薄?_DEF

作者:張曦 關于AMM與訂單薄的討論眾多,其中大部分都集中在技術部分:資金效率、價格發現等。但似乎很少有人意識到,AMM與訂單薄之間的爭論遠不只是金融交易業務上的技術選擇.

1900/1/1 0:00:00
ASP:騰訊加速布局元宇宙 沖擊之下逢拋必跌_nas幣未來預測

6月27日,在“SPARK2022”騰訊游戲發布會上,騰訊高級副總裁馬曉軼表示,騰訊最近已經成立軟硬一體的擴展現實業務線,希望抓住未來4-5年內的機會.

1900/1/1 0:00:00
OIN:以太坊和比特幣價格明顯上漲_catcoin貓幣上線交易所

加密貨幣的兩個最大的參與者,比特幣和以太坊在過去幾天出現了溫和的復蘇,幫助推動加密貨幣的整體市值回到1萬億美元大關之上,盡管只是短暫的,在寫這篇文章時,這個市場距離這個里程碑還差400億美元.

1900/1/1 0:00:00
CARD:纏論解盤6.24:完美演繹BTC走勢 關注是否能放量突破21700從而構造4小向上線段_BTC

BTC昨天凌晨的一波回調來到30分鐘中樞下方,早上8點當時價格大概在20000點附近,我在寫文章同時在社群明確提示買入現貨,現在點位是21200,已經有超過1200點利潤空間,目前正在持倉中.

1900/1/1 0:00:00
比特幣:為什么我們說“2022年是數字資產歷史上最嚴重的熊市”?_HitChain

本輪場熊市對比特幣和以太坊造成了非常嚴重的打擊,二者的當前價格都低于上一輪周期的最高價。許多鏈上和市場表現指標達到歷史偏低水平。2021-22?年度的所有投資者均陷入未實現虧損.

1900/1/1 0:00:00
ads