پایتون فارسی(PyCore)
228 subscribers
205 photos
105 videos
57 files
243 links
🐉پایتون فارسی
🚀آموزش و اخبار دنیای تکنولوژی
Download Telegram
خب سلام دوباره در ادامه  مجموعه پست های دیتابیس  تو این یکی قراره با معماری Vitess  اشنا بشیم و متوجه بشیم یوتوب چگونه 2.49 میلیارد کاربر خودش رو با MySQL هندل میکنه.
توجه این پست بر اساس تحقیق هستش  و ممکنه با پیاده‌سازی واقعی فرق داشته باشه.



روزی روزگاری، سه نفر که تو PayPal کار می‌کردن، تصمیم گرفتن یه سایت دوستیابی درست کنن. اما مدل کسب‌وکارشون شکست خورد. برای همین ایده‌شون رو عوض کردن و یه سایت اشتراک‌گذاری ویدئو درست کردن و اسمش رو گذاشتن یوتیوب.

اونا عناوین ویدئوها، توضیحات و اطلاعات کاربران رو تو MySQL ذخیره کردن. وقتی کاربرهای بیشتری به سایت پیوستن، اونا MySQL رو به حالت رهبر-دنبال‌کننده (leader-follower replication topology) تنظیم کردن تا بتونن بهتر مقیاس‌پذیری کنن. اما تکرار در MySQL تک‌نخی (single-threaded) است. بنابراین دنبال‌کننده‌ها نمی‌تونستن در عملیات نوشتن شدید به رهبر برسند و داده‌های جدید رو به‌روز کنن. با این حال، نرخ رشدشون خیلی زیاد بود و به یک میلیارد کاربر رسیدن و به دومین سایت پربازدید در جهان تبدیل شدن.

بنابراین با اضافه کردن یه حافظه نهان (cache) مقیاس‌پذیری کردن و همه رویدادها رو از لاگ باینری MySQL (binary log) بارگذاری کردن. این یعنی تکرار به حافظه وابسته شد و سرعت بیشتری پیدا کرد. اگرچه این کار به طور موقت مشکل مقیاس‌پذیری اونا رو حل کرد، مشکلات جدیدی به وجود اومد.

در اینجا به برخی از اونا اشاره می‌کنم:

1. پارتیشن‌بندی (Sharding):
  اولین کاری که باید کرد این که MySQL باید پارتیشن‌بندی بشه تا نیازهای ذخیره‌سازی رو مدیریت کنه. اما بعد از پارتیشن‌بندی، معاملات (transactions) و پیوستن جداول (joins) سخت میشه. بنابراین منطق برنامه (application logic) باید این رو مدیریت کنه. این یعنی منطق برنامه باید بفهمه که کدوم پارتیشن‌ها رو باید پرس‌وجو کنه و این باعث افزایش احتمال زمان خرابی (downtime) میشه.

2. عملکرد (Performance):
   و(leader-follower replication topology) باعث میشه که داده‌های قدیمی از دنبال‌کننده‌ها خونده بشه. بنابراین منطق برنامه باید خوندن داده‌ها رو به رهبر هدایت کنه اگر داده‌های جدید لازم باشه. و این نیاز به پیاده‌سازی منطق اضافی داره.

3. حفاظت (Protection):

   ریسک اینکه برخی پرس‌وجوها خیلی طول بکشه تا داده‌ها رو برگردونن وجود داره. همچنین تعداد زیادی از اتصالات MySQL به طور همزمان می‌تونه مشکل‌ساز بشه و ممکنه دیتابیس رو از کار بندازه.

اونا  می‌خواستن یه لایه انتزاعی روی MySQL برای سادگی و مقیاس‌پذیری ایجاد کنند. بنابراین Vitess رو ساختن. در اینجا نحوه ارائه مقیاس‌پذیری بالا توسط Vitess رو توضیح می‌دم:

1. تعامل با پایگاه داده:(Interacting with Database)
   اونا یه سرور جانبی (sidecar server) جلو هر نمونه MySQL نصب کردن و اسمش رو گذاشتند VTTablet.
  
   این سرور جانبی به اونا اجازه می‌داد:
   - کنترل سرور MySQL و مدیریت پشتیبان‌گیری از پایگاه داده
   - بازنویسی کوئری‌های سنگین با اضافه کردن محدودیت (limit clause)
   - کش کردن داده‌های پر دسترس برای جلوگیری از مشکل Thundering Herd

2. مسیریابی کوئری‌ها(Routing SQL Queries):

   یه سرور پراکسی بدون حالت (stateless proxy server) برای مسیریابی کوئری‌ها تنظیم کردند و اسمش رو گذاشتند VTGate.
  
   این سرور پراکسی بهشون اجازه می‌داد:
   - پیدا کردن VTTablet صحیح برای مسیریابی کوئری بر اساس اسکیما و طرح پارتیشن‌بندی
   - پایین نگه داشتن تعداد اتصالات MySQL از طریق تجمیع اتصالات (connection pooling)
   - صحبت با لایه کاربردی به پروتکل MySQL
   - عمل کردن مانند یه سرور MySQL یکپارچه برای سادگی
   - محدود کردن تعداد معاملات در یک زمان برای عملکرد بهتر

  همچنین  برای مقیاس‌پذیری بیشتر، سرورهای VTGate متعددی راه‌اندازی کردند.

3. اطلاعات حالت:
تصویر چهارم در کامنت ها
یه پایگاه داده توزیع‌شده کلید-مقدار (distributed key-value database) راه‌اندازی کردند تا اطلاعات مربوط به اسکیما، طرح‌های پارتیشن‌بندی و نقش‌ها رو ذخیره کنه.

   این پایگاه داده همچنین روابط بین پایگاه‌های داده مثل رهبر و دنبال‌کننده‌ها رو مدیریت می‌کنه.
  
  در ادمه از Zookeeper برای پیاده‌سازی این پایگاه داده کلید-مقدار استفاده کرندند.
  
   علاوه بر این،  این داده‌ها رو در VTGate برای عملکرد بهتر کش میکردند.
  برای به‌روزرسانی پایگاه داده کلید-مقدار،  یه سرور HTTP راه‌اندازی کردند و اسمش رو گذاشتند VTctld. این سرور فهرست کامل سرورها و روابطشون رو می‌گیره و سپس پایگاه داده کلید-مقدار رو به‌روزرسانی می‌کنه.


#database
#postgresql
پایتون فارسی(PyCore)
خب سلام دوباره در ادامه  مجموعه پست های دیتابیس  تو این یکی قراره با معماری Vitess  اشنا بشیم و متوجه بشیم یوتوب چگونه 2.49 میلیارد کاربر خودش رو با MySQL هندل میکنه. توجه این پست بر اساس تحقیق هستش  و ممکنه با پیاده‌سازی واقعی فرق داشته باشه. روزی روزگاری،…
خلاصه:

اول-VTGate: سرور پراکسی برای مسیریابی کوئری‌ها
دوم-Key-Value Database: سرور پیکربندی برای مدیریت توپولوژی
سوم-VTTablet: سرور جانبی که روی هر MySQL اجرا می‌شه

اونا Vitess رو با زبان Go نوشتند و اون رو اوپن سورس کردند. همچنین از MariaDB هم پشتیبانی می‌کنه. یوتیوب تونست با ترکیب رVitess و MySQL به 2.49 میلیارد کاربر رو  مدیریت  کنه. این مطالعه موردی نشون می‌ده که MySQL می‌تونه به راحتی ترافیک در مقیاس اینترنت و کاربران زیاد  رو مدیریت کنه.
This media is not supported in your browser
VIEW IN TELEGRAM
⭐️ پاول دوروف از #تلگرام_استارز (Stars) به صورت رسمی رونمایی کرد. حالا این استارز به چه درد می‌خوره؟ بیا تا بگم

فکر کن علی یه فروشگاه کفش فروشی داره، میاد و یه مینی اپ تلگرامی طراحی می‌کنه، برای فروش کفش. عکس محصولاتش رو هم خیلی معمولی توی کانالش می‌ذاره.
مینی اپ رو بخوام مثال بزنم، مثل نات کوین، همستر و... که بدون نیاز به دانلود، چیزی شبیه به اپلیکیشن رو توی تلگرام براتون باز می‌کنن.

نحوه پرداخت توی ویدیوی ببینید، چقدر ساده و فقط با یک کلیک.

فروش می‌تونه هرچیزی باشه. چه محصولات فیزیکی، چه محصولات دیجیتال. برای مثال می‌تونین با استارز، از من تبلیغ خریداری کنین.

⭐️ چه کاری باید انجام بدیم؟
بخش مهم کار اینجاست. با اومدن استارز، تلگرام به مقصد مهم و کلیدی برای کسب و کارها تبدیل میشه. هرکسی می‌تونه فروشگاه آنلاین خودش رو توی تلگرام داشته باشه، با ظاهری شیک و پرداختی خیلی راحت.
‏اگر فروشگاه آنلاین دارین، زود به فکر پیدا کردن برنامه نویس برای نوشتن مینی اپ فروشگاه‌تون باشین.

⭐️ از کجا استارز بخریم؟
درحال حاضر از طریق گوگل‌پلی، اپ استور و ربات @PremiumBot
برای کاربران ایرانی در دسترس نیست فعلا
Forwarded from CodeCrafters (mahyar)
خب سلام دوستان. تصمیم گرفتم تو یکسری پست سریالی(دوره) در مورد فناوری های نوین و جدید و آینده دار که در ایران متاسفانه کمتر بهشون پرداخته شده بپردازیم و چیزای جدید رو یاد بگیریم.

فناوری‌ های نوین مثل بلاکچین، وب 3 و کامپیوترهای کوانتومی که در حال تغییر جهان اینده هستند. در این  دوره قصد داریم با این سه فناوری  آشنا بشیم و بهمون  کمک کنه تا درک عمیقی از آن‌ها پیدا کنیم.

بخش اول: بلاکچین - انقلاب در دنیای دیجیتال
ما این دوره را با بلاکچین آغاز می‌کنیم، فناوری‌ای که با تمرکززدایی، امنیت و شفافیت خود، تحولات عظیمی در ارزهای دیجیتال، قراردادهای هوشمند و مدیریت زنجیره تأمین ایجاد کرده است.

چرا بلاکچین؟
بلاکچین پایه و اساس ارزهای دیجیتال مانند بیت‌کوین و اتریوم است و کاربردهای فراتر از ارزهای دیجیتال دارد. در این بخش، شما با اصول پایه‌ای بلاکچین، نحوه کارکرد و کاربردهای متنوع آن آشنا خواهید شد.

ساختار دوره
این دوره به 4 فصل کلیدی تقسیم شده است:

فصل 1: بلاکچین چیست و چگونه کار می‌کند
1-بلاکچین چیست
2-بلاکچین چگونه کار می‌کند
3-کاربردهای بلاکچین
4-اولین بلاکچین و معروف‌ترین‌ها
فصل 2: مفاهیم پایه ارز دیجیتال
1-بلاکچین‌های معروف در حوزه ارزهای دیجیتال
2-استخراج (Mining)
3-کیف پول‌های دیجیتال و امنیت
فصل 3: کاربردهای پیشرفته بلاکچی
1-قراردادهای هوشمند
2-دپس (DApps) و وب 3.0
3-بلاکچین در صنایع مختلف
4-آینده بلاکچی
فصل 4: ابزارها و تکنولوژی‌های مرتبط با بلاکچین
1-زبان‌های برنامه‌نویسی بلاکچین
2-پلتفرم‌های توسعه و ابزارهای کاربردی
3-تحلیل داده‌های بلاکچین
4-آموزش و منابع یادگ
ادامه مسیر: وب 3 و کامپیوترهای کوانتومی
پس از تسلط بر بلاکچین، به سراغ وب 3 و سپس کامپیوترهای کوانتومی خواهیم رفت تا شما را برای آینده‌ای دیجیتالی و هوشمند آماده کنیم.



همچنین میتونید مطالب مرتبط با بلاکچین  و وب3 رو  و مطالب مرتبط  با کامپیوتر های کوانتومی رو با هشتگ های زیر ازین پس در چنل پیدا کنید.
#blockchain
#web3
#quantum_computing
👍5👌1
Forwarded from CodeCrafters (mahyar)
فصل اول
1-بلاکچین چیست؟

همه بلاکچین با بیت کوین میشناسند. البته که خیلی هم اتفاق عجیبی نیست بخاطر این که بیت کوین در بستر بلاکچین هست که معنا پیدا کرده.
اما جالبکه بدونید تاریخچه بلاکچین به مدت ها قبل مربوط میشه.بلاکچین در واقع یک مدل دیتابیس هست  اما با یکسری تفاوت کلیدی.
خب این تفاوت ها چی هستن؟

1-تغییر ناپذیری و مدیریت داده ها
به محض این که اطلاعاتی در بلاکچین ذخیره بشه به هیچ  عنوان قابلیت
پاک شدن یا تغییر رو نداره
  ما در دیتابیس عملیات CRUD رو داریم (create, read , update , delete)
اما  بلاکچین از عملیات تغییر  پذیری پیشتیبانی نمیکند. به عبارت دیگر در بلاکچین  فقط فقط عملیات C&R(Read, Create) داریم.
به این معنی که داده های یک بار نوشته میشن و دیگه نمیتونن پاک بشن یا جایگزین بشن.

  میشه گفت بلاکچین یک بانک اطلاعاتی است که به اشتراک گذاشته شده و اطلاعتش به کمک رمز نگاری خیلی امن شده و عملا انقلابی در شیوه ذخیره کردن اطلاعات به وجود اورده.

به طور کلی یکسری ردیف از اطلاعات در فضایی با حجم محدود(مثلا 1 مگابایت) ذخیره میشه. فرض کنیم اسم این فضا رو بلوک انتخاب کنیم حالا هرکدوم از این بلوک ها یک کد منحصر به فردی دارن که به بلوک قبلی مرتبط میشه به این صورت که بلوک هایی که دارای اطالاعات هستند با کمک یک زنجیره فرضی بهم وصل میشن.
در نتیجه هر تغییری در اطلاعات یک بلوک نیازمند تغییر همه بلوک های بعد اون  است که این امر رو عملا غیر ممکن میکنه.


2-معماری

از نظر معماری، بلاکچین و دیتابیس متفاوت هستند.
پایگاه داده بر اساس معماری کلاینت-سرور Client-server ساخته شده یکی معماری  که هم  در  محیط های کوچک و هم در مقیاس های بزرگ موفقیت های زیادی داشته.

بلاکچین ها قابلیت این رو دارند که غیر متمرکز بشن یعنی هیچ نهادی واحدی بلاکچین رو کنترل نمیکنه . این بانک اطلاعاتی در شبکه های از کامپیوتر ها توضیع شده و تمامشون یک نسخه از این دیتابیس رو داره بخاطر همین میشه گفت هم شفافیت و هم صحت اطلاعات دائم در داخل شبکه تایید میشه . عملا این اتفاق  الزام یک نهاد واسطه  مثل سازمان ها و یا دولت ها که مجبور باشن نظارت داشته باشن رو از بین میبره. عملا بلاکچین میتونه روی یک شبکه با اجماع اکثریت به صورت خودمختار و قابل اعتماد اطلاعات رو نگه داری و  پردازش کنه.
سایر تفاوت‌ها
3-هزینه و پیاده‌سازی
4-سرعت و عملکرد


#blockchain

@code_crafters
👍2
Forwarded from CodeCrafters (Amirali)
فصل اول
2- بلاکچین چگونه کار می‌کند؟

بلاکچین را مجموعه‌ای از بلاک‌ها تصور کنید که به صورت زنجیره‌وار به یکدیگر متصل‌اند.

1- ساختار هر بلاک
هر بلاک در زنجیره شامل 3 بخش اصلی است:
1.1- داده (Data): این بخش شامل اطلاعاتی است که بلاک ذخیره می‌کند. برای نمونه، در بلاکچین بیتکوین داده‌ها شامل جزئیات هر تراکنش است مانند فرستنده، گیرنده و مقدار بیتکوین انتقال داده شده.

1.2- هش بلاک (Block Hash): هر بلاک دارای یک کد منحصر به فرد به نام هش است که با استفاده از الگوریتم‌های رمزنگاری تولید می‌شود. هش یک بلاک مانند اثر انگشت آن بلاک است و کوچکترین تغییری در جزئیات داده‌های بلاک، هش آن را به کلی تغییر می‌دهد.
الگوریتم‌های هشینگ توابع ریاضی یک‌طرفه‌ای هستند که ورودی آن هر چیزی می‌تواند باشد اما خروجی آن یک مقدار منحصر به فرد با اندازه ثابت است. یک‌طرفه بودن این توابع به این معناست که با داشتن خروجی نمی‌توان به داده ورودی آن دست پیدا کرد.

1.3- هش بلاک قبلی (Previous Block Hash): هر بلاک حاوی هش بلاک قبلی است که به آن متصل است. این ویژگی باعث ایجاد زنجیره‌ای از بلاک‌ها می‌شود و امنیت و تغییرناپذیری بلاکچین را تضمین می‌کند.
2- فرایند افزودن بلاک به زنجیره
برای افزودن بلاک جدید به زنجیره، مراحل زیر انجام می‌شود:
2.1- تایید تراکنش‌ها (Transaction Verification): ابتدا تراکنش‌های جدید توسط نودهای شبکه تایید می‌شوند. این تایید شامل بررسی صحت امضاهای دیجیتال و اطمینان از عدم تکراری بودن تراکنش‌ها است.

2.2- حل مسئله ریاضی (Proof of Work): برای اضافه کردن بلاک جدید به زنجیره، نودها باید یک مسئله ریاضی پیچیده را حل کنند که به آن اثبات کار می‌گویند. این فرآیند نیازمند قدرت محاسباتی زیادی است و زمان و انرژی زیادی مصرف می‌کند.

2.3- اضافه شدن به زنجیره (Block Addition): پس از حل مسئله و تایید صحت بلاک جدید توسط سایر نودهای شبکه، بلاک به زنجیره اضافه می‌شود.
شفافیت و قابلیت ردیابی
هر تراکنش در بلاکچین به صورت عمومی قابل مشاهده و ردیابی است. این ویژگی باعث می‌شود تا تمامی تراکنش‌ها شفاف و قابل اعتماد باشند. این شفافیت به ویژه در کاربردهایی مانند رای‌گیری الکترونیکی، مدیریت زنجیره تأمین و سیستم‌های مالی بسیار مهم است.

تکمیلی:
بعضی از سایت‌های تولید محتوا مانند ویکی‌پدیا و everpedia بر بستر بلاکچین هستند.که اصولا برای اضافه کردن بلاک جدید نیاز به حل معادلات پیچیده نیست،مثلا در سایت everpedia براساس یک سری الگورتیم های دیگه بلاکچین باشه که هیچ یک از این کار ها رو کاربر انجام نمیده.

بیشتر بخوانید:
الگوریتم های هشینگ Hashing algorithms
هش بلاک Block Hash
نود Node

#blockchain
@code_crafters
Forwarded from CodeCrafters (mahyar)
فصل اول
3-کاربردهای بلاکچین

بلاکچین به دلیل ویژگی‌های منحصر به فرد خود، کاربردهای متنوعی در صنایع و حوزه‌های مختلف دارد. در این درس به بررسی برخی از مهم‌ترین کاربردهای بلاکچین می‌پردازیم.

1- ارزهای دیجیتال
اولین و معروف‌ترین کاربرد بلاکچین، ارزهای دیجیتال یا رمزارزها هستند. بیت‌کوین و اتریوم به عنوان نمونه‌های اصلی این دسته، توانسته‌اند با استفاده از بلاکچین، پرداخت‌ها و تراکنش‌های مالی را به صورت امن و غیرمتمرکز انجام دهند.
- بیت‌کوین: به عنوان اولین ارز دیجیتال، بیت‌کوین امکان انجام تراکنش‌های همتا به همتا را بدون نیاز به واسطه‌ها فراهم کرده است.
- اتریوم: علاوه بر قابلیت‌های بیت‌کوین، اتریوم پلتفرمی برای اجرای قراردادهای هوشمند و توسعه برنامه‌های غیرمتمرکز ارائه می‌دهد.


2- قراردادهای هوشمند
قراردادهای هوشمند (Smart Contracts) برنامه‌هایی هستند که بر روی بلاکچین اجرا می‌شوند و شرایط قراردادی را به صورت خودکار و بدون نیاز به واسطه‌های سنتی اجرا می‌کنند.
- مزایا: حذف واسطه‌ها، کاهش هزینه‌ها و افزایش سرعت اجرای قراردادها.
- مثال: می‌توان از قراردادهای هوشمند برای اتوماسیون فرآیندهای حقوقی، بیمه و معاملات املاک استفاده کرد.


3- زنجیره تأمین
بلاکچین می‌تواند شفافیت و کارایی زنجیره تأمین را بهبود بخشد. از تولید تا مصرف، هر مرحله از زنجیره تأمین می‌تواند به صورت امن و قابل ردیابی در بلاکچین ثبت شود.
- مزایا: افزایش شفافیت، کاهش تقلب و بهبود مدیریت موجودی.
- مثال: پیگیری محصولات غذایی از مزرعه تا فروشگاه برای اطمینان از کیفیت و اصالت کالا.

4- رأی‌گیری الکترونیکی
استفاده از بلاکچین در سیستم‌های رأی‌گیری الکترونیکی می‌تواند شفافیت و امنیت انتخابات را افزایش دهد.
- مزایا: جلوگیری از تقلب، افزایش شفافیت و امکان رأی‌گیری از راه دور.
- مثال: پیاده‌سازی سیستم‌های رأی‌گیری برای انتخابات ملی و محلی با استفاده از بلاکچین


5- بهداشت و درمان
در حوزه بهداشت و درمان، بلاکچین می‌تواند به اشتراک‌گذاری امن و کارآمد اطلاعات پزشکی بین بیماران، پزشکان و مراکز درمانی کمک کند.
- مزایا: افزایش امنیت و حریم خصوصی، بهبود هماهنگی بین مراکز درمانی و کاهش هزینه‌ها.
- مثال: ایجاد پرونده‌های پزشکی الکترونیکی بر روی بلاکچین که تنها توسط افراد مجاز قابل دسترسی باشد


6- مدیریت
هویت
بلاکچین می‌تواند به ایجاد سیستم‌های مدیریت هویت دیجیتال امن و غیرمتمرکز کمک کند.
- مزایا: افزایش امنیت اطلاعات شخصی، کاهش تقلب و سوء استفاده از هویت.
- مثال: ایجاد شناسه‌های دیجیتال برای افراد که به صورت امن در بلاکچین ذخیره می‌شوند و در دسترسی به خدمات مختلف مورد استفاده قرار می‌گیرند


نتیجه‌گیری
بلاکچین با ویژگی‌های منحصر به فرد خود، کاربردهای فراوانی در صنایع و حوزه‌های مختلف دارد. این فناوری می‌تواند به بهبود شفافیت، امنیت و کارایی فرآیندها کمک کرده و نوآوری‌های جدیدی را در دنیای دیجیتال به ارمغان آورد. در درس‌های بعدی، به بررسی عمیق‌تر سایر مفاهیم و کاربردهای بلاکچین خواهیم پرداخت.
#blockchain

@code_craftesr
راجع به بازی های ایردراپی جدید تلگرام
به نظر من احتمال لیست شدن تپ سواپ خیلی بیشتر از بقیه هست در حال حاضر به یک دلیل مهم
مهمترین موضوعی که در پایدار موندن به اصطلاح شت کوین ها هست بحث استخر نقدینگی هست که بتونه در مقابل فروش های روزهای اول دوام بیاره
تپ سواپ با تسک دو برابر شدن سكه ها در برابر یک Ton تونست (با توجه به لیست شدن نات کوین و اعتماد عمومی ) استخر قوی نقدینگی تشکیل بده با جمع همون TOn هایی ک دریافت کرد پس احتمال پایدار بودن و لیست شدن بسیار قوی تری از بقیه داره
همستر در حال حاضر تمرکز خودش رو روی پولی که از یوتیوب بدست میاره گذاشته (البته در حال حاضر ) و باید مشخص بشه چه فکری برای استخر نقدینگی داره
👍2
Forwarded from CodeCrafters (mahyar)
زبان های معروف بلاکچین
خب تو این پست قراره با زبان های برنامه نویسی که در بلاکچین کاربرد زیادی داشتند و دارند اشنا بشیم و همچنین در پست بعدی مریم سراغ پیاده سازی بلاکچین و الگورتیم های مربوطه با پایتون🥸🥸
برای توسعه‌ی بلاک چین زبان‌های مختلفی وجود دارند، اما برخی محبوب‌تر و برخی‌ دیگر ناشناخته‌تر باقی‌مانده‌اند.

1-سی پلاس پلاس (C++)
C++ یک زبان برنامه نویسی شی‌گرا است که در فناوری بلاک چین برای اولین بار توسط بنیان‌گذاران بیت کوین استفاده شد

2-سالیدیتی (Solidity)
این زبان برنامه نویسی بلاکچین توسط اتریوم توسعه داده شد و هدف اصلی آن کمک به توسعه‌دهندگان برای ایجاد شبکه‌های بلاک چین بر روی پلتفرم خود بود. از آنجایی‌که Solidity به توسعه‌دهندگان بلاک چین اختصاص داده شده است
از Solidity می‌توان برای ایجاد قراردادهای هوشمند جهت رای دادن، تامین مالی جمعی و کیف پول‌های چند امضایی استفاده کرد. همچنین این زبان برنامه نویسی بلاکچین یکی از سریع‌ترین‌های حوزه‌ی خود شناخته می‌شود.


3-پایتون (Python)
برای تازه‌کارهای در حوزه‌ی زبان برنامه نویسی بلاکچین، پایتون یکی از انتخاب‌های عالی محسوب می‌شود. البته بسیاری معتقدند زبان پایتون حتی از سی پلاس پلاس هم مناسب‌تر و بهتر است. به‌عنوان یک توسعه‌دهنده مبتدی، می‌توانید از پایتون برای ایجاد نمونه‌های اولیه بدون نیاز به کدهای طولانی استفاده کنید
تنها یک مشکل به پایتون، این زبان برنامه نویسی بلاکچین وارد بوده که آن هم مفسری بودن این زبان است. این موضوع مشکلاتی برای عملیات رمزنگاری پیچیده در بلاک چین ایجاد می‌کند.


4-وایپر (Vyper)
زبان برنامه نویسی وایپر یکی تازه نفس‌ها در زمینه‌ی توسعه‌ بلاک چین به حساب می‌آید که از پایتون ۳ مشتق شده است. با اینکه Vyper تمام ویژگی‌های پایتون را ندارد، به‌عنوان جایگزینی برای Solidity ساخته می‌شود. از این زبان برنامه نویسی بلاکچین معمولاً مانند Solidity برای ماشین مجازی اتریوم (EVM) استفاده می‌شود. با این حال، Vyper ساختارهای کنترلی متفاوتی نسبت به Solidity دارد و همچنین مسائل امنیتی را به طور متفاوتی مدیریت می‌کند.
اگر یک زبان توسعه بلاک چین برای نوشتن قراردادهای هوشمند می خواهید، وایپر را نیز در لیست برترین‌های زبان برنامه نویسی بلاکچین قرار دهید.


5-جاوا (Java)
جاوا از نظر محبوبیت و مزایا، رقابت سختی را با C++ ایجاد کرده است که در فناوری بلاک چین نیز این رقابت دیده می‌شود.
برنامه‌های جاوا را می‌توان بر روی پلتفرم‌های مختلف اجرا کرد چرا که از ویژگی عملکرد WORA به معنای یک بار بنویس، در هر جایی اجرا کن (Write once, run anywhere) برخوردار است. از طرفی، این برنامه‌ها به معماری
خاص سیستم وابسته نیستند؛ زیرا از JVM جهانی (ماشین مجازی جاوا) برای اجرا استفاده می‌کنند. همین ویژگی کافیست تا توسعه‌دهندگان، جاوا را یک زبان برنامه نویسی بلاکچین بی‌نظیر بدانند.

6-گولنگ (Golang)
گو یا گولنگ یکی دیگر از زبان‌های برنامه‌نویسی است که به‌راحتی می‌توان از آن برای توسعه بلاک چین استفاده کرد. GO توسط تیم گوگل توسعه داده شده است و در درجه اول برای ساخت سیستم‌های غیرمتمرکز کاربرد دارد. علت اصلی استفاده‌ی توسعه‌دهندگان از GO سادگی و سهولت مقیاس‌پذیری آن است.
از آنجایی‌که زبان برنامه نویسی Go به صورت ایستا تایپ شده و یک زبان برنامه نویسی کامپایل شده است، برای برنامه نویسی بلاک چین عالی است.


سایر زبان‌های برنامه‌نویسی بلاکچین:
(C#)
(Java Script)
(Simplicity)
(Rholang)
(PHP)
(Ruby)
(Rust)
(Erlang)
(CX)
#blockchain
#web3
@code_crafters
Media is too big
VIEW IN TELEGRAM
الگوریتم و فلوچارت -فصل دوم : فلوچارت-سجاد ریاحی

#part2

@persians_python
@persians_python
@persians_python
Forwarded from CodeCrafters (mahyar)
سلام🥸همونطور که از پست قبلی متوجه شدیم با زبان های بسیاری میتونیم بلاکچین رو طراحی کنیم و خب تو این پست قراره بلاکچینی رو برای زنجیره تامینی با استفاده از پایتون پیاده کنیم
زنجیر تامین یکی دیگه از کاربرد های بلاکچین در کنار ارز دیجیتیال و قرار داد های هوشمند و... هست.
بلاکچینی که قراره طراحی کنیم برای پیگیری محصولات غذایی از مزرعه تا فروشگاه برای اطمینان از کیفیت و اصالت کالا هستش

اولین چیزی که نیاز داریم یه کلاس تراکنش هست که یه سری مشخصات رو مثل فرستنده , گیرنده , محصول و مقدار اون محصول رو دریافت کنیم


import hashlib
import time

class Transaction:
def __init__(self, sender, recipient, product, quantity):
self.sender = sender
self.recipient = recipient
self.product = product
self.quantity = quantity

def __str__(self):
return f"Transaction(sender: {self.sender}, recipient: {self.recipient}, product: {self.product}, quantity: {self.quantity})"

حالا که تراکنش‌ها رو تعریف کردیم، باید یک کلاس برای بلاک‌ها ایجاد کنیم. هر بلاک در زنجیره شامل چند ویژگی اصلی که به ترتیب عبارتند از:
شماره بلاک در زنجیره (index)
هش بلاک قبلی در زنجیره (previous_hash)
زمان ایجاد بلاک (timestamp)
لیست تراکنش‌های درون بلاک (transactions)
عددی که برای ماینینگ استفاده میشه (nonce)
هش بلاک (hash):که با استفاده از تراکنش‌ها و ویژگی‌های دیگر بلاک ساخته میشه

class Block:
def __init__(self, index, previous_hash, timestamp, transactions, nonce=0):
self.index = index
self.previous_hash = previous_hash
self.timestamp = timestamp
self.transactions = transactions
self.nonce = nonce
self.hash = self.calculate_hash()

def calculate_hash(self):
transactions_string = ""
for tx in self.transactions:
transactions_string += str(tx)

block_string = f"{self.index}{self.previous_hash}{self.timestamp}{transactions_string}{self.nonce}"
return hashlib.sha256(block_string.encode()).hexdigest()

def __str__(self):
return f"Block<index: {self.index}, hash: {self.hash}>"


حالا که بلاک‌ها و تراکنش‌ها رو تعریف کردیم، باید یک کلاس برای بلاکچین خودمون ایجاد کنیم که شامل ویژگی‌هایی مثل لیستی از بلاک‌ها، تراکنش‌های معلق و سایر عملیات مانند اضافه کردن تراکنش، ماین کردن بلاک و بررسی اعتبار زنجیره باشه. درواقع نیاز به یه کلاس داریم که بیاد و بلاکچینمون رو مدیریت کنه
class Blockchain:
difficulty = 4 # میزان سختی برای ماینینگ بلاک

def __init__(self):
self.chain = [self.create_genesis_block()]
self.pending_transactions = []

def create_genesis_block(self):
# genesis block ایجاد بلاک اول با متود
return Block(0, "0", time.time(), [])

def get_latest_block(self):
#A: دریافت آخرین بلاک در زنجیره
return self.chain[-1]

def add_transaction(self, transaction):
#B: اضافه کردن تراکنش به لیست تراکنش‌های معلق یا در تایید انتظار
self.pending_transactions.append(transaction)

def mine_pending_transactions(self):
#C: ماین کردن تراکنش‌های معلق و اضافه کردن بلاک به زنجیره
block = Block(len(self.chain), self.get_latest_block().hash, time.time(), self.pending_transactions)
self.mine_block(block)
self.chain.append(block)
self.pending_transactions = []

def mine_block(self, block):
#D: Proof of Work ماین کردن یک بلاک با استفاده از الگوریتم
while block.hash[:self.difficulty] != "0" * self.difficulty:
block.nonce += 1
block.hash = block.calculate_hash()
print(f"Block mined: {block.hash}")

def is_chain_valid(self):
#E: بررسی اعتبار کل زنجیره با مقایسه هش‌ها و هش‌های محاسبه شده
for i in range(1, len(self.chain)):
current_block = self.chain[i]
previous_block = self.chain[i - 1]

if current_block.hash != current_block.calculate_hash():
return False

if current_block.previous_hash != previous_block.hash:
return False

return True

ادامه توضیحات کلس BlockChain و نحوه ساخت یه بلاک با تراکنش هاش تو پست بعدی🥸
#blockchain
👍2
CodeCrafters
سلام🥸همونطور که از پست قبلی متوجه شدیم با زبان های بسیاری میتونیم بلاکچین رو طراحی کنیم و خب تو این پست قراره بلاکچینی رو برای زنجیره تامینی با استفاده از پایتون پیاده کنیم زنجیر تامین یکی دیگه از کاربرد های بلاکچین در کنار ارز دیجیتیال و قرار داد های هوشمند…
ساخت بلاک های اولیه و تراکنش
خب در نهایت به این میرسیم که چطوری میتونیم از کلس هامون استفاده کنیم
blockchain = Blockchain()

#A: ایجاد تراکنش‌
blockchain.add_transaction(Transaction('Farm', 'Warehouse', 'Tomatoes', 70))
blockchain.add_transaction(Transaction('Warehouse', 'Distributor', 'Tomatoes', 90))
blockchain.add_transaction(Transaction('Distributor', 'Retailer', 'Tomatoes', 80))

#B: ماین کردن تراکنش‌های معلق
blockchain.mine_pending_transactions()

#C: بررسی اعتبار زنجیره
print(f"Blockchain valid: {blockchain.is_chain_valid()}")

#D: نمایش بلاک‌ها و تراکنش‌ها
for block in blockchain.chain:
    print(block)
    for tx in block.transactions:
        print(f"txt = {tx}")

این تیکه کد، یک نمونه ساده از استفاده از کلاس بلاکچین و متود  های اون را نشان می‌ده. در اینجا، یک ابجکت از کلاس Blockchain ایجاد می‌شود و  سه تراکنش برای ردیابی محصولات غذایی  اضافه می‌شه. بعد از اون تراکنش‌های معلق ماین شده و یک بلاک جدید به زنجیره اضافه می‌شود و  اعتبار زنجیره چک می‌شه و در نهایت بلاک‌ها و تراکنش‌ها نمایش داده می‌شود.


پ ن: توضیح عمقی تر درمورد کلاس Blockchain
مورد اول difficulty: این متغییر نشان می‌دهه که برای ماین کردن یک بلاک جدید چه تعداد صفر در ابتدای هش باید وجود داشته باشد.فرض کنید که مقدار difficulty در بلاکچین  برابر 3 باشد.
ب فرض کنیم ما بلاکی را می‌خواهیم ماین کنیم و هش بلاک  باید اینگونه باشد:
hash: 000abc123

دوم ()init: در این متد، زنجیره با ایجاد بلاک اول (genesis block) شروع می‌شود و لیست تراکنش‌های در انتظار برای ماین کردن خالی می‌شود.

سوم:create_genesis_bloc()k: این متد بلاک اول یا genesis block را با شماره بلاک 0، هش بلاک قبلی صفر، زمان فعلی و بدون تراکنش ایجاد می‌کند. معمولا بلاک اول زنجیره رو خوومون درست میکنیم و بدون تراکنش و هش صفر

چهار: get_latest_block(): این متد آخرین بلاک در زنجیره را برمی‌گرداند.

پنج:add_transaction(transaction): این متد یک تراکنش را به لیست تراکنش‌های در انتظار برای ماین کردن اضافه می‌کند.

شش:mine_pending_transactions: این متد تمام تراکنش‌های در انتظار را ماین می‌کند و بلاک حاوی آن‌ها را به زنجیره اضافه می‌کند.

هفت:mine_block(block): این متد یک بلاک را با استفاده از الگوریتم Proof of Work ماین می‌کند، تا هش بلاک با تعداد صفرهای مشخص (بر اساس difficulty) شکل بگیرد.

هشت:()is_chain_valid: این متد بررسی می‌کند که زنجیره فعلی اعتبار دارد یا نه، با مقایسه هش‌های بلاک‌ها و هش‌های محاسبه شده.

#blockchain
سلام به همه دوستانی که تازه به جمع ما پیوستند ورودتون رو به جمع خانواده پایتون خوش آمد میگم
زیر این پست آخرین ورژن های مفسر پایتون و ویژوال استودیو کد رو قرار میدم برای استفاده البته دقت کنید این ورژن ها روی ویندوز ۸ به بعد نصب میشه بعد از اون ورژن های مخصوص ویندوز ۷ رو هم قرار میدم پیروز باشید
آخرین ورژن ویژوال استودیو کد نسخه ۶۴ بیتی (مخصوص ویندوز ۸.۱ به بعد ) 👇👇👇👇👇👇👇
آخرین ورژن ویژوال استودیو کد نسخه ۳۲ بیتی (مخصوص ویندوز ۸.۱ به بعد ) 👇👇👇👇👇👇👇
ورژن ۱.۷ ویژوال استودیو کد مخصوص ویندوز ۷ ، ۶۴ بیتی (مخصوص ویندوز ۷)
👇👇👇👇👇👇👇👇👇👇👇
آخرین نسخه ۶۴ بیتی مفسر پایتون ورژن ۳.۱۱.۴ برای ویندوز ۸ به بعد (روی ویندوز ۷ نصب نمیشه )
👇👇👇👇👇👇👇👇👇👇