מבוא לאסימוני ERC-20
תוכן העניינים
מבוא
מהו תקן ERC-20?
תזכורת מהירה לגבי אסימוני Ethereum
כיצד נוצרים אסימוני ERC-20?
מהן היכולות של אסימוני ERC-20?
האם ניתן לכרות אסימוני ERC-20?
יתרונות וחסרונות של אסימוני ERC-20
ERC-20, ERC-1155, ERC-223, ERC-721 – מה ההבדל?
הערות לסיכום
מבוא לאסימוני ERC-20
בית
מאמרים
מבוא לאסימוני ERC-20

מבוא לאסימוני ERC-20

פורסם Jul 31, 2020העדכון בוצע Nov 11, 2022
12m

מבוא

רשת Ethereum נוסדה בשנת 2014 על ידי ויטליק בוטרין, ומיצבה את עצמה כפלטפורמת קוד פתוח להשקה של אפליקציות מבוזרות (DApps). רבות מהסיבות שהובילו את בוטרין ליצירה של בלוקצ'יין חדש נבעו מחוסר הגמישות המאפיין את פרוטוקול הביטקוין.

מאז השקת Ethereum, משכה אליה הרשת מפתחים, אנשי עסקים ויזמים ויצרה ענף הולך ומתפתח שבו משתמשים משיקים חוזים חכמים ואפליקציות מבוזרות.

במאמר זה נבחן את תקן ERC-20 המהווה מסגרת חשובה ליצירת אסימונים. מסגרת זו ספציפית ל-Ethereum, אך היא העניקה השראה גם לתקנים של רשתות בלוקצ'יין נוספות כגון BEP-2 של BNB Chain.


מהו תקן ERC-20?

בעולם של Ethereum (אתריום), ERC הוא ראשי תיבות של בקשת Ethereum להערות (Ethereum Request for Comments). אלה הם מסמכים טכניים שמתארים תקנים לתכנות ב-Ethereum. אין לבלבל אותם עם הצעות שיפור לאתריום (EIPs), אשר בדומה ל-BIP של ביטקוין, מציעות שיפורים בפרוטוקול עצמו. במקום זאת, ERC מגדירים מוסכמות שמקלות על האינטראקציה בין אפליקציות וחוזים.

תקן ERC-20 נכתב על ידי ויטליק בוטרין ופביאן ווגלסטלר בשנת 2015, והוא מציע תבנית פשוטה יחסית לאסימונים מבוססי Ethereum. מפתחים שמקפידים על מתווה זה אינם צריכים להמציא מחדש את הגלגל. במקום זאת הם יכולים להתבסס על יסודות שכבר היו בשימוש בענף.

לאחר שנוצרים אסימוני ERC-20 חדשים, הם משולבים באופן אוטומטי בשירותים ובתוכנה שתומכת בתקן ERC-20 (ארנקי תוכנה, ארנקי חומרה, בורסות וכדומה).

יש לציין שתקן ERC-20 התפתח והפך ל-EIP (ספציפית, EIP-20). דבר זה קרה מספר שנים לאחר ההצעה המקורית בעקבות השימוש הנרחב בתקן. עם זאת, השם "ERC-20" דבק בתקן גם שנים רבות לאחר מכן.


תזכורת מהירה לגבי אסימוני Ethereum

בשונה מ-ETH (המטבע הטבעי של Ethereum), אסימוני ERC-20 אינם מוחזקים בחשבונות. האסימונים קיימים רק בתוך חוזה, המהווה מעין בסיס נתונים עצמי. הוא מגדיר את כללי האסימון (כלומר שם, סמל, יכולת חלוקה) והוא מחזיק רשימה שממפה את יתרות המשתמשים לכתובות Ethereum שלהם.

כדי שמשתמשים יוכלו להעביר אסימונים, עליהם לשלוח עסקה לחוזה ולבקש ממנו להקצות חלק מיתרתם למקום אחר. לדוגמה, אם אליס תרצה לשלוח לבוב 5,000 אסימוני BinanceAcademyToken, היא תבצע קריאה לפונקציה שנמצאת בתוך החוזה החכם BinanceAcademyToken ותבקש ממנה לעשות זאת.


משתמשים מקיימים אינטראקציה עם חוזה חכם


הקריאה שהיא תבצע קיימת בתוך מה שנראה כעסקת Ethereum רגילה עם תשלום של 0 ETH לחוזה האסימון. הקריאה נכללת בשדה נוסף בעסקה, המציין מה אליס רוצה לעשות – במקרה שלנו, להעביר אסימונים לבוב.

היא אינה שולחת אתר (ETH), אך עדיין עליה לשלם את העמלה הנקובה כדי שהעסקה שלה תיכלל בבלוק. אם אין לה אתר, יהיה עליה לקנות אותו לפני שתוכל להעביר את האסימונים.

הנה דוגמה מציאותית למקרה זה ב-Etherscan: מישהו מבצע קריאה לחוזה BUSD. ניתן לראות שאסימונים הועברו, ושהעמלה שולמה, גם אם בשדה הערך מופיעה שליחה של 0 ETH.

כעת לאחר שהבנו את הרעיון, בואו ונצלול לעומק הפרטים כדי להבין טוב יותר מהו המבנה של חוזה ERC-20 טיפוסי. 


כיצד נוצרים אסימוני ERC-20?


המחשה של יצירת אסימון ERC-20


כדי שהחוזה שלכם יהיה תואם ל-ERC-20 עליו לכלול שש פונקציות חובה: totalSupply, balanceOf, transfer, transferFrom, approve, ו-allowance. תוכלו ליצור פונקציות נוספות אם תרצו, כגון name, symbol, ו-decimal. משמות הפונקציות ברור מה הן עושות. אם זה לא ברור, אל דאגה - נסביר זאת בהמשך. 

בהמשך תראו פונקציות כפי שהן מופיעות בשפת Solidity שנוצרה במיוחד עבור Ethereum.


totalSupply

function totalSupply() public view returns (uint256)

כאשר משתמש/ת קורא/ת לפונקציה זו, היא מחזירה את סך ההיצע של האסימונים המוחזקים בחוזה.


balanceOf 

function balanceOf(address _owner) public view returns (uint256 balance)

בשונה מפונקציית totalSupply, פונקציית balanceOf מקבלת פרמטר (כתובת). כאשר מתבצעת קריאה לפונקציה, היא מחזירה את יתרת האסימונים בכתובת זו. כזכור לכם, חשבונות ברשת Ethereum הם ציבוריים, ולכן ניתן לבצע שאילתה על היתרה של כל משתמש/ת כל עוד ידועה לכם הכתובת.


transfer

function transfer(address _to, uint256 _value) public returns (bool success)

transfer מעבירה אסימונים ממשתמש/ת לאחר/ת. לפונקציה זו תספקו את הכתובת אליה תרצו להעביר את האסימונים ואת הסכום הרצוי.

כאשר מתבצעת קריאה לפונקציה transfer, מופעל דבר שנקרא אירוע (event) (במקרה זה - אירוע העברה) אשר מורה לבלוקצ'יין לכלול סימוכין אליו.


transferFrom

function transferFrom(address _from, address _to, uint256 _value) public returns (bool success)

הפונקציה transferFrom היא חלופה שימושית לפונקציה transfer, והיא מאפשרת יכולות תכנות נרחבות יותר באפליקציות מבוזרות. בדומה ל-transfer, משתמשים בפונקציה זו כדי להעביר אסימונים, אך אסימונים אלו אינם חייבים להשתייך לאדם שקורא לחוזה. 

במילים אחרות, תוכלו להסמיך אדם אחר – או חוזה אחר – להעביר כספים בשמכם. מקרה שימוש אפשרי לדוגמה הוא תשלום עבור שירותים מבוססי מנוי, ששם לא תרצו לשלוח תשלום באופן ידני מדי יום, שבוע או חודש. במקום זאת, התוכנה פשוט תעשה זאת עבורכם.

פונקציה זו מפעילה את אותו האירוע שמופעל על ידי transfer.


approve

function approve(address _spender, uint256 _value) public returns (bool success)

approve היא פונקציה שימושית נוספת מבחינת תכנות. בעזרת פונקציה זו תוכלו להגביל את מספר האסימונים שחוזה חכם יכול למשוך מהיתרה שלכם. בלעדיה, קיים סיכון לכשל בחוזה (או לניצול שלו לרעה) ולגניבת כל הכספים שלכם. 

ניקח לדוגמה את רעיון המנוי שבו השתמשנו קודם. נניח שיש ברשותכם כמות גדולה של BinanceAcademyTokens, וברצונכם להגדיר תשלומים שבועיים חוזרים ל-DApp סטרימינג כלשהי. אתם עסוקים עכשיו בקריאת תוכן ב-Binance Academy, ולכן תרצו להימנע מהטרחה שכרוכה ביצירה ידנית של עסקאות מדי שבוע.

יש לכם יתרה גדולה של BinanceAcademyTokens, העולה בהרבה על דמי המנוי. כדי למנוע מה-DApp מלמשוך את כל האסימונים, תוכלו לקבוע הגבלה באמצעות הפונקציה approve. נניח שהמנוי שלכם עולה BinanceAcademyToken אחד מדי שבוע. אם תגבילו את הערך המאושר לעשרים אסימונים, המנוי שלכם ישולם באופן אוטומטי במשך חמישה חודשים.

במקרה הכי גרוע, אם ה-DApp תנסה למשוך את כל האסימונים שברשותכם או אם יתגלה באג, אתם מסכנים עשרים אסימונים בלבד. זה לא מצב אידיאלי, אך זה עדיף בהרבה על לאבד את כל האחזקות שלכם.

כאשר מתבצעת קריאה לפונקציה approve היא מפעילה את האירוע approval. בדומה לאירוע transfer, גם פונקציה זו כותבת נתונים לבלוקצ'יין.


allowance 

function allowance(address _owner, address _spender) public view returns (uint256 remaining)

ניתן להשתמש בפונקציה allowance בשילוב עם approve. לאחר שקיבלתם הרשאת חוזה לניהול האסימונים שלכם, תוכלו להשתמש בפונקציה זו כדי לבדוק כמה אסימונים עדיין זמינים למשיכה. לדוגמה, אם המנוי שלכם כבר ניצל 12 מתוך עשרים האסימונים שאושרו, קריאה לפונקציה allowance תחזיר סך של שמונה אסימונים.


פונקציות אופציונליות

הפונקציות שאותן תיארנו עד עתה הן פונקציות חובה. בניגוד אליהן, אין חובה לכלול את הפונקציות name, symbol, ו-decimal אך הן עשויות לשפר את המראה של חוזה ה-ERC-20 שלכם. הן מאפשרות, בהתאמה לרשימה לעיל, להוסיף שם משתמש קריא, לקבוע סמל (כגון ETH, BTC, BNB) ולציין לכמה מקומות אחרי הנקודה העשרונית ניתן לחלק את האסימונים. לדוגמה, במקרה של אסימונים הנמצאים בשימוש כמטבעות כדאי לקבוע חלוקה מעמיקה יותר מאשר עבור אסימונים שמייצגים בעלות על רכוש.


כדאי לעיין בדוגמה זו ב-GitHub כדי לראות כיצד האלמנטים הללו מופיעים בחוזה אמיתי.


מהן היכולות של אסימוני ERC-20?


המחשה של מקרי שימוש שונים באסימוני ERC-20


שילוב כל הפונקציות אשר תוארו כאן יוצר חוזה ERC-20. נוכל לבצע שאילתה על סך ההיצע, לבדוק יתרות, להעביר כספים ולהעניק הרשאות ל-DApps אחרות לצורך ניהול האסימונים בשמנו.

אחד הדברים המרכזיים שהופכים את אסימוני ERC-20 לאטרקטיביים הוא הגמישות שלהם. המוסכמות שהוגדרו אינן מגבילות את הפיתוח, ולכן ניתן להטמיע תכונות נוספות ולקבוע פרמטרים ספציפיים על פי הצורך האישי.


מטבעות יציבים

פעמים רבות מטבעות יציבים (אסימונים המוצמדים למטבעות פיאט) מיישמים את תקן האסימון ERC-20. העסקה לחוזה BUSD שאותה הזכרנו קודם לכן היא דוגמה אחת, ורוב המטבעות היציבים זמינים אף הם בתבנית זו.

במקרה של מטבע יציב טיפוסי המגובה על ידי פיאט, הגוף המנפק מחזיק עתודות אירו, דולרים וכדומה. ואז, עבור כל יחידה שקיימת בעתודה, הוא מנפק אסימון. המשמעות היא שאם ננעלו $10,000 בכספת, המנפק יוכל ליצור 10,000 אסימונים השווים כל אחד 1$.

מבחינה טכנית קל מאוד ליישם זאת ב-Ethereum. כל שעל המנפק לעשות הוא להפעיל חוזה עם 10,000 אסימונים. כעת הוא יוכל לחלק אותם למשתמשים יחד עם ההבטחה שניתן יהיה לפדות אותם מאוחר יותר בתמורה לחלק יחסי במטבע הפיאט. 

משתמשים יכולים לעשות מספר דברים עם האסימונים שלהם - הם יכולים לקנות סחורה ושירותים או להשתמש בהם באפליקציות מבוזרות (DApps). לחלופין, הם יכולים לבקש מהגוף המנפק להמיר אותם מיד. במקרה זה, המנפק ישרוף את האסימונים שהוחזרו (כלומר, יהפוך אותם לבלתי שמישים) וימשוך את הסכום הנכון של כסף פיאט מהעתודות שלו.

כפי שציינו קודם לכן, החוזה שמסדיר מערכת זו הוא פשוט יחסית. עם זאת, השקת מטבע יציב מצריכה עבודה רבה מבחינת גורמים חיצוניים כגון לוגיסטיקה, תאימות לרגולציה וכדומה.


אסימוני ניירות ערך

אסימוני ניירות ערך (Security tokens) דומים למטבעות יציבים. ברמת החוזה, שניהם עשויים להיות זהים משום שהם מתפקדים באותה הצורה. ההבדל הוא ברמת הגוף המנפק. אסימוני ניירות ערך מייצגים בטוחות כגון מניות, אג"ח או נכסים פיזיים. לרוב (אם כי לא תמיד) הם מעניקים למחזיק/ה בהם סוג של חזקה בעסק או בטובין.


אסימוני שימוש

אסימוני שירות הם ככל הנראה סוג האסימונים השכיח ביותר כיום. בשונה משני הנכסים הקודמים, הם אינם מגובים על ידי דבר מה כלשהו. אם אסימונים המגובים על ידי נכסים משולים למניות בחברת תעופה, הרי שאסימוני שירות דומים לתכניות הנוסע המתמיד: יש להם מטרה אך אין להם ערך חיצוני. אסימוני שירות עשויים לתת מענה למגוון מקרי שימוש, הם יכולים לשמש שכמטבע במשחק, כדלק המניע אפליקציות מבוזרות, כנקודות נאמנות ועוד הרבה יותר.


רוצים להתחיל להשתמש במטבעות קריפטו? קנו Ether ב-Binance!➠ 


האם ניתן לכרות אסימוני ERC-20?

ניתן לכרות אתר (ETH), אך לא אסימונים – תהליך היצירה של אסימונים חדשים נקרא הטבעה (minting). כאשר מופעל חוזה, המפתחים מחלקים את ההיצע בהתאם לתכניות ולמפת הדרכים שלהם.

לרוב הדבר נעשה בתהליך הקרוי הנפקת מטבע ראשונית (ICO), הנפקת בורסה ראשונית (IEO), או הצעת אסימון ניירות ערך (STO). ייתכן שנתקלתם בגרסאות שונות של קיצורים אלו, אך העיקרון דומה. משקיעים שולחים Eth לכתובת החוזה, ובתמורה הם מקבלים אסימונים חדשים. הכסף שנאסף משמש למימון המשך הפיתוח של הפרויקט. משתמשים אמורים להשתמש באסימונים שקיבלו (מיד או לאחר תאריך מסוים) ולמכור אותם הלאה ברווח לאחר שהפרויקט מתפתח.

חלוקת האסימונים אינה חייבת להיעשות באופן אוטומטי. באירועים רבים של מימון המונים המשתמשים יכולים לשלם במגוון מטבעות דיגיטליים (כגון BNB, BTC, ETH ו-USDT). היתרות הרלוונטיות אז מחולקות לכתובות אותן סיפקו המשתמשים.


יתרונות וחסרונות של אסימוני ERC-20

יתרונות אסימוני ERC-20

ברי חליפין

אסימוני ERC-20 הם ברי חליפין – ניתן להחליף כל יחידה ביחידה אחרת. אם יש ברשותכם BinanceAcademyToken, לא משנה איזה אסימון ספציפי נמצא אצלכם. תוכלו להחליף אותו באסימונים של משתמש/ת אחר/ת והפונקציונליות שלהם תישאר זהה, בדיוק כמו מזומן או זהב.

זה אידאלי במקרה שבו אתם מתכוונים להשתמש באסימון כבמטבע מסוג כלשהו.לא תרצו ליצור יחידות אינדיבידואליות עם תכונות ייחודיות, מה שימנע מהן מלהיות ברות חליפין. דבר זה עלול לגרום לכך שחלק מהאסימונים יהיו בעלי ערך גבוה - או נמוך - יותר מאחרים, מה שחוטא למטרה.


גמישים

כפי שראינו בחלק הקודם, ניתן להתאים אסימוני ERC-20 בצורה גמישה למדי ליישומים רבים ושונים. לדוגמה, ניתן להשתמש בהם כמטבע במשחק, בתכניות עם צבירה של נקודות נאמנות, כפריטי איסוף דיגיטליים ואף לייצוג של זכויות בפריטי אמנות ובנכסים.


פופולריים

הפופולריות של ERC-20 בענף מטבעות הקריפטו היא סיבה אטרקטיבית ביותר לשימוש בהם כמתווה. יש מגוון רחב של בורסות, ארנקים וחוזים חכמים שכבר תואמים לאסימונים שהושקו לאחרונה. ויותר מכך, קיימת תמיכה ותיעוד נרחב ביותר מצד מפתחים. 


חסרונות אסימוני ERC-20

סקלביליות (בעברית "סילומיות" או "מדרגיות")

וכמו ברשתות רבות של מטבעות קריפטו, גם Ethereum אינה חסינה מפני בעיות. בצורתה הנוכחית, הרשת אינה בעלת יכולת מינוף טובה - הניסיון לשלוח עסקה בזמני שיא תגרור עמלות גבוהות ועיכובים. אם השקתם אסימון ERC-20 כשהרשת עמוסה, הדבר עלול להשפיע על השימושיות.

זו אינה בעיה ייחודית ל-Ethereum. זו פשרה הכרחית של מערכות מאובטחות ומבוזרות. הקהילה מתכננת לתת מענה לבעיות הללו באמצעות המעבר ל-Ethereum 2.0, אשר צפוי לכלול שדרוגים כגון Ethereum Plasma ו-Ethereum Casper.

תוכלו לקרוא עוד אודות בעיות סילומיות במאמר סילומיות הבלוקצ'יין - צ'יינים צדדיים וערוצי תשלום.


הונאות

אמנם לא מדובר בבעיה בטכנולוגיה עצמה, אך הקלות שבה ניתן להשיק אסימון עשויה להיחשב כחיסרון. לא צריך להשקיע מאמץ רב כדי ליצור אסימון ERC-20 פשוט, והמשמעות היא שכל אחד יכול לעשות זאת – לטוב ולרע.

משום כך, עליכם לנקוט במשנה זהירות בעת ביצוע השקעות. קיימות מספר הונאות פירמידה ופונזי המסוות את עצמן כפרוייקטי בלוקצ'יין.  הקפידו לערוך מחקר משלכם לפני שתשקיעו והסיקו בעצמכם אם ההזדמנות נראית לגיטימית.

 

ERC-20, ERC-1155, ERC-223, ERC-721 – מה ההבדל?

ERC-20 היה תקן אסימון Ethereum הראשון (והפופולרי ביותר עד היום), אך לא היחיד. במהלך השנים צצו תקנים נוספים רבים אשר הציעו שיפורים ל-ERC-20 או התמקדו ביעדים שונים.

חלק מהתקנים הפחות שכיחים הם אלה שבשימוש עבור אסימונים שאינם רבי חליפין, או NFT. לעיתים, מקרה השימוש הספציפי דווקא זקוק לאסימונים ייחודיים עם תכונות שונות. אם תרצו ליצור אסימון עבור יצירת אמנות יחידה במינה, נכס במשחק וכדומה, ייתכן שתעדיפו להשתמש בחוזה מאחד מהסוגים הללו.

לדוגמה, תקן ERC-721 היה בשימוש באפליקציה המבוזרת CryptoKitties הפופולרית במיוחד. חוזה מעין זה מספק API למשתמשים שיכולים לבצע הטבעה של אסימוני NFT משלהם ולקודד מטה נתונים (תמונות, תיאורים וכדומה). 

ניתן לראות בתקן ERC-1155 כשיפור של ERC-721 ושל ERC-20 כאחד. מדובר בתקן שתומך באסימונים ברי חליפין ובאסימונים שאינם ברי חליפין באותו החוזה.

אפשרויות נוספות, כגון ERC-223 או ERC-621 מתמקדות בשיפור השימושיות. ERC-223 מיישם אמצעי אבטחה למניעה של העברות אסימונים בטעות. ERC-621 מוסיף פונקציות להגדלה ולהקטנה של היצע האסימונים.

לפרטים נוספים אודות NFT, בואו לעיין במדריך לפריטי איסוף קריפטוגרפיים ואסימונים שאינם ברי חליפין (NFTs).


הערות לסיכום

תקן ERC-20 שלט במשך שנים רבות על מרחב נכסי הקריפטו, ולא קשה להבין מדוע. כל אחד יכול ליצור בקלות יחסית חוזה פשוט המתאים למגוון רחב של מקרי שימוש (אסימוני שירות, מטבעות יציבים וכדומה). עם זאת, ERC-20 חסר חלק מהתכונות שאותן הביאו לזירה תקנים אחרים. עלינו להמתין ולראות אם סוגים אחרים של חוזים יחליפו אותו.