הסבר על OP_RETURN בביטקוין: נתוני nulldata ופלטים שאי אפשר להוציא
כך OP_RETURN רושם מידע ציבורי, מדוע אי אפשר להוציא את הפלט, במה מדיניות ההעברה של Bitcoin Core 31.1 שונה מהקונצנזוס, ואיך היא שונה מאינסקריפציות witness.
במדריך הזהOP_RETURN מציב נתונים בסקריפט הנעילה
תקציר קצר
OP_RETURN מאפשר לצרף נתונים ציבוריים לסקריפט הפלט של עסקת ביטקוין. Bitcoin Core מתייחס לפלטים שהסקריפט שלהם מתחיל ב־OP_RETURN כאל פלטים שאי אפשר להוציא באופן שניתן להוכחה, ומשמיט אותם מקבוצת UTXO. מגבלות ההעברה הנוכחיות הן מדיניות מקומית של צמתים, לא תקרת payload של הקונצנזוס בכל הרשת.
OP_RETURN מציב נתונים בסקריפט הנעילה
פלט של עסקת ביטקוין כולל סכום וסקריפט נעילה בשם scriptPubKey. פלט OP_RETURN, שמסווג גם כ־nulldata, מתחיל בפקודת OP_RETURN ויכול לדחוף אחריה רצף בתים. כשהעסקה נכללת בבלוק, הבתים נרשמים בפומבי כחלק מהפלט. התבנית אינה יוצרת שכבת נתונים נפרדת, יתרת אסימון או הודעה פרטית.
מדוע אי אפשר להוציא את הפלט שוב
OP_RETURN היא פקודה שנכשלת אם הביצוע מגיע אליה. לכן ניסיון להוציא פלט שהסקריפט שלו מתחיל בה אינו יכול לקיים את הסקריפט. Bitcoin Core מסווג אותו כבלתי ניתן להוצאה ויכול להשמיט אותו מיד מקבוצת UTXO, בלי לשמור מטבע שלעולם לא יהיה אפשר להשתמש בו. ראו את המימוש ב־script.h של Bitcoin Core 31.1. Bitcoin Core 31.1 script implementation.
הסקריפט גדול מה־payload
מגבלת data carrier אינה בהכרח סופרת רק את בתים של היישום. סקריפט הפלט הגולמי כולל את פקודת OP_RETURN, את הוראת הדחיפה ואת קידוד האורך שלה, וגם את ה־payload. payload של 80 בתים עשוי ליצור סקריפט של 83 בתים: בית אחד לפקודה, שניים לכותרת OP_PUSHDATA1 ועוד 80 לבתים של הנתונים. לכן מדריכים ישנים שמציינים „80 בתים” מתכוונים לעיתים קרובות ל־payload, ואילו הגדרות חדשות עשויות למדוד את הסקריפט כולו.
מדיניות ברירת המחדל של data carrier ב־Bitcoin Core 31.1
Bitcoin Core 31.1 מפעיל את -datacarrier כברירת מחדל. ברירת המחדל של -datacarriersize היא 100,000 בתים, והיא מחברת את הגדלים של scriptPubKey הגולמיים בכל פלטי הנתונים באותה עסקה. כמה פלטי NULL_DATA חולקים את אותה מכסה, כולל הפקודה וקידוד הדחיפה. Core 30.0 החליף את מכסת הסקריפט הישנה של 83 בתים במכסה מצטברת של 100,000 ואפשר פלטים מרובים; Core 31.1 משמר זאת. ראו את אפשרויות Core 31.1, מימוש המדיניות ואת הערות הגרסה 30.0.

מדיניות העברה וקונצנזוס עונים על שאלות שונות
כל צומת יכול להשבית העברת data carrier או להנמיך את המגבלה המקומית; צמתים וגרסאות אחרות עשויים להגדיר ערכים אחרים. אם צומת מסרב לקבל עסקה ל־mempool, ייתכן שהוא רק מסרב להעביר אותה לפי המדיניות המקומית שלו, ולא שהקונצנזוס אוסר עליה. Bitcoin Core בודק את מכסת הנתונים בבדיקת standardness ומאמת בנפרד את כללי הקונצנזוס בזמן אימות בלוק. Core consensus transaction checks. See Bitcoin Core 31.1 mempool standardness implementation.
ערך הפלט אובד; העמלה מחושבת בנפרד
אפשר להקצות ערך לפלט OP_RETURN, אך אי אפשר להשיב אותו והוא נשאר בלתי ניתן להוצאה. ארנקים נוהגים להקצות לו אפס. אם הוקצו לו 1,000 sat, הם לא הופכים אוטומטית לעמלת הכורה. העמלה עדיין שווה לסכום הקלטים פחות סכום כל הפלטים. בתי הסקריפט צורכים משקל עסקה ועשויים להגדיל את העמלה באותו שיעור sat/vB. ראו את מדריך עמלות העסקאות בביטקוין.
פלטי נתונים מרובים אינם מכפילים את המכסה
Bitcoin Core 31.1 מאפשר כמה פלטי NULL_DATA תקניים, אך מחבר את גדלי הסקריפטים שלהם בתוך אותה מכסה לכל עסקה. פיצול payload בין פלטים אינו מגדיל את הקיבולת, וכל פלט נוסף מוסיף נתונים ומשקל בלוק. העברה תלויה גם במשקל העסקה, בעמלות ובכללי standardness אחרים. העובדה שארנק או סייר אחד קיבלו את העסקה אינה מבטיחה שהיא תופץ בכל הרשת.
OP_RETURN שונה מאינסקריפציית Taproot ב־witness
נתוני OP_RETURN נמצאים ב־scriptPubKey של פלט בעת יצירת העסקה. נתוני SegWit witness עוברים סריאליזציה נפרדת לכל קלט; BIP 141 מתאר אותם כנתוני מחסנית לכל קלט. הוצאה בנתיב סקריפט Taproot עשויה לחשוף סקריפט ובלוק בקרה ב־witness של הקלט. תוכנת Ordinals עשויה לזהות שם מבנה מסוים כאינסקריפציה לפי מוסכמת יישום, אך זהו מנגנון שונה מפלט nulldata. ראו BIP 141, BIP 341 ואת מדריך [Ordinals ואינסקריפציות בביטקוין](/learn/bitcoin-ordinals-inscriptions-satoshi-numbering-witness-data-explained).
לפני השימוש בדקו מדיניות, ערך ופרטיות
בדקו באיזו גרסת Bitcoin Core ובהגדרות מקומיות אתם מסתמכים. חשבו בנפרד את גודל סקריפט הפלט הגולמי, את משקל העסקה הכולל, את הערך שהוקצה לפלט שאי אפשר להוציא ואת עמלת הכורה. הקונצנזוס אינו מעניק משמעות לבתי payload שרירותיים; בדקו גם שהפרוטוקול או הנמען מזהים את הפורמט. נתונים שנכתבו בשרשרת ציבוריים. להבנת פלטים ועודף, ראו מדריך UTXO ושליטה במטבעות ביטקוין.
שאלות נפוצות
Q1האם קונצנזוס ביטקוין מגביל OP_RETURN ל־80 בתי נתונים?
לא. 80 בתים מתארים payload בדוגמה ישנה של מדיניות standardness, לא מגבלת קונצנזוס אוניברסלית. Bitcoin Core 31.1 משתמש כברירת מחדל במכסה מצטברת של 100,000 בתים לסקריפטי נתונים גולמיים, וכל צומת יכול לשנות את המדיניות.
Q2האם OP_RETURN גדול יותר מגדיל את עמלת העסקה?
ייתכן. בתי הסקריפט מוסיפים משקל לעסקה ולכן עשויים להגדיל את העמלה באותו שיעור sat/vB. sat שהוקצו לפלט שאי אפשר להוציא אובדים בנפרד ואינם עמלת הכורה.
Q3האם OP_RETURN הוא אותו דבר כמו אינסקריפציית Ordinals?
לא. OP_RETURN נמצא בסקריפט פלט והופך אותו לבלתי ניתן להוצאה. אינסקריפציית Taproot טיפוסית מציבה תוכן בנתוני נתיב הסקריפט ב־witness של הקלט, ותוכנת Ordinals מפרשת אותו לפי מוסכמותיה.
מקורות וקריאה נוספת
דיווח על בעיה
נכין אימייל עם קישור למאמר הזה. Mark יקבל את הדיווח רק לאחר שתשלחו אותו
בדיקה מהירה
סיימת לקרוא? בדוק את עצמך ב־3 שאלות
שאלה 01
מה מודד ברירת המחדל -datacarriersize של Bitcoin Core 31.1?
בחר תשובה כדי לראות את ההסבר
מילון מונחי אופציות
A call or put whose strike is near the underlying price; it has little intrinsic value and often substantial sensitivity to time and volatility.
קראו את המדריך המעמיקCall optionA contract that gives its holder the right, but not the obligation, to buy the underlying at the strike before or at expiration under the contract terms.
קראו את המדריך המעמיקPut optionA contract that gives its holder the right, but not the obligation, to sell the underlying at the strike before or at expiration under the contract terms.
קראו את המדריך המעמיק