انجمن توسعه قرارداد هوشمند

Gas limitation error

سلام من یک کد سالیدیتی برای ایجاد NFT نوشتم ولی متاسفانه وقتی میخوام تابع mint رو اجرا کنم ارور زیر رو میده.
میخواستم ببینم باید چه طوری حلش کنم.
ممنون

اگه ممکنه کد کاملشو قرار بدید، این ارور خیلی کلیه.

ممنون حل شد ولی یه مشکل دیگه برام پیدا شد.
اینکه برای mint کردن یک NFT باید یک uri و یک Toekn Idبه تابع mint بدیم.
من از Rinkeby و open sea test برای مشاهده نتایج کارم استفاده می کنم.
من اومدم چند بار یک uri یکسان ولی token id های متفاوت به تابع دادم و مثلا تا 3 تا توکن اول همه چیز اوکیه ولی بعد از اون توکن هایی که ایجاد میشه به نظر میرسه که uri رو قبول نکردن چون عکس و اسم موجود در uri براشون ست نشده. نمی دونم چه مشکلی داره. چون اگرم همه توکن ها دارای اسم و عکس باشن ولی id هاشون فرق داره و نباید مشکلی باشه.
ممنون میشم کمک کنید
ببخشید کدش بهم میریخت مجبور شدم اسکرین شات بگیریم.

1 Likes

چطور میشه که تا ۳ تا توکن جواب میده،‌ بعد مشکل بوجود میاد؟ آرایه (mapping) idToUri رو مقادیرشو بررسی کردی ببینی که uri ها بدرستی ست میشن یا نه؟ شاید مشکل از تست نت باشه.

یعنی rinkeby test network مشکل داره؟
من میام پارامتر های فرمم تو html رو برای یه json server ارسال می کنم. و json اونجا ذخیره شده و یک url برای دسترسی به json مورد نظر به من میده ولی منم این url رو به تابع minit به عنوان uri میدم و فکر نکنم مشکلی باشه و نمی دونم چرا چند تا اول درست کار میکنه ولی بقیه نه

1 Likes

بعد راستیتش خواستم از IPS برای json server استفاده کنم ولی نسخه دسکتاپش رو نصب کردم فایل رو هم import کردم و لینکش رو هم گرفتم ولی نمی دونم چرا کار نمیکنه.
دیگه ناچار شدم از یه json server دیگه استفاده کنم. و json ها رو هم که تو server چک کردم اوکی بودن و همه فیلد ها به درستی ست شده بود

1 Likes

منظورم open sea test بود، گفتم شاید اون نتایج رو درست نشون نمیده. عجیب که واسه چند مورد درست جواب میده.

والا بعید می دونم. ولی باز سعی می کنم از طریق یه سایت دیگه هم چک کنم. چون واقعا دیگه نمی دونم چیکار کنم

بعد یه سوال دیگه هم از کدی که خدمتتون ارسال کردم دارم.
من nftname رو وقتی برای اولین token ست می کنم به درستی انجام میشه ولی برای توکن دوم وقتی nftname جدیدی ست می کنم همون قبلی دوباره ست میشه. من با توجه به چیزی که تو سایت open sea دیدم فکر کنم این nftname در حقیقت همون collection name هست.درست میگم؟
و اینکه نمی دونم برای هر contract فقط میشه یه collection name ست کرد و عملا برای collection جدید باید از یه contract دیگه استفاده کنیم. این به نظرتون منطقیه؟

در مورد سوال اول، باید بگم که بله طبق مستندات nftName همون Collection Name هست.

در مورد سوال دوم، در حال حاضر convention به این صورته که شما برای هر مجموعه NFT یه قرارداد جداگانه deploy کنید و فعلا قراردادهای استاندارد نوشته شده، مثل همین قراردادهای که import کردی، چنین قابلیتی ندارن که بشه در یک قرارداد چندین مجموعه collection راه اندازی کرد. پس بهتره فقط یه بار nftName و حتی nftSymbol رو مثلا تو سازنده مقداردهی کنی، الان در تابع mint با override کردن فقط داری گس اضافی مصرف می‌کنی.

چون از پلتفرم‌های مشخصی استفاده می‌کنیم،‌ باید convention رعایت شه. اگه خودمون بخوایم یه چیزی شبیه open sea بنویسیم، می‌تونیم از یه روش‌هایی استفاده کنیم که لازم نباشه برای هر collection یه قرارداد جدید deploy کنیم. مثلا با فرمت آیدی، collection ها رو مدیریت کنیم. به عنوان مثال، آیدی‌هایی که با ۰۰۰۱ تموم میشن مربوط به یه collection باشن، آیدی‌هایی که با ۰۰۰۲ تموم میشن مربوط به یه collection دیگه باشن و الی آخر. آیدی‌ها هم که دست خودمونه چطوری اختصاص بدیم.

سلام مجدد. بنده سرچ کردم و تونستم یک کد سالیدیتی دیگه برای NFT marketplace پیدا کنم و کدی که در ادامه فرستادم برای تابع ایجاد کننده nft هست و فعلا با این بخشش شروع کردم ولی وقتی فقط همین تابع رو هم اجرا می کنم بهم خطای gas limitation error میده.
فقط کد طولانی بود تو دو تا عکس براتون فرستادم. ممنون

ببخشید عکس دوم رو تو این پیام می فرستم چون بهم اجازه نداد