جلسه ششم (اسلاید‌ها و بقیه منابع)

سلام خسته نباشین
دو تا سوال دارم یک اینکه تفاوت دستور address.transfer رو با address.send متوجه نشدم تو فیلم توضیح داده نشد
و سوال دیگم اینه که منظور از arbitrary message call چیه؟ (داخل توضیحات address.call هستش)

در اسلایدی که enum درس داده شد ما تو خط اول یه enum تعریف کردیم به اسم FreshJuiceSize که سه تا حالت small & Medium & Large داره. دو خط بعدی رو من متوجه نمیشم
اون خطی که نوشتیم FreshJuiceSize choice; خود “choice” چیه؟ متغییره؟چرا تعریفش کردیم؟ و اصلا چرا با این فرمت دستوری؟
در تصویر بعدی هم که از سایت solidity example گرفتم منظور از اون دستور رو نمیفهم
Satatus Public status;
ما با این دستور داریم چیکار میکنیم؟ اون status که با حروف کوچیک نوشتیم چی هست؟ چرا باید تعریف بشه؟ فرقش با اون یکی Status چیه؟


توصیه میشه که از address.transfer استفاده بشه
تفاوت در اینه هنگام استفاده از transfer زمانی که به اررور خاصی میخورید یک exception بر میگردونه
اما در هنگام استفاده از send در صورت برخورد با ارور فقط مقدار false برمیگردونه و شما باید در کدتون value رو چک کنید

2 پسندیده

choice متغیری از نوع enum تعریف شده است
فرمت دستوری که استاندارد سالیدتیه دیگه :slight_smile:
و اینکه چرا از enum استفاده میشه یه دلیلش اینه خوانایی کد شما رو بالا میبره

Status یک enum است که حالت های درون کد رو پذیرفته
status متغیری از نوع Status است که با حالت های تعریف شده داخل enum مقدار میپذیرد

3 پسندیده

من متوجه نشدم یعنی چی exception برمیگردونه؟
و منظورتون از چک کردن value چیه؟

من سرچ کردم متوجه شدم چیه داستان اینجا میگم تا شاید بدرد بقیه هم بخوره
ما در واقع با دستور Enum یه DataType درست میکنیم که میشه همون Status
حالا ما باید بعدش یه متغییر درست کنیم که این مقادیر رو بهش اختصاص بدیم مثل دستورای دیگه که برای تعریف یه متغییر اول باید DataTypeش رو مشخص کنیم (مثلا مینوشتیم uint public x) اینجا مینویسیم Status public status

3 پسندیده

سلام و احترام
در صورتی که از Send استفاده کنیدو مقدار به ولت مقصد منتقل شود مقدار true بر میگرداند و در عیر این صورت اگر به هر دلیلی موفق نشه مقدار false بر میگرداند و شما با چک کردن خروجی این تابع می توانید تصمیم لازم را بگیرید و لی در حالت ترنسفر exception برگردانده می شود

1 پسندیده

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

سلام
سرچ کردم یه جا نوشته بود از لحاظ مقدار gas مصرفی یکی هستن ولی اگه بخواین درباره ی دلایل اضافه ی دیگری اطلاع داشته باشیم از transfer استفاده میکنیم
این هم خود متنش :
If you are curious about the reasons for adding a transfer you may follow an original discussion about the feature.
(چون از لحاظ gas هم یکی هستن پس transfer پیشنهاد میشه)
یجا دیگه آورده بود
می تونی کل فرآیند transfer رو با این دستور ببینی
متن :
Suggestions for the name: transfer (sounds safer because transfer usually asks you to watch the whole process)

1 پسندیده

دمت گرم از اطلاع رسانیت

1 پسندیده

خواهش می کنم :green_heart: امیدوارم مفید بوده باشه
برای اطلاعات کامل تر میتونی به لینک زیر بری جوابا رو ببینی

سلام تو دقیقه ی 12جلسه که در مورد اختصاص حافظه صحبت میشه یه جایی دکتر اسکندری میگن یه جا بنویسیم یه حالته یه جا ننویسیم یه حالت دیگه ، منظور دقیقشون از یه جا نوشتن چیه؟؟

سلام من وقتی کد arraye رو میزنم کامپایل کنه بهم خطا میده اینا چیه؟

برای دریافت جوابتون میتونید به این لینک مراجعه کنید

2 پسندیده

به ترتیب تعریف متغیرها, تعداد و شماره slot که اشغال میکنه دقت کنید:
یادتون باشه برای slot ها gas پرداخت میکنید.
(یه حالت) دو تا 8 بیت میتونن تو یه slot ذخیره بشن. 256 دیگه جا نمیشه میره slot بعد.
uint8 a => slot 0
uint8 b => slot 0
uint256 c => slot 1

(یه حالت دیگه) این یکی سه تا slot اشغال میکنه. بعد ذخیره 8 بیت تو slot اول دیگه جا برا 256 تا نیست میره slot بعدی. و حالا که دومی هم پر شده متغیر بعدی تو slot سوم ذخیره میشه.

uint8 a => slot 0
uint256 c => slot 1
uint8 b => slot 2

5 پسندیده

سلام
تعریف اسلات چی هست ؟
چیزی که من متوجه شدم یه حافظه 256 بیتی درسته ؟
هر قیمت توکن به صورت پیشفرض تا 16 تا اعشار داره حالا مثلا اعداد قبل اعشار رو هم حداکثر 6 تا در نظر بگیریم می تونیم برای هر uint , بیستو دو بیت در نظر بگیریم ؟ مثلا این حرکت میتونه تاثیر خوبی اصلا روی صرفه جویی gas بزاره ؟کلا این سوال آخر رو برای این پرسیدم چون تا اینجایی که جلو رفتیم کمتر به متغیر 256 بیتی بر خوردیم ولی بیشتر این کد هایی که دیدیم uint خالی بوده بهتر نیست برای صرفه جویی این عدد مشخص شه ؟ یا اصلا تاثیر زیادی رو gas نداره ؟

سلام,
بله اسلات حافظه Storage
EVM (ماشین مجازی اتریوم) از 256 بیت به عنوان word size استفاده می کنه.

میتونین برای توکن خودتون هر نوعی خواستید استفاده کنید.
اما اگر از استاندارد ERC20 میخوایین استفاده کنید باید از نوع تعیین شده تبعیت کنین که ارسال توکن شما برای بقیه و برعکس مشکل ساز نباشه.
یا اگر میخواین تعریف خودتونو داشته باشین اگر لازمه با conversion های مناسب این قضیه رو کنترل کنید.

5 پسندیده

سلام
تو سایت solidity-by-example پیشنهاد کرده از call برای ارسال اتر استفاده بشه اما من تو کتاب building ETH dapps خوندم به دلایل امنیتی send و call رو کلا رد کرده. می شه توضیح بدید الان از جه روشی باید استفاده کرد؟
مرسی

بین send و transfer پیشنهاد میشه از ترنسفر استفاده شه ولی بین call و transfer این طوری که تو پروژه ها دیدم بهتره از call استفاده شه چون call و transfer می تونن هر کدوم به نوبه خودش مشکل ساز بشه( تو جلسه ای که مربوط به امنیت بود بش پرداخته شده) ولی مشکل call رو میشه از reentrancyguard اپن زپلین استفاده کرد ولی مشکل ترنسفر حلش دردسر داره

1 پسندیده

سلام.وقت بخیر.ببخشید من کد آرایه سایت solidity-by-example رو داخل remix گذاشتم.کدبه درستی کامپایل میشه.اما بعد از دیپلوی مقدار دهی های ارایه صورت نمیگیره و وقتی در قسمت دیپلوی شده روی ارایه کلیک میکنم در قسمت log ارور :
Error encoding arguments: Error: invalid BigNumber string (argument=“value”, value="", code=INVALID_ARGUMENT, version=bignumber/5.5.0)
رو نمایش میده


ایراد کار از گجاست؟