מדריך לבניית מטבע כדוגמת הביטקוין (מבוסס scrypt)

 

לפני שנתחיל יש להתקין במחשב שלכם סביבת ubuntu – אני אצרף בסוף מדריך קצר כיצד להתקין סביבת dual boot ביחד עם וינדוז או כל מערכת הפעלה אחרת.

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

אם אהבתם נא שתפו ותנו קרדיט לכותב (פבלו רותם חחח)..

אז ככה אני לוקח בהנחה שסביבת ההפעלה הינה ubuntu 16.04 – כדי לבצע אחד לאחד את הבניה נא להעתיק את הפקודות ולהדביק בטרמיל שלכם

הערה חשובה – לפני שנתחיל יש להרשם לשרת ענן כגון digital ocean – אפשר להרשם מכאן – https://m.do.co/c/7474750982e8 (קישור איפלייט – כך לפחות אקבל קצת על כל הרשמה).

אז נתחיל …

  1. נפתח חלון טרמינל בubuntu (אפשר לפתוח חלון כזה גם על ידי לחיצה על מקשי המקלדת Ctrl+Alt+T בו זמנית, או לחיצה ימנית בכל מקום בשולחן העבודה של ubuntu ולבחור באפשרות פתיחת טרמיל כאן.
  2. כעת נזין בתוך חלון הטרמינל את הפקודה :

    (על מנת להתקין לקוח גיט)
  3. לאחר תום ההתקנה נזין את הפקודה הבאה :
    sudo apt-get install build-essential libtool autotools-dev automake pkg-config libssl-dev libevent-dev bsdmainutils 

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

  4. (על מנת לעדכן הן את הנתיבים של הסיפריות שהרגע התקנו ולמנוע בעיות).
  5. sudo apt-get install libboost-system-dev libboost-filesystem-dev libboost-chrono-dev
  6. sudo apt-get install libboost-program-options-dev libboost-test-dev libboost-thread-dev
  7. sudo apt-get install libboost-all-dev
  8. sudo add-apt-repository ppa:bitcoin/bitcoin
  9. sudo apt-get install software-properties-common
  10. sudo apt-get install build-essential gcc make perl dkms
  11. sudo apt-get install libdb4.8-dev libdb4.8++-dev
  12. sudo apt-get install libminiupnpc-dev
  13. sudo apt-get install libzmq3-dev
  14. sudo apt-get install libqt5gui5 libqt5core5a libqt5dbus5
  15. sudo apt-get install qttools5-dev qttools5-dev-tools libprotobuf-dev protobuf-compiler
  16. sudo apt-get install libqt5gui5 libqt5core5a libqt5dbus5 qttools5-dev qttools5-dev-tools
    (סיפרית QT5 דרושה רק אם אנו מתכוונים לבצע בניה ממטבעות חדשים יחסית שנוצרו או עודכנו לאחר 2019)
  17. sudo apt-get install libqt4-dev libprotobuf-dev protobuf-compiler
  18. sudo apt-get install openssl1.0
  19. sudo apt-get install libssl1.0-dev
  20. כעת נסגור את חלון הטרמינל ונייצר תיקיה חדשה בדסקטופ בכל שם שהוא, נכנס אליה, ונבצע לחיצה ימנית ופתיחת נטרמינל באותה תיקיה, ונזין את הפקודה הבאה :
    git clone -b 0.8 https://github.com/litecoin-project/litecoin.git

    – הפקודה תבצע הורדה של branch 0.8 מגרסת הlitecoin
  21. כעת נעצור ונבצע מספר שינויים מהותיים בקוד המקור שהורדנו כעת, נסגור את חלון הטרמינל ונפתח את התיקה הבאה : src/qt/res – בתוך התיקיה יש שני תיקיות נוספות בהם יש תמונות לוגו של מטבע הלייטקוין שאותם אנו נחליף לתמונות מייצגות של המטבע שלנו (יש לייצר תמונות אלו באמצעות עורך תמונות כגון gimp או פוטושוף, וכמובן אם משתמשים בעורך תמונות רגיל יש לייצא גם לפורמט ico וכנל לכל השאר – פשוט להסתכל על הקיימים ולהחליף \ לערוך אותם.
  22. כעת נשאר לנו להחליף את כל הביטויים של המטבע לייטקוין אך באנגלית – לשם כך אנו נשתמש בתכונה קיימת בלינוקס שמאפשרת לבצע חיפוש והחלפה של ביטויים . לשם כך אנו נלחץ על התיקיה של לייטקוין שהורדנו הרגע ונלחץ לחיצה ימנית שוב ונבחר ב"פתח חלון טרמינל כאן" – ונזין את הפקודה הבאה :
    find . -type f -print0 | xargs -0 sed -i 's/litecoin/pablocoin/g'
    find . -type f -print0 | xargs -0 sed -i 's/Litecoin/Pabloocoin/g'
    find . -type f -print0 | xargs -0 sed -i 's/LiteCoin/PabloCoin/g'
    find . -type f -print0 | xargs -0 sed -i 's/LITECOIN/PABLOCOIN/g'
    find . -type f -print0 | xargs -0 sed -i 's/LTC/PBL/g'

    (כמובן לשים לב – להחליף איפה שרשום פבלו (pablocoin) באנגלית עם שם המטבע שבחרתם לעצמכם – ולשמור על אותיות ראשיות איכן שישנם)
  23. כעת עלינו לחזור על הפעולה ולהחליף את כל הפורטים ברירת מחדל שמצויים ברחבי הקוד מקור – חשוב (!!), יש לבחור פורטים שבדרך כלל יהו פתוחים ולא בשימוש רחב, ניתן לבדוק מכאן מהם הפורטים הפנויים ברוב המערכות – https://en.wikipedia.org/wiki/List_of_TCP_and_UDP_port_numbers
    הפורטים אותם נצטרך להחליף הינם : 9333, 19333 (main net*) ו 9332, 19332 (test net*}

את החיפוש והחלפה נבצע באמצעות הפקודות הבאות כפי שעשינו עם השמות :

find . -type f -print0 | xargs -0 sed -i 's/9333/7733/g'
find . -type f -print0 | xargs -0 sed -i 's/19333/17733/g'
find . -type f -print0 | xargs -0 sed -i 's/9332/7732/g'
find . -type f -print0 | xargs -0 sed -i 's/9332/17732/g'
  1. כעת נפתח את תיקית לייטקוין ונפתח שוב טרמינל ונזין בתוכו את הפקודות הבאות :
    cd src
    vim rpcrawtrasactions.cpp

ניתן להשתמש גם בפקודת NANO למי שיותר נוח לו :

  1. cd src
    nano rpcrawtrasactions.cpp

2. נחפש שורה מספר 242 (יש לשים לב, לעיתים vim ופקודות דומות מקשות על איתור שורות מאחר וזה פותח את הקובץ לעריכה ישירות בקונסול ולכן במקרים רבים יהיה עדיף לאתר את הקובץ ידנית ולפתוח אותו בעורך טקסט כלשהו כגון notepad++)
נאתר את השורה הבאה
const CScriptID& hash = boost::get<const CScriptID&>(address);

ונחליף אותה בערך הבא :

const CScriptID& hash = boost::get<CScriptID>(address);

3. נשארו לנו מעט שלבים – כמעט סיימנו..כעת עלינו לשנות את המזהה רשת – בביטקוין המזהה הינו 1 וכל כתובות הארנקים מתחילים עם 1, עם לייטקוין כל כתובות הארנקים מתחילים עם L, ועם אתריום כולם מתחילים עם 0X, כדי לשנות זאת, קודם כל תסתכלו כאן – כל המזהי רשתות לפי מזה אלפה נורמי ותבחרו לכם באיזה תוים תרצו שהבלוקצאין שלכם יתחיל. יש לבחור פעמיים שני מזהים – האחד עבור הרשת הראשית (mainnet) והשני עבור רשת הניסיון (testnet)
אנחנו נקליד כעת את הפקודה הבאה :

  1. ונחפש שורה 274 – נראה כך :
    Pablo Guides - מדריך בניית מטבע עם בלוקצאין משלו , חלק א

כפי שאתם יכולים לראות כרגע הוא מוגדר לשני ערכים – 48, ו111 – אשר אם נסתכל בטבלה שלנו חופפים ל L = 48 , וm או n =111.

מאחר ואנחנו בונים מטבע שיקרא pablocoin והטסטנט שלו ברצוני שיקרא testpablocoin – אז נשנה את
PUBKEY_ADDRESS = 48, // Litecoin addresses start with L
ל – PUBKEY_ADDRESS = 55, // Pablocoin addresses start with P (אפשר כמובן להשתמש בכל אחד מהערכים האחרים גם כן שתואמים ל
P

וכעת נחזור על הפעולה עם מזהה לטסטנט – ונחליף את המזהה הקיים –
PUBKEY_ADDRESS_TEST = 111,
ל
PUBKEY_ADDRESS_TEST = 65,
אשר בטבלה שלנו מציג כי זהו המזהה עבור T (אחד מהם לפחות).
4. כעת עלינו לשנות את מחרוזות הalert אשר מאפשרים דחיפת עדכונים ללקוחות של ארנק בגרסה מסויימת.

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

ונזין בו את כל הפקודות הנל בבת אחת :

  1. openssl ecparam -genkey -name secp256k1 -out alertkey.pem
  2. openssl ec -in alertkey.pem -text > alertkey.hex
  3. openssl ecparam -genkey -name secp256k1 -out testnetalert.pem
  4. openssl ec -in testnetalert.pem -text > testnetalert.hex
  5. openssl ecparam -genkey -name secp256k1 -out genesiscoinbase.pem
  6. openssl ec -in testnetalert.pem -text > genesiscoinbase.hex

לאחר הרצה מוצלחת אנחנו נרראה שהתווספו מספר קבצים , alertkey.hex, testnetalert.hex וgenesiscoinbase.hex רק חלק מהם הם קבצים שחשובים לנו לשלב הבא.

אנחנו יכולים לפתוח אותם בעורך טקסט על ידי הזנה של nano או cat ושם הקובץ המלא – למשל כעת נבצע הצגה של המפתח alertkey.hex על ידי הזנה של הפקודה :cat testnetalert.hex בטרמינל.

אנחנו נראה משהו כזה :

Pablo Guides - מדריך בניית מטבע עם בלוקצאין משלו , חלק א

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

לאחר שהעתקנו את כל השורות החל מהשורה המסומנת ועד השורה שממש לפני ה asn1 – אנחנו נשמור את קובץ הטקסט בשם .txt.testnetpublickey

כעת נחזור על התהליך עם המפתח הציבורי הראשי ונזין שוב לתוך הטרמינל cat alertkey.hex ושוב נעתיק את כל מה תחת ה pub: לתוך קובץ טקסט שניצור מחוץ לתיקית הלייטקוין וניתן לו את השם publicalertkey.txt

לאחר שביצענו שמירה של נפתח כעת כל קובץ ובצע חיפוש החלפה של התו : עם שדה ריק – ונקבל מחרוזת אחידה ללא סימני : .

עלינו לחזור על הפעולה פעמיים לכל אחד מהקבצים ששמרנו.

כעת נעבור לתיקיית הלייטקוין ונמצא את הקובץ alert.cpp שנמצא בתוך תיקית הsrc/

בשורות 22 ו23 אתם תראו משהו דומה לזה –

Pablo Guides - מדריך בניית מטבע עם בלוקצאין משלו , חלק א

 

ותצטרכו להחליף את כל המפתחות עם המפתוחת שהרגע שמרתם – שימו לב!!! לשים את המפתח בשם

עד כאן המדריך הזה, לשאלות ופניות אפשר לפנות אליי ישירות בפייסבוק https://www.facebook.com/pablo.1212121212/