Sound of AVM نسخه v۰.۹.۰ را منتشر کرد؛ ممپول زنده الگورند حالا در مرورگر به صدا درمیآید
Sound of AVM، ابزار متنباز تبدیل ممپول الگورند به صدا، نسخه v۰.۹.۰ را منتشر کرد: gossip بدون کلید از Nodely جای پولینگ را گرفت، بصریسازیهای تازه از راه رسیدند و پریستها را میتوان بهصورت توکن غیرقابلمعاوضه استاندارد ARC-3 روی زنجیره ضرب کرد.
شبکهای که میشنوید
الگورند هر چند ثانیه یک بلاک تازه را تسویه میکند و هر بلاک، آنچه شبکه همین حالا انجام داده را مهر میکند — پرداخت یک استیبلکوین، انتقال یک دارایی، فراخوانی یک قرارداد هوشمند. بیشتر مردم این ترافیک را به شکل جدولهایی میبینند که در کاوشگر بلاک بالا و پایین میروند. Sound of AVM1 اما بهجای تماشا، گوش میدهد: یک سینتسایزر مرورگری که فعالیت زنده روی زنجیره را به موسیقی بدل میکند؛ شبکهای پرمشغله مثل اتاقی شلوغ به گوش میرسد و شبکهای خلوت مثل سکوتی که گاه نُتی در آن میافتد. دقیقترین توصیفی که از آن در دست است، توصیف خودش است: «هیچچیز از پیش ضبط نشده؛ اگر نُتی میشنوید، یعنی همین حالا یک تراکنش رخ داده است.»
اپ بهجای تاریخچه بلاکها، ممپول را میخواند — انبار تراکنشهای تأییدنشدهای که در انتظار بلاک بعدیاند — و در نتیجه تراکنشها را همان لحظه که منتشر میشوند و پیش از تسویه میشنود. هر ساز یک کارت سینت است که یک قاعده را با یک صدا جفت میکند: قاعده میگوید به چه تراکنشهایی گوش بدهد و صدا زمانی نواخته میشود که یکی از آنها برسد. این پروژه در ۲۶ ژوئیه ۲۰۲۶ نسخه v۰.۹.۰ را منتشر کرد؛ نخستین انتشار شمارهدارش. راهنمای درونبرنامهای سریعترین راه ورود به ابزار است: یک پریست بارگذاری کنید، Start را بزنید و از هر جای صفحه با کلید فاصله موسیقی را متوقف یا دوباره اجرا کنید.
برای هر نوع تراکنش، یک سینت
نخستین انتخابی که برای هر سینت میگیرید، نوع تراکنشی است که به آن گوش میدهد. مجموعه کامل تراکنشهای الگورند روی منو است — pay، axfer، appl، acfg، keyreg، afrz، stpf، hb، group، block — و هر یک را میتوان با زیرگونهها محدودتر کرد. یک سینت pay میتواند بر مبلغ، فرستنده یا گیرنده فیلتر بگذارد؛ سینت axfer شناسه دارایی، opt-in، opt-out و clawback را هم اضافه میکند؛ و سینت appl میتواند اپلیکیشن مشخصی را زیر نظر بگیرد. دقیقاً همین فیلترها هستند که ابزار را جراحیوار میکنند:
| مفهوم | پیامد در دنیای واقعی |
|---|---|
| pay — پرداختهای ساده ALGO | محدوده مبلغ، آن صدا را به یک نهنگیاب تبدیل میکند: نُتی بم که تنها زمانی شنیده میشود که یک پرداخت از مثلاً ۵,۰۰۰ ALGO فراتر رود. |
| axfer — انتقال دارایی | جعبههای دارایی هم با شناسه و هم با نام جستوجو میشوند؛ پس نوشتن USDC کافی است تا یک صدا تنها زمانی نواخته شود که آن توکن جابهجا میشود. |
| appl — فراخوانی قرارداد هوشمند | ردیابی یک اپلیکیشن مشخص، یا داراییها و حسابهای خارجیای که فراخوانیهایش با آنها سر و کار دارد، بدون خواندن لاگ تراکنشها. |
| group — تراکنشهای گروهی | یک سینت را با group جفت کنید تا جابهجایی یک توکن در DEX را بگیرید، چون یک سواپ یک گروه اتمیک است، نه یک تراکنش تکی. |
| block — یک نُت برای هر بلاک | بخش ریتم: صدایی که یک بار در هر راند تأییدشده نواخته میشود و به بقیه اجزا ضربآهنگی ثابت میدهد. |
بقیه ماجرا طراحی صداست. پنج موتور Tone.js2 زیر این صداها نشستهاند — یک سینت تکصدا برای ضربههای کوتاه و پرکاسیو؛ یک سینت مونو با فیلتر اختصاصی برای خط باس؛ یک سینت پلیفونیک برای پدهای همپوشان؛ و گونههای AM و FM برای رنگهای صوتی فلزی یا زنگمانند. یک سکوئنسر هشتمرحلهای بهجای ساعت، با تراکنشها پیش میرود؛ بنابراین تمپوی ریف همان تمپوی شبکه است: زنجیره شلوغ، ریف تند. راهنما زیروبمی را نوعی آهنگسازی معرفی میکند: «پرترددترین نوع تراکنش را پایین و کمرخدادترین را بالا بگذارید تا باس و ملودی را رایگان به دست آورید.» وقتی یک سینت سریعتر از سقف مجازش تحریک میشود، Mode تعیین میکند چه اتفاقی بیفتد: Single سرریز را دور میریزد، در حالی که Aggr کل انبوهه را در یک ضربه واحد، بلندتر و پرسوتر فشرده میکند.
از پولینگ تا یک جریان زنده
پروژه با یک نمونه اولیه در HTML و JavaScript خالص، در رویداد Algorand Dev Retreat at Home آغاز شد؛ ایدهای که از این مشاهده زاده شد که جریان تراکنشهای یک زنجیره، نوعی ریتم است. آن نسخه نخست، تراکنشهای در انتظار را هر ۵۰ میلیثانیه از طریق یک API عمومی AlgoNode یا یک نود شخصی پول میکرد، نتیجه را به Tone.js میداد و از کاربران میخواست با API رایگان مهربان باشند. اتصال یک نود شخصی هم به تغییر یک هدر CORS در تنظیمات نود نیاز داشت. کار میکرد، اما با ملاحظاتی — دقت زمانبندی گروگان فاصله پولینگ بود و محدودیتهای نرخ API آن را از یک ابزار پایش به یک اسباببازی تنزل میداد.
نسخه v۰.۹.۰ کل لایه داده را عوض میکند. اپ بهجای پولینگ، یک WebSocket به دروازه gossip مِیننت Nodely3 باز میکند و تراکنشهای امضاشده را همانطور که رلهها پخش میکنند، در مرورگر رمزگشایی میکند. کد خودش این معامله را صریح بیان میکند: «هر تراکنش همان لحظه که منتشر میشود، با زمان واقعی رسیدنش میرسد — نه پولینگی، نه مقایسهای میان شمارشها، نه توکنی.»
| مفهوم | پیامد در دنیای واقعی |
|---|---|
| نمونه اولیه: پولینگ هر ۵۰ میلیثانیه روی یک API عمومی | نُتها کوانتیدهشده با فاصله پولینگ میرسند و به برآورد پروژه، محدودیتهای نرخ در سطح رایگان، شنیدن پیوسته را به حدود ۵ ساعت محدود میکرد. |
| v۰.۹.۰: وبسوکت gossip از Nodely، بدون کلید | نُت همان لحظهای نواخته میشود که تراکنش به رلهها منتشر میشود؛ بدون کلید API و بدون نیاز به نود محلی. |
| بافر کردن گروه اتمیک (~۳۰۰ میلیثانیه) | اعضای یک تراکنش گروهی جمعآوری و بهصورت یک رویداد واحد تخلیه میشوند، بنابراین یک سواپ مثل یک حرکت واحد شنیده میشود، نه یک تپق. |
آن جزئیات آخر برای شنوندهها بهاندازه خود کار سنتز اهمیت دارد: این کلاینت بخشی از پروتکل ارتباطی رلههای الگورند را در مرورگر پیاده میکند، در تگ پیام تراکنش مشترک میشود، بارهای msgpack آن را رمزگشایی میکند و تراکنشهای تازهدیدهشده را در دو نسل به خاطر میسپارد تا پخش دوباره رلهها باعث نواختهشدن دوباره یک نُت نشود.
پریستهایی که میتوان روی زنجیره ضرب کرد
چیدمانها قابل حملاند. یک پریست فایل JSONی است که هر سینت و تنظیماتش را توصیف میکند، یا بهصورت محلی ذخیره میشود یا برای اشتراکگذاری بیرون داده میشود؛ نسخه v۰.۹.۰ همچنین پریستها و توکنهای پریست ضربشده را در نوار آدرس کد میکند، پس یک URL برای انتقال یک صدا کافی است. دکمه کیف پول فقط برای یک کار وجود دارد: ضرب یک پریست روی زنجیره بهصورت «NFPreset».
این سازوکار ارزش باز کردن دارد، چون مستقیماً از ماشین توکن بومی الگورند استفاده میکند. الگورند داراییها را بدون نیاز به قرارداد هوشمند منتشر میکند — که به آنها دارایی استاندارد الگورند یا ASA میگویند — و ARC-3 استاندارد رایج برای توکنهای غیرقابلمعاوضه در میان آنهاست: URL دارایی به فراداده JSONی اشاره میکند که روی IPFS میزبانی میشود و با پسوند '#arc3' نشانهگذاری شده است. NFPreset یک ASA است که فراداده IPFSاش، پریست را بهصورت یک رشته base64 فشرده در ویژگیهای خود جای میدهد. بارگذاری چنین چیزی یعنی گرفتن فراداده دارایی از ایندکسر، آوردن فایل از IPFS و رمزگشایی دوباره آن به صداها. نقشه راه، ضرب را یک تراکنش واحد ایجاد دارایی میداند که با کیف پول امضا میشود، و بازار معاملاتی NFPresetها به نسخه ۲ در آینده موکول شده است.
این قالب روی زنجیره آزمایش شده است. دارایی «block anxiety» (نام واحد NFP، عرضه کل ۱) در ۵ اوت ۲۰۲۵ از آدرسی ساخته شد که hampelman.algo — نام مستعار توسعهدهنده روی زنجیره — تأمین مالیاش کرده بود، و با فراداده نمونه در سند نقشه راه خود پروژه مطابقت دارد؛ پس از آن دو ضرب دیگر از همان پریست انجام شد با برچسبهای NFP2 و NFP23. این تمهید، بهشکلی نامحسوس عجیب و در عمل کارآمد است: توکن غیرقابلمعاوضه در اینجا یک تصویر نیست، بلکه تنظیمات یک ساز قابل نواختن است، و معاملهکردن آن یعنی معامله طراحی صدا.
کوچک، باز و همچنان کوک
این انتشار شمارهدار ردیفی از بصریسازیها را هم آورد که همان داده را به تصویر بدل میکنند — Territory که در آن هر تراکنش سهم خود از صفحه را تصاحب میکند و «زمین باقیمانده را به کناری میراند»، بههمراه Kintsugi Ledger و Music Box، در کنار Score و Loom که پیشتر آمده بودند. دکمه Record که قرار است خروجی را بهصورت صدا ضبط کند، هنوز به کار نیفتاده است.
پروژه درباره محدودیتهای خودش صادق میماند. README اصلی یادآور میشود که «تراکنشها برای Tone.js بیش از حد سریع میرسند و همین باعث میشود نتواند برای هر یک از آنها زمانمهر یکتا بسازد» — همان دلیلی که وجود حالت تجمیعی را توضیح میدهد — و هیچ ممیزی رسمی از کدبیس انجام نشده است؛ وضعیتی معمول برای ابزار متنبازی با این ابعاد. دامنه اثرش فروتنانه است: ۸ ستاره روی مخزن اصلی در سازمان Algorand Developer Retreat، ۱ ستاره روی نسخهای که فعالانه در حساب شخصی توسعهدهنده نگهداری میشود، و تنها یک یادداشت کوتاه از یک تجمیعکننده اخبار الگورند در اواخر ژوئیه ۲۰۲۶ که معماری پولینگ قدیمی را توصیف میکرد — نشانهای از اینکه بازسازی تازه هنوز مخاطب خود را پیدا نکرده است.
از آن پروژههایی است که فقط به این دلیل وجود دارد که یک هکاتون به یک توسعهدهنده اجازه داد دنبال ایدهای عجیب برود: اینکه فعالیت یک بلاکچین ضربآهنگی دارد که ارزش شنیدن دارد. کد همچنان باز است و نگهدارنده پروژه از همان روزهای نمونه اولیه از پیشنهادها استقبال کرده است. برای هر کسی که کاوشگر بلاک او را به شکل نادرستی مسحور کرده است، گوش دادن به شبکه — باس برای نهنگها، ملودی برای رویدادهای کمرخداد و یک سینت بلاک که ضرب را نگه میدارد — شیوهای واقعاً تازه برای تماشای کار یک زنجیره است.
منابع
- Sound of AVM1
- The Sound of AVM — سازمان Algorand Developer Retreat (نمونه اولیه)4
- The Sound of AVM — مخزن توسعه فعال5
- پوشش الگورند در PXke
- Verifiably Random: S2:E8 - Inside the open-source coding at the Algorand Dev Retreat6
- پست @algorand.pxke.me در Bluesky7
- RelayUrl path and query issues · Issue #735 · mikedilger/gossip8
- QuickStart | Nodely9
منابع
- 1Sound of AVM soundofavm.online↩
- 2Tone.js tonejs.github.io↩
- 3Nodely nodely.io↩
- 4The Sound of AVM — سازمان Algorand Developer Retreat (نمونه اولیه) github.com↩
- 5The Sound of AVM — مخزن توسعه فعال github.com↩
- 6Verifiably Random: S2:E8 - Inside the open-source coding at the Algorand Dev Retreat algorand.co↩
- 7پست @algorand.pxke.me در Bluesky bsky.app↩
- 8RelayUrl path and query issues · Issue #735 · mikedilger/gossip github.com↩
- 9QuickStart | Nodely nodely.io↩