श्वेतपत्र · 13
प्रदर्शन विश्लेषण
शून्य, एक और दो हुक के साथ संदर्भ कार्यान्वयन की मापी गई गैस; लागत किससे तय होती है; और डिप्लॉयमेंट मार्गदर्शन।
पद्धति
नीचे की संख्याएँ scripts/gas-report-standard.js से हैं, जिसे Hardhat के इन-प्रोसेस नेटवर्क पर संकलित संदर्भ कार्यान्वयन (solc 0.8.22, viaIR, ARexToken के लिए optimizer.runs = 1) के विरुद्ध चलाया गया, सितंबर 2026। "वार्म" का अर्थ है पिछले ट्रांसफ़र जैसी ही प्रेषक/प्राप्तकर्ता/आईडी जोड़ी (स्टोरेज स्लॉट ब्लॉक में पहले ही छुए जा चुके हैं)। हुक: EligibilityHook (CHECK + ELIGIBILITY) और ExpiryHook (CHECK)। इसे इस प्रकार पुनः उत्पन्न करें:
npx hardhat run scripts/gas-report-standard.js
परिणाम
xychart-beta
title "हुक की संख्या के अनुसार वार्म ट्रांसफ़र गैस (हज़ार में)"
x-axis ["बिना हुक", "Eligibility", "Eligibility + Expiry"]
y-axis "गैस (k)" 0 --> 140
bar [66.8, 91.2, 119.6]लागत हुक की संख्या के साथ रैखिक रूप से बढ़ती है: प्रत्येक हुक प्रति आईडी एक बाह्य check कॉल है, और पात्रता हुक के लिए इसके अतिरिक्त canSend तथा canReceive। तालिका प्रत्येक ऑपरेशन देती है।
| ऑपरेशन | 0 हुक | 1 हुक | 2 हुक |
|---|---|---|---|
createBatch (नई आईडी, 1000 मिंट) | 264,096 | 283,831 | 299,396 |
safeTransferFrom (पहला, कोल्ड) | 80,687 | 108,266 | 136,682 |
safeTransferFrom (वार्म) | 66,790 | 91,166 | 119,582 |
transform विभाजन 1 → 2 (दो नई आईडी) | 564,422 | 595,707 | 636,858 |
setFrozenTokens | 54,188 | 54,188 | 54,188 |
forcedTransfer | 80,152 | 89,909 | 99,569 |
burn | 66,621 | 83,001 | 93,395 |
प्रत्येक प्रकार के ठीक एक हुक के साथ वार्म ट्रांसफ़र (नियम की सीमांत लागत):
xychart-beta horizontal
title "वार्म ट्रांसफ़र पर एक हुक की सीमांत गैस (हज़ार में)"
x-axis ["DeliveryHook", "Traceability (इमिट)", "EligibilityHook", "ExpiryHook", "SeasonalHook", "PerishabilityHook"]
y-axis "जोड़ी गई गैस (k)" 0 --> 35
bar [12.3, 17.4, 24.4, 25.2, 27.5, 31.0]पर्सिस्टेड मोड में TraceabilityHook 184.5k जोड़ता है और पैमाने के कारण चार्ट से बाहर रखा गया है।
| हुक | गैस | हुक के बिना की तुलना में Δ |
|---|---|---|
| EligibilityHook | 91,166 | +24,376 |
| ExpiryHook | 92,023 | +25,233 |
| SeasonalHook | 94,324 | +27,534 |
| PerishabilityHook | 97,813 | +31,023 |
| DeliveryHook (कोई सक्रिय डिलीवरी नहीं) | 79,076 | +12,286 |
| TraceabilityHook, केवल-इमिट | 84,152 | +17,362 |
| TraceabilityHook, पर्सिस्टेड | 251,273 | +184,483 |
लागत किससे तय होती है
- हुक के बिना ट्रांसफ़र की लागत वार्म स्थिति में ~67k है, यानी ERC-1155, सप्लाई ट्रैकिंग, बैच अस्तित्व/स्टेटस/फ़्रीज़ रीड और पाइपलाइन बहीखाता (डेटा स्टैश, लॉक) मिलाकर। यह न्यूनतम स्तर है।
- प्रत्येक हुक ट्रांसफ़र में लगभग 25–30k जोड़ता है: एक
checkकॉल (व्यू, क्रॉस-कॉन्ट्रैक्ट) और पात्रता हुक के लिएcanSendतथाcanReceiveकॉल। लागत हुक की संख्या और बैच ट्रांसफ़र में आईडी की संख्या, दोनों में रैखिक है। हर नियम कॉन्ट्रैक्ट को कॉल करने से पहले प्रत्येक क्षमता के लिएsupportsInterfaceसे जाँचने पर प्रति आईडी कई स्थिर कॉल जुड़ जातीं; वह ओवरहेड मौजूद नहीं है क्योंकि फ़्लैग पंजीकरण के समय कैश किए जाते हैं। createBatchपर स्टोरेज हावी है:Batchस्ट्रक्ट (छह वर्ड और एक स्ट्रिंग) और ERC-1155 बैलेंस तथा सप्लाई स्लॉट। यह प्रति लॉट एक-बारगी लागत है।transformनई आईडी बनाता है: दो में विभाजन दो बैच रिकॉर्ड, दो मिंट और एक बर्न की लागत देता है, साथ में प्रत्येक लेग (OP_TRANSFORM) पर हुक कॉल। n में विभाजन लगभगn × createBatchऔर एक बर्न है; n को एक में मर्ज करना लगभगnबर्न और एक createBatch है।- प्रवर्तन सस्ता है: फ़्रीज़ करना एक स्लॉट है; बलपूर्वक ट्रांसफ़र की लागत एक ट्रांसफ़र की लागत के साथ अनफ़्रीज़ राइट और इवेंट है।
transferCheck/canTransferव्यू हैं: ऑफ़-चेन मुफ़्त, और ट्रांज़ैक्शन जैसा ही कोड पथ।
डिज़ाइन से क्या मिलता है
| क्षमता-प्रोब डिज़ाइन | A-REX Core (ARexToken) | |
|---|---|---|
| n नियम कॉन्ट्रैक्ट के साथ ट्रांसफ़र | किसी भी तर्क के चलने से पहले आईडी × मॉड्यूल × (supportsInterface प्रोब + हुक कॉल) | आईडी × हुक × 1 कॉल (पात्रता हुक के लिए +2); फ़्लैग पंजीकरण पर कैश |
| अस्वीकृति | स्ट्रिंग रिवर्ट (मेमोरी में कॉपी, इंडेक्स-योग्य नहीं) | हुक पते और bytes32 कोड के साथ कस्टम एरर |
| वंशावली | उपलब्ध नहीं | ~280k प्रति आउटपुट बैच |
| फ़्रीज़ / बलपूर्वक ट्रांसफ़र | उपलब्ध नहीं | 54k / 80k |
बायाँ कॉलम उस डिज़ाइन का वर्णन करता है जिसे A-REX Core बदलता है (ADR-004, ADR-005); केवल दायाँ कॉलम मापा गया है।
डिप्लॉयमेंट मार्गदर्शन
- धन में लागत
gas × gas price × token priceहै, और अंतिम दो चेन और दिनों के बीच परिमाण की कई कोटियों तक बदल जाते हैं। केवल उदाहरण के लिए, 0.01 gwei और 3,000 USD प्रति ETH पर दो हुक के साथ वार्म ट्रांसफ़र (119,582 गैस) की लागत लगभग 0.0036 USD औरcreateBatch(264,096 गैस) की लगभग 0.008 USD है; Ethereum मेननेट पर 20 gwei पर वही ऑपरेशन लगभग 7.2 और 15.8 USD के पड़ते हैं। यूनिट इकोनॉमिक्स मॉडल पर प्रतिबद्ध होने से पहले लक्षित चेन पर मापें। - बैच ट्रांसफ़र:
safeBatchTransferFromस्थिर लागतों को बाँट देता है; हुक लागत फिर भी आईडी की संख्या के साथ बढ़ती है। - हुक क्रम: उच्च-अस्वीकृति, सस्ते हुक पहले रखें; अस्वीकृति महँगे हुक चलने से पहले ही पाइपलाइन रोक देती है।
- हुक की संख्या: तीन से पाँच अधिकांश जारीकर्ताओं के लिए पर्याप्त हैं; प्रत्येक अतिरिक्त हुक प्रति ट्रांसफ़र मापने योग्य लागत और एक गवर्नेंस सतह है।
- मेटाडेटा:
uriछोटा रखें (CID या Digital Link); स्ट्रिंग ऑन-चेन संग्रहीत होती है। - ऑफ़-चेन रीड: सबमिट करने से पहले
transferCheckका उपयोग करें; रिवर्ट हुए ट्रांज़ैक्शन में भी गैस लगती है।
थ्रूपुट
टोकन स्वयं बाधा नहीं है; चेन है। एक ट्रांसफ़र एक ट्रांज़ैक्शन है; n आउटपुट वाला ट्रांसफ़ॉर्मेशन n मिंट वाला एक ट्रांज़ैक्शन है। वंशावली को इंडेक्स करने के लिए BatchTransformed इवेंट पढ़ने होते हैं, जो प्रत्येक ऑपरेशन पर पूर्ण मात्रा सूचियों के साथ एक बार इमिट होते हैं, इसलिए इंडेक्सर को प्रति-ट्रांसफ़र इवेंट से कुछ भी पुनर्निर्मित करने की आवश्यकता नहीं होती।
कॉन्ट्रैक्ट आकार
ARexToken 24,136 बाइट पर डिप्लॉय होता है (सीमा 24,576), optimizer.runs = 1 के साथ संकलित। अन्य कॉन्ट्रैक्ट छोटे हैं: ARexAttestations 2,708; हुक 1,358 (ExpiryHook) और 6,215 (DeliveryHook) के बीच, TraceabilityHook 4,076; एक्सटेंशन 3,716 और 4,588 के बीच। टोकन में स्वयं कार्यक्षमता जोड़ना डिज़ाइन से ही आकार-बाधित है — हुक और सहायक कॉन्ट्रैक्ट इसी के लिए हैं।