<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های yousef saeedian</title>
        <link>https://virgool.io/feed/@yousefsaeedian</link>
        <description>AI &amp; ML; Python Programmer And Interested In Decentralized World</description>
        <language>fa</language>
        <pubDate>2026-06-07 08:55:06</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/490850/avatar/vEV9SW.jpg?height=120&amp;width=120</url>
            <title>yousef saeedian</title>
            <link>https://virgool.io/@yousefsaeedian</link>
        </image>

                    <item>
                <title>روز ۱۳/‍۱۰۰ - آشنایی با آرایه‌ها در زبان سالیدیتی</title>
                <link>https://virgool.io/solidity101/%D8%B1%D9%88%D8%B2-%DB%B1%DB%B3%DB%B1%DB%B0%DB%B0-%D8%A2%D8%B4%D9%86%D8%A7%DB%8C%DB%8C-%D8%A8%D8%A7-%D8%A2%D8%B1%D8%A7%DB%8C%D9%87-%D9%87%D8%A7-%D8%AF%D8%B1-%D8%B2%D8%A8%D8%A7%D9%86-%D8%B3%D8%A7%D9%84%DB%8C%D8%AF%DB%8C%D8%AA%DB%8C-cbntr82mk0pt</link>
                <description>در این مقاله، ما به مفهوم آرایه‌ها(arrays) در Solidity، یک زبان برنامه‌نویسی با تایپ ایستا که برای توسعه قراردادهای هوشمند بر روی بلاک‌چین اتریوم استفاده می‌شود، می‌پردازیم. آرایه‌ها یک ساختار داده ضروری در برنامه‌نویسی هستند که به ما امکان ذخیره و دستکاری مجموعه‌هایی از عناصر را می‌دهند. Solidity روش‌های مختلفی برای کار با آرایه‌ها ارائه می‌دهد، از جمله مقداردهی اولیه، دسترسی، اصلاح و حذف عناصر. ما در این مقاله به پوشش جزئیات این جنبه‌ها و ارائه نمونه‌های کد برای نشان دادن نحوه استفاده از آن‌ها می‌پردازیم.#100DaysOfSolidity 📚 Array: An Introduction to Solidity Language #13آغاز به کار با array در Solidity:در Solidity، آرایه‌ها می‌توانند اندازه ثابت در زمان کامپایل یا اندازه داینامیک داشته باشند. در این بخش به بررسی روش‌های مختلف برای ایجاد اولیه یک آرایه می‌پردازیم:آرایه با اندازه داینامیک: &#x60;&#x60;&#x60;solidityuint[] public arr;uint[] public arr2 = [1, 2, 3];&#x60;&#x60;&#x60;در مثال اول، آرایه‌ای داینامیک به نام arr بدون تعیین اندازه اولیه تعریف می‌کنیم. کلیدواژه public این آرایه را از خارج از قرارداد قابل دسترس می‌کند. در مثال دوم، arr2 با سه عنصر 1، 2 و 3 مقداردهی اولیه می‌شود.آرایه با اندازه ثابت:&#x60;&#x60;&#x60;solidityuint[10] public myFixedSizeArr;&#x60;&#x60;&#x60;در اینجا، یک آرایه با اندازه ثابت به نام myFixedSizeArr با طول ۱۰ تعریف می‌کنیم. آرایه‌های با اندازه ثابت، طولی از پیش تعیین شده دارند که در طول زمان اجرا قابل تغییر نیست.دسترسی و تغییر عناصر آرایه در سالیدیتیسالیدیتی توابع و تکنیک‌های مختلفی را برای دسترسی و تغییر عناصر آرایه ارائه می‌دهد. در این بخش به بررسی برخی از آنها می‌پردازیم.1. دسترسی به عناصر&#x60;&#x60;&#x60;solidityfunction get(uint i) public view returns (uint) {return arr[i];}&#x60;&#x60;&#x60;تابع get به ما اجازه می دهد تا مقدار مربوط به شاخص خاص i را از آرایه arr استخراج کنیم.۲. بازگرداندن تمام عناصر آرایه:&#x60;&#x60;&#x60;solidityfunction getArr() public view returns (uint[] memory) {return arr;}&#x60;&#x60;&#x60;تابع getArr کل آرایه arr را برمی‌گرداند. با این حال، هنگام استفاده از این روش با آرایه‌هایی که می‌توانند به‌طور نامحدود رشد کنند، احتیاط کنید، زیرا می‌تواند حجم قابل توجهی از گس را مصرف کند.۳. افزودن عناصر به انتها(append):&#x60;&#x60;&#x60;solidityfunction push(uint i) public {arr.push(i);}&#x60;&#x60;&#x60;تابع push عنصر جدید i را به انتهای آرایه arr اضافه می‌کند و طول آن را به اندازه یک واحد افزایش می‌دهد.۴. پاک‌ کردن عناصر از آرایه (remove):&#x60;&#x60;&#x60;solidityfunction pop() public {arr.pop();}&#x60;&#x60;&#x60;تابع pop آخرین عنصر آرایه arr را حذف و طول آن را به اندازه یک واحد کاهش می‌دهد.۵. طول آرایه:‌&#x60;&#x60;&#x60;solidityfunction getLength() public view returns (uint) {return arr.length;}&#x60;&#x60;&#x60;تابع getLength با دریافت آرایه arr به عنوان ورودی، طول آن را محاسبه کرده و به عنوان خروجی برمی‌گرداند.۶. حذف کردن عناصر:&#x60;&#x60;&#x60;solidityfunction remove(uint index) public {delete arr[index];}&#x60;&#x60;&#x60;تابع remove عنصر موجود در شاخص مشخص شده index در آرایه arr را حذف می کند. کلمه کلیدی delete مقدار آن شاخص را به مقدار پیش فرض آن (در این مورد 0) بازنشانی می کند بدون اینکه طول آرایه را تغییر دهد.۷. کار با آرایه‌های حافظه:&#x60;&#x60;&#x60;solidityfunction examples() external {uint[] memory a = new uint[](5);}&#x60;&#x60;&#x60;در تابع examples، نحوه ایجاد یک آرایه حافظه با اندازه ثابت 5 را نشان می‌دهیم. آرایه‌های حافظه زمانی مفید هستند که نیاز به ایجاد آرایه‌های موقت در داخل یک تابع داشته باشید.روش‌های حذف عنصر از آرایه:در ادامه به بررسی دو روش مختلف برای حذف عناصر از یک آرایه در زبان برنامه نویسی سالیدیتی می پردازیم:حذف با جابجایی عناصر:contract ArrayRemoveByShifting {
 uint[] public arr;
function remove(uint _index) public {
 require(_index &lt; arr.length, &amp;quotindex out of bound&amp;quot);
for (uint i = _index; i &lt; arr.length - 1; i++) {
 arr[i] = arr[i + 1];
 }
 arr.pop();
 }
function test() external {
 arr = [1, 2, 3, 4, 5];
 remove(2);
 // [1, 2, 4, 5]
 assert(arr[0] == 1);
 assert(arr[1] == 2);
 assert(arr[2] == 4);
 assert(arr[3] == 5);
 assert(arr.length == 4);
arr = [1];
 remove(0);
 // []
 assert(arr.length == 0);
 }
}در این مثال، تابع remove عناصری را که بعد از شاخص مشخص شده _index قرار دارند، به سمت چپ جابجا می‌کند. سپس از تابع pop برای حذف عنصر تکراری که در انتهای لیست قرار دارد استفاده می‌کند.۲. حذف با جایگزینی با عنصر آخر:contract ArrayReplaceFromEnd {
 uint[] public arr;
function remove(uint index) public {
 arr[index] = arr[arr.length - 1];
 arr.pop();
 }
function test() public {
 arr = [1, 2, 3, 4];
remove(1);
 // [1, 4, 3]
 assert(arr.length == 3);
 assert(arr[0] == 1);
 assert(arr[1] == 4);
 assert(arr[2] == 3);
remove(2);
 // [1, 4]
 assert(arr.length == 2);
 assert(arr[0] == 1);
 assert(arr[1] == 4);
 }
}در این مثال، تابع remove عنصر در موقعیت دلخواه index را با آخرین عنصر در آرایه جایگزین می‌کند. سپس از تابع pop برای حذف آخرین عنصر تکراری استفاده می‌کند و به طور موثر عنصر مورد نظر را حذف می‌کند.نتیجه‌گیری:در این مقاله، با آرایه ها در سالیدیتی آشنا شدیم. یاد گرفتیم که چطور آرایه ها را بسازیم، مقداردهی اولیه انجام دهیم، به بلاک‌ هایشان دسترسی پیدا کنیم، مقادیرشان را عوض کنیم و حتی حذفشان کنیم. همه این موارد را با مثال های کد هم تمرین کردیم. آرایه ها ابزارهای قدرتمندی هستند که به ما کمک می کنند تا با گروهی از اطلاعات به طور مرتب کار کنیم. موقع کار با آرایه هایی که ممکن است اندازه شان هیچی توقف نداشته باشد، باید حواسمان باشد که چه نوع آرایه ای انتخاب می کنیم و چقدر برای انجام عملیات روی آن ها gas (گس) مصرف می شود. اینکه بتوانیم خوب با آرایه ها در سالیدیتی کار کنیم، برای ساختن قراردادهای هوشمند پیچیده و برنامه های غیرمتمرکز (dApp) روی بلاکچین اتریوم خیلی مهم است.🔸 این مقاله،از مقالات ترجمه شده از سالیدیتی آکادمی است برای خواندن مقاله اصلی می‌توانید به لینک زیر مراجعه کنید: https://medium.com/@solidity101/100daysofsolidity-array-an-introduction-to-solidity-language-13-e87bc7edc3e6 🔸 شما می‌توانید برای خواندن ادامه مقالات ترجمه شده این آکادمی به سالیدیتی آکادمی مراجعه کنید.</description>
                <category>yousef saeedian</category>
                <author>yousef saeedian</author>
                <pubDate>Thu, 18 Apr 2024 13:03:00 +0330</pubDate>
            </item>
                    <item>
                <title>روز ۱۲/۱۰۰ -  کاوش در قدرت mapping در سالیدیتی</title>
                <link>https://virgool.io/solidity101/%D8%B1%D9%88%D8%B2-%DB%B1%DB%B2%DB%B1%DB%B0%DB%B0-%DA%A9%D8%A7%D9%88%D8%B4-%D8%AF%D8%B1-%D9%82%D8%AF%D8%B1%D8%AA-mapping-%D8%AF%D8%B1-%D8%B3%D8%A7%D9%84%DB%8C%D8%AF%DB%8C%D8%AA%DB%8C-arvzmln9z5wg</link>
                <description>خوش آمدید به مقاله دوازدهم از مجموعه #100DaysOfSolidity! در این مقاله، به دنیای mappings در زبان برنامه‌نویسی سالیدیتی خواهیم پرداخت. mapping ها یکی از ساختارهای بنیادین داده در سالیدیتی هستند که به توسعه‌دهندگان امکان می‌دهند تا زوج‌های قدرتمند key-value برای ذخیره و بازیابی کارآمد داده‌ها ایجاد کنند. ما به بررسی نحو، ویژگی‌ها و کاربرد mappingها به همراه مثال‌های عملی برای بهبود درک شما خواهیم پرداخت. پس بیایید شروع کنیم و قدرت mappingها را در سالیدیتی کشف کنیم! #100DaysOfSolidity 🔍 Exploring the Power of Mapping in Solidity 🔍مفهوم mappingدر زبان برنامه‌نویسی سالیدیتی، mappingها با استفاده از سینتکس mapping(keyType =&gt; valueType) ایجاد می‌شوند. keyType می‌تواند هر نوع داده داخلی مانند address، bytes، string و یا حتی یک قرارداد دیگر باشد. از طرف دیگر، valueType می‌تواند هر نوعی، از جمله یک mapping دیگر یا یک آرایه باشد. mappingها روشی کارآمد برای مرتبط کردن مقادیر با کلیدهای منحصر به فرد و بازیابی آسان آنها در زمان‌های بعدی ارائه می‌کنند.ایجاد یک mapping سادهدر ابتدای این آموزش، به عنوان مقدمه، به بررسی یک نمونه ساده از نگاشت می‌پردازیم به کد زیر دقت کنید:// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;
contract Mapping {
 // Mapping from address to uint
 mapping(address =&gt; uint) public myMap;
function get(address _addr) public view returns (uint) {
 // Mapping always returns a value.
 // If the value was never set, it will return the default value.
 return myMap[_addr];
 }
function set(address _addr, uint _i) public {
 // Update the value at this address
 myMap[_addr] = _i;
 }
function remove(address _addr) public {
 // Reset the value to the default value.
 delete myMap[_addr];
 }
}در این قرارداد Mapping، یک Mapping به نام myMap تعریف شده است که آدرس‌ها (address) را به اعداد صحیح بدون علامت (uint) نگاشت می‌کند. تابع get به ما امکان می‌دهد مقدار مرتبط با یک آدرس خاص را بازیابی کنیم. اگر مقدار قبلاً برای آن آدرس تنظیم نشده باشد، مقدار پیش‌فرض uint که 0 است را برمی‌گرداند. تابع set مقدار را در یک آدرس مشخص به‌روزرسانی می‌کند و تابع remove مقدار را به مقدار پیش‌فرض بازنشانی می‌کند.مپینگ تو در تو (Nested mapping)ـMappings زمانی که به صورت تو در تو استفاده شوند، قدرت بیشتری پیدا می‌کنند. برای درک بهتر این مفهوم، به مثالی از Mappings تو در تو می‌پردازیم:contract NestedMapping {
 // Nested mapping (mapping from address to another mapping)
 mapping(address =&gt; mapping(uint =&gt; bool)) public nested;
function get(address _addr1, uint _i) public view returns (bool) {
 // You can get values from a nested mapping
 // even when it is not initialized
 return nested[_addr1][_i];
 }
function set(address _addr1, uint _i, bool _boo) public {
 nested[_addr1][_i] = _boo;
 }
function remove(address _addr1, uint _i) public {
 delete nested[_addr1][_i];
 }
}در قرارداد NestedMapping، یک سیستم ذخیره‌سازی دو سطحی به نام nested تعبیه شده است. در این سیستم، هر آدرس (address) به یک سیستم ذخیره‌سازی دیگر مرتبط می‌شود که در آن، هر عدد صحیح بدون علامت (uint) به یک مقدار درست یا غلط (bool) نگاشت می‌شود. این کار، سازماندهی اطلاعات را به گونه‌ای کارآمد و منظم امکان‌پذیر می‌کند و به شما اجازه می‌دهد تا به سرعت به مقادیر مورد نظر خود بر اساس آدرس و شاخص عدد صحیح دسترسی پیدا کنید.تحلیل قراردادهای هوشمندحال، به بررسی دقیق رفتار و عملکرد قراردادهای هوشمند ارائه شده می‌پردازیم.قرارداد Mapping:این قرارداد نمونه‌ای از کاربرد پایه mappingها را نشان می‌دهد. این قرارداد شامل سه تابع است:1. تابع get: این تابع یک آدرس به نام _addr به عنوان ورودی دریافت می‌کند و مقدار عدد صحیح بدون علامت مربوط به آن آدرس را که در مپینگ myMap ذخیره شده است، بازمی‌گرداند. اگر هیچ مقداری برای آن آدرس در مپینگ وجود نداشته باشد، مقدار پیش‌فرض uint که 0 است بازمی‌گرداند.2. تابع set: به کاربران اجازه می‌دهد تا مقدار را در یک آدرس خاص _addr در نگاشت myMap به‌روزرسانی کنند. این تابع یک عدد بدون علامت _i را به عنوان مقدار جدید دریافت می‌کند و آن را به آدرس مربوطه اختصاص می‌دهد.3. تابع remove: با استفاده از تابع remove، کاربران می‌توانند مقدار مربوط به آدرس مشخص شده _addr در نگاشت myMap را بازنشانی کنند. این تابع مقدار را حذف کرده و آن را به مقدار پیش‌فرض uint که 0 است، بازنشانی می‌کند.قرارداد NestedMapping:قرارداد NestedMapping نحوه استفاده از mappingهای تو در تو را نشان می‌دهد. این شامل سه تابع است:تابع get: این تابع یک آدرس (_addr1) و یک عدد صحیح بدون علامت (_i) را به عنوان پارامتر دریافت کرده و مقدار بولئینی مرتبط با نگاشت تو در تو (nested) را برمی‌گرداند. حتی اگر نگاشت تو در تو مقداردهی نشده باشد، سالیدیتی مقدار پیش‌فرض bool که false است را برمی‌گرداند.تابع set:  تابع set به کاربران امکان می‌دهد مقدار bool را در نگاشت تو در تو (nested) به‌روزرسانی کنند. این تابع یک آدرس (_addr1)، یک عدد صحیح بدون علامت (_i) و یک مقدار bool (_boo) را به عنوان ورودی دریافت می‌کند و مقدار bool را به آدرس و اندیس صحیح مربوطه اختصاص می‌دهد.تابع remove:  تابع remove مقدار bool را در یک آدرس خاص (_addr1) و عدد صحیح بدون علامت (_i) در نگاشت تو در تو (nested) حذف می‌کند. مقدار حذف‌شده به مقدار پیش‌فرض bool که false است، بازنشانی می‌شود.نتیجه‌گیریدر این مقاله، به بررسی قدرت مپینگ‌ها (Mappings) در زبان برنامه‌نویسی سالیدیتی پرداختیم. نحوه ایجاد mapping ساده و همچنین استفاده از mapping های تو در تو برای ساختارهای داده پیچیده‌تر را فرا گرفتیم. مپینگ ‌ها روشی کارآمد و انعطاف‌پذیر برای ذخیره‌سازی و بازیابی اطلاعات در قراردادهای سالیدیتی ارائه می‌کنند و به همین دلیل، ابزاری ضروری برای توسعه قراردادهای هوشمند به شمار می‌روند.به خاطر داشته باشید که ساختارهای نگاشت (mappings) قابل پیمایش نیستند، به این معنی که برای دسترسی به مقادیر آنها، باید کلید دقیق را مشخص کنید. علاوه بر این، هنگام کار با ساختارهای نگاشت، مهم است که مقادیر پیش فرض را مدیریت کنید تا در مواردی که مقادیر به طور صریح تنظیم نشده اند، رفتار صحیح تضمین شود.با تسلط بر &quot;مفاهیم مپینگ&quot; در زبان برنامه‌نویسی Solidity، ابزاری قدرتمند برای مدیریت و سازماندهی داده‌ها در قراردادهای هوشمند خود به دست آورده‌اید. استفاده هوشمندانه از این دانش شما را برای ساخت برنامه‌های غیرمتمرکز قوی و کارآمد مجهز خواهد کرد.🔸 این مقاله،از مقالات ترجمه شده از سالیدیتی آکادمی است برای خواندن مقاله اصلی می‌توانید به لینک زیر مراجعه کنید: https://medium.com/@solidity101/100daysofsolidity-exploring-the-power-of-mapping-in-solidity-cca834c6c6c0 🔸 شما می‌توانید برای خواندن ادامه مقالات ترجمه شده این آکادمی به سالیدیتی آکادمی مراجعه کنید.</description>
                <category>yousef saeedian</category>
                <author>yousef saeedian</author>
                <pubDate>Mon, 15 Apr 2024 16:10:24 +0330</pubDate>
            </item>
                    <item>
                <title>روز ۱۱/۱۰۰ - #100DaysOfSolidity  تسلط بر حلقه های For و While در Solidity</title>
                <link>https://virgool.io/solidity101/%D8%B1%D9%88%D8%B2-%DB%B1%DB%B1%DB%B1%DB%B0%DB%B0-100daysofsolidity-%D8%AA%D8%B3%D9%84%D8%B7-%D8%A8%D8%B1-%D8%AD%D9%84%D9%82%D9%87-%D9%87%D8%A7%DB%8C-for-%D9%88-while-%D8%AF%D8%B1-solidity-mjip3u1btox2</link>
                <description>زبان برنامه‌نویسی Solidity که برای قراردادهای هوشمند بر روی بلاک‌چین اتریوم به کار می‌رود، از ساختارهای مختلف کنترل جریان از جمله حلقه‌ها پشتیبانی می‌کند. در این مقاله، به بررسی دقیق حلقه‌های for و while در Solidity خواهیم پرداخت. حلقه‌ها به توسعه‌دهندگان این امکان را می‌دهند تا یک بلوک کد را به صورت مکرر اجرا کنند تا زمانی که شرط خاصی برقرار شود. با این حال، استفاده محتاطانه از حلقه‌ها و اجتناب از تکرارهای نامحدود برای جلوگیری از مشکلات محدودیت گس که منجر به شکست تراکنش می‌شود، بسیار مهم است. بیایید حلقه‌های for و while در Solidity را بررسی کرده و نحوه استفاده مؤثر آن‌ها را در توسعه قراردادهای هوشمند بیاموزیم.#100DaysOfSolidity 📝 Mastering For &amp; While Loops in Solidityحلقه for: تکرار با دقتحلقه for یک ابزار رایج در برنامه نویسی است که به اجرای مکرر و مشخص یک مجموعه از دستورات اجازه می دهد. این حلقه از سه جزء اصلی تشکیل شده است: مقدار شروع(initialization)، معیار تکرار و به روز رسانی شمارنده. به کد Solidity زیر توجه کنید:// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;
contract Loop {
 function loop() public {
 // for loop
 for (uint i = 0; i &lt; 10; i++) {
 if (i == 3) {
 // Skip to next iteration with continue
 continue;
 }
 if (i == 5) {
 // Exit loop with break
 break;
 }
 // Code block executed for each iteration
 }
 }
}در این مثال، متغیر i را با مقدار 0 مقداردهی اولیه می‌کنیم و شرط i &lt; 10 را تعریف می‌کنیم. تا زمانی که این شرط برقرار باشد، حلقه تکرار می‌کند. درون حلقه، عبارات شرطی‌ای داریم که کاربرد کلمات کلیدی continue و break را نشان می‌دهند. هنگامی که i برابر با 3 باشد، عبارت continue به سراغ تکرار بعدی می‌رود و به طور مؤثر از باقی کدهای آن تکرار صرف‌نظر می‌کند. از طرف دیگر، زمانی که i برابر با 5 شود، عبارت break حلقه را زودتر از موعد خاتمه می‌دهد و باعث خروج جریان برنامه از کل حلقه می‌شود.حلقه while: تکرار تا زمانی که شرط برقرار استحلقه while در سالیدیتی روشی انعطاف‌پذیرتر برای تکرار ارایه می‌دهد، زیرا قبل از هر بار تکرار، یک شرط را ارزیابی می‌کند. این حلقه تا زمانی که شرط درست باشد ادامه می‌یابد. در زیر نمونه‌ای از حلقه while در سالیدیتی آمده است:// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;
contract Loop {
 function loop() public {
 // while loop
 uint j;
 while (j &lt; 10) {
 j++;
 // Code block executed for each iteration
 }
 }
}در این قطعه کد، متغیری به نام j تعریف و مقدار اولیه آن صفر قرار داده می‌شود. شرط حلقه while که j &lt; 10 است، قبل از هر بار تکرار ارزیابی می‌شود. تا زمانی که این شرط درست باشد، بلوک کد داخل حلقه اجرا می‌شود. در این حالت، مقدار j در هر بار تکرار به مقدار 1 افزایش می‌یابد. این حلقه زمانی که j برابر یا بیشتر از 10 شود، متوقف می‌شود.نکات کلیدی و شیوه‌های بهینهدر هنگام استفاده از حلقه‌ها در Solidity، احتیاط برای جلوگیری از پیامدهای ناخواسته ضروری است. چند نکته و بهترین روش برای به خاطر سپردن وجود دارد:۱.محدودیت گس(Gas limit): حلقه‌های Solidity در هر تکرار گس مصرف می‌کنند. حلقه‌های نامحدود یا حلقه‌هایی با تعداد تکرارهای بسیار زیاد می‌توانند منجر به خطاهای &quot;gas limit exceeded errors&quot; شوند که باعث عدم موفقیت تراکنش می‌شود. همیشه مطمئن شوید که حلقه‌های شما حداکثر معقولی دارند یا بر روی یک آرایه با اندازه ثابت یا مجموعه شناخته‌شده از عناصر تکرار می‌شوند.2.کارایی حلقه(Loop Efficiency): به طور کلی، توصیه می‌شود که میزان محاسبات انجام شده در حلقه‌ها را به حداقل برسانید، زیرا هر تکرار به هزینه گس (Gas) اضافه می‌کند. در صورت امکان، محاسبات پیچیده یا تعاملات خارجی را برای بهینه‌سازی مصرف گس به خارج از حلقه منتقل کنید.۳.هزینه‌های ذخیره‌سازی(Storage Costs): هنگام کار با حلقه‌ها، به هزینه‌های ذخیره‌سازی توجه داشته باشید. اختصاص مقادیر به متغیرهای ذخیره‌سازی(storage variables) در حلقه‌ها می‌تواند منجر به چندین نوشتن در حافظه شود که می‌تواند پرهزینه باشد. برای کاهش عملیات ذخیره‌سازی، از متغیرهای حافظه یا بهینه‌سازی ساختارهای داده استفاده کنید.4. انسجام نهایی(Eventual Consistency): به دلیل ماهیت ناهمزمان اجرای بلاکچین، برخی از تغییرات ایجاد شده در یک حلقه ممکن است برای سایر قراردادها یا سیستم‌های خارجی بلافاصله قابل مشاهده نباشند. این موضوع را هنگام طراحی قراردادهای هوشمند در نظر داشته باشید و از لحاظ انسجام نهایی، به آن توجه کنید.نتیجه‌گیری:در این مقاله، حلقه های for و while در Solidity را بررسی کردیم، که دو ساختار ضروری کنترل جریان هستند که اجرای مکرر بلوک های کد را امکان پذیر می سازند. ما به نحوۀ عملکرد و کارکرد این حلقه ها نگاه کردیم و ملاحظات و بهترین شیوه هایی را که هنگام کار با حلقه ها در Solidity باید رعایت کرد، مورد بحث قرار دادیم. با استفاده موثر و کارآمد از حلقه ها، توسعه دهندگان می توانند قراردادهای هوشمند ایجاد کنند که به طور بهینه عمل کرده و از خطرات بالقوه مرتبط با مصرف گس و خرابی تراکنش جلوگیری کنند.در هنگام نوشتن قراردادهای هوشمند در Solidity، همواره موارد استفاده خاص خود را به دقت بررسی کرده و به طور کامل هزینه‌های محاسباتی (Gas Fee) و محدودیت‌های بالقوه مرتبط با حلقه‌ها را در نظر بگیرید. با تسلط بر ساختارها و پیامدهای حلقه‌ها، قادر به نگارش قراردادهای هوشمند قدرتمند و کارآمد خواهید بود.🔸 این مقاله،از مقالات ترجمه شده از سالیدیتی آکادمی است برای خواندن مقاله اصلی می‌توانید به لینک زیر مراجعه کنید: https://medium.com/@solidity101/100daysofsolidity-mastering-for-while-loops-in-solidity-11-a3c406e0ee60 🔸 شما می‌توانید برای خواندن ادامه مقالات ترجمه شده این آکادمی به سالیدیتی آکادمی مراجعه کنید.</description>
                <category>yousef saeedian</category>
                <author>yousef saeedian</author>
                <pubDate>Sat, 13 Apr 2024 10:04:05 +0330</pubDate>
            </item>
                    <item>
                <title>روز ۱۰/۱۰۰ - Solidity If/else و راهنمای جامع گزاره‌های شرطی در زبان سالیدیتی</title>
                <link>https://virgool.io/solidity101/%D8%B1%D9%88%D8%B2-%DB%B1%DB%B0%DB%B1%DB%B0%DB%B0-solidity-ifelse-%D9%88-%D8%B1%D8%A7%D9%87%D9%86%D9%85%D8%A7%DB%8C-%D8%AC%D8%A7%D9%85%D8%B9-%DA%AF%D8%B2%D8%A7%D8%B1%D9%87-%D9%87%D8%A7%DB%8C-%D8%B4%D8%B1%D8%B7%DB%8C-%D8%AF%D8%B1-%D8%B2%D8%A8%D8%A7%D9%86-%D8%B3%D8%A7%D9%84%DB%8C%D8%AF%DB%8C%D8%AA%DB%8C-ncshxobuysre</link>
                <description>در زبان برنامه‌نویسی Solidity که برای نوشتن قراردادهای هوشمند در بلاک‌چین اتریوم استفاده می‌شود، از عبارات شرطی مانند if، else if و else پشتیبانی می‌شود. این عبارات به توسعه‌دهندگان اجازه می‌دهند تا با توجه به شرایط خاص، لاجیک را پیاده‌سازی کرده و تصمیم‌گیری کنند. در این مقاله، ما به پیچیدگی‌های استفاده از عبارات if/else در Solidity می‌پردازیم، نحو (ساختار) آن‌ها را بررسی می‌کنیم و مثال‌های دنیای واقعی را برای نشان دادن کاربرد آن‌ها ارائه می‌دهیم. بنابراین، بیایید به دنیای عبارات شرطی Solidity نگاهی عمیق بیندازیم و آن‌ها را بررسی کنیم!#100DaysOfSolidity 📝 Solidity If/Elseدرک دستورات شرطی if/elseعبارات شرطی if/else در زبان سالیدیتی، مشابه سایر زبان‌های برنامه‌نویسی، به توسعه‌دهندگان اجازه می‌دهند تا با اتکا به شرایط خاص، جریان کد خود را کنترل کنند. این شرایط می‌توانند با استفاده از عملگرهای مقایسه‌ای مختلف مانند کمتر از (&lt;)، بیشتر از (&gt;), مساوی با (==) و غیره ارزیابی شوند. عبارات if/else بلوک‌های مختلف کد را بسته به اینکه شرایط برآورده شده باشند یا نه، اجرا می‌کنند.سینتکس: ساختار پایه ای دستور if/else در Solidity به شرح زیر است:&#x60;&#x60;&#x60;if (condition) {// code to be executed if the condition is true} else if (condition) {// code to be executed if the condition is true} else {// code to be executed if none of the above conditions are true}&#x60;&#x60;&#x60;در نحو بالا، &quot;condition&quot; بیانگر عبارت منطقی است که برای تعیین بلوک کد مورد نظر برای اجرا ارزیابی می شود. می توان از چندین بلوک else if برای بررسی شرایط اضافی استفاده کرد و بلوک else اختیاری است و زمانی اجرا می شود که هیچ یک از شرایط قبلی برقرار نباشد.مثال یک قرارداد هوشمندبرای درک بهتر کاربرد عبارات شرطی if/else در زبان برنامه‌نویسی سالیدیتی، به بررسی مثال زیر می‌پردازیم:// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;
contract IfElse {
 function foo(uint x) public pure returns (uint) {
 if (x &lt; 10) {
 return 0;
 } else if (x &lt; 20) {
 return 1;
 } else {
 return 2;
 }
 }
function ternary(uint _x) public pure returns (uint) {
 // if (_x &lt; 10) {
 // return 1;
 // }
 // return 2;
// shorthand way to write if/else statement
 // the &amp;quot?&amp;quot operator is called the ternary operator
 return _x &lt; 10 ? 1 : 2;
 }
}در این قرارداد، دو تابع داریم: foo و ternary. به بررسی هر کدام از آنها به صورت جداگانه می‌پردازیم.تابع foo:تابع foo یک آرگومان x را دریافت می‌کند و یک مقدار uint را برمی‌گرداند. این تابع از عبارات if/else برای تعیین مقدار بازگشتی مناسب بر اساس مقدار x استفاده می‌کند. اگر x کمتر از 10 باشد، 0 را برمی‌گرداند. اگر x بین 10 و 20 باشد، 1 را برمی‌گرداند. در غیر این صورت، 2 را برمی‌گرداند.تابع ternary:تابع ternary یک آرگومان _x را دریافت می‌کند و یک مقدار uint را برمی‌گرداند. این تابع روش جایگزینی برای نوشتن عبارات if/else با استفاده از عملگر سه‌گانه ارائه می‌دهد. عملگر سه‌گانه که با نماد &quot;?&quot; نشان داده می‌شود، به توسعه‌دهندگان اجازه می‌دهد تا عبارات if/else مختصری را در یک خط بنویسند. در این مثال، اگر _x کمتر از 10 باشد، 1 را برمی‌گرداند، در غیر این صورت 2 را برمی‌گرداند.بررسی دقیق قرارداد هوشمند:برای درک بهتر عملکرد و شرایط بررسی شده در تابع foo، به تحلیل دقیق آن می‌پردازیم:function foo(uint x) public pure returns (uint) {
 if (x &lt; 10) {
 return 0;
 } else if (x &lt; 20) {
 return 1;
 } else {
 return 2;
 }
}تابع foo یک عدد صحیح بدون علامت (uint) به نام x را به عنوان ورودی دریافت می‌کند و بر اساس بررسی‌های شرطی، یک عدد صحیح بدون علامت را به عنوان خروجی برمی‌گرداند. در ادامه نحوه عملکرد عبارات شرطی if/else در داخل این تابع شرح داده شده است.۱. اگر مقدار x کمتر از 10 باشد، شرط x &lt; 10 به True ارزیابی می‌شود و بلوک کد داخل اولین عبارت if اجرا می‌شود. در نهایت، این کد 0 را به عنوان نتیجه بازمی‌گرداند.۲. اگر شرط اول برقرار نباشد، کنترل به عبارت else if (x &lt; 20) می‌رود. اگر مقدار x بین 10 و 20 (بدون احتساب 20) باشد، شرط برقرار شده و کد مربوطه اجرا می‌شود. این کد 1 را به عنوان نتیجه باز می‌گرداند.۳. اگر هیچ یک از دو شرط اول برقرار نباشد، کنترل به بلوک else می‌رود. این بلوک به عنوان یک راه حل جایگزین عمل می‌کند و در صورتی که هیچ یک از شرایط قبلی درست نباشد، اجرا می‌شود. در این حالت، 2 را به عنوان نتیجه برمی‌گرداند.با استفاده از این عبارات شرطی if/else، تابع foo روشی برای دسته‌بندی مقدار ورودی x در بازه‌های مختلف ارائه می‌دهد و مقادیر متناظر با آن بازه‌ها را برمی‌گرداند.نتجه‌گیری:در این مقاله، مفهوم عبارات شرطی if/else در سالیدیتی را بررسی کردیم که به توسعه‌دهندگان امکان می‌دهد منطق شرطی را در قراردادهای هوشمند خود پیاده‌سازی کنند. ما به نحوۀ نگارش عبارات if/else پرداختیم و یک تجزیه و تحلیل دقیق از یک قرارداد هوشمند نمونه که از این عبارات استفاده می‌کند ارائه دادیم. همچنین اپراتور سه‌تایی را به عنوان روشی اختصاری برای نوشتن عبارات if/else معرفی کردیم. با استفاده از عبارات if/else در سولیدیتی، توسعه‌دهندگان می‌توانند قراردادهای هوشمند پویاتر و انعطاف‌پذیرتری ایجاد کنند که به شرایط خاص پاسخ دهند. درک و استفاده از این عبارات شرطی برای ساختن قراردادهای هوشمند قوی و قابل اعتماد در بلاک‌چین اتریوم ضروری است.کد نمونه: // SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;
contract IfElse {
 function foo(uint x) public pure returns (uint) {
 if (x &lt; 10) {
 return 0;
 } else if (x &lt; 20) {
 return 1;
 } else {
 return 2;
 }
 }
function ternary(uint _x) public pure returns (uint) {
 return _x &lt; 10 ? 1 : 2;
 }
}این کد نمونه نحوه استفاده از عبارات شرطی if/else در زبان سالیدیتی را نشان می‌دهد. تابع foo مقدار ورودی x را در دسته‌های مختلف دسته‌بندی می‌کند و مقادیر متناظر را برمی‌گرداند، در حالی که تابع ternary روش کوتاه‌نویسی برای نوشتن عبارات if/else با استفاده از عملگر سه‌گانه را نشان می‌دهد.تبریک! شما یادگیری نحوه استفاده از دستورات if/else در زبان برنامه‌نویسی Solidity را به پایان رساندید. شاد و پیروز باشید!🔸 این مقاله،از مقالات ترجمه شده از سالیدیتی آکادمی است برای خواندن مقاله اصلی می‌توانید به لینک زیر مراجعه کنید: https://medium.com/@solidity101/100daysofsolidity-solidity-if-else-a-comprehensive-guide-to-conditional-statements-cb43edb550f7  🔸شمامی‌توانیدبرایخواندنادامهمقالاتترجمهشدهاینآکادمیبهسالیدیتیآکادمیمراجعهکنید. </description>
                <category>yousef saeedian</category>
                <author>yousef saeedian</author>
                <pubDate>Thu, 11 Apr 2024 10:43:05 +0330</pubDate>
            </item>
                    <item>
                <title>روز ۹/۱۰۰ - تسلط بر گس و کارمزد گس در تراکنش‌های اتریوم: راهنمای جامع</title>
                <link>https://virgool.io/solidity101/%D8%B1%D9%88%D8%B2-%DB%B9%DB%B1%DB%B0%DB%B0-%D8%AA%D8%B3%D9%84%D8%B7-%D8%A8%D8%B1-%DA%AF%D8%B3-%D9%88-%DA%A9%D8%A7%D8%B1%D9%85%D8%B2%D8%AF-%DA%AF%D8%B3-%D8%AF%D8%B1-%D8%AA%D8%B1%D8%A7%DA%A9%D9%86%D8%B4-%D9%87%D8%A7%DB%8C-%D8%A7%D8%AA%D8%B1%DB%8C%D9%88%D9%85-%D8%B1%D8%A7%D9%87%D9%86%D9%85%D8%A7%DB%8C-%D8%AC%D8%A7%D9%85%D8%B9-wepnka5tk3fi</link>
                <description>در دنیای جذاب اتریوم، هر تراکنش با نیرویی حیاتی به نام Gas (گس) کار می‌کند. Gas فراتر از یک مفهوم ساده است؛ این واحد نشان‌دهنده‌ی میزان محاسبات مورد نیاز برای اجرای تراکنش در ماشین مجازی اتریوم (EVM) است. درک Gas و کارمزد تراکنش (Gas Fee) برای هر کسی که به دنیای قراردادهای هوشمند و اپلیکیشن‌های غیرمتمرکز (dApp) قدم می‌گذارد، ضروری است. در این مقاله‌ی آموزشی، با هم به کشف رمز و راز Gas و اهمیت آن در تراکنش‌های اتریوم می‌پردازیم. پس همراه ما باشید تا با پیچیدگی‌های Gas و کارمزد تراکنش در دنیای اتریوم آشنا شویم!#100DaysOfSolidity 🔥💸 Mastering Gas and Gas Fees in Ethereum Transactionsرمزگشایی گس و نقش آنتصور کنید که گس، حکم پول را برای محاسبات در اکوسیستم اتریوم دارد. هر عملیاتی، از محاسبات پایه‌ای تا اجرای قراردادهای پیچیده، مقدار مشخصی گس مصرف می‌کند. این مکانیزم از سوء استفاده از منابع جلوگیری می کند و تخصیص عادلانه کار محاسباتی در شبکه را تضمین می کند.میزان مصرف و هزینه گسهر عملیات در اتریوم، بسته به پیچیدگی آن، دارای هزینه گس است. وظایف ساده، مانند جمع یا ضرب اعداد، نسبتاً از نظر گس کارآمد هستند، در حالی که عملیات پیچیده تر، مانند تعامل با قراردادهای خارجی، هزینه گس بیشتری دارند. هزینه کل گس یک تراکنش، مجموع هزینه های گس تمام عملیات های جداگانه آن است.تعیین محدودیت‌ها: محدودیت گس و محدودیت گس بلاکبه منظور حفظ پایداری شبکه، جلوگیری از حلقه‌های بی‌نهایت و اتلاف احتمالی منابع، اتریوم دو محدودیت حیاتی را بر مصرف گس اعمال می‌کند:حد مجاز گس(Gas Limit): این مقدار، حداکثر میزان گسی است که شما برای تراکنش خود اختصاص می‌دهید. هنگام ارسال تراکنش، می‌توانید حد مجاز گس را به عنوان یک حفاظ در برابر محاسبات بی‌رویه تنظیم کنید. اگر تراکنشی از این حد فراتر رود، به طور خودکار لغو می‌شود و هرگونه تغییری که در حین اجرای آن ایجاد شده است، خنثی می‌شود.حد مجاز گس در هر بلاک: حداکثر میزان گسی است که در یک بلاک مجاز است. این حد توسط ماینرهای شبکه به طور جمعی تعیین می‌شود تا از بزرگ و شلوغ شدن بیش از حد بلاک‌ها جلوگیری شود. اگر استفاده کل گس در یک بلاک از حد مجاز گس در هر بلاک فراتر رود، ممکن است برخی تراکنش‌ها برای پردازش منتظر بلاک بعدی بمانند.هم‌نوایی قیمت و کارمزد گسقیمت گس، میزان اتری است که شما حاضرید برای هر واحد گس بپردازید. این قیمت به عنوان نوعی حراج برای اولویت تراکنش عمل می‌کند، زیرا ماینرها برای گنجاندن تراکنش‌هایی با قیمت گس بالاتر در بلاک‌هایی که استخراج می‌کنند، انگیزه دارند. هزینه گس برای یک تراکنش با ضرب کردن گس مصرفی در قیمت گس محاسبه می‌شود. یافتن تعادل بین قیمت گس منطقی و فوریت تراکنش شما بسیار مهم است.اتریوم توسعه‌دهندگانی که در قراردادهای هوشمند خود از استراتژی‌های صرفه‌جویی در گس استفاده می‌کنند، پاداش می‌دهد. زمانی که یک تراکنش گس کمتری نسبت به حد مجاز گس تخصیص داده شده مصرف کند، گس استفاده نشده به فرستنده بازگردانده می‌شود. در اینجا چند تکنیک بهینه‌سازی گس برای پیشگامان مقتصد Ethereum آورده شده است:کاهش تعاملات خارجی: تعامل با قراردادهای خارجی، هزینه‌های گس اضافی را به همراه دارد. سعی کنید تعداد تماس‌های خارجی را کاهش دهید یا برای افزایش کارایی، آنها را به صورت دسته‌ای انجام دهید.استفاده عاقلانه از حلقه‌ها: حلقه‌ها می‌توانند پرمصرف باشند، به‌ویژه اگر تعداد تکرارها نامشخص باشد. کد خود را برای کاهش حلقه‌های غیرضروری و سربار محاسباتی بهینه‌سازی کنید.بهینه‌سازی فضای ذخیره‌سازی: عملیات‌های مربوط به فضای ذخیره‌سازی پرهزینه هستند. به تغییرات وضعیت توجه کنید و در صورت امکان، عملیات مبتنی بر حافظه را ترجیح دهید.کتابخانه‌ها دوست شما هستند: از کتابخانه‌های موجود برای استفاده مجدد از کدهای ممیزی‌شده و با راندمان بالا استفاده کنید. استفاده از کتابخانه‌های شناخته‌شده، هزینه‌های استقرار و راه‌اندازی را نیز کاهش می‌دهد.نمونه کدهای سالیدیتی: شگفتی‌های بهینه‌سازی گس!بیایید به بررسی چند نمونه کد سالیدیتی بپردازیم که مفاهیم مربوط به گس را به تصویر می‌کشند:محاسبه گس مصرفی:contract GasExample {
 function calculateGas() public pure returns (uint) {
 uint startGas = gasleft();
 // Perform computations or operations
 uint endGas = gasleft();
 return startGas - endGas;
 }
}تنظیم قیمت گس:pragma solidity ^0.8.0;
contract GasPriceExample {
 uint public gasPrice;
function setGasPrice(uint _gasPrice) public {
 require(_gasPrice &gt; 0, &amp;quotGas price must be greater than zero&amp;quot);
 gasPrice = _gasPrice;
 }
}نتیجه‌گیریتبریک میگم! شما رمز و راز کارمزد تراکنش (گس) در اتریوم را کشف کردید. با داشتن این دانش، می‌توانید با اطمینان در دنیای اتریوم حرکت کنید، میزان مصرف گس و هزینه‌های تراکنش را بهینه کنید. در جریان آخرین تحولات مربوط به پویایی گس (گس داینامیک) باشید، زیرا اتریوم دائما در حال پیشرفت است. به یاد داشته باشید، کارایی کلیدی است، بنابراین با دقت کدگذاری کنید و از قدرت بهینه سازی گس بهره مند شوید. امیدوارم تراکنش‌های شما در دنیای وسیع اتریوم سریع، مقرون به صرفه و پر رونق باشد!توجه: دینامیک و کارمزد گس ممکن است با پیشرفت اتریوم تغییر کند. برای اطلاعات دقیق و به روز، با آخرین تحولات به‌روز باشید و به داکیومنت رسمی اتریوم مراجعه کنید.🔸 این مقاله،از مقالات ترجمه شده از سالیدیتی آکادمی است برای خواندن مقاله اصلی می‌توانید به لینک زیر مراجعه کنید: https://medium.com/@solidity101/100daysofsolidity-mastering-gas-and-gas-fees-in-ethereum-transactions-a-comprehensive-guide-2ec6c6165096 🔸 شما می‌توانید برای خواندن ادامه مقالات ترجمه شده این آکادمی به سالیدیتی آکادمی مراجعه کنید.</description>
                <category>yousef saeedian</category>
                <author>yousef saeedian</author>
                <pubDate>Wed, 10 Apr 2024 18:09:56 +0330</pubDate>
            </item>
                    <item>
                <title>روز ۸/۱۰۰ - رمزگشایی از جادوی اتر و وی در سالیدیتی: توانمندسازی توسعه اتریوم</title>
                <link>https://virgool.io/solidity101/%D8%B1%D9%88%D8%B2-%DB%B8%DB%B1%DB%B0%DB%B0-%D8%B1%D9%85%D8%B2%DA%AF%D8%B4%D8%A7%DB%8C%DB%8C-%D8%A7%D8%B2-%D8%AC%D8%A7%D8%AF%D9%88%DB%8C-%D8%A7%D8%AA%D8%B1-%D9%88-%D9%88%DB%8C-%D8%AF%D8%B1-%D8%B3%D8%A7%D9%84%DB%8C%D8%AF%DB%8C%D8%AA%DB%8C-%D8%AA%D9%88%D8%A7%D9%86%D9%85%D9%86%D8%AF%D8%B3%D8%A7%D8%B2%DB%8C-%D8%AA%D9%88%D8%B3%D8%B9%D9%87-%D8%A7%D8%AA%D8%B1%DB%8C%D9%88%D9%85-hfcr1z23g7fb</link>
                <description>به دنیای شگفت‌انگیز اتریوم و سالیدیتی خوش آمدید! در این قسمت از سری #100DaysOfSolidity، ما به سفری جذاب برای رمزگشایی از رازهای اتر(Ether) و وی(Wei) می‌رویم، واحدهای ارزشمند و اسرارآمیز در اکوسیستم اتریوم. اتریوم با قابلیت‌های قرارداد هوشمند خود، دنیای برنامه‌های غیرمتمرکز (dApp) را دگرگون کرده و به توسعه‌دهندگان قدرت می‌دهد تا راه‌حل‌های نوآورانه مبتنی بر بلاک چین را خلق کنند.#100DaysOfSolidity 🌟 Unveiling the Magic of Ether and Wei in Solidityبرای درک کامل پتانسیل اتریوم، فهم ظرافت‌های اتریوم و وی، واحدهای پول دیجیتال این پلتفرم، ضروری است. در این مقاله، به سفری اکتشافی می‌رویم و به رمز و رازهای نهفته در ورای این واحدهای جذاب پی می‌بریم.مفهوم اتر و ویاتر، با نماد ETH، به‌عنوان ارز دیجیتال اصلی بلاکچین اتریوم شناخته می‌شود. همان‌طور که بیت‌کوین نیروی محرک بلاکچین بیت‌کوین است، اتر نیز اساس عملکرد شبکه اتریوم را تامین می‌کند. اتر کاربردهای متنوعی دارد، از پرداخت کارمزد تراکنش‌ها و پاداش به استخراج‌کنندگان گرفته تا استفاده به‌عنوان واحد تبادل در برنامه‌های غیرمتمرکز (dApp). اهمیت اتر در اکوسیستم اتریوم ایجاب می‌کند که توسعه‌دهندگان و کاربران به‌طور یکسان، ماهیت و کارکرد آن را درک کنند.وی (Wei)، کوچکترین واحد غیرقابل تقسیم اتر است، همانند ذرات درخشانی از غبار جادویی. همانطور که سنت نمایانگر بخش‌های کوچکی از دلار است، وی نیز نشان دهنده بخش‌های بسیار ریزی از ارزش اتر است. در واقع، یک واحد اتر، معادل با 10 به توان 18 واحد وی است، که بیانگر وسعت دنیای اتریوم و امکان انجام تراکنش‌های بسیار کوچک در آن است. برای کار با این واحدها در زبان برنامه‌نویسی تخصصی اتریوم به نام سالیدیتی، درک دقیق نحوه‌ی مدیریت آن‌ها ضروری است.جادوی سالیدیتی و واحدهای اترسالیدیتی، زبان جادوییِ قراردادهای هوشمند اتریوم، به توسعه‌دهندگان توانایی خلق برنامه‌های غیرمتمرکز پیچیده و شگفت‌انگیز را می‌بخشد. در تار و پود Solidity، توسعه‌دهندگان گنجینه‌ای از ابزارها و کتابخانه‌ها را برای تعامل بی‌وقفه با اتر و وی در اختیار دارند. بیایید با کاوش در جادوهای کدنویسی اتریوم، سفری جادویی را آغاز کنیم و جنبه‌های عملی کار با این واحدها را رمزگشایی نماییم.به‌کارگیری جادوی اتر و ویpragma solidity ^0.8.17;
contract EtherUnits {
 uint public oneWei = 1 wei; // Conjuring a variable with 1 Wei
 bool public isOneWei = 1 wei == 1; // Probing if 1 Wei holds the power of 1
uint public oneEther = 1 ether; // Summoning a variable with 1 Ether
 bool public isOneEther = 1 ether == 1e18; // Unveiling if 1 Ether channels the energy of 10¹⁸ Wei
}در این کد Solidity، یک قرارداد به نام EtherUnits تعریف شده است که دو تابع oneWei و isOneWei را ارائه می‌دهد. تابع oneWei یک متغیر از نوع uint256 را با مقدار 1 Wei (معادل 10^18 اتریوم) ایجاد می‌کند. تابع isOneWei بررسی می‌کند که آیا مقدار یک متغیر از نوع uint256 برابر با 1 Wei باشد یا خیر.علاوه بر این، دو تابع دیگر به نام oneEther و isOneEther در قرارداد EtherUnits تعریف شده‌اند. تابع oneEther یک متغیر از نوع uint256 را با مقدار 1 Ether (معادل 10^18 Wei) ایجاد می‌کند. تابع isOneEther بررسی می‌کند که آیا مقدار یک متغیر از نوع uint256 برابر با 1 Ether باشد یا خیر.تبدیل واحدهای اتر و ویpragma solidity ^0.8.17;
contract UnitConversion {
 function convertWeiToEther(uint weiAmount) public pure returns (uint)
{
 return weiAmount / 1 ether; // Transmuting Wei into Ether
 }
 
 function convertEtherToWei(uint etherAmount) public pure returns (uint) {
 return etherAmount * 1 ether; // Transmuting Ether into Wei
 }
}در این قرارداد هوشمند، ما کانترکتی به نام UnitConversion را معرفی می‌کنیم که امکان تبدیل بین واحدهای Wei و Ether را فراهم می‌کند. تابع convertWeiToEther مقدار Wei را به عنوان ورودی دریافت کرده و معادل آن را در واحد Ether برمی‌گرداند. به طور مشابه، تابع convertEtherToWei مقدار Ether را به عنوان ورودی دریافت کرده و آن را به Wei تبدیل می‌کند. این توابع در پیمایش دنیای شگفت‌انگیز قراردادهای هوشمند بسیار قدرتمند و کاربردی هستند.جادوی نهفته در آموزشدرک رمز و رازهای اتر و وی، گنجینه‌ای از دانش و بینش را به ما ارزانی می‌دارد که توسعه‌دهندگان و علاقه‌مندان به بلاک چین را به یک اندازه توانمند می‌سازد. بیایید مزایای اسرارآمیز این دانش را بررسی کنیم:تضمین دقت محاسبات: با درک رابطه بین اتر و وی، خود را قادر به انجام محاسبات دقیق در حین انجام تراکنش‌ها، بررسی موجودی و سایر عملیات رمزنگاری در برنامه‌های مبتنی بر اتریوم می‌کنیم.تسلط بر هنر گس: گس، واحد سنجش انتزاعی تلاش محاسباتی مورد نیاز برای اجرای عملیات در شبکه اتریوم است. با استفاده کارآمد از وی، واحد فرعی گس، می‌توانیم هزینه‌های گس را بهینه‌سازی کرده و راندمان کلی قراردادهای هوشمند خود را ارتقا دهیم.قدرت جادویی خرد تراکنش‌ها: ماهیت ذره‌بینی وی به ما امکان می‌دهد تا تار و پود تراکنش‌های خرد را در dAppها ببافیم و سناریوهای جذاب مانند خدمات پرداخت به ازای استفاده و پرداخت‌های خرد را فعال کنیم. این امکانات شگفت‌انگیز نوآوری را تقویت می‌کنند و به ترویج پذیرش گسترده اتریوم در حوزه‌های مختلف کمک می‌کنند.حصول اطمینان از همگرایی یکپارچه قراردادها: هنگام تعامل با سایر قراردادهای هوشمند، درک واحد value مورد استفاده توسط قراردادهای خارجی بسیار مهم می‌شود. تسلط بر واحدهای اتر و وی امکان ادغام یکپارچه و انتقال دقیق ارزش بین این قراردادها را فراهم می‌کند.نتیجه‌گیریتبریک! شما با موفقیت این سفر پرمغز و آموزنده را در دنیای رمز ارزها و اتریوم به پایان رساندید.با اتکا به دانش عمیقی که از زبان برنامه‌نویسی سالیدیتی و مفاهیم اتریوم به دست آورده‌اید، اکنون قادر به ساخت برنامه‌های غیرمتمرکز قدرتمند، مقیاس‌پذیر و جذاب هستید.دنیای امور مالی غیرمتمرکز، توکن‌های غیرقابل‌معاوضه و راه‌حل‌های مبتنی بر بلاک‌چین مشتاقانه منتظر خلاقیت و ابتکار شما هستند.🔸 این مقاله،از مقالات ترجمه شده از سالیدیتی آکادمی است برای خواندن مقاله اصلی می‌توانید به لینک زیر مراجعه کنید: https://medium.com/@solidity101/100daysofsolidity-unveiling-the-magic-of-ether-and-wei-in-solidity-empowering-ethereum-68499a5caf98 🔸 شما می‌توانید برای خواندن ادامه مقالات ترجمه شده این آکادمی به سالیدیتی آکادمی مراجعه کنید.</description>
                <category>yousef saeedian</category>
                <author>yousef saeedian</author>
                <pubDate>Sun, 07 Apr 2024 17:22:20 +0330</pubDate>
            </item>
                    <item>
                <title>روز ۷/۱۰۰ -  بررسی خواندن و نوشتن State variable در سالیدیتی</title>
                <link>https://virgool.io/solidity101/%D8%B1%D9%88%D8%B2-%DB%B7%DB%B1%DB%B0%DB%B0-%D8%A8%D8%B1%D8%B1%D8%B3%DB%8C-%D8%AE%D9%88%D8%A7%D9%86%D8%AF%D9%86-%D9%88-%D9%86%D9%88%D8%B4%D8%AA%D9%86-state-variable-%D8%AF%D8%B1-%D8%B3%D8%A7%D9%84%DB%8C%D8%AF%DB%8C%D8%AA%DB%8C-vukm0w3c6vvg</link>
                <description>سالیدیتی، زبان برنامه‌نویسی محبوب برای توسعه قراردادهای هوشمند در بلاکچین‌هایی مانند اتریوم، از ویژگی‌ها و قابلیت‌های متنوعی برخوردار است. در این مقاله، به بررسی موضوع خواندن و نوشتن در State Variables در Solidity می‌پردازیم. State variable نقشی حیاتی در ذخیره‌سازی و دسترسی به داده‌ها در داخل قراردادهای هوشمند ایفا می‌کنند. ما در این مقاله به نحوه به‌روزرسانی State variable با ارسال تراکنش‌ها و همچنین نحوه خواندن مقادیر آن‌ها بدون پرداخت هیچ‌گونه هزینه تراکنشی خواهیم پرداخت.در کد فوق، قرارداد SimpleStorage با یک متغیر وضعیت به نام num تعریف شده است. این متغیر به عنوان یک عدد صحیح بدون علامت عمومی (uint public) اعلان شده است که امکان دسترسی به مقدار آن از خارج از قرارداد را فراهم می‌کند. علاوه بر این، این قرارداد شامل دو تابع set و get به ترتیب برای به‌روزرسانی و خواندن مقدار متغیر num است.#100DaysOfSolidity Exploring Reading and Writing to State Variables in Solidity
مفهوم State variableـState variables، متغیرهایی هستند که در داخل یک قرارداد تعریف می‌شوند و مقادیر خود را در طول فراخوانی توابع حفظ می‌کنند. این متغیرها نماینده فضای ذخیره‌سازی قرارداد هستند و امکان ذخیره‌سازی دائمی داده‌ها را فراهم می‌کنند. برای درک بهتر نحوه عملکرد State variable، به قطعه کد زیر که نمونه‌ای از استفاده از این متغیرها را نشان می‌دهد، توجه کنید:/// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;
contract SimpleStorage {
 // State variable to store a number
 uint public num;
// You need to send a transaction to write to a state variable.
 function set(uint _num) public {
 num = _num;
 }
// You can read from a state variable without sending a transaction.
 function get() public view returns (uint) {
 return num;
 }
}در کد فوق، قرارداد SimpleStorage با یک متغیر وضعیت به نام num تعریف شده است. این متغیر به عنوان یک عدد صحیح بدون علامت عمومی (uint public) اعلان شده است که امکان دسترسی به مقدار آن از خارج از قرارداد را فراهم می‌کند. علاوه بر این، این قرارداد شامل یک تابع set برای به‌روزرسانی مقدار num و یک تابع get برای خواندن مقدار آن است.نوشتن State Variableبه منظور به‌روزرسانی مقدار یک متغیر وضعیت، ارسال تراکنش به بلاکچین ضروری است. در قرارداد SimpleStorage، تابع set وظیفه‌ی به‌روزرسانی متغیر num را بر عهده دارد. بررسی دقیق‌تر این تابع، نکات زیر را آشکار می‌کند:```solidity
function set(uint _num) public {
num = _num;
}
```تابع set با دریافت یک پارامتر ورودی _num از نوع uint، مقدار آن را به متغیر وضعیت num اختصاص می‌دهد. فراخوانی این تابع با یک مقدار دلخواه، متغیر وضعیت را به تناسب به‌روزرسانی می‌کند. توجه داشته باشید که نوشتن در یک متغیر وضعیت، نیازمند ارسال تراکنش است که به طور معمول، هزینه‌ی ناچیزی به عنوان کارمزد تراکنش یا گس، به همراه دارد.خواندن مقادیر از State Variableبرخلاف نوشتن در یک متغیر وضعیت، خواندن مقدار آن بدون هزینه است و به هیچ کارمزد تراکنشی نیاز ندارد. در قرارداد SimpleStorage، تابع get به ما اجازه می‌دهد تا مقدار فعلی num را بازیابی کنیم.بر خلاف نوشتن در یک متغیر وضعیت، خواندن مقدار آن بدون هزینه و نیاز به کارمزد تراکنش انجام می‌شود. در قرارداد SimpleStorage، تابع get امکان بازیابی مقدار فعلی num را فراهم می‌کند:```solidity
function get() public view returns (uint) {
return num;
}
```تابع get با دو صفت public و view تعریف شده است. صفت public امکان دسترسی خارجی به تابع را فراهم می‌کند و صفت view تضمین می‌کند که تابع هیچ‌گونه تغییری در وضعیت قرارداد ایجاد نکند. با فراخوانی تابع get می‌توان مقدار فعلی num را بدون متحمل شدن هیچ هزینه تراکنشی بازیابی کرد.نتیجه‌گیریدر این مقاله، به بررسی مفهوم خواندن و نوشتن در State variables در زبان برنامه‌نویسی Solidity پرداختیم. State variables به عنوان حافظه‌ای دائمی برای قراردادهای هوشمند عمل می‌کنند و امکان ذخیره‌سازی و دسترسی به داده‌ها را در طول اجرای قرارداد فراهم می‌کنند. لازم به ذکر است که نوشتن در یک متغیر وضعیت مستلزم ارسال تراکنش و پرداخت هزینه تراکنش است، در حالی که خواندن از آن رایگان است. توجه به این نکات در هنگام طراحی و پیاده‌سازی قراردادهای هوشمند، به منظور استفاده کارآمد از منابع بلاکچین، حائز اهمیت است.Sample Codeکد کامل قرارداد SimpleStorage در بلاک زیر ارائه شده است: /// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;
contract SimpleStorage {
 // State variable to
store a number
 uint public num;
// You need to send a transaction to write to a state variable.
 function set(uint _num) public {
 num = _num;
 }
// You can read from a state variable without sending a transaction.
 function get() public view returns (uint) {
 return num;
 }
}به یاد داشته باشید برای تعامل با قرارداد، باید آن را در یک شبکه توسعه اتریوم کامپایل و دیپلوی کنید.قرارداد SimpleStorage ارائه شده، نحوه خواندن و نوشتن یک state variable را به نمایش می‌گذارد. در ادامه به بررسی دقیق‌تر اجزای آن می‌پردازیم:1. State Variable:قرارداد شامل یک State Variable به نام num است که به عنوان یک عدد صحیح بدون علامت عمومی (uint public) تعریف شده است.استفاده از عبارت public به عنوان شناسه دسترسی، به طور خودکار یک تابع getter برای متغیر num ایجاد می‌کند.مقدار پیش‌فرض num برابر با ۰ است.2. Set Function:تابع set با دریافت یک پارامتر _num از نوع uint، امکان به‌روزرسانی مقدار متغیر num را فراهم می‌کند.صفت دیده‌پذیری public، دسترسی به این تابع را از داخل و خارج قرارداد (contract) امکان‌پذیر می‌سازد.در بدنه تابع، مقدار _num به متغیر num تخصیص داده می‌شود که منجر به به‌روزرسانی مقدار آن خواهد شد.3. Get Functions:این تابع امکان خواندن مقدار فعلی متغیر num را فراهم می‌کند.تابع get با دید عمومی (public) و فقط خواندنی (view) تعریف شده است.با فراخوانی تابع get، مقدار فعلی num بازیابی می‌شود.نتیجه‌گیریدرک نحوه خواندن و نوشتن State Variable در زبان برنامه‌نویسی Solidity، برای توسعه قراردادهای هوشمند قوی و کارآمد، امری ضروری است. State variables امکان ذخیره‌سازی دائمی داده‌ها را بر روی بلاک‌چین فراهم می‌کنند. اگرچه نوشتن در یک State variables، شامل هزینه تراکنش می‌شود، اما خواندن از آن رایگان است. با استفاده کارآمد از State variables، می‌توانید داده‌ها را ذخیره و بازیابی کنید که این امر، توسعه برنامه‌های غیرمتمرکز قدرتمند را تسهیل می‌کند. Solidity مجموعه‌ای گسترده از امکانات و قابلیت‌ها را برای ساخت سیستم‌های امن و شفاف بر روی پلتفرم‌های مختلف بلاک‌چین ارائه می‌دهد. برای دستیابی به پتانسیل کامل توسعه قراردادهای هوشمند، به کاوش و آزمایش خود ادامه دهید!Happy coding! این مقاله،از مقالات ترجمه شده از سالیدیتی آکادمی است برای خواندن مقاله اصلی می‌توانید به لینک زیر🔸 مراجعه کنید: https://medium.com/@solidity101/100daysofsolidity-exploring-reading-and-writing-to-state-variables-in-solidity-91ea5b9013a6 🔸 شما می‌توانید برای خواندن ادامه مقالات ترجمه شده این آکادمی به سالیدیتی آکادمی مراجعه کنید.</description>
                <category>yousef saeedian</category>
                <author>yousef saeedian</author>
                <pubDate>Mon, 01 Apr 2024 14:21:25 +0330</pubDate>
            </item>
                    <item>
                <title>روز 6/100 - درک immutability در سالیدیتی: ساخت قراردادهای هوشمند قابل اعتماد</title>
                <link>https://virgool.io/solidity101/%D8%B1%D9%88%D8%B2-6100-%D8%AF%D8%B1%DA%A9-immutability-%D8%AF%D8%B1-%D8%B3%D8%A7%D9%84%DB%8C%D8%AF%DB%8C%D8%AA%DB%8C-%D8%B3%D8%A7%D8%AE%D8%AA-%D9%82%D8%B1%D8%A7%D8%B1%D8%AF%D8%A7%D8%AF%D9%87%D8%A7%DB%8C-%D9%87%D9%88%D8%B4%D9%85%D9%86%D8%AF-%D9%82%D8%A7%D8%A8%D9%84-%D8%A7%D8%B9%D8%AA%D9%85%D8%A7%D8%AF-cuqtdbqtcq8e</link>
                <description>سلام. #100DaysOfSolidity ادامه دارد! در این قسمت، به سراغ مبحث immutability یا &quot;تغییرناپذیری&quot; در زبان سالیدیتی می‌رویم. تغییرناپذیری، عنصری کلیدی در برنامه‌نویسی است که ثبات و عدم تغییر برخی متغیرها را پس از مقداردهی اولیه، تضمین می‌کند. زبان سالیدیتی که برای توسعهٔ قراردادهای هوشمند در بلاک‌چین اتریوم به کار می‌رود، امکان تعریف متغیرهای Immutable را فراهم می‌کند.در این مقاله، مفهوم &quot;عدم تغییرپذیری&quot; و اهمیت آن در ساخت قراردادهای هوشمند قابل اعتماد و امن را بررسی خواهیم کرد.Exploring the Power of Immutable Variables in Solidity Programming #100DaysOfSolidityمفهوم immutabilityدر زبان سالیدیتیدر زبان برنامه‌نویسی سالیدیتی، متغیرهای غیرقابل تغییر مشابه constants در سایر زبان‌های برنامه‌نویسی هستند. بعد از اینکه به این متغیرها مقداری اختصاص داده شد، دیگر نمی‌توان آن‌ها را تغییر داد یا مقادیر جدیدی به آنها اختصاص داد. این ویژگی، متغیرهای غیرقابل تغییر را برای ذخیره‌سازی مقادیری که باید در طول اجرای قرارداد هوشمند ثابت بمانند، بسیار با ارزش می‌کند. متغیرهای غیرقابل تغییر باعث افزایش امنیت و اعتماد در اجرای برنامه‌های غیرمتمرکز می‌شوند.برای درک بهتر ماهیت تغییرناپذیری در سالیدیتی، بیایید نگاهی دقیق تر به یک قرارداد هوشمند نمونه داشته باشیم.// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;
contract Immutable {
 address public immutable MY_ADDRESS;
 uint public immutable MY_UINT;
constructor(uint _myUint) {
 MY_ADDRESS = msg.sender;
 MY_UINT = _myUint;
 }
}در قسمت کد بالا، ما یک قرارداد به نام &quot;Immutable&quot; داریم که شامل دو متغیر غیر قابل تغییر است: &quot;MY_ADDRESS&quot; و &quot;MY_UINT&quot;. کلید واژه &quot;Immutable&quot; تضمین می کند که پس از اختصاص مقادیر به این متغیرها، نمی توان آنها را تغییر داد. در constructor ، به &quot;MY_ADDRESS&quot; مقدار &quot;msg.sender&quot; اختصاص داده شده است که نشان دهنده آدرس مستقر کننده قرارداد است. از طرف دیگر، &quot;MY_UINT&quot; با مقدار پارامتر constructor &quot;_myUint&quot; مقداردهی اولیه می شود.مزایا و کاربردهای immutability: ۱. امنیت و اعتماد: تغییرناپذیری امنیت قراردادهای هوشمند را با اطمینان از ثابت ماندن متغیرهای حیاتی، مانند آدرس‌های قرارداد یا پارامترهای پیکربندی، افزایش می‌دهد. این امر از آسیب‌پذیری‌های بالقوه‌ای که ممکن است در اثر تغییرات غیرمجاز ایجاد شود، جلوگیری می‌کند.۲. پیش‌بینی‌پذیری: متغیرهای تغییرناپذیر، پیش‌بینی‌پذیری را در اجرای قرارداد تضمین می‌کنند. از آنجایی که مقادیر آن‌ها ثابت باقی می‌مانند، توسعه‌دهندگان و کاربران می‌توانند به این متغیرها تکیه کنند که همیشه در طول عمر قرارداد مقادیر یکسانی داشته باشند. این پیش‌بینی‌پذیری برای ساخت برنامه‌های غیرمتمرکز قدرتمند و قابل اعتماد ضروری است.۳. بهینه‌سازی: Solidity قادر است قراردادهایی که از متغیرهای Immutable استفاده می‌کنند را بهینه‌سازی کند. کامپایلر قادر است ارجاعات به این متغیرها را با مقادیر واقعی آنها جایگزین کند، که نیاز به دسترسی به ذخیره‌سازی در طول اجرای قرارداد را از بین می‌برد.نمونه کد: ساخت قرارداد Immutableبرای درک بهتر مفهوم تغییر ناپذیری، اجازه دهید یک نمونه قرارداد را بررسی کنیم:// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;
contract ImmutableExample {
 uint public immutable MY_CONSTANT;
constructor(uint _value) {
 MY_CONSTANT = _value;
 }
function updateConstant(uint _newValue) external {
 // This will result in a compilation error
 MY_CONSTANT = _newValue;
 }
}در این تکه کد، ما یک قرارداد به نام &quot;ImmutableExample&quot; داریم که یک متغیر Immutable  به نام &quot;MY_CONSTANT&quot; را تعریف می کند. constructor ، &quot;_value&quot; منتقل شده را به &quot;MY_CONSTANT&quot; اختصاص می دهد. با این حال، اگر سعی کنیم با استفاده از تابع &quot;updateConstant&quot; مقدار &quot;MY_CONSTANT&quot; را تغییر دهیم، یک خطای کامپایل رخ خواهد داد. این به این دلیل است که متغیرهای Immutable  پس از مقدار دهی اولیه قابل تغییر نیستند، که باعث حفظ یکپارچگی و اعتماد به قرارداد می شود.نتیجه‌گیری:خاصیت تغییرناپذیری ویژگی قدرتمندی در سالیدیتی است که تضمین می‌کند داده‌های اصلی قابل دستکاری نباشند و در نتیجه امنیت و اعتماد به اجرای قراردادهای هوشمند را فراهم می‌کند. با تعریف داده‌ها به عنوان تغییرناپذیر، توسعه‌دهندگان می‌توانند برنامه‌های کاربردی غیرمتمرکز قوی و قابل اعتمادی را ایجاد کنند. درک و استفاده از تغییرناپذیری برای ساخت قراردادهای هوشمند قابل اعتماد و امن بر روی بلاکچین اتریوم ضروری است.به پایان این مقاله رسیدید! تبریک میگم! امیدوارم مطالب این مقاله برای شما آموزنده و مفید بوده باشه. در ادامه سفر برنامه‌نویسی با زبان سالیدیتی، تغییرناپذیری رو به عنوان یک ویژگی قدرتمند در نظر بگیرید و از اون برای ساخت برنامه‌های غیرمتمرکز قوی و قابل توجه استفاده کنید. منتظر محتوای جذاب‌تر در سری #100DaysOfSolidity باشید!🔸 این مقاله،از مقالات ترجمه شده از سالیدیتی آکادمی است برای خواندن مقاله اصلی می‌توانید به لینک زیر مراجعه کنید: https://medium.com/@solidity101/100daysofsolidity-understanding-immutability-in-solidity-building-trustworthy-smart-contracts-8c90df568c16 </description>
                <category>yousef saeedian</category>
                <author>yousef saeedian</author>
                <pubDate>Sat, 10 Feb 2024 10:09:16 +0330</pubDate>
            </item>
                    <item>
                <title>روز ۵/۱۰۰ - استفاده از Constants در سالیدیتی برای ساخت قراردادهای هوشمند اقتصادی و مستحکم</title>
                <link>https://virgool.io/solidity101/%D8%B1%D9%88%D8%B2-%DB%B5%DB%B1%DB%B0%DB%B0-%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-%D8%A7%D8%B2-constants-%D8%AF%D8%B1-%D8%B3%D8%A7%D9%84%DB%8C%D8%AF%DB%8C%D8%AA%DB%8C-%D8%A8%D8%B1%D8%A7%DB%8C-%D8%B3%D8%A7%D8%AE%D8%AA-%D9%82%D8%B1%D8%A7%D8%B1%D8%AF%D8%A7%D8%AF%D9%87%D8%A7%DB%8C-%D9%87%D9%88%D8%B4%D9%85%D9%86%D8%AF-%D8%A7%D9%82%D8%AA%D8%B5%D8%A7%D8%AF%DB%8C-%D9%88-%D9%85%D8%B3%D8%AA%D8%AD%DA%A9%D9%85-vanduskvmju4</link>
                <description>درک اهمیت Constants و نحوه بهینه‌سازی کد سالیدیتی شما #100DaysOfSolidity سری 005 «Constants»به پنجمین پست از سری #100DaysOfSolidity خوش آمدید! در این نسخه، ما به دنیای جذاب constants در زبان سالیدیتی خواهیم پرداخت. Constants متغیرهای خاصی هستند که پس از تعریف شدن، قابل تغییر نیستند. آن‌ها یک مقدار ثابت را طی اجرای یک قرارداد هوشمند حفظ می‌کنند. استفاده از constants در کد سالیدیتی شما نه تنها اطمینان از ثابت بودن (immutability) را به ارمغان می‌آورد، بلکه به بهینه‌سازی هزینه‌های gas نیز کمک می‌کند. در این مقاله، ما مفهوم constants، مزایای آن‌ها و چگونگی افزایش تجربه توسعه قراردادهای هوشمند شما را بررسی خواهیم کرد.درک کاربرد Constants در سالیدیتی:ـConstants در زبان برنامه‌نویسی سالیدیتی، نقش کلیدی در افزایش قدرت، امنیت و بهره‌وری اقتصادی کدهای شما ایفا می‌کنند. این متغیرها با استفاده از کلیدواژه constant تعریف می‌شوند که تضمین می‌کند مقدار آن‌ها پس از تعیین، ثابت و تغییرناپذیر باقی بماند. بر اساس یک قاعده نانوشته، متغیرهای constant معمولاً با حروف بزرگ نوشته می‌شوند تا به راحتی از سایر متغیرها متمایز شوند. Constants، ثبات و پایداری(immutability) را به متغیرها اعطا می‌کنند، که این امر موجب می‌شود مقادیرشان نه به طور تصادفی و نه عمدی قابل تغییر نباشند.استفاده ازConstants در قراردادهای هوشمند:ـConstants در قراردادهای هوشمند سالیدیتی، مزایای متعددی ارائه می‌دهند. بیایید برخی از مزایای کلیدی آن‌ها را بررسی کنیم:۱-ثبات (Immutability):  Constantبا اطمینان از اینکه مقادیر خاص در طول اجرای قرارداد ثابت باقی می‌مانند، یک لایه امنیتی اضافی فراهم می‌کنند. این موضوع از تغییرات تصادفی یا مخرب که ممکن است به یکپارچگی کد شما آسیب بزند، جلوگیری می‌کند.۲- بهینه‌سازی گس (Gas Optimization): با استفاده از Constants، شما می‌توانید هزینه‌های gasقراردادهای هوشمند خود را به طور قابل توجهی بهینه کنید. از آنجا که مقادیر آن‌ها به صورت کد سخت‌افزاری نوشته شده و تغییر نمی‌کنند، کامپایلر سالیدیتی می‌تواند bytecode را متناسب با آن بهینه‌سازی کند. این بهینه‌سازی منجر به کاهش مصرف gas شده و قراردادهای شما را کارآمدتر و اقتصادی‌تر می‌سازد.۳- خوانایی کد (Code Readability): Constants با تعریف و جداسازی واضح مقادیری که قرار است ثابت بمانند، خوانایی کد شما را افزایش می‌دهند. پیروی از قاعده استفاده از حروف بزرگ برای نام‌گذاری Constants آن‌ها را حتی در پایگاه‌های کد بزرگ به راحتی قابل شناسایی می‌کند. این امر به نگهداری بهتر کد کمک کرده و احتمال خطاهای ناشی از تغییرات تصادفی مقادیر را کاهش می‌دهد.۴- خوانایی کد(Code Readability): Constants با تعریف و جداسازی واضح مقادیری که قرار است ثابت بمانند، خوانایی کد شما را افزایش می‌دهند. پیروی از قاعده استفاده از حروف بزرگ برای نام‌گذاری Constants آن‌ها را حتی در پروژه‌های برنامه‌نویسی با حجم کد زیاد به راحتی قابل شناسایی می‌کند. این امر به نگهداری بهتر کد کمک کرده و احتمال خطاهای ناشی از تغییرات تصادفی مقادیر را کاهش می‌دهد.۵- قابلیت استفاده مجدد(Reusability): Constants می‌توانند در سراسر قرارداد هوشمند شما یا حتی در چندین قرارداد مختلف مورد استفاده قرار گیرند. با تعریف Constantsبرای مقادیری که به طور معمول استفاده می‌شوند، شما قابلیت استفاده مجدد کد، استانداردسازی و یکنواختی را ترویج می‌کنید. این کار نگهداری و به‌روزرسانی‌ها را ساده‌تر می‌کند، چرا که تغییر دادن مقدار یک Constant در یک مکان، به طور خودکار تغییرات را در هر جایی که استفاده شده است، منعکس می‌کند.تحلیل قرارداد هوشمند نمونه:بیایید نگاهی دقیق‌تر به قرارداد Constants که قبلاً معرفی کردیم، بیندازیم. این قرارداد استفاده از constants را از طریق دو متغیر: MY_ADDRESS و MY_UINT نشان می‌دهد. متغیر ثابت MY_ADDRESS یک متغیر از نوع address است که یک آدرس اتریوم ثابت را نگه می‌دارد، در حالی که MY_UINT یک متغیر از نوع uint با مقدار ثابت است. این Constantsاطمینان می‌دهند که مقادیر اختصاص داده شده قابل تغییر نیستند، و در نتیجه، ثبات، امنیت و بهینه‌سازی gas را به قراردادهای هوشمند سالیدیتی شما می‌بخشند.Understanding the Importance of Constants and How They Optimize Your Solidity Code #100DaysOfSolidityنتیجه‌گیری:در این مقاله، ما مفهومconstants در سالیدیتی را بررسی کردیم. Constants، متغیرهایی هستند که مقادیر ثابت را نگه می‌دارند و پس از اختصاص داده شدن قابل تغییر نیستند. با بهره‌برداری از constants در قراردادهای هوشمند خود، شما می‌توانید ثبات را افزایش دهید، هزینه‌های gas را بهینه کنید، خوانایی کد را بهبود ببخشید و قابلیت استفاده مجدد کد را ترویج کنید.ـConstants به عنوان متحدان قابل اعتماد در ساخت قراردادهای هوشمندی که هم امن، هم کارآمد و هم قابل نگهداری هستند، عمل می‌کنند. با پایبندی به قواعد کدنویسی و استفاده موثر از Constants، شما می‌توانید قراردادهای سالیدیتی محکم‌تر و کارآمدتری ایجاد کنید. پس، بروید و از قدرت Constants برای ساخت تجربه‌ای بهتر در توسعه بلاکچین استفاده کنید!برای کسب اطلاعات بیشتر در مورد Constants سالیدیتی و مفاهیم دیگر سالیدیتی، به داکیومنت سالیدیتی (https://docs.soliditylang.org) مراجعه کنید و برای موضوعات هیجان‌انگیز بیشتر، ادامه سری #100DaysOfSolidity را دنبال کنید.🔥📝🌟 کد نمونه در زبان برنامه نویسی Solidity 🔥📝🌟// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;
contract ConstantsExample {
 address public constant MY_ADDRESS = 0x777788889999AaAAbBbbCcccddDdeeeEfFFfCcCc;
 uint public constant MY_UINT = 123;
function getMyAddress() public view returns (address) {
 return MY_ADDRESS;
 }
function getMyUint() public view returns (uint) {
 return MY_UINT;
 }
}در کد فوق، ما با نسخه به‌روز شده‌ای از قرارداد Constants قبلی روبرو هستیم که شامل دو متغیر ثابت MY_ADDRESS و MY_UINT است، همراه با توابعی برای دسترسی به این مقادیر. این توابع امکان می‌دهند که فراخواننده‌های خارجی به طور فقط‌خواندنی به این مقادیر دسترسی پیدا کنند.این فرصت را داشته باشید که با این کد آزمایش کرده و تأثیرات Constants را در پروژه‌های سالیدیتی خود بکاوید! ✨🚀یادتان باشد، Constants در ساخت قراردادهای هوشمندی که هم امن، هم کارآمد و هم قابل نگهداری باشند، همواره به عنوان همراهان مطمئن شما عمل می‌کنند. پس با استفاده از آن‌ها، به دنبال گشودن امکانات تازه‌ای در مسیر توسعه بلاکچین خود باشید! 🌟🔐💪این مطلب پایان مقاله ماست! امیدواریم از این کاوش عمیق درباره Constants در سالیدیتی لذت برده باشید. منتظر موضوعات هیجان‌انگیز بیشتری در سری #100DaysOfSolidity باشید. کدنویسی خوشی داشته باشید! 🎉💻🔸 این مقاله،از مقالات ترجمه شده از سالیدیتی آکادمی است برای خواندن مقاله اصلی می‌توانید به لینک زیر مراجعه کنید: https://medium.com/@solidity101/100daysofsolidity-unlocking-the-power-of-constants-in-solidity-building-robust-and-cost-effective-5ead6876b846 </description>
                <category>yousef saeedian</category>
                <author>yousef saeedian</author>
                <pubDate>Tue, 16 Jan 2024 23:28:32 +0330</pubDate>
            </item>
                    <item>
                <title>روز ۴/۱۰۰ - متغیرهای Solidity: بررسی متغیرهای Local، State، و Global</title>
                <link>https://virgool.io/solidity101/%D8%B1%D9%88%D8%B2-%DB%B4%DB%B1%DB%B0%DB%B0-%D9%85%D8%AA%D8%BA%DB%8C%D8%B1%D9%87%D8%A7%DB%8C-solidity-%D8%A8%D8%B1%D8%B1%D8%B3%DB%8C-%D9%85%D8%AA%D8%BA%DB%8C%D8%B1%D9%87%D8%A7%DB%8C-local-state-%D9%88-global-vz5qcw49j0px</link>
                <description>به چهارمین مقاله در سری #100DaysOfSolidity خوش آمدید! در این مقاله، ما عمیقاً به بررسی متغیرها در زبان برنامه‌نویسی Solidity می‌پردازیم که برای توسعه قراردادهای هوشمند بر روی بلاکچین اتریوم استفاده می‌شود. متغیرها، که نقش کلیدی در ذخیره‌سازی و کنترل داده‌ها درون قراردادهای هوشمند دارند، در Solidity به سه دسته تقسیم می‌شوند: Local، State و Global. فهمیدن تفاوت‌های میان این انواع متغیرها برای نگارش قراردادهای هوشمندی که هم کارآمد و هم امن باشند، اهمیت بسزایی دارد.بیایید هر نوع را به طور دقیق بررسی کنیم و یک درک جامع از اهمیت آنها در توسعه Solidity بدست آوریم.1️⃣ متغیرهای محلی (local):این متغیرها که در داخل توابع تعریف می‌شوند، بر روی زنجیره بلوکها ذخیره نمی‌شوند و دارای عمر موقتی هستند. دسترسی به آنها صرفاً در محدوده تابعی که در آن تعریف شده‌اند، امکان‌پذیر است. استفاده از متغیرهای محلی برای ذخیره‌سازی نتایج میانی یا داده‌های لازم برای محاسبات درون یک تابع خاص، بسیار کاربردی است. حال، بیایید با نگاهی به یک مثال، کاربرد آنها را بیشتر بررسی کنیم:pragma solidity ^0.8.17;
contract Variables {
 function doSomething() public {
 uint i = 456;
 // Rest of the function code…
 }
}در مثال بالا، متغیر i یک متغیر local است. این متغیر درون تابع doSomething() مقدار 456 را دریافت می‌کند. پس از اتمام اجرای تابع، متغیر i از بین می‌رود و دیگر نمی‌توان به مقدار آن دسترسی داشت.2️⃣ متغیرهای state: متغیرهای State در خارج از توابع تعریف می‌شوند و روی بلاکچین ذخیره می‌گردند. این متغیرها بین فراخوانی‌های تابع حفظ می‌شوندو به نمونه خاصی از قرارداد متصل هستند. آنها برای ذخیره‌سازی داده‌های مختص به قرارداد که نیاز به دسترسی و تغییر توسط چندین تابع درون قرارداد دارند، مناسب هستند. حال، بیایید با بررسی یک مثال، کاربرد آنها را بهتر درک کنیم:pragma solidity ^0.8.17;
contract Variables {
 string public text = &amp;quotHello&amp;quot
 uint public num = 123;
 // Rest of the contract code…
}در مثال بالا، متغیرهای text و num به عنوان متغیرهای State شناخته می‌شوند. Modifier دسترسی public به طور خودکار توابع getter را ایجاد می‌کند، که این امکان را فراهم می‌آورد تا مقادیر آنها از خارج قرارداد قابل دسترسی باشند. این متغیرها روی بلاکچین ذخیره می‌شوند و می‌توانند توسط قراردادهای دیگر یا دیگران خوانده یا تغییر یابند.3️⃣متغیرهای سراسری (Global):در Solidity، متغیرهای Global اطلاعات مهمی در مورد بلاکچین و تراکنش جاری را فراهم می‌کنند. این متغیرها در تمامی توابع یک قرارداد قابل دسترسی بوده و اطلاعات کلیدی لازم برای اجرای صحیح قرارداد را ارائه می‌دهند. بیایید به بررسی دو متغیر Global که به طور معمول استفاده می‌شوند، بپردازیم:ـblock.timestamp: این متغیر زمان فعلی (به ثانیه) بلوکی را که در آن قرارداد اجرا می‌شود، برمی‌گرداند. این اجازه می‌دهد تا قراردادها از منطق مبتنی بر زمان استفاده کنند یا وقوع رویدادهای خاص را ثبت کنند.ـmsg.sender: این متغیر نشان دهنده آدرس حساب (یا قرارداد) است که تابع فعلی را فراخوانی کرده است. می‌توان از آن برای تأیید هویت فراخواننده یا انجام بررسی‌های کنترل دسترسی استفاده کرد.اینجا یک مثال است که نشان می‌دهد چگونه از متغیرهای globalاستفاده کنیم:pragma solidity ^0.8.17;
contract Variables {
 function doSomething() public {
 uint timestamp = block.timestamp;
 address sender = msg.sender;
 // Rest of the function code…
 }
}توی مثال بالا، با استفاده از block.timestamp ما زمان فعلی رو بدست می‌آوریم و اون رو توی متغیر timestamp ذخیره می‌کنیم. همچنین، با استفاده از msg.sender ما آدرس فراخواننده رو دریافت می‌کنیم و به متغیر sender تخصیص می‌دهیم. این متغیرهای global اطلاعات مفیدی رو برای توسعه قراردادهای هوشمند فراهم می‌کنن و امکانات مختلفی رو به شما می‌دهند.🔍 تحلیل دقیق از قرارداد هوشمند ارائه شده:// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;
contract Variables {
 string public text = &amp;quotHello&amp;quot
 uint
public num = 123;
function doSomething() public {
 uint i = 456;
 uint timestamp = block.timestamp;
 address sender = msg.sender;
 // Rest of the function code…
 }
}در قرارداد هوشمند ارائه شده، ما دو state variable داریم: text که از نوع string است و با مقدار &quot;Hello&quot; مقداردهی اولیه شده است، و num که از نوع uint است و با مقدار 123 مقداردهی اولیه شده است. این متغیرها روی بلاکچین ذخیره می‌شوند و می‌توان از طریق توابع getter مربوطه به آنها (()text و ()num) دسترسی پیدا کرد.تابع &#x60;()doSomething&#x60; یک تابع public است که نحوه استفاده از متغیرهای local و global را نشان می‌دهد. این تابع یک متغیر local &#x60;i&#x60; از نوع &#x60;uint&#x60; تعریف می‌کند و به آن مقدار 456 را اختصاص می‌دهد. این متغیر local تنها در دامنه تابع &#x60;()doSomething&#x60; وجود دارد.علاوه بر این، درون تابع ()doSomething که یک تابع public است، ما زمان بلاک فعلی را با استفاده از متغیر سراسری block.timestamp استخراج می‌کنیم و آن را به متغیر لوکال timestamp اختصاص می‌دهیم. همچنین، آدرس فراخواننده را با استفاده از متغیر سراسری msg.sender به دست می‌آوریم و آن را به متغیر لوکال sender اختصاص می‌دهیم. این متغیرهای global اطلاعات حیاتی در مورد بلاکچین و زمینه تراکنش را فراهم می‌کنند.#100DaysOfSolidity Series 004 “Variables”نتیجه‌گیری:در این مقاله، ما به بررسی سه نوع متغیر در Solidity پرداختیم: local، state، و global. متغیرهای local موقتی هستند و تنها در دامنه تابع وجود دارند، در حالی که متغیرهای state روی بلاکچین ذخیره می‌شوند و بین فراخوانی‌های تابع باقی می‌مانند. متغیرهای global اطلاعات مهمی در مورد بلاکچین و زمینه تراکنش فراهم می‌کنند. درک و استفاده مناسب از این انواع متغیرها برای توسعه قراردادهای هوشمند کارآمد و امن ضروری است. با بهره‌گیری از قدرت متغیرها، شما می‌توانید داده‌ها را در قراردادهای خود ذخیره و دستکاری کنید تا برنامه‌های کاربردی غیرمتمرکز قدرتمندی ایجاد نمایید.🎉 تبریک برای تکمیل چهارمین مقاله از سری #100DaysOfSolidity! منتظر موضوعات هیجان‌انگیز بیشتری در مقالات آینده باشید.🔸 این مقاله،از مقالات ترجمه شده از سالیدیتی آکادمی است برای خواندن مقاله اصلی می‌توانید به لینک زیر مراجعه کنید: https://medium.com/@solidity101/100daysofsolidity-solidity-variables-exploring-local-state-and-global-variables-b720a5c20fb9 </description>
                <category>yousef saeedian</category>
                <author>yousef saeedian</author>
                <pubDate>Mon, 15 Jan 2024 20:43:04 +0330</pubDate>
            </item>
                    <item>
                <title>روز ۳/۱۰۰ - درک انواع داده‌های اولیه در سالیدیتی</title>
                <link>https://virgool.io/solidity101/%D8%B1%D9%88%D8%B2-%DB%B3%DB%B1%DB%B0%DB%B0-%D8%AF%D8%B1%DA%A9-%D8%A7%D9%86%D9%88%D8%A7%D8%B9-%D8%AF%D8%A7%D8%AF%D9%87-%D9%87%D8%A7%DB%8C-%D8%A7%D9%88%D9%84%DB%8C%D9%87-%D8%AF%D8%B1-%D8%B3%D8%A7%D9%84%DB%8C%D8%AF%DB%8C%D8%AA%DB%8C-vcbxkal5iozr</link>
                <description>📝 به سومین بخش از مجموعه #۱۰۰روزباسالیدیتی خوش آمدید! در این مقاله، به بررسی «انواع داده‌های پایه»در زبان سالیدیتی خواهیم پرداخت. درک این انواع داده‌های اساسی برای ساخت قراردادهای هوشمند در سالیدیتی حیاتی است، زیرا آن‌ها بلاک‌های ساختاری داده‌های قرارداد شما را تشکیل می‌دهند. پس، بیایید عمیق تر شویم و انواع مختلف داده‌های اولیه موجود در سالیدیتی و ویژگی‌های آن‌ها را کشف کنیم.نوع Booleanبیایید با نوع داده بولین شروع کنیم. در سالیدیتی، نوع داده بولین می‌تواند دو مقدار ممکن داشته باشد: true یا false. این برای نمایش مقادیر منطقی استفاده می‌شود و به ویژه در بیانیه‌های شرطی و تصمیم‌گیری درون قراردادهای هوشمندتان مفید است.انواع عدد صحیح بدون علامتسالیدیتی چندین نوع عدد صحیح بدون علامت را فراهم می‌کند که برای نمایش اعداد صحیح غیر منفی استفاده می‌شوند. این انواع شامل &#x60;uint8&#x60;، &#x60;uint16&#x60;، &#x60;uint256&#x60; و بیشتر می‌شوند. عددی که بعد از &#x60;uint&#x60; می‌آید، تعداد بیت‌هایی که هر نوع می‌تواند نگه دارد را نشان می‌دهد.برای مثال، &#x60;uint8&#x60; می‌تواند مقادیری از ۰ تا ۱ — ۲⁸ (۲۵۵) را ذخیره کند، در حالی که &#x60;uint256&#x60; می‌تواند مقادیری از ۰ تا ۱ — ۲²⁵⁶ را ذخیره کند و دامنه‌ای وسیع از مقادیر ممکن را فراهم می‌آورد.انواع عدد صحیح دارای علامتعلاوه بر اعداد صحیح بدون علامت، سالیدیتی همچنین از انواع عدد صحیح دارای علامت پشتیبانی می‌کند. این انواع می‌توانند هم اعداد صحیح مثبت و هم منفی را نشان دهند. مشابه با اعداد صحیح بدون علامت، اعداد صحیح دارای علامت اندازه‌های مختلفی دارند که از int8 تا int256 متغیرند.رای مثال، int8 می‌تواند مقادیری از ۲⁷- تا ۱ — ۲⁷ (-۱۲۸ تا ۱۲۷) را نگه دارد، در حالی که int256 می‌تواند مقادیری از ۲²⁵⁵- تا ۱ — ۲²⁵⁵  را نگه دارد. نوع int یک نام مستعار برای int256 است و دامنه‌ای وسیع از مقادیر عدد صحیح دارای علامت را فراهم می‌آورد.نوع Addressنوع address در سالیدیتی برای ذخیره آدرس‌های اتریومی استفاده می‌شود. این نوع یک مقدار ۲۰ بایتی را نمایش می‌دهد و معمولا برای ذخیره آدرس‌های حساب‌های کاربری یا قراردادهای هوشمند استفاده می‌شود. آدرس‌ها مقادیر هگزادسیمال هستند و معمولاً به صورت ۴۰ کاراکتری بیان می‌شوند (مثلاً 0xCA35b7d915458EF540aDe6068dFe2F44E8fa733c).نوع ‌Bytesدر سالیدیتی، نوع bytes یک آرایه دینامیک از بایت‌ها را نمایش می‌دهد. این نوع مختصری برای byte[] است. بایت‌ها برای ذخیره دنباله‌هایی از بایت‌ها استفاده می‌شوند و اغلب برای رسیدگی به داده‌های خام یا انجام عملیات‌های رمزنگاری به کار گرفته می‌شوند.سالیدیتی همچنین آرایه‌های بایت با اندازه ثابت را فراهم می‌کند، اما برای اختصار، در این مقاله تمرکز ما روی آرایه‌های بایت دینامیک خواهد بود.برای مثال، bytes1 یک بایت تکی را نشان می‌دهد و می‌توانید آن را با یک مقدار هگزادسیمال مانند 0xb5 مقداردهی اولیه کنید. به طور مشابه، bytes1 با مقدار 0x56 یک بایت دیگر را نشان می‌دهد. این بایت‌ها می‌توانند با استفاده از عملیات‌های بیت به بیت دستکاری شوند و معمولاً در عملیات‌های سطح پایین درون قراردادهای هوشمند به کار می‌روند.مقادیر پیش‌فرضزمانی که شما در سالیدیتی متغیرها را بدون اختصاص دادن صریح یک مقدار به آن‌ها تعریف می‌کنید، با مقادیر پیش‌فرض مقداردهی اولیه می‌شوند. به عنوان مثال، یک متغیر bool به false، یک متغیر uint به 0، یک متغیر int به 0 و یک متغیر address به 0x0000000000000000000000000000000000000000 مقداردهی اولیه خواهد شد. در نظر گرفتن این مقادیر پیش‌فرض هنگام طراحی و توسعه قراردادهای هوشمندتان حیاتی است.کد نمونه سالیدیتیبیایید نگاهی به یک قرارداد هوشمند نمونه بیندازیم که استفاده از این انواع داده‌های اولیه را نشان می‌دهد:// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;
contract Primitives {
 bool public boo = true;
 
 uint8 public u8 = 1;
 uint public u256 = 456;
 uint public u = 123;
 
 int8 public i8 = -1;
 int public i256 = 456;
 int public i = -123;
 
 address public addr = 0xCA35b7d915458EF540aDe6068dFe2F44E8fa733c;
 
 bytes1 a = 0xb5;
 bytes1 b = 0x56;
 
 bool public defaultBoo;
 uint public defaultUint;
 int public defaultInt;
 address public defaultAddr;
}در این قرارداد نمونه، ما متغیرهایی از انواع داده‌های اولیه مختلف تعریف کرده‌ایم و استفاده از آن‌ها را نشان داده‌ایم. شما می‌توانید با این متغیرها تعامل داشته باشید و مقادیر آن‌ها را از طریق توابع getter که به طور خودکار توسط سالیدیتی برای متغیرهای حالت عمومی ایجاد می‌شوند، مشاهده کنید.#100DaysOfSolidity Series 003 “Primitive Data Types”نتیجه‌گیریدر این مقاله، به بررسی انواع داده‌های پایه‌ای موجود در سالیدیتی پرداختیم. درک این داده‌ها برای ساخت قراردادهای هوشمند مستحکم و کارآمد بسیار مهم است. با استفاده از متغیرهای بولین، اعداد صحیح با و بدون علامت، آدرس‌ها و بایت‌ها، شما قادر خواهید بود ساختارهای داده پیچیده‌تری بسازید و عملکردهای قدرتمندی را در قراردادهای خود پیاده‌سازی کنید.به خاطر داشته باشید که هنگام طراحی قراردادهای هوشمند خود، دامنه و محدودیت‌های هر نوع داده را در نظر بگیرید، زیرا این موارد می‌توانند بر کارایی و امنیت برنامه‌های شما تأثیربگذارند. منتظر پست بعدی در مجموعه #۱۰۰روزباسالیدیتی باشید، جایی که به مفاهیم پیشرفته‌تر سالیدیتی به طور عمیق‌تری خواهیم پرداخت.🌐 برای اطلاعات بیشتر در مورد انواع داده‌های اولیه و نحوه استفاده از آن‌ها، به داکیومنت سالیدیتی مراجعه کنید.The Solidity Blueprint🔸 این مقاله،از مقالات ترجمه شده از سالیدیتی آکادمی است برای خواندن مقاله اصلی می‌توانید به لینک زیر مراجعه کنید: https://medium.com/@solidity101/100daysofsolidity-understanding-primitive-data-types-in-solidity-d588aae10d0b &lt;br/&gt;</description>
                <category>yousef saeedian</category>
                <author>yousef saeedian</author>
                <pubDate>Sat, 13 Jan 2024 23:16:53 +0330</pubDate>
            </item>
                    <item>
                <title>۲/۱۰۰ - ساخت اولین برنامه‌تان با سالیدیتی: یک راهنمای گام‌به‌گام 👷‍♂️💻</title>
                <link>https://virgool.io/solidity101/%DB%B2%DB%B1%DB%B0%DB%B0-%D8%B3%D8%A7%D8%AE%D8%AA-%D8%A7%D9%88%D9%84%DB%8C%D9%86-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D8%AA%D8%A7%D9%86-%D8%A8%D8%A7-%D8%B3%D8%A7%D9%84%DB%8C%D8%AF%DB%8C%D8%AA%DB%8C-%DB%8C%DA%A9-%D8%B1%D8%A7%D9%87%D9%86%D9%85%D8%A7%DB%8C-%DA%AF%D8%A7%D9%85-%D8%A8%D9%87-%DA%AF%D8%A7%D9%85-%EF%B8%8F-dd7tlcufypsj</link>
                <description>🎉 به دومین پست از مجموعه #۱۰۰روزباسالیدیتی خوش آمدید! در این مقاله، ما شما را در مسیر ساختن برنامه‌ی سالیدیتی خود، از برپایی محیط توسعه گرفته تا استقرار و برقراری تعامل با قرارداد هوشمندتان، هدایت خواهیم کرد.فهرست مطالب۱. راه‌اندازی محیط توسعه‌ی شما 🛠️۲. نوشتن اولین قرارداد هوشمند شما 📝۳. کامپایل و استقرار قرارداد هوشمند 🚀۴. تعامل با قرارداد هوشمند ✨۵. تحلیل قرارداد هوشمند &quot;Counter&quot; 📊۶. نتیجه‌گیری 🌟#100DaysOfSolidity Series 002 “First Application”۱. راه‌اندازی محیط توسعه‌ی شما 🛠️برای شروع ساخت برنامه‌های Solidity، ابتدا باید محیط توسعه خود را راه‌اندازی کنید. در اینجا مراحلی که باید دنبال کنید آورده شده‌اند:۱.۱ نصب کامپایلر solidityکامپایلر سالیدیتی، که به عنوان solc شناخته می‌شود، برای تبدیل کد سالیدیتی به بایت‌کد قابل اجرا روی ماشین مجازی اتریوم (EVM) ضروری است. شما می‌توانید با پیروی از راهنمایی‌های ارائه شده در داکیومنتشن سایتسالیدیتی، این کامپایلر را نصب کنید.۲.۱ انتخاب یک محیط توسعه یکپارچه (IDE)انتخاب یک IDE مناسب برای تجربه‌ای بدون دردسر در توسعه Solidity حیاتی است. برخی از گزینه‌های محبوب شامل Remix، Visual Studio Code با افزونه‌های Solidity، و Truffle Suite هستند. یکی را که بهترین پاسخگوی نیازها و ترجیحات شما است، انتخاب کنید.۳.۱ نصب Dependency(وابستگی‌) مورد نیازبرای تسهیل فرآیند توسعه و استقرار، نیاز است تا Dependency مانند Node.js و npm را نصب کنید. برای دستورالعمل‌های دقیق در مورد نصب این وابستگی‌ها، به داکیومنت IDE مورد نظر خود مراجعه کنید.۲. نوشتن اولین قرارداد هوشمند شما 📝حال که محیط توسعه شما آماده است، بیایید یک قرارداد هوشمند ساده با نام &quot;HelloWorld&quot; در Solidity بنویسیم. این قرارداد برای ذخیره‌سازی و بازیابی یک پیام خوش‌آمدگویی طراحی خواهد شد.pragma solidity ^0.8.0;
contract HelloWorld {
 string public greeting;
constructor() {
 greeting = &amp;quotHello, World!&amp;quot
 }
function setGreeting(string memory _greeting) public {
 greeting = _greeting;
 }
function getGreeting() public view returns (string memory) {
 return greeting;
 }
}قرارداد HelloWorld یک متغیر رشته‌ای عمومی به نام greetingتعریف می‌کند و آن را با یک پیام پیش‌فرض در سازنده (constructor) مقداردهی اولیه می‌کند. همچنین، این قرارداد دارای توابع تنظیم‌کننده (setter) و بازیابی‌کننده (getter) است تا امکان به‌روزرسانی و بازیابی پیام خوش‌آمدگویی را فراهم آورد.۳.کامپایل و دیپلوی قرارداد هوشمند 🚀پس از نوشتن قرارداد هوشمند، گام بعدی کامپایل و دیپلوی آن بر روی بلاک‌چین اتریوم است. این مراحل را دنبال کنید:۱.۳ کامپایل کردن قرارداد هوشمندبرای کامپایل کد سالیدیتی، از کامپایلر سالیدیتی (solc) یا کامپایلر تعبیه‌شده در محیط توسعه یکپارچه (IDE) انتخابی خود استفاده کنید. این فرایند، بایت‌کد و رابط باینری کاربردی (ABI) که برای استقرار لازم است، ایجاد می‌کند.۲.۳ دیپلوی در بلاکچین اتریومبرای دیپلوی قرارداد، می‌توانید از ابزارها و خدماتی مانند Remix، Truffle یا Hardhat استفاده کنید. این ابزارها رابطی را برای تعامل با شبکه اتریوم فراهم می‌کنند و امکان دیپلوی قرارداد شما را در یک تست‌نت یا مین‌نت (شبکه اصلی) می‌دهند.۴. تعامل با قرارداد هوشمند ✨پس از استقرار قراردادتان، شما می‌توانید با فراخوانی توابع آن با آن تعامل داشته باشید. در اینجا مثالی از چگونگی تعامل با قرارداد HelloWorld با استفاده از web3.js آورده شده است:const Web3 = require(&#039;web3&#039;);
const abi = require(&#039;path/to/contract/abi&#039;);
const contractAddress = &#039;0x…&#039;; // Address of the deployed contract
const web3 = new Web3
(&#039;https://ropsten.infura.io/v3/YOUR_INFURA_API_KEY&#039;);
const contract = new web3.eth.Contract(abi, contractAddress);
// Get the current greeting
contract.methods.getGreeting().call((error, result) =&gt; {
 if (error) {
 console.error(error);
 } else {
 console.log(&#039;Current greeting:&#039;, result);
 }
});
// Update the greeting
const newGreeting = &#039;Hello, Solidity!&#039;;
contract.methods.setGreeting(newGreeting).send({ from: &#039;0x…&#039; }, (error, transactionHash) =&gt; {
 if (error) {
 console.error(error);
 } else {
 console.log(&#039;Transaction hash:&#039;, transactionHash);
 }
});در این بخش کد، از کتابخانه web3.js برای ایجاد اتصال به یک گره (نود) اتریوم استفاده کرده و با قراردادی که دیپلوی شده است تعامل برقرار می‌کنیم. ما پیام تبریک موجود را بازیافته و آن را با یک پیام جدید به‌روز می‌کنیم.۵. تحلیل قرارداد هوشمند &quot;Counter&quot; 📊بیایید قرارداد هوشمند Counter که شما فراهم کرده‌اید را تحلیل کنیم:قرارداد &#x60;Counter&#x60; یک متغیر &#x60;count&#x60; از نوع &#x60;uint&#x60; (عدد صحیح بدون علامت) را حفظ می‌کند. این قرارداد سه تابع ارائه می‌دهد:// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;
contract Counter {
 uint public count;
// Function to get the current count
 function get() public view returns (uint) {
 return count;
 }
// Function to increment count by 1
 function inc() public {
 count += 1;
 }
// Function to decrement count by 1
 function dec() public {
 // This function will fail if count = 0
 count -= 1;
 }
}- &#x60;get()&#x60;: یک تابع view که مقدار فعلی &#x60;count&#x60; را برمی‌گرداند.- &#x60;inc()&#x60;: تابعی که مقدار &#x60;count&#x60; را ۱ واحد افزایش می‌دهد.- &#x60;dec()&#x60;: تابعی که مقدار &#x60;count&#x60; را ۱ واحد کاهش می‌دهد. با این حال، اگر مقدار &#x60;count&#x60; از پیش ۰ باشد، این تابع شکست خواهد خورد.۶. نتیجه‌گیری 🌟تبریک می‌گوییم برای ساخت اولین برنامه سالیدیتی خود! در این مقاله، ما مراحل ضروری را از راه‌اندازی محیط توسعه‌تان تا نوشتن یک قرارداد هوشمند ساده و تعامل با آن پوشش دادیم. سالیدیتی امکانات بی‌پایانی برای توسعه برنامه‌های غیرمتمرکز روی بلاکچین اتریوم ارائه می‌دهد، و ما امیدواریم که این مقاله پایه‌ای محکم برای اکتشاف بیشتر شما فراهم کرده باشد. به یاد داشته باشید، تمرین کامل‌کننده مهارت است، پس به آزمایش و ساخت برنامه‌های پیچیده‌تر با سالیدیتی ادامه دهیدHappy Coding.📚 References:Solidity DocumentationRemix IDETruffle SuiteWeb3.js DocumentationThe Solidity Blueprint🔸 این مقاله،از مقالات ترجمه شده از سالیدیتی آکادمی است برای خواندن مقاله اصلی می‌توانید به لینک زیر مراجعه کنید: https://medium.com/@solidity101/100daysofsolidity-building-your-first-application-with-solidity-a-step-by-step-guide-%EF%B8%8F-d38e067e4137 </description>
                <category>yousef saeedian</category>
                <author>yousef saeedian</author>
                <pubDate>Sat, 13 Jan 2024 10:03:44 +0330</pubDate>
            </item>
                    <item>
                <title>روز ۱/۱۰۰ -کشف پتانسیل‌های سالیدیتی: هنر «Hello world»</title>
                <link>https://virgool.io/solidity101/%D8%B1%D9%88%D8%B2-%DB%B1%DB%B1%DB%B0%DB%B0-%DA%A9%D8%B4%D9%81-%D9%BE%D8%AA%D8%A7%D9%86%D8%B3%DB%8C%D9%84-%D9%87%D8%A7%DB%8C-%D8%B3%D8%A7%D9%84%DB%8C%D8%AF%DB%8C%D8%AA%DB%8C-%D9%87%D9%86%D8%B1-hello-world-rwkbphuddvn8</link>
                <description>به نخستین پست از مجموعه پرشور #۱۰۰روزباسالیدیتی ما خوش آمدید، جایی که عمیقاً به اکتشاف دنیای زبان سالیدیتی و جستجوی ویژگی‌های شگفت‌انگیز آن می‌پردازیم. در این مقاله، شما را در سفری منحصربه‌فرد برای درک قدرت سالیدیتی از طریق مثال رایج «Hello world» همراهی می‌کنیم.آماده شوید تا وارد یک تجربه آموزشی هیجان‌انگیز شوید که در آن دانش فنی، محتوای جذاب و حتی شادی و سرگرمی با استفاده از ایموجی‌ها را ببینیم! پس، بیایید قدرت سالیدیتی را کشف کنیم و یاد بگیریم چطور قرارداد «Hello world» خودمان را بسازیم. 🚀#100DaysOfSolidity Series 001 “Hello World”📜 ظرافت‌های «Hello world»:در اولین نگاه، «Hello world» شاید ساده و تکراری به نظر برسد، اما این مثال به عنوان یک نقطه آغازین حیاتی برای فراگیری هر زبان برنامه‌نویسی شناخته می‌شود. در زبان سالیدیتی، این نمونه به ما کمک می‌کند تا با مفاهیم بنیادی و سینتکس آشنا شویم و در عین حال، پایه‌ای برای قراردادهای هوشمند پیچیده‌تر بنا نهیم. بیایید با بررسی ساختار کد و فهمیدن اجزای آن، ماجراجویی خود را آغاز کنیم.📝 ساختار کد:۱.دستور Pragma:دستورPragma به عنوان نقطه آغازین هر قرارداد سالیدیتی شناخته می‌شود. این دستورالعمل نسخه مورد نیاز کامپایلر را تعیین می‌کند. در مثال ما، به نسخه کامپایلری برابر یا بیشتر از ۰.۸.۱۷ و کمتر از ۰.۹.۰ نیاز داریم. این تضمین می‌کند که سازگاری و استفاده از آخرین پیشرفت‌ها حفظ شود، ضمن اینکه ثبات کد نیز تأمین می‌گردد.۲. اعلام قرارداد یا Contract Declaration:سپس، ما با استفاده از کلمه کلیدی &quot;contract&quot; دنبال شده توسط نام قرارداد، که در مورد ما&quot;HelloWorld&quot; است، قرارداد خود را اعلام می‌کنیم. قراردادها به عنوان بلوک‌های ساختمانی قراردادهای هوشمند عمل می‌کنند، عملکرد و داده‌ها را در واحدهای قابل استفاده مجدد محصور می‌کنند.3. state variable:در داخل قرارداد، ما یک متغیر حالت به نام &quot;greet&quot; از نوع&quot;string&quot; تعریف می‌کنیم. State variableداده‌هایی را نگه می‌دارند که طی کل عمر قرارداد باقی می‌مانند. کلمه کلیدی &quot;public&quot; باعث می‌شود که این متغیر از بیرون قرارداد قابل دسترس باشد، که این امکان را به ما می‌دهد تا مقدار آن را بخوانیم.۴. مقداردهی اولیه:در این مثال ما، ما متغیر&quot;greet&quot; را با رشته&quot;Hello World!&quot; مقداردهی اولیه می‌کنیم. این کار پیام تبریک اولیه را تنظیم می‌کند که بعداً می‌توان تغییر داد.🔍 نگاهی عمیق تر:‌پس از بررسی ساختار کد، حال زمان آن رسیده که به بخش‌های فنی عمیق‌تر سالیدیتی بپردازیم.۱. نسخه‌بندی در سالیدیتی:(Solidity Versioning)سالیدیتی زبانی است که به سرعت در حال تکامل است و حفظ سازگاری با نسخه‌های متفاوت کامپایلر اهمیت بالایی دارد. با تعیین دستورالعمل pragma، ما اطمینان حاصل می‌کنیم که قراردادمان با استفاده از نسخه معینی از کامپایلر سالیدیتی کامپایل می‌شود. این امر در جلوگیری از مشکلات ناشی از تغییرات عمده در نسخه‌های جدیدتر کامپایلر موثر است.۲. انواع داده ها (data types):سالیدیتی انواع داده‌های مختلفی را برای برآورده کردن نیازهای گوناگون فراهم می‌کند. در مثال ما، ما از نوع داده &quot;string&quot; برای ذخیره‌سازی پیام تبریک استفاده کردیم. سالیدیتی همچنین از انواع ابتدایی دیگر مانند اعداد صحیح، بولین‌ها، آدرس‌ها و بیشتر پشتیبانی می‌کند. درک این انواع داده برای ساخت قراردادهای هوشمند محکم و کارآمد ضروری است.۳. تعیین کننده‌های قابلیت دید(Visibility Modifiers):با استفاده از تعیین کننده قابلیت دید ««public، ما متغیر حالت «greet» را به دنیای بیرونی قابل دسترس می‌کنیم. سالیدیتی چندین تعیین کننده قابلیت دید مانند عمومی (public)، خصوصی(private)، داخلی (internal) و خارجی(external) را ارائه می‌دهد که بر دسترسی به متغیرها و توابع کنترل اعمال می‌کنند. تعیین درست قابلیت دید برای امنیت و محدودسازی بسیار مهم است.۴. استقرار و تعامل قرارداد:پس از اینکه قرارداد سالیدیتی خود را نوشتیم، باید آن را در یک شبکه بلاکچین مستقر کنیم. این امکان را به کاربران می‌دهد تا با توابع قرارداد تعامل داشته باشند و به داده‌های آن دسترسی پیدا کنند. استقرار یک قرارداد شامل کامپایل کردن کد سالیدیتی، تولید نمایش بایت‌کد و استقرار آن در شبکه بلاکچین مورد نظر با استفاده از ابزارهایی مانند Remix یا Truffle است.🎓 محتوای آموزشی:سالیدیتی، زبانی پرقدرت است که توسعه برنامه‌های غیرمتمرکز و قراردادهای هوشمند را امکان‌پذیر می‌کند. با فهم عمیق‌تر از ساختار کدنویسی و جزئیات فنی آن، شما قادر خواهید بود تا برنامه‌های پیچیده و ایمنی را در پلتفرم‌های متنوع بلاکچین، به ویژه اتریوم، طراحی و پیاده‌سازی کنید.🔢 ساختارهای نمونه کد:برای ارتقاء تجربه یادگیری‌تان، بگذارید نگاهی به چند نمونه از ساختارهای کد در زبان سالیدیتی بیندازیم. این تکه‌های کد، ویژگی‌ها و مفاهیم متنوعی را به نمایش می‌گذارند که می‌توانید آن ها را آزمایش کرده و آن‌ها را توسعه دهید.رویدادها:ایونت‌ها یا Events به قراردادها امکان می‌دهند تا با نهادهای خارجی ارتباط برقرار کنند و راهی برایemit کردن اطلاعیه‌ها در مورد رویدادهای خاص درون قرارداد فراهم می‌کنند. در اینجا مثالی از اعلام یکEvent آورده شده است:```
event Greeting(string message);
```۲. اصلاح‌کننده‌های تابع(Function Modifiers):فانکشن مودیفایر‌ها به ما این امکان را می‌دهند که عملکرد توابع در سالیدیتی را ارتقا دهیم. از آن‌ها می‌توان برای افزودن بررسی‌های اضافی، انجام پیش‌پردازش و پس‌پردازش، یا محدودسازی دسترسی استفاده کرد. در اینجا یک نمونه ساده از اصلاح‌کننده‌ای آورده شده است که بررسی می‌کند آیا فراخواننده، مالک قرارداد است یا خیر:```
modifier onlyOwner() {
require(msg.sender == owner, “Only the contract owner can call this function.”);
_;
}
```۳ Structs:استراکت‌ یا Structs به ما امکان می‌دهند ساختارهای داده‌ای سفارشی را در سالیدیتی تدوین کنیم. آنها قادرند چندین متغیر را در خود جای دهند که این امکان را فراهم می‌آورد تا مدل‌های داده‌ای پیچیده‌ای را در قراردادها بسازیم. در اینجا نمونه‌ای از یک ساختار(struct) آورده شده که یک شخص را توصیف می‌کند:```
struct Person {
string name;
uint age;
address wallet;
}
```🎉 نتیجه‌گیری:تبریک می‌گوییم! شما اولین قسمت از سری #۱۰۰روزباسالیدیتی ما را به پایان رساندید و دنیای جذاب سالیدیتی را از طریق مثال نمادین &quot;Hello world&quot;کشف کردید. ما ساختار کد، بینش‌های فنی را پوشش داده‌ایم و ساختارهای کد اضافی را برای گسترش دانش شما ارائه کرده‌ایم. همانطور که در سفر خود ادامه می‌دهید، به خاطر داشته باشید که سالیدیتی به شما امکان می‌دهد تا برنامه‌های غیرمتمرکزی بسازید که می‌توانند صنایع را متحول کنند. پس، به کاوش، کدنویسی و قفل‌گشایی پتانسیل واقعی سالیدیتی ادامه دهید!امیدواریم از این مقاله آموزشی و سرگرم‌کننده لذت برده باشید. برای پست بعدی در سری #۱۰۰روزباسالیدیتی ما منتظر بمانید، جایی که به بررسی موضوعات بیشتر و جذاب‌تری خواهیم پرداخت و تمام پتانسیل سالیدیتی را به نمایش خواهیم گذاشت. کدنویسی خوشایندی داشته باشید! 😊🔸 این مقاله ترجمه شده از مقاله سالیدیتی آکادمی است برای خواندن مقاله اصلی می‌توانید به لینک زیر مراجعه کنید: https://medium.com/@solidity101/100daysofsolidity-unlocking-soliditys-potential-the-art-of-hello-world-23639938b371 </description>
                <category>yousef saeedian</category>
                <author>yousef saeedian</author>
                <pubDate>Fri, 12 Jan 2024 15:23:22 +0330</pubDate>
            </item>
                    <item>
                <title>🎉 برای سری #۱۰۰روزباسالیدیتی آماده شوید! 🚀</title>
                <link>https://virgool.io/solidity101/0100daysofsolidity-getstart-dcmsylyohqwn</link>
                <description>آیا هیجان‌زده هستید؟ ما امروز سری #۱۰۰روز با سالیدیتی را با اشتیاق فراوان آغاز می‌کنیم! در این ماجراجویی منحصر به فرد و فنی، شما را در مسیر جذاب و شگفت‌انگیز برنامه‌نویسی سالیدیتی همراهی می‌کنیم. در این سفر، مهارت‌های توسعه قراردادهای هوشمند و اپلیکیشن‌های غیرمتمرکز در بلاکچین اتریوم را فرا خواهید گرفت. پس برای تجربه‌ای هیجان‌انگیز، آماده باشید و کمربندهایتان را محکم ببندید!🌞 طلوع یک عصر جدید: بیایید شروع کنیم! 🌟خورشید در افق طلوع می‌کند و شروع ماجراجویی حماسی ما را نوید می‌دهد. همانطور که ما به عمق برنامه‌نویسی سالیدیتی فرو می‌رویم، شما قدرت ایجاد برنامه‌های غیرمتمرکزی را که می‌توانند صنایع را متحول کرده و چشم‌انداز دیجیتالی را دگرگون کنند، بازخواهید کرد. آیا آماده هستید تا مهارت‌های کدنویسی خود را متحول سازید و به یک جادوگر بلاکچین تبدیل شوید؟ زمانی بهتر از حالا وجود ندارد!🕹️ مهارت‌های سالیدیتی خود را ارتقا دهید: رازهای قراردادهای هوشمند را کشف کنید 🧙‍♂️در طول سری #۱۰۰روزباسالیدیتی، ما شما را در مسیر فراگیری اصول و پایه‌های سالیدیتی هدایت خواهیم کرد. از مفاهیم ابتدایی شروع کرده و به تدریج به سمت مباحث پیچیده‌تر و پیشرفته‌تر حرکت می‌کنیم. شما درک عمیقی از قراردادهای هوشمند، مؤلفه‌های اساسی برنامه‌های غیرمتمرکز به دست خواهید آورد و می‌آموزید چطور کدی کارآمد و ایمن بنویسید که قابل اجرا روی بلاکچین اتریوم باشد.📚 محتوای منحصربه‌فرد و عمیق: به خلاقیت خود بال و پر دهید! 🖌️ما به ارائه محتوایی برجسته و یگانه که ما را از دیگران متمایز سازد، متعهدیم. هر یک از مقالات سری #۱۰۰روزباسالیدیتی با دقت نظر و ظرافت خاصی پرداخته می‌شود تا تجربه‌ای عمیق و جذاب در یادگیری را برای شما به ارمغان آورد. از آموزش‌های جامع و بررسی‌های دقیق کد گرفته تا کاربردهای واقعی و بهترین شیوه‌ها، ما به تمام جنبه‌ها خواهیم پرداخت. همزمان با عمیق شدن در دنیای هیجان‌انگیز توسعه سالیدیتی، به خلاقیت خود آزادی ببخشید و آن را به اوج خودش برسانید!🚀به انقلاب سالیدیتی ملحق شوید: در بخشی از یک موج بزرگ سهیم باشید! 🌐تکنولوژی بلاکچین در حال دگرگون سازی صنایع سنتی و باز کردن دروازه‌هایی به سوی فرصت‌های نوین است. با مسلط شدن بر سالیدیتی، شما در خط مقدم این انقلاب خواهید بود، مجهز به توانایی‌های ساخت برنامه‌های غیرمتمرکزی که قادرند عرصه‌های مالی، زنجیره‌های تأمین، بازی‌ها و فراتر از آن را متحول کنند. آینده غیرمتمرکز را در آغوش گرفته و نقش خود را در جهان مشخص کنید!🔔 در چرخه اطلاع‌رسانی باقی بمانید: همین اکنون عضو شوید! 📬از هیچ یک از به‌روزرسانی‌های سری #۱۰۰روزباسالیدیتی غافل نشوید. امروز به خبرنامه ما ملحق شوید تا همواره در جریان باشید و ارتباط خود را حفظ کنید. ما شما را با جدیدترین مقالات، منابع و رویدادهای جامعه‌مان به‌روز خواهیم داشت. با دیگر علاقه‌مندان سالیدیتی ارتباط برقرار کنید، افکار و نظرات خود را به اشتراک بگذارید و از بی‌کرانگی پتانسیل تکنولوژی بلاکچین الهام بگیرید.🌟 سفر آغاز می‌شود: آماده، مهیا، به سوی سالیدیتی! 🌟زمان عمل فرا رسیده است! خود را آماده سازید، ابزار کدنویسی محبوب خود را در دست بگیرید و خود را برای شروع یک سفر ۱۰۰ روزه آماده کنید که مهارت‌های سالیدیتی شما را به سطوح جدیدی خواهد رساند. خواه شما یک توسعه‌دهنده با تجربه باشید یا مبتدی، سری #۱۰۰روزباسالیدیتی شما را به چالش می‌کشد، الهام می‌بخشد و توانایی خلق راه‌حل‌های بلاکچینی را به شما می‌دهد که می‌توانند جهان را دگرگون سازند. بیایید ماجراجویی را آغاز کنیم!🔓 آینده را باز کنید: ماموریت سالیدیتی شما در انتظار است! 🚪زمانی که قدم در دنیای برنامه‌نویسی سالیدیتی می‌گذارید، به خاطر داشته باشید که شما صرفاً یک زبان جدید را یاد نمی‌گیرید. شما در حال گشودن دری به سوی آینده‌ای غیرمتمرکز هستید که در آن شفافیت، امنیت و اعتماد حرف اول را می‌زنند. اجازه دهید سحر و جادوی سالیدیتی شما را در این ماموریت محوری و متحول‌کننده هدایت کند و با هم، دنیایی عادلانه، همه‌گیر و بنیاد نهاده شده بر تکنولوژی بلاکچین را پدید آوریم.🔸 این مقاله ترجمه شده از مقاله سالیدیتی آکادمی است برای خواندن مقاله اصلی می‌توانید به لینک زیر مراجعه کنید:  https://medium.com/@solidity101/get-ready-for-the-100daysofsolidity-series-44a35a915f36 </description>
                <category>yousef saeedian</category>
                <author>yousef saeedian</author>
                <pubDate>Fri, 12 Jan 2024 00:21:30 +0330</pubDate>
            </item>
                    <item>
                <title>۴ نکته ناگفته درباره طراحی کاور</title>
                <link>https://virgool.io/@yousefsaeedian/%DB%B5-%D9%86%DA%A9%D8%AA%D9%87-%D9%86%D8%A7%DA%AF%D9%81%D8%AA%D9%87-%D8%AF%D8%B1%D8%A8%D8%A7%D8%B1%D9%87-%D8%B7%D8%B1%D8%A7%D8%AD%DB%8C-%DA%A9%D8%A7%D9%88%D8%B1-ve27ophcfuvr</link>
                <description>دوستان عزیزم سلام کاور شما کلید رسیدن شما به اکسپلور،صفحات هشتگ و بالا اومدن در صفحه home اینستاگرامپس همیشه روی طراحی کاورتون حساسیت به خرج بدین چون خوب بودنش خیلی بهتون کمک می‌کنه اگر بد باشه این شکلی بهت بگم وقتت رو تلف کردی چون هیچ خروجی نمی‌گیری اینجا بهت ۴ نکته کلیدی درباره چگونگی طراحی کاور پست‌های کروسل(ورقه‌ای) بهت می‌گم تا به هدف خودت برسی۱.صورت‌هاکاور‌های تاثیرگذار شامل چهره‌ها هستن این کار باعث ارتباط بیشتری با مخاطب میشه و مخاطب بیشتر جذب میشه به این چند موردی که این پایین گذاشتم توجه کنین تا منطورم رو متوجه بشین صورت‌ها همیشه سعی کنین از چهره‌ها استفاده کنین این‌ راه در ذهن مخاطب همیشه نتیجه مثبت داره و اگر از چهره خودتون استفاده کنین که چه بهتر چون مخاطب به شما اعتماد می‌کنه و بیشتر با شما وارد گپ و گفت میشه ۲.احساسات یک کاور خوب می‌تونه شامل یک کنش رفتاری باشه که این مورد به شما خیلی در تاثیرگذاری پست کمک می‌کنه پس اگر کاور پست‌هایی که محتوای متنی اونا می‌تونه شامل احساسات باشه حتماً حتماً از یک عکس با یک جسچر مرتبط با اون متن انتخاب کنین به مثال‌های پایین توجه کنینبه متن هر عکس هم توجه کنین۳.فاکتور شوخ طبعیاین فاکتور به ما کمک شایانی می‌کنه مخصوصا اگر بخوایم تو پست یه موضوع رو بولد کنیم تا بیشتر ذهن مخاطب رو به اون سمت سوق بدیم یعنی یک کاری کنیم تا اون موردی که در متن برجسته هست رو در قالب عکس هم برجسته بشه و مخاطبمون رو با خودمون همراه کنیم روی این قسمت یه کم وایستین و به روی هر عکس فکر کنین  و به کانسپ درونی هر پست توجه کنین ببینین نکته‌ای که اینجا هست اینه که شما حتی با دیدن کاور این پست و نخوندن محتوای کامل پست با عقیده نویسنده آشنا میشین و می‌فهمین توی ورقای بعدی قراره چیا بهتون بگه به طور مثال می‌خوام درباره کاور وسط باهاتون صحبت کنم چون بسیار جالب بود برامعنوان متن نوشته شده اینکه BRAND POSITIONING و به معنی موقعیت برند یا تثبیت برند هم میشه نام برد به رنگ فیل توجه کنین که چه رنگیه و جایگاهی که بالای شاخه نازک درخت داره نویسنده می‌خواد به ما بفهمونه که همونطور که فیل به خاطر وزن بالاش نمیره بالای درخت بشینه شما هم تو کسب و کارت اگه وزنت سنگینه نباید اون بالا باشی یا اینکه رنگ فیل صورتیه پس نباید در کسب و کارت تظاهر به انجام کاری بکنی یا رو راست نباشی نتیجه انجام این‌کار ها رو هم که خودت میدونی چی‌میشه ۴.عنواین کوتاه پر کردن کاور پست با نوشتن متن‌های طولانی باعث میشه مخاطب حتی پست رو بازنکنه چون یک نمی‌فهمه از کجا باید شروع به خوندن کنه و خیلی سریع از پست شما رد میشه پس همیشه سعی کنین اگر به دنبال انتخاب عنوان هستین همیشه سعی کنین که از کمترین کلمات استفاده کنین یعنی به حدی برسه که اگر حتی یک کلمه از جمله رو حذف کنین معنی و مفهوم خودش رو از دست بده به مثال‌های پایین توجه کنین  توی پست قبلی هم درباره‌ی این‌که چه شکلی یک پست خوب و استاندار طراحی کنیم حرف زدم می‌تونی اون مقاله رو هم بخونی  https://virgool.io/@yousefsaeedian/%DA%86%D9%87-%D8%A7%D8%B5%D9%88%D9%84%DB%8C-%D8%AF%D8%B1-%D8%B7%D8%B1%D8%A7%D8%AD%DB%8C-%DB%8C%DA%A9-%D9%BE%D8%B3%D8%AA-%D8%A7%DB%8C%D9%86%D8%B3%D8%AA%D8%A7%DA%AF%D8%B1%D8%A7%D9%85-%D8%A8%D8%A7%DB%8C%D8%AF-%D8%B1%D8%B9%D8%A7%DB%8C%D8%AA-%D8%A8%D8%B4%D9%87%D8%9F-gb3djnrgvyx1 ممنونم که تا اینجاش با من بودین امیدوارم که  مطالب براتون مفید واقع شده باشه </description>
                <category>yousef saeedian</category>
                <author>yousef saeedian</author>
                <pubDate>Sat, 09 Jan 2021 15:14:29 +0330</pubDate>
            </item>
                    <item>
                <title>چه اصولی در طراحی یک پست اینستاگرام باید رعایت بشه؟</title>
                <link>https://virgool.io/fboard/%DA%86%D9%87-%D8%A7%D8%B5%D9%88%D9%84%DB%8C-%D8%AF%D8%B1-%D8%B7%D8%B1%D8%A7%D8%AD%DB%8C-%DB%8C%DA%A9-%D9%BE%D8%B3%D8%AA-%D8%A7%DB%8C%D9%86%D8%B3%D8%AA%D8%A7%DA%AF%D8%B1%D8%A7%D9%85-%D8%A8%D8%A7%DB%8C%D8%AF-%D8%B1%D8%B9%D8%A7%DB%8C%D8%AA-%D8%A8%D8%B4%D9%87%D8%9F-gb3djnrgvyx1</link>
                <description>۱.سایز عنوان رو رعایت کن همیشه اینو یادتون باشه که یه پست قراره از قسمت بالا دیده بشه و وقتی یه فردی وارد پیجتون میشه ،بعد از نگاه کردن به میزان فالور و بیوتون چشمش به پستاتون میخوره باید عنوان هر پست جوری باشه که از قسمت بالا دیده بشه و مخاصب بفهمه داخل این پست چه محتوایی قرار داره.به این پیج نگاه کنین محتوای هر پست به صورت کاملا واضح قابل خوندنه پس حواستون باشه، در طراحی پست حتما عنوان و موضوعی که می‌خواین دربارش صحبت کنین رو به صورت بزرگ بزارین در ضمن فونتی هم که انتخاب می‌کنین خیلی اهمیت داره سعی‌ کنین از فونت‌هایی استفاده کنین که بقیه استفاده نمیکنن (اگر تونستین یه فونت اختصاصی داشته باشین) ۲. از عکس‌های خلاقانه استفاده کن اگه می‌خواین برای محتواتون عکسی انتخاب کنین سعی کنین همیشه عکسی بزارین که مخاطب حتی شده برای دیدن عکستون وارد پست بشه و به این هوا چشمش به متن بخوره و با پست شما درگیر بشه طراحی این پست شما رو مجاب می‌کنه که  ورق بزنین و صفحات بعدی رو حتما ببینین چون برای فرد جذاب و سرگرم‌کنندس ۳. زیاد صفحه رو شلوغ نکن بعضی ها رو دیدم که نصف یه پست رو با فونت ۱۲ خیلی ریز میان محتوا پر می‌کنن و انتظار دارن که فالورشون بیاد اون رو بخونه یادتون باشه هیچ وقت نزارین محتوایات چشم رو اذیت کنه (شاید اگه خودمونم تو اون شرایط قرار بدیم اصن برین پست بعدی چون محتوا زیاد و حوصله خوندن نداریم)  بقیه موارد رو در اسلاید‌های بعد اضافه کنین و همیشه سعی کنین تعداد اسلاید ها رو بالا ببرین تا اینکه بخواین تمام موارد رو توی دو یا یک ورق قرار بدین آمار ها هم نشون میده که افراد بیشتر با پست‌های ورق زدنی درگیر میشن تا پست تک اسلایدی ۴.درست کردن Visual pad design (مسیر چشمی)به این میگن درست کردن مسیر چشمی سعی کنین مطالب رو به صورت سازماندهی شده برای مخاطب قرار بدین این شکلی می فهمه باید از کجا شروع به خوندن کنه(خودش نمیفهمه از طریق ضمیر ناخودآگاهش این موضوع براش مشخص میشه) و در نتیجه گیج نمیشه خیلی وقتا به خاطر این که هر مطلبی رو یک سمتی برای خودش گذاشتیم مخاطبمون اصلا نتونسته تشخیص بده از کجا باید شروع کنه به خوندن واسه همین سریع پست رو رد کرده۵. از CTA غافل نشو...یه چیزی بگم راحتت کنم اگه مخاطبت رو تا ورقه آخر با خودت همراه کنی ولی در آخر کاری ازش نخوای باختی بدم باختی چرا؟ چون مخاطب با موضوع درگیر شده و آماده هرگونه واکنشه بعضی وقتا موضوع جوریه که بعدا به دردش میخوره پس بهش بگو پست رو Save کن یا اینکه پست رو برای دوستاش ارسال کنه یا نظر خودش رو درباره موضوع برات کامنت کنه خودتون بهتر از من میدونین طبق الگوریتم اینستاگرام هرچی پست بیشتر Save بشه احتمال اینکه وارد اکسپلور بشه خیلی بیشتره و...نتیجه‌گیریاینستاگرام یک شبکه اجتماعیه که افراد برای سرگرم‌ کردن خودشون میان پس سعی نکنین خیلی رسمی توش برخور کنین سعی کنین موضوعات رو در غالب یک دوست بیان کنین سعی کنین مطالب رو کوتاه کوتاه و به صورت داستانی بزارین تا هم حوصلشون سر نره هم اینکه با شما همراه بشن من حرفامو زدم به نظرت موضوع دیگه‌ای هم هست که من یادم شده باشه بگم این پایین برام بنویس اگه دوست داشتی نظرت رو هم بگو مرسی ازت :))چند نمونه پست خلاقانه </description>
                <category>yousef saeedian</category>
                <author>yousef saeedian</author>
                <pubDate>Sat, 02 Jan 2021 22:21:32 +0330</pubDate>
            </item>
            </channel>
</rss>