COMPΞZ 🧬
این جمی که میگید، ذات این هم مثل ماکسی و دیجن فقط ایردراپه، هیچ چیزی کاربردیای پشتش نیست. 😉 ۷۵٪ ایردراپ شوخی بردار نیست! این یعنی ۷۵٪ مغزت رو هواست نمیدونی قراره چه کنی.
این هم بخش اصلی کدش خدمت شما، جز این بخش هیچ چیز مهم دیگهای توی کدهای قراردادش نمیبینم. نه کاربردی و نه خدماتی! هیچی!
خب توی کد قرارداد نوشته ۵ میلیارد توکن برای توزیع داریم که ۲۵٪ اون رو برای نقدینگی گذاشتیم.
همین الآن مارکت کپش ۴.۹۱ میلیون دلاره! قیمت فعلیش ۰.۰۰۴۹ هست! تعداد توکن در گردشش نزدیک به ۱۹ میلیون!
با قیمت فعلی با این مارکت کپ هم خونی داره!
اما این وقتی کل توکنها رو آزاد کنه یعنی ۵ میلیارد، بخواد قیمتی معادل ۰.۱۰ سنت رو داشته باشه، باید ۵۰ میلیون دلار مارکت کپش باشه. 😌
بخواد ۱ دلار بشه باید ۵ میلیارد مارکت کپش باشه! 😉
در کل یک توکن بیکاربرد ولی خب با هدف ایردراپ هست، من هیچوقت از این تیپ توکنها نمیخرم اما پاداش اگه بده نگهش میدارم دمشونم گرم.
تا پبندهایی دیگر به درود.💙
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.26;
import { IJam } from "../interfaces/IJam.sol";
import { Rescuable } from "../roles/Rescuable.sol";
import { Ownable2Step } from "../roles/Ownable2Step.sol";
import { ERC20Capped } from "@openzeppelin/contracts/token/ERC20/extensions/ERC20Capped.sol";
import { ERC20, ERC20Burnable } from "@openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol";
contract Jam is IJam, ERC20Burnable, ERC20Capped, Ownable2Step, Rescuable {
uint256 public immutable MAX_TOTAL_SUPPLY = 5 * 10**27;
// 25% of the total supply is allocated to the initial liquidity pool.
uint256 public immutable INITIAL_LIQUIDITY_POOL_SUPPLY = MAX_TOTAL_SUPPLY * 25 / 100;
bool public initialLiquidityPoolSupplyMinted;
mapping (address => bool) private _minters;
modifier onlyMinterRole() {
if (!_minters[msg.sender]) {
revert UnauthorizedAccount(msg.sender);
}
_;
}
constructor() ERC20("Jam", "JAM") ERC20Capped(MAX_TOTAL_SUPPLY) {
_minters[owner()] = true;
}
function hasMinterRole(address account) external view returns (bool) {
return _minters[account];
}
function addMinter(address minter) external onlyOwner {
if (_minters[minter]) {
revert MinterAlreadyAdded(minter);
}
_minters[minter] = true;
emit AddMinter(minter);
}
function removeMinter(address minter) external onlyOwner {
_removeMinter(minter);
}
function dropMinterRole() external onlyMinterRole {
_removeMinter(msg.sender);
}
function _removeMinter(address minter) internal {
if (!_minters[minter]) {
revert MinterAlreadyRemoved(minter);
}
_minters[minter] = false;
emit RemoveMinter(minter);
}
function mint(address to, uint256 amount) external onlyMinterRole {
_mint(to, amount);
emit Mint(to, amount);
}
function mintInitialLiquidityPoolSupply() external onlyOwner {
if (initialLiquidityPoolSupplyMinted) {
revert InitialLiquidityPoolSupplyAlreadyMinted();
}
initialLiquidityPoolSupplyMinted = true;
_mint(owner(), INITIAL_LIQUIDITY_POOL_SUPPLY);
}
function _update(address from, address to, uint256 value) internal override(ERC20, ERC20Capped) {
super._update(from, to, value);
}
}
خب توی کد قرارداد نوشته ۵ میلیارد توکن برای توزیع داریم که ۲۵٪ اون رو برای نقدینگی گذاشتیم.
همین الآن مارکت کپش ۴.۹۱ میلیون دلاره! قیمت فعلیش ۰.۰۰۴۹ هست! تعداد توکن در گردشش نزدیک به ۱۹ میلیون!
با قیمت فعلی با این مارکت کپ هم خونی داره!
اما این وقتی کل توکنها رو آزاد کنه یعنی ۵ میلیارد، بخواد قیمتی معادل ۰.۱۰ سنت رو داشته باشه، باید ۵۰ میلیون دلار مارکت کپش باشه. 😌
بخواد ۱ دلار بشه باید ۵ میلیارد مارکت کپش باشه! 😉
در کل یک توکن بیکاربرد ولی خب با هدف ایردراپ هست، من هیچوقت از این تیپ توکنها نمیخرم اما پاداش اگه بده نگهش میدارم دمشونم گرم.
تا پبندهایی دیگر به درود.
Please open Telegram to view this post
VIEW IN TELEGRAM
COMPΞZ 🧬
این هم بخش اصلی کدش خدمت شما، جز این بخش هیچ چیز مهم دیگهای توی کدهای قراردادش نمیبینم. نه کاربردی و نه خدماتی! هیچی! // SPDX-License-Identifier: MIT pragma solidity ^0.8.26; import { IJam } from "../interfaces/IJam.sol"; import { Rescuable } from "…
معیارهای من برای انتخاب یک توکن همیشه به این صورت هست:
۱) کاغذ سفید چی میگه؟
۲) توکنومیکس چی میگه؟
۳) کد قرارداد چی میگه؟
۴) اطلاعات بازار با قرارداد همخونی داره؟
۵) احتمالات در بدترین و بهترین حالت بازار و تخمینهای احتمالی چطوره؟
به هر صورت هیچوقت با یه جو FOMO شده وارد چیزی نمیشم. اگه ایردراپی میده دمش گرم، در غیر این صورت پول زبون بسته رو مثل اشتباهاتی که قبلاً کردیم وارد چنین چیزی نمیکنم.
۱) کاغذ سفید چی میگه؟
۲) توکنومیکس چی میگه؟
۳) کد قرارداد چی میگه؟
۴) اطلاعات بازار با قرارداد همخونی داره؟
۵) احتمالات در بدترین و بهترین حالت بازار و تخمینهای احتمالی چطوره؟
به هر صورت هیچوقت با یه جو FOMO شده وارد چیزی نمیشم. اگه ایردراپی میده دمش گرم، در غیر این صورت پول زبون بسته رو مثل اشتباهاتی که قبلاً کردیم وارد چنین چیزی نمیکنم.
💯2
ما فقط میتونیم کمکتون کنیم که پروژهها رو بهتر درک کنین، ولی تصمیم نهایی با خودتونه. برای همین تو این کانال نه سیگنال میدم، نه ایردراپی رو پیشنهاد میکنم مگر اینکه شناخت کافی به پروژه داشته باشم! چون اصلاً به این کار اعتقادی ندارم! وگرنه میتونستم هر روز یه عالمه توکن معرفی کنم، همشونم پامپ بشن، شما هم کلی سود کنین! ولی هدف این نیست. ما اینجا اومدیم که منطقی و واقعی جلو بریم، نه اینکه دنبال موجهای الکی باشیم.
اصطلاح DYOR یا «Do Your Own Research» به معنی "تحقیق شخصی خود را انجام دهید" یکی از مهمترین اصول در دنیای سرمایهگذاری، ارزهای دیجیتال و پروژههای نوآورانه است. این مفهوم تأکید میکند که به جای تکیه بر حرف دیگران، خودتان دربارهی یک پروژه، توکن، سهام یا هر نوع سرمایهگذاری تحقیق کنید و با دانش کافی تصمیم بگیرید.
۱. جلوگیری از کلاهبرداری
بازار کریپتو و دیگر حوزههای مالی پر از پروژههای کلاهبرداری و شتکوینهایی است که فقط برای جذب سرمایه و خروج سرمایهگذاران اولیه طراحی شدهاند. بدون تحقیق، احتمال افتادن در دام این پروژهها زیاد است.
۲.جلوگیری از فومو (FOMO)
خیلی وقتها پروژههایی با تبلیغات سنگین باعث ایجاد ترس از دست دادن فرصت (FOMO) میشوند. اما با تحقیق دقیق، میتوانید تصمیم بگیرید که آیا واقعاً ارزش ورود دارد یا فقط یک هایپ کوتاهمدت است.
۳. درک واقعی پروژه
تحقیق شخصی باعث میشود بفهمید که پروژه چه مشکلی را حل میکند، تیم آن چه کسانی هستند، تکنولوژی پشت آن چیست و آیا پتانسیل رشد دارد یا خیر.
۴. مدیریت ریسک بهتر
وقتی اطلاعات کافی داشته باشید، میتوانید بهتر تصمیم بگیرید که چقدر سرمایه وارد کنید و چه زمانی خارج شوید. این باعث کاهش احتمال ضررهای سنگین میشود.
چگونه DYOR کنیم؟
✅ بررسی کاغذ سفید (Whitepaper)
✅ تحلیل تیم یا فاندر و توسعهدهنده
✅ بررسی جامعه و اکوسیستم
✅ تحلیل زیر ساختها و ماهیت توکن
✅ تحلیل تکنیکال و فاندامنتال
✅ مقایسه با رقبا
نتیجهگیری
در دنیای پرریسک و پویای ارزهای دیجیتال، DYOR یعنی محافظت از سرمایهی خودتان! همیشه قبل از هر تصمیم مالی، تحقیق کنید و کورکورانه به حرف دیگران اعتماد نکنید. یاد بگیرید که دادهها و اطلاعات را تحلیل کنید، چون در نهایت مسئولیت سود و زیان شما فقط بر عهدهی خودتان است. 🚀
من هم به نوبهٔ خودم یک توسعهدهندهام و شاید از نظر خیلیها حوصلهسربر باشم چون سیگنال مداوم و جذاب نمیدم، ولی همیشه منطق رو به احساسات ترجیح میدم.
https://warpcast.com/compez.eth/0x55ed4c55
#DYOR #تحقیق #تحلیل
Please open Telegram to view this post
VIEW IN TELEGRAM
Warpcast
C O M P Ξ Z on Warpcast
☄️ You must prioritize your own research and analysis. ⚡️
We can only help you better understand projects, but the final decision is yours. We are here to move forward logically and realistically, not to chase meaningless hype.
⚠️ What is DYOR and why…
We can only help you better understand projects, but the final decision is yours. We are here to move forward logically and realistically, not to chase meaningless hype.
⚠️ What is DYOR and why…
❤2
COMPΞZ 🧬
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1🙏1
COMPΞZ 🧬
برو بچههای توسعهٔ فارکستر همه باهم یه جا همین الآن! 😄
خب جلسه تموم شد!!! 🔥
مهمترین موضوعات اینها بودند:
پروتکل Farcaster در حال جایگزینی هابها با Snapchain Mainnet است. (موضوع مهم برای همهٔ توسعهدهندههاست).
از ۱۲ آوریل به بعد، توسعهدهندگان باید از Snapchain برای خواندن و نوشتن دادهها استفاده کنند. از ۱۵ هم آوریل، هابها شروع به عقب ماندن میکنند و ممکن است دادههایشان از بین برود.
در نهایت، هابها بهطور کامل خاموش خواهند شد.
✅ اگر هاب خود را اجرا میکنید، باید به Snapchain مهاجرت کنید، در غیر این صورت دادههای شما از دست میرود. 🚀
- یک سوأل مهم مطرح شد که اینهمه ایردراپ میان سمت فارکستر، باید یه ویژگیای باشه که جلوی اسکمها رو بگیریم. در این خصوص برنامههایی خواهند داشت!
- سیستم فعلی امتیازدهی از کیفها حذف شده، برای همین دیگه اون امتیازهای احراز هویت رو نمیبینیم؛ اما نیاز به بررسی داره.
- تمرکز بیشتر روی پشتیبانی از سولانا خواهیم داشت.
مهمترین موضوعات اینها بودند:
پروتکل Farcaster در حال جایگزینی هابها با Snapchain Mainnet است. (موضوع مهم برای همهٔ توسعهدهندههاست).
از ۱۲ آوریل به بعد، توسعهدهندگان باید از Snapchain برای خواندن و نوشتن دادهها استفاده کنند. از ۱۵ هم آوریل، هابها شروع به عقب ماندن میکنند و ممکن است دادههایشان از بین برود.
در نهایت، هابها بهطور کامل خاموش خواهند شد.
✅ اگر هاب خود را اجرا میکنید، باید به Snapchain مهاجرت کنید، در غیر این صورت دادههای شما از دست میرود. 🚀
- یک سوأل مهم مطرح شد که اینهمه ایردراپ میان سمت فارکستر، باید یه ویژگیای باشه که جلوی اسکمها رو بگیریم. در این خصوص برنامههایی خواهند داشت!
- سیستم فعلی امتیازدهی از کیفها حذف شده، برای همین دیگه اون امتیازهای احراز هویت رو نمیبینیم؛ اما نیاز به بررسی داره.
- تمرکز بیشتر روی پشتیبانی از سولانا خواهیم داشت.
👍3
COMPΞZ 🧬
خب جلسه تموم شد!!! 🔥 مهمترین موضوعات اینها بودند: پروتکل Farcaster در حال جایگزینی هابها با Snapchain Mainnet است. (موضوع مهم برای همهٔ توسعهدهندههاست). از ۱۲ آوریل به بعد، توسعهدهندگان باید از Snapchain برای خواندن و نوشتن دادهها استفاده کنند. از…
خب اسنپچین چی هست؟
این Snapchain یک لایه ذخیرهسازی داده برای پروتکل اجتماعی Farcaster است. یک شبکه غیرمتمرکز همتابههمتا (P2P) مشابه بلاکچین است که دادههای ایجادشده توسط کاربران Farcaster را ذخیره میکند.
اهداف اصلی Snapchain:
✅ توان عملیاتی بالا: نوشتهشده با Rust، پردازش حداقل ۱۰,۰۰۰ تراکنش در ثانیه
✅ دسترسپذیری داده: اجرای آن با هزینه کمتر از ۱,۰۰۰ دلار در ماه و دسترسی بلادرنگ به دادههای کاربران
✅ پیادهسازی مرجع: معتبرترین منبع برای نحوه عملکرد Snapchain و Farcaster
وضعیت کنونی:
فعلاً Snapchain در فاز مهاجرت قرار دارد.
اجرای یک نود Snapchain:
برای راهاندازی یک نود و خواندن/نوشتن پیامها در شبکه، به یک سرور با مشخصات زیر نیاز دارید:
🔹 ۱۶ گیگابایت RAM مورد نیاز
🔹 ۴ هسته CPU یا vCPU باهم
🔹 ۱ ترابایت فضای ذخیرهسازی آزاد
🔹شناسهٔ IP عمومی
🔹 باز بودن پورتهای 3381 - 3383 روی TCP و UDP
https://github.com/farcasterxyz/snapchain
این Snapchain یک لایه ذخیرهسازی داده برای پروتکل اجتماعی Farcaster است. یک شبکه غیرمتمرکز همتابههمتا (P2P) مشابه بلاکچین است که دادههای ایجادشده توسط کاربران Farcaster را ذخیره میکند.
اهداف اصلی Snapchain:
✅ توان عملیاتی بالا: نوشتهشده با Rust، پردازش حداقل ۱۰,۰۰۰ تراکنش در ثانیه
✅ دسترسپذیری داده: اجرای آن با هزینه کمتر از ۱,۰۰۰ دلار در ماه و دسترسی بلادرنگ به دادههای کاربران
✅ پیادهسازی مرجع: معتبرترین منبع برای نحوه عملکرد Snapchain و Farcaster
وضعیت کنونی:
فعلاً Snapchain در فاز مهاجرت قرار دارد.
اجرای یک نود Snapchain:
برای راهاندازی یک نود و خواندن/نوشتن پیامها در شبکه، به یک سرور با مشخصات زیر نیاز دارید:
🔹 ۱۶ گیگابایت RAM مورد نیاز
🔹 ۴ هسته CPU یا vCPU باهم
🔹 ۱ ترابایت فضای ذخیرهسازی آزاد
🔹شناسهٔ IP عمومی
🔹 باز بودن پورتهای 3381 - 3383 روی TCP و UDP
https://github.com/farcasterxyz/snapchain
GitHub
GitHub - farcasterxyz/snapchain: The open-source, canonical implementation of Farcaster's Snapchain network.
The open-source, canonical implementation of Farcaster's Snapchain network. - farcasterxyz/snapchain
👍1
COMPΞZ 🧬
خب اسنپچین چی هست؟ این Snapchain یک لایه ذخیرهسازی داده برای پروتکل اجتماعی Farcaster است. یک شبکه غیرمتمرکز همتابههمتا (P2P) مشابه بلاکچین است که دادههای ایجادشده توسط کاربران Farcaster را ذخیره میکند. اهداف اصلی Snapchain: ✅ توان عملیاتی بالا: نوشتهشده…
خب بخشی از برنامههای من بهم ریخت!
قرار بود روی قضیهٔ نود تمرکز کنیم، اما از این به بعد باید بریم روی سیستم اسنپچین که فقط مشابه بلاکچین هست نه خود اون! 😐 آی دهنت سرویس وارون! یهو یه چیزی رونمایی کردن کل برنامههامون بهم ریخت.
قرار بود روی قضیهٔ نود تمرکز کنیم، اما از این به بعد باید بریم روی سیستم اسنپچین که فقط مشابه بلاکچین هست نه خود اون! 😐 آی دهنت سرویس وارون! یهو یه چیزی رونمایی کردن کل برنامههامون بهم ریخت.
😢1
COMPΞZ 🧬
خب بخشی از برنامههای من بهم ریخت! قرار بود روی قضیهٔ نود تمرکز کنیم، اما از این به بعد باید بریم روی سیستم اسنپچین که فقط مشابه بلاکچین هست نه خود اون! 😐 آی دهنت سرویس وارون! یهو یه چیزی رونمایی کردن کل برنامههامون بهم ریخت.
از نظر فنی خیلی خوبه!
به هر حال، تیم به خوبی پیش میره و در بلند مدت سازو کار خیلی بیشتری رو میشه ایدهپردازی و توسعه داد.
ایدههای بیشتری به ذهنم رسید در بلند مدت میتونیم روشون فکر کنیم. 😄🔥👊🏼🚀
به هر حال، تیم به خوبی پیش میره و در بلند مدت سازو کار خیلی بیشتری رو میشه ایدهپردازی و توسعه داد.
ایدههای بیشتری به ذهنم رسید در بلند مدت میتونیم روشون فکر کنیم. 😄🔥👊🏼🚀
👍2
وسط اینهمه دنگ و فنگ بهروز شدن خودش داستانه.
با اینهمه موضوع فنی در حال تغییر و دگرگونی مگه وقت میکنیم بریم پست و کست بنویسیم آخه. 😣
با اینهمه موضوع فنی در حال تغییر و دگرگونی مگه وقت میکنیم بریم پست و کست بنویسیم آخه. 😣
🥴2😁1
COMPΞZ 🧬
وسط اینهمه دنگ و فنگ بهروز شدن خودش داستانه. با اینهمه موضوع فنی در حال تغییر و دگرگونی مگه وقت میکنیم بریم پست و کست بنویسیم آخه. 😣
بعد فکرشو بکن طرف میاد میگه کامپز به من تیپ نمیده! بهش تیپ ندین... 😂 من به چیا فکر میکنم اون به چی فکر میکنه!😩 تیپ کیلو چنده آخه اصل داستان اون پشت مشتاست برای ما. 😍🤣
👍3🤣3
COMPΞZ 🧬
خب جلسه تموم شد!!! 🔥 مهمترین موضوعات اینها بودند: پروتکل Farcaster در حال جایگزینی هابها با Snapchain Mainnet است. (موضوع مهم برای همهٔ توسعهدهندههاست). از ۱۲ آوریل به بعد، توسعهدهندگان باید از Snapchain برای خواندن و نوشتن دادهها استفاده کنند. از…
به زبان PHP هم نیاز داریم بهش اگه کسی آمادگی داره بهم اطلاع بده.
کلی کار برای انجام داریم، شاید این فرصت خوبی باشه برای اینکه بتونی بخشی از تیم توسعه باشی.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2
COMPΞZ 🧬
خب! درود بر برنامهنویس عالم! چالش سی روزه رو آغاز میکنم 🫵🏼✍🏼 اما هدف آموزش نحوهٔ کدنویسی با C++23 و Solidity. شما هم میتونید نکته برداری کنید، منم هدفم اینه هرچی به روز رسانی کردم رو یادداشت کنم تا دوباره برای خودم مرور بشه. هیچ سخت نیست، تنهایی پیش…
ویژگی std::basic_stacktrace کلاسی است که در استاندارد ۲۳ معرفی شده و برای ثبت تصویری (اسنپ شات) از «پشته فراخوانی» یا همان «stack trace» فعلی به کار میرود. این اطلاعات میتواند برای اشکالزدایی (debugging) مفید باشد، زیرا به شما امکان میدهد تا دنبالهای از فراخوانی توابعی که به یک نقطه خاص در اجرای برنامه شما منجر شدهاند را مشاهده کنید.
همچنین با استفاده از تابع عضو استاتیک ()std::basic_stacktrace::current میتوانید پشته فراخوانی را در نقطهای که این تابع فراخوانی میشود ثبت کنید. از طرفی std::basic_stacktrace به عنوان یک مخزن عمل میکند که اطلاعات مربوط به هر فراخوانی تابع در پشته فراخوانی را نگه میدارد. این اطلاعات در اشیاء std::stacktrace_entry ذخیره میشوند.
با وجود اینکه std::basic_stacktrace مانند یک مخزن استاندارد با iterators و توابع دسترسی عمل میکند، اما عمدتاً از "مفاهیم انتقال (move semantics) و عملیات مربوط به دسترسی ثابت را پشتیبانی میکند.
این الگوی کلاس به شما اجازه میدهد تا یک تخصیصدهنده سفارشی برای مدیریت حافظه مشخص کنید، که میتواند در سناریوهای خاصی مانند سیستمهای تعبیهشده (embedded) مفید باشد.
در این مثال، تابع bar ابتدا تابع foo را فراخوانی میکند و سپس از std::basic_stacktrace::current برای چاپ پشته فراخوانی فعلی استفاده میکند. خروجی نشان میدهد که پشته فراخوانی شامل سه فریم است: bar، foo و main.
#cpp20 #cpp23 #basic_stacktrace #چالش #سیروزه #رمضان #روز_بیست_و_پنجم
همچنین با استفاده از تابع عضو استاتیک ()std::basic_stacktrace::current میتوانید پشته فراخوانی را در نقطهای که این تابع فراخوانی میشود ثبت کنید. از طرفی std::basic_stacktrace به عنوان یک مخزن عمل میکند که اطلاعات مربوط به هر فراخوانی تابع در پشته فراخوانی را نگه میدارد. این اطلاعات در اشیاء std::stacktrace_entry ذخیره میشوند.
با وجود اینکه std::basic_stacktrace مانند یک مخزن استاندارد با iterators و توابع دسترسی عمل میکند، اما عمدتاً از "مفاهیم انتقال (move semantics) و عملیات مربوط به دسترسی ثابت را پشتیبانی میکند.
این الگوی کلاس به شما اجازه میدهد تا یک تخصیصدهنده سفارشی برای مدیریت حافظه مشخص کنید، که میتواند در سناریوهای خاصی مانند سیستمهای تعبیهشده (embedded) مفید باشد.
import <print>;
import <stacktrace>;
auto foo() -> void {
std::println("Inside foo(){}");
bar();
}
auto bar() -> void {
std::println("Inside bar(){}");
// Print the stack trace
auto stacktrace = std::basic_stacktrace::current();
for (const auto& entry : stacktrace) {
std::println("{}", entry.function_name());
}
}
auto main() -> int {
foo();
}
در این مثال، تابع bar ابتدا تابع foo را فراخوانی میکند و سپس از std::basic_stacktrace::current برای چاپ پشته فراخوانی فعلی استفاده میکند. خروجی نشان میدهد که پشته فراخوانی شامل سه فریم است: bar، foo و main.
#cpp20 #cpp23 #basic_stacktrace #چالش #سیروزه #رمضان #روز_بیست_و_پنجم
بخش تخصصی دوم (بهروز رسانی Solidity) |سربارگذاری توابع (Function Overloading)
در سالیدیتی، یک قرارداد میتواند چندین تابع با نام یکسان اما با انواع پارامترهای متفاوت داشته باشد. این فرایند «اضافه بارگذاری» (overloading) نامیده میشود و برای توابع به ارثرسیده نیز اعمال میشود و تقریباً مشابه سربارگذاری توابع در سیپلاسپلاس است.
مثال زیر اضافه بارگذاری تابع f در محدوده قرارداد A را نشان میدهد.
توابع اضافه بارگذاری شده همچنین در رابط خارجی (external interface) وجود دارند. اگر دو تابع قابل مشاهده خارجی از نظر نوع سالیدیتی متفاوت باشند اما از نظر نوع خارجی (external) یکسان باشند، خطا رخ میدهد.
هر دو نسخه از تابع f که بارگذاری اضافه شدهاند، علیرغم اینکه داخل سالیدیتی از هم جدا درنظر گرفته میشوند، در نهایت برای رابط باینری کاربردی (ABI) نوع دادهی آدرس «address» را قبول میکنند. به عبارت دیگر، برنامههای خارجی که با قرارداد شما کار میکنند فقط نوع دادهی «address» را برای هر دو تابع f میبینند، حتی اگر داخل خود قرارداد سالیدیتی شما این دو تابع با هم فرق داشته باشند.
در سالیدیتی، یک قرارداد میتواند چندین تابع با نام یکسان اما با انواع پارامترهای متفاوت داشته باشد. این فرایند «اضافه بارگذاری» (overloading) نامیده میشود و برای توابع به ارثرسیده نیز اعمال میشود و تقریباً مشابه سربارگذاری توابع در سیپلاسپلاس است.
مثال زیر اضافه بارگذاری تابع f در محدوده قرارداد A را نشان میدهد.
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.4.16 <0.9.0;
contract A {
function f(uint value) public pure returns (uint out) {
out = value;
}
function f(uint value, bool really) public pure returns (uint out) {
if (really)
out = value;
}
}
توابع اضافه بارگذاری شده همچنین در رابط خارجی (external interface) وجود دارند. اگر دو تابع قابل مشاهده خارجی از نظر نوع سالیدیتی متفاوت باشند اما از نظر نوع خارجی (external) یکسان باشند، خطا رخ میدهد.
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.4.16 <0.9.0;
// This will not compile
contract A {
function f(B value) public pure returns (B out) {
out = value;
}
function f(address value) public pure returns (address out) {
out = value;
}
}
contract B {
}
هر دو نسخه از تابع f که بارگذاری اضافه شدهاند، علیرغم اینکه داخل سالیدیتی از هم جدا درنظر گرفته میشوند، در نهایت برای رابط باینری کاربردی (ABI) نوع دادهی آدرس «address» را قبول میکنند. به عبارت دیگر، برنامههای خارجی که با قرارداد شما کار میکنند فقط نوع دادهی «address» را برای هر دو تابع f میبینند، حتی اگر داخل خود قرارداد سالیدیتی شما این دو تابع با هم فرق داشته باشند.
COMPΞZ 🧬
ویژگی std::basic_stacktrace کلاسی است که در استاندارد ۲۳ معرفی شده و برای ثبت تصویری (اسنپ شات) از «پشته فراخوانی» یا همان «stack trace» فعلی به کار میرود. این اطلاعات میتواند برای اشکالزدایی (debugging) مفید باشد، زیرا به شما امکان میدهد تا دنبالهای…
کلاس الگوی std::flat_map در استاندارد ۲۳ یکی از اعضای موجود در مخازن تخت (Flat) است؛ برخلاف مخازن استاندارد مانند set، map، multimap و multiset که از درختان جستجوی دودویی برای ذخیره دادهها استفاده میکنند این نسخهها از مخازن ترتیبی (مانند std::vector، std::array یا حتی std::deque) به عنوان ساختار زیربنایی خود استفاده میکنند. اعضای معرفی شده نسخهٔ تخت از map | set | multimap | multiset میباشد که به صورت زیر خواهند بود:
استفاده از مخازن ترتیبی به جای درختان جستجوی دودویی، مزایای متعددی را برای مخازن تخت به ارمغان میآورد و برای مواردی که درج، حذف و تکرار مکرر دادهها رایج است، ایدهآل هستند:
۱) عملکرد بهتر: مخازن تخت معمولاً عملکرد بهتری برای عملیاتهایی مانند درج، حذف و تکرار ارائه میکنند.
۲) استفاده از حافظه کمتر: مخازن تخت معمولاً حافظه کمتری نسبت به مخازن انجمنی استاندارد استفاده میکنند.
مخازن تخت در استاندارد ۲۳ یک ابزار جدید قدرتمند هستند که میتوانند در بسیاری از موارد استفاده، عملکرد و کارایی برنامه شما را بهبود بخشند.
#cpp20 #cpp23 #flat_map #چالش #سیروزه #رمضان #روز_بیست_و_ششم
std::flat_map
std::flat_set
std::flat_multimap
std::flat_multiset
استفاده از مخازن ترتیبی به جای درختان جستجوی دودویی، مزایای متعددی را برای مخازن تخت به ارمغان میآورد و برای مواردی که درج، حذف و تکرار مکرر دادهها رایج است، ایدهآل هستند:
۱) عملکرد بهتر: مخازن تخت معمولاً عملکرد بهتری برای عملیاتهایی مانند درج، حذف و تکرار ارائه میکنند.
۲) استفاده از حافظه کمتر: مخازن تخت معمولاً حافظه کمتری نسبت به مخازن انجمنی استاندارد استفاده میکنند.
import <print>;
import <flat_map>;
auto main() -> int {
std::flat_map<std::string, int> ages = {
{"Kambiz", 35},
{"Hadi", 40},
{"Mohammad", 35}
};
for (const auto& [name, age] : ages) {
std::println("{}, is {}, years old.", name, age);
}
return 0;
}
مخازن تخت در استاندارد ۲۳ یک ابزار جدید قدرتمند هستند که میتوانند در بسیاری از موارد استفاده، عملکرد و کارایی برنامه شما را بهبود بخشند.
#cpp20 #cpp23 #flat_map #چالش #سیروزه #رمضان #روز_بیست_و_ششم