امروز داشتم بین تراکنش های ورودی پذیرندگان Payment4 میگشتم ٬ خیلی اتفاقی یه تراکنش دیدم که روی شبکه اتریم با توکن USDT انجام شده و بود و سیستم نتونسته بود تشخیص بده. خیلی عجیب بود و چنین اتفاقی احتمالش ۱ درصد هم نبود. رفتم واسه بررسی عمیقتر و دیدم بله تراکنش از نوع Batch transaction بوده و من کلا توی سیستم فکرشم نمیکردم کسی ازین مدل تراکنش ها بزنه. اما این مدل تراکنش ها خیلی معموله بین صرافی های بزرگ (صرافی ارسال کننده CoinBase بود 😎).
اینجا سعی میکنم به صورت ساده و خلاصه توضیح بدم.
صرافی های دیجیتال معمولا برای درخواست های برداشت کاربرانشون به این صورت عمل میکنند که اگر بهصورت تک تک برداشت ها رو بفرستن توی شبکه مجموع فی شبکه به ازای همه تراکنش ها بالا میره و اصلا براشون به صرفه نیست. پس هرگز به صورت تکی برداشت ها رو نمیفرستن توی شبکه. میان و یه قرارداد هوشمند (Smart Contract) مینویسند که مسئول توزیع کل میزان برداشته (این نوع قراردادهای هوشمند معمولا به صورت اختصاصی برای هر شبکه نوشته میشه). بعدش به اندازه مجموع برداشت هایی که کاربران درخواست داده بودند (مثلا 2000 USDT از نوع ERC20) رو به همراه آدرس ولت تمامی کاربران درخواست دهنده و سهم هر کدام ارسال میکنند به همون قرارداد هوشمندی که ساخته بودند و ازینجا به بعد کار اون قرار داد هوشمند شروع میشه. خودش به صورت کامل تمامی عملیات تسهیم رو میفرسته روی شبکه و دریافت کنندگان مقادیر مورد نظر رو دریافت خواهند کرد.
یکی از بزرگترین مزیت هایی که داره اینه که شدیدا کارمزد شبکه رو کاهش میده. به عنوان مثال اگر ۱۰ تا تراکنش طی یک Batch Transaction صورت بگیره چیزی حدود ۶۰ درصد از کل کارمزد شبکه کم میشه
البته این ۶۰ درصد حدودی هست و کاملا به وضعیت شبکه و تعداد تراکنش و چند تا پارامتر دیگه وابسته ست.
دیکود کردن این مدل تراکنش ها توی شبکه یه مقدار پیچیدهتر از سایر تراکنش هاست٬ دلیلشم اینه که کل تراکنش ها توی شبکه یک hash خواهند داشت و عملا تمامی تراکنش های Batch Transaction یه دونه در نظر گرفته میشه و جزئیات هر تراکنش از جمله آدرس مقصد دریافت کننده نهایی ٬ آدرس توکنی که روی اون تراکنش انجام میشه و میزان توکن انتقال یافته رو باید از توی لاگ Receipt (رسید پرداخت) و مقدار input تراکنش بدست بیارید.
مدتی قبل که با یه تیم روی پروژه Luanchpad کار میکردم با این مدل از تراکنش ها یعنی تراکنش های جمعی آشنا شدم.
اگر علاقه دارید با این مدل قراردادهای هوشمند کار کنید و استفاده ازش رو یادبگیرید پیشنهاد میکنم این نمونه ای که ازش توی گیت هاب هست مطالعه کنید. ساختار و سازوکارشون شبیه همه و توی جزئیات هر شبکه ممکنه تفاوت هایی رو ایجاد کنه.
نکته آخر هم اینکه هر چقدر گشتم تا معادل فارسی Batch Transaction رو پیدا کنم چیزهای مناسبی پیدا نکردم. مثلا گوگل پیشنهاد داد بجاش بنویسم "معامله ی دسته ای" که خیلی مناسب فضای بلاک چین نبود 😁.
به نظرم همون تراکنش جمعی خیلی مناسب تره. حالا اگر شما هم پیشنهادی دارید خوشحال میشم بنویسید برام.