اولین قراردادها - اولین نقص

ساخت وبلاگ

در این فصل ، ما با افزودن ویژگی ها به قرارداد NFT ، کشف قراردادهای هوشمند خود را ادامه خواهیم داد ، سپس در مورد نقص های احتمالی و راه های جلوگیری از آنها بحث خواهیم کرد.

NFT ناقص با افزایش قیمت

از آنجا که قراردادهای هوشمند در Tezos با یک زبان تورینگ برنامه ریزی شده است ، می توانیم انواع قوانین را تصور کنیم و پیاده سازی کنیم ، که تنها محدودیت تصور ما است. ما می توانیم اشیاء دیجیتالی با تعدادی از خصوصیات جالب ایجاد کنیم ، مجموعه های بسیار منحصر به فردی ایجاد کنیم یا حتی آزمایش های اجتماعی جالب را انجام دهیم.

با این حال ، همانطور که خواهیم دید ، افزودن ویژگی های جدید با برخی خطرات ، نقص های احتمالی و پیامدهای ناخواسته همراه است.

به عنوان مثال ، فقط برای تفریح ، بگذارید بگوییم که می خواهیم موردی را ایجاد کنیم که هر بار که منتقل می شود به طور خودکار گران تر می شود. به جای اینکه به مالک اجازه دهیم قیمت مورد نظر خود را همانطور که قبلاً انجام دادیم تعیین کند ، ما این قیمت را 10 ٪ پس از هر فروش افزایش خواهیم داد. اگر NFT خود را با قیمت 1 TEZ شروع کنیم ، پس از یک فروش ، ارزش 1. 10 TEZ ، 2. 59 TEZ پس از 10 فروش و 13780 TEZ پس از 100 فروش خواهد بود.

برای بهره مندی از این به عنوان نویسنده ، در صورت محبوبیت NFT بسیار منحصر به فرد ما ، اطمینان حاصل کنیم که با اضافه کردن یک ویژگی حق امتیاز ، سهمی از این فروش ها را دریافت می کنیم: هر بار که NFT فروخته می شود ، بگذارید 5 ٪ از قیمت فروش را به خودمان اهدا کنیم. ما به عنوان نویسنده NFT آدرس خودمان را به ذخیره اضافه خواهیم کرد.

سؤال: چگونه می توانید با این افزایش قیمت خودکار و ویژگی های حق امتیاز ، یک قرارداد هوشمند NFT طراحی کنید؟

در اینجا یک راه است که ما می توانیم این کار را انجام دهیم:

  • مالک: آدرس
  • نویسنده: آدرس
  • ابرداده: رشته
  • قیمت: Tez
  • خرید ()
    • بررسی کنید که مبلغ منتقل شده برابر با قیمت است
    • 5 ٪ از قیمت را به نویسنده ارسال کنید
    • مبلغ باقیمانده را به مالک ارسال کنید
    • مالک را با تماس گیرنده در انبار جایگزین کنید
    • 10 ٪ قیمت را در انبار افزایش دهید

    در اینجا اجرای مربوطه در زبان Archetype است:

    متأسفانه ، خواهیم دید که به همان اندازه که این قرارداد هوشمند به نظر می رسد ، دارای نقص هایی است و ضمانت هایی را که به نظر می رسد قول می دهد ارائه نمی دهد.

    توجه داشته باشید که Tezos عمداً از شماره های نقطه شناور پشتیبانی نمی کند. این امر برای جلوگیری از نه تنها عدم رعایت و خطاهای گرد ، بلکه مهمتر از همه ، برای اطمینان از عدم خطر ناسازگاری بین گره هایی که همه نیاز به انجام محاسبات یکسان ندارند ، وجود ندارد ، بلکه ممکن است از پیاده سازی های مختلف پروتکل Tezos استفاده کند.

    علاوه بر این ، تأیید رسمی عملیات نقطه شناور را به خوبی انجام نمی دهد. در عوض ، Tezos تقسیم عدد صحیح را فراهم می کند ، جایی که ما می توانیم نتیجه دور از تقسیم عدد صحیح و مابقی را بدست آوریم. در مثال بالا ، زبان Archetype یک نحو را فراهم می کند که به نظر می رسد که ما در حال دستیابی به شماره های نقطه شناور هستیم ، اما مقادیر واقعی دستکاری شده کسری هستند. 0. 05 در واقع جفت (1 ، 20) است که 1/20 را نشان می دهد.

    نقص های بالقوه

    برای فهمیدن نقص های ارائه شده در این بخش ، باید بدانید که هر آدرس می تواند یک قرارداد باشد. علاوه بر این ، هنگامی که ما برخی از TEZ را بدون مشخص کردن هر نقطه ورود به یک قرارداد ارسال می کنیم ، مانند انتقال به یک حساب عادی ، این تنها در صورتی کار می کند که قرارداد دارای نقطه ورود "پیش فرض" باشد. این نقطه ورود ممکن است به نوبه خود برخی از کد ها را اجرا کرده و معاملات جدید ایجاد کند.

    سؤال: آیا می توانید راهی را بفهمید که کسی بتواند این NFT را بدون پرداخت حق امتیاز به نویسنده بفروشد؟یا راهی که شخصی بتواند از سیستمی که مجبور به افزایش قیمت 10 ٪ پس از هر فروش می شود ، دور بزند؟

    نکته: به یاد داشته باشید که اگر یک نقطه ورود به هر دلیلی ناکام باشد ، همه چیز لغو می شود.

    حمله اولیه: فروش NFT به خودتان

    بیایید بگوییم که شما فقط این NFT را خریداری کرده اید ، و می خواهید مطمئن شوید که می توانید آن را نگه دارید ، یا حداقل آن را برای سود فقط 10 ٪ نمی فروشید. به عنوان مثال ، بگویید که نمی خواهید آن را با قیمت کمتر از دو برابر قیمتی که برای آن خریداری کرده اید بفروشید. هیچ چیز مانع از خرید NFT از خودتان نمی شود و بنابراین بلافاصله 10 ٪ قیمت را افزایش می دهد. TEZ که برای این کار خرج می کنید ، به خودی خود ارسال می شود ، به جز 5 ٪ حق امتیاز که برای نویسنده ارسال می شود.

    سؤال: آیا راهی برای جلوگیری از این نوع دستکاری وجود دارد؟

    نقطه ورود خرید می تواند تغییر کند تا تأیید کند که آدرس خریدار آدرس مالک فعلی نیست. با این حال ، کنترل دو حساب مختلف برای همان کاربر بسیار آسان است ، بنابراین این امر به سادگی باعث می شود که این خودکشی دشوار باشد. ما به سادگی نمی توانیم از این نوع حمله جلوگیری کنیم.

    مشاوره: وقتی می بینید یک NFT یا دارایی دیگر با قیمت بسیار بالایی فروخته می شود ، مراقب باشید. ممکن است فکر کنید که این قیمت نشانگر ارزش فعلی این دارایی است ، اما می تواند همان کاربر باشد که آن را از خود خریداری می کند و توهم یک دارایی با ارزش بالا را ایجاد می کند.

    سؤال: به عنوان یک مهاجم ، آیا می توانید راهی برای فروش این NFT با قیمت پایین تر از آنچه که توسط قرارداد محاسبه شده است پیدا کنید؟

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

    ایده بد: فروش آدرس صاحب NFT

    اگر NFT را با آدرس خریداری کرده اید که برای چیز دیگری که مهم نیست استفاده نمی شود ، می توانید خود را به هر قیمتی که انتخاب می کنید ، فروش این آدرس را در نظر بگیرید. فروش آدرس به معنای فروش کلید خصوصی مربوطه است تا خریدار بتواند معاملات را از آن آدرس انجام دهد.

    سؤال: این رویکرد به خوبی کار نخواهد کرد. آیا می توانید بفهمید چرا؟

    مسئله اول این است که هیچ روش زنجیره ای برای تأیید اینکه شما کلید خصوصی خود را منتقل کرده اید ، بدون اینکه آن را برای همه قابل مشاهده کنید ، وجود ندارد. بنابراین شما نمی توانید آن را به صورت زنجیره ای بفروشید. اگر این کار را به صورت خصوصی انجام دهید ، این به معنای برخورد دوباره با مسائل اعتماد است.

    مسئله دوم و جدی تر این است که شما نمی توانید به خریدار ثابت کنید که از شر کلید خصوصی خلاص شده اید و دوباره آن را به شخص دیگری نمی فروشید. شما نمی توانید کلید خصوصی را که مطابق با آدرس است تغییر دهید مانند اینکه رمز عبور را تغییر می دهید.

    یک رویکرد قدرتمند: بسته بندی NFT

    ما نمی توانیم آدرس یک حساب عادی را بفروشیم. با این حال ، ما می توانیم یک قرارداد هوشمند بفروشیم! از این گذشته ، این کاری است که ما با قرارداد NFT خود انجام داده ایم.

    به جای خرید NFT با یک حساب معمولی ، می توانیم به سادگی آن را با یک قرارداد هوشمند جدید خریداری کنیم ، که ما به صورت سفارشی ساخته شده ایم تا بتوانیم از خرید یا فروش NFT مراقبت کنیم و همچنین خود برای فروش نیز باشد. بیایید آن را nftwrapper بنامیم. هرکسی که صاحب قرارداد NFTWrapper باشد ، به طور موثری صاحب NFT این قرارداد است.

     

    در اینجا ، ما تصویری از کاربر را که دارای NFT در دست خود است ، نشان خواهیم داد. NFT دارای برچسب قیمت 100 TEZ است. کاربر آن را به کاربر دیگری تحویل می دهد ، که در عوض 100 TEZ را پرداخت می کنددر اینجا ، ما تصویری از قراردادی را نشان خواهیم داد که همان NFT را در دست آنها نگه می دارد. NFT همان برچسب قیمت TEZ را دارد ، اما قراردادی که آن را نگه می دارد ، دارای برچسب قیمت 80 TEZ پایین تر است. ما همان دو کاربر را در سمت چپ نشان می دهیم ، اما این بار اولین کاربر در ازای 80 TEZ آن قرارداد را به طرف دیگر منتقل می کند.
    فروش مستقیم NFTفروش NFT بسته بندی شده

    داشتن NFT ما از طریق قرارداد به ما این امکان را می دهد تا محدودیت های NFT را به روش های مختلفی انجام دهیم: همانطور که می توانیم خود قرارداد nftwrapper خود را بفروشیم و از استفاده از نقطه ورود به خرید NFT خودداری کنیم ، می توانیم قوانین خودمان را تعیین کنیم ، آن را با قیمت بفروشیمانتخاب ما ، و از پرداخت حق امتیاز به نویسنده خودداری کنید.

    اگر یک نقطه ورود پیش فرض را به Nftwrapper اضافه کنیم ، هر زمان که خوانده شود ، به سادگی از بین می رود ، می توانیم از هر کسی که با موفقیت از نقطه ورود خرید NFT برای خرید آن با قیمت محاسبه شده استفاده کند ، جلوگیری کنیم: انتقال TEZ به قرارداد nftwrapper ما واقعاً خواهد بودباعث می شود این نقطه ورود پیش فرض فراخوانده شود و شکست بخورد ، بنابراین به هیچ وجه از وقوع فروش جلوگیری می شود. ما همچنین می توانیم یک Boolean را در ذخیره سازی NFTWrapper ذخیره کنیم ، که نشان می دهد نقطه ورود پیش فرض باید شکست بخورد یا خیر ، بنابراین امکان فعال کردن فروش مستقیم را دوباره نگه می دارد و NFT ما را "بازپرداخت" می کند.

    در اینجا نحوه کار این قرارداد nftwrapper آمده است:

    • Allowsales: Boolean
    • قیمت: Tez
    • مالک: آدرس
    • buynft (nft: آدرس)
      • با نقطه ورود قرارداد NFT تماس بگیرید
      • تأیید کنید که تماس گیرنده مالک است
      • قیمت را با NewPrice در ذخیره سازی جایگزین کنید
      • تأیید کنید که مبلغ منتقل شده برابر با قیمت است
      • معامله ای ایجاد کنید که قیمت TEZ را به مالک ارسال کند
      • مالک را با تماس گیرنده جایگزین کنید
      • تأیید کنید که تماس گیرنده مالک است
      • اجازه دهید اجازه دهید
      • تأیید کنید که اجازه می دهد

      بسته بندی دارایی های دیجیتالی به قراردادی مانند این در blockchains رایج است. این نوع رویکرد حتی می تواند برای انتقال دارایی ها از یک blockchain به دیگری استفاده شود.

      اقدامات پیشگیری

      تنها راه برای جلوگیری از بسته بندی کامل کسی که NFT را مانند بخش قبلی ارائه دادیم ، جلوگیری از تماس با قراردادها از محل ورود خرید و تبدیل شدن به مالک جدید است. Tezos راه هایی را برای بررسی اینکه تماس گیرنده یک حساب مستقیم است و نه یک قرارداد ارائه می دهد. متأسفانه ، انجام این کار محدودیت های شدیدی را اضافه می کند ، مانند جلوگیری از گروهی از افراد از داشتن یک NFT از طریق یک قرارداد چندگوش. چنین محدودیت هایی ممکن است بر ارزش NFT شما تأثیر منفی بگذارد ، بنابراین ما این رویکرد را توصیه نمی کنیم.

      نکته ای که "حمله" ما انجام می دهد ، جلوگیری از فروش مستقیم با انجام معامله ای است که پرداخت را برای مالک ارسال می کند.

      سؤال: آیا می توانید قرارداد NFT را تغییر دهید تا جلوگیری از فروش مستقیم غیرممکن شود؟

      برای انجام این کار ، ما باید نقطه ورود خرید خود را تغییر دهیم ، به طوری که به طور مستقیم معامله ای ایجاد نمی کند که پول را به مالک ارسال کند ، بلکه در عوض ، اطلاعاتی را که این پول به این صاحب قبلی بدهکار است ، ذخیره می کند. سپس یک نقطه ورود جدید را اضافه می کنیم که صاحب قبلی برای جمع آوری وجوه خود باید با آن تماس بگیرد. به این ترتیب ، آنها راهی برای جلوگیری از اجرای نقطه ورود به خرید ندارند و از خرید مستقیم کاربران خود NFT جلوگیری می کنند.

      اجازه دهید کاربران برای به دست آوردن پولی که بدهکار هستند ، با یک ورودی اختصاصی تماس بگیرند (ما می خواهیم یک رویکرد کشش) ، به جای اینکه سعی کنیم آن را بلافاصله برای آنها ارسال کنیم (یک رویکرد فشار) ، یک عمل بسیار خوب است ، تا از این نوع نقص جلوگیری کند. بشر

      اضافه کردن یک فروشگاه با ارزش کلیدی

      از آنجا که این مالک ممکن است بلافاصله وجوه مورد نظر خود را جمع آوری نکند ، قرارداد ما نیاز به پیگیری چندین مبلغ بدهکار تعدادی از صاحبان قبلی دارد. برای انجام این کار ، می توانیم یک فروشگاه با ارزش کلیدی را به قرارداد خود اضافه کنیم. کلید ورود ، آدرس است که قرارداد به آن بدهکار است و ارزش آن مبلغی است که بدهکار است. در Tezos ، ما از نوع نقشه بزرگ استفاده می کنیم.

      • مالک: آدرس
      • نویسنده: آدرس
      • ابرداده: رشته
      • قیمت: Tez
      • دفترچه: نقشه بزرگ
        • کلید: آدرس
        • مقدار: Tez
        • خرید ()
          • بررسی کنید که مبلغ منتقل شده برابر با قیمت است
          • 5 ٪ از قیمت را به نویسنده ارسال کنید
          • اگر Ledger [مالک] وجود ندارد ، آن را با مقدار = 0 ایجاد کنید
          • قیمت منهای 5 ٪ را به Ledger [مالک] اضافه کنید. Value
          • مالک را با تماس گیرنده جایگزین کنید ، در انبار
          • قیمت را در انبار 10 ٪ افزایش دهید
          • تأیید کنید که دفترچه [تماس گیرنده] وجود دارد
          • معامله ای را برای ارسال دفترچه [تماس گیرنده] ایجاد کنید. Value به تماس گیرنده
          • حذف دفترچه [تماس گیرنده]

          نقشه های بزرگ می توانند حاوی مقادیر زیادی از داده ها باشند. تنها محدودیت ها غیرمستقیم است: تماس هایی که میزان ذخیره سازی استفاده شده توسط یک قرارداد را افزایش می دهد ، نیاز به پرداخت هزینه ای برای پرداخت این ذخیره سازی دارد. تعداد معاملاتی که می تواند در مدت زمان مشخصی انجام شود نیز محدود است.

          چندین NFT در یک قرارداد واحد

          معرفی نوع نقشه بزرگ در بخش قبلی ، امکان ایجاد قراردادهای بسیار قدرتمندتر را باز می کند. به طور خاص ، به جای ایجاد و استقرار یک قرارداد جدید هر بار که می خواهیم یک NFT جدید ایجاد کنیم ، که نسبتاً پرهزینه است ، می توانیم از یک نقشه بزرگ برای ایجاد یک قرارداد واحد استفاده کنیم که بتواند تعداد نامحدودی از NFT ها را ذخیره کند.

          سؤال: با استفاده از آنچه تاکنون دیده اید ، سعی کنید چنین قراردادی را طراحی کنید.

          اول ، بیایید بفهمیم که ما در ذخیره قرارداد خود به چه چیزی نیاز داریم. ما باید اطلاعات مربوط به بسیاری از NFT ها را ذخیره کنیم ، بنابراین آن را در یک نقشه بزرگ ذخیره خواهیم کرد. در این نقشه بزرگ ، از چه چیزی باید به عنوان کلید برای هر ورودی استفاده کنیم؟

          در قرارداد قبلی ما که در حال ذخیره یک NFT واحد بود ، آدرس قرارداد خود شناسه منحصر به فرد بود. در اینجا ، ما دیگر نمی توانیم این کار را انجام دهیم ، زیرا هر NFT که در آن ذخیره خواهیم کرد ، به شناسه منحصر به فرد خود نیاز داریم. ما به سادگی می توانیم از یک عدد استفاده کنیم ، از 1 شروع می کنیم و برای هر NFT جدید یکی افزایش می یابد. ما با این شماره tokenid تماس خواهیم گرفت. این شماره ، همراه با آدرس قرارداد ما ، برای منحصر به فرد بودن NFT ما کافی است.

          ما می توانیم از TokenId به عنوان کلید برای نقشه بزرگ خود استفاده کنیم. برای یک نشان داده شده ، ما باید به عنوان ارزش ذخیره کنیم ، سابقه ای که شامل ابرداده ، نویسنده و مالک است. ما همچنین ممکن است قیمتی را اضافه کنیم تا بتوانیم هنوز هم آن را بفروشیم.

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

          ما باید یک نقطه ورود جدید را اضافه کنیم ، تا امکان ایجاد NFT های جدید وجود داشته باشد. ما این مینینگ را می نامیم ، بنابراین یک نقطه ورود نعناع را ایجاد خواهیم کرد ، که هر کسی ممکن است تماس بگیرد ، این به سادگی یک ورودی را در نقشه بزرگ ما اضافه می کند. ما به عنوان یک کلید ، مقدار فعلی پیشخوان بعدی خود استفاده خواهیم کرد که پس از آن افزایش می دهیم.

          • NextID: int
          • توکن ها: نقشه بزرگ
            • tokenid (کلید): int
            • مالک: آدرس
            • نویسنده: آدرس
            • ابرداده: رشته
            • قیمت: Tez
            • کلید: آدرس
            • مقدار: Tez
            • خرید (tokenid)
              • بررسی می کند که نشانه ها [tokenid] وجود دارد ، آن را نشانه بنامید
              • بررسی کنید که مبلغ منتقل شده برابر با قیمت نشانه است
              • 5 ٪ از قیمت را به نویسنده The Token ارسال کنید
              • اگر Ledger [مالک] وجود ندارد ، آن را با مقدار = 0 ایجاد کنید
              • قیمت را اضافه کنید - 5 ٪ به Ledger [مالک] . Value
              • مالک را با تماس گیرنده در توکن جایگزین کنید
              • قیمت 10 ٪ قیمت را در نشانه افزایش دهید
              • یک ورودی جدید در نشانه ها ایجاد کنید ، با کلید NextID
              • مالک و نویسنده را به آدرس تماس گیرنده تنظیم کنید
              • ابرداده و قیمت را روی مقدار پارامترها تنظیم کنید
              • افزایش NextId
              • تأیید کنید که دفترچه [تماس گیرنده] وجود دارد
              • معامله ای را برای ارسال دفترچه [تماس گیرنده] ایجاد کنید. Value به تماس گیرنده
              • حذف دفترچه [تماس گیرنده]

              این همین است ، اکنون هر کسی می تواند به سادگی با این قرارداد تماس بگیرد تا NFT خود را ایجاد و بفروشد.

              DAPP بازار برای خرید و فروش NFTS

              می توان انواع NFT ها را با انواع مختلف ابرداده ایجاد کرد ، قوانین مختلفی در مورد نحوه ذوب شدن آنها و غیره. با این حال ، اگر می خواهیم این NFT ها برای تجارت راحت باشند ، به یک DAPP اختصاصی نیاز داریم: مکانی که افراد می توانندبه راحتی در انواع NFT ها مرور کنید و آنها را بخرید یا بفروشید. این نوع DAPP همان چیزی است که ما آن را یک بازار می نامیم.

              DAPP یک برنامه غیر متمرکز است. این یک برنامه ، معمولاً مبتنی بر وب است که یک رابط خوب را برای کمک به کاربران برای تعامل با یک یا چند قرارداد هوشمند فراهم می کند. از طریق DAPP ، کاربران می توانند با کیف پول خود معاملات (و تماس) را به قرارداد هوشمند امضا کنند و نتایج را مشاهده کنند. DAPP برای ارسال معاملات (از جمله تماس با قراردادهای هوشمند) با گره ای از blockchain تعامل دارد و نتایج را بررسی می کند. هنگام استفاده از DAPP ، به خاطر داشته باشید که فقط قسمت قرارداد هوشمند DAPP معمولاً غیر متمرکز است.

              پرسش: در صورت وجود ، چه قراردادهای هوشمند لازم برای تدوین دارید ، چنین DAPP؟

              ما می توانیم یک بازار را تصور کنیم که به سادگی یک برنامه وب غیر زنجیره ای است که با استفاده از یک پایگاه داده سنتی ، از همه NFT های مختلف که برای فروش هستند ، پیگیری می کند. این امر آنها را به کاربران نشان می دهد و به کاربران کمک می کند تا معامله خرید را در قرارداد هوشمند NFT مربوطه تولید کنند.

              اولین مسئله برای پرداختن به این رویکرد این است که این فرض بر این است که همه این قراردادهای NFT می توانند به همان روش با هم تعامل کنند ، به عنوان مثال با یک نقطه ورود به خرید که به عنوان پارامتر یک نشانه را می گیرد. این به معنای ایجاد و اجرای استانداردی است که نقاط ورود را تعریف می کند که قراردادهای هوشمند باید اجرا کنند تا بتوانند در بازار ما به فروش برسند و تعریف کنند که پارامترها و تأثیرات آنها باید باشد. چنین استانداردهایی مانند FA2 در Tezos وجود دارد و در صورت عدم استفاده از همه NFT ها و بازارها توسط اکثر آنها استفاده می شود.

              مسئله دیگر برای پرداختن به سؤال از مدل تجاری بازار ما است. به طور معمول ، ما می خواهیم در مورد هر فروش که به لطف بازار ما اتفاق می افتد ، کمیسیون بدست آوریم. ما باید اعتماد کنیم که به محض یافتن کاربران از طریق DAPP ما ، آنها به دور خود نمی روند و مستقیماً بدون پرداخت کمیسیون آن را خریداری نمی کنند. این جایی است که ما به یک تماس هوشمند نیاز داریم: برای اعتماد به طور خودکار ، یا از نیاز به اعتماد به هر کسی جلوگیری کنیم.

              ما باید اطمینان حاصل کنیم که در حالی که یک NFT در بازار قابل مشاهده است ، ممکن است فقط از طریق این بازار خریداری شود. این بدان معنی است که بازار باید کنترل NFT را کنترل کند. یکی از راه های انجام این کار ، تبدیل شدن بازار به صاحب موقت NFT است. بازار نمی تواند به سادگی هر NFT را که کاربران در آن قرار داده اند خریداری کند ، بنابراین ما به یک روش جدید برای انتقال آنها نیاز داریم. ما می توانیم این کار را با افزودن نقطه ورود انتقال به قرارداد NFT (و به استاندارد خود) انجام دهیم و به صاحب اجازه دهیم که کدام قرارداد (ها) را تعریف کند تا این نقطه ورود را فراخوانی کند.

              در اینجا نحوه کار قرارداد بازار ما آمده است:

              • FEERAT: NAT
              • مدیر: آدرس
              • توکن ها: کلید نقشه بزرگ:
                • قرارداد: آدرس
                • Tokenid: int
                • فروشنده: آدرس
                • قیمت: Tez
                • کلید: آدرس
                • مقدار: Tez
                • addTomarketPlace (قرارداد ، توکن ، قیمت)
                  • بررسی کنید که تماس گیرنده صاحب توکن است
                  • مالکیت توکن را به بازار منتقل کنید
                  • ورود به قرارداد/توکن را به برنامه های بزرگ Tokens اضافه کنید ، و تماس گیرنده را به عنوان فروشنده و قیمت آن ذخیره کنید
                  • بررسی کنید که تماس گیرنده فروشنده است
                  • مالکیت توکن را به فروشنده منتقل کنید
                  • حذف نشانه ها [(قرارداد ، توکن)]
                  • بررسی کنید که مبلغ منتقل شده قیمت است
                  • مالکیت توکن را به خریدار منتقل کنید
                  • هزینه مدیر را به حساب مدیر در دفترچه اضافه کنید
                  • بقیه را به حساب فروشنده در دفترچه اضافه کنید
                  • حذف نشانه ها [(قرارداد ، توکن)]
                  • تأیید کنید که دفترچه [تماس گیرنده] وجود دارد
                  • معامله ای را برای ارسال دفترچه [تماس گیرنده] ایجاد کنید. Value به تماس گیرنده
                  • حذف دفترچه [تماس گیرنده]

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

                  • NextID: int
                  • توکن ها: نقشه بزرگ
                    • tokenid (کلید): int
                    • مالک: آدرس
                    • ابرداده: رشته
                    • نعناع (ابرداده)
                      • یک ورودی جدید در نشانه ها ایجاد کنید ، با کلید NextID
                      • مالک را روی آدرس تماس گیرنده تنظیم کنید
                      • ابرداده را روی مقدار پارامتر تنظیم کنید
                      • افزایش NextId
                      • بررسی می کند که تماس گیرنده صاحب Tokens [TokenId] است
                      • بازار را برای این نشانه ، با پارامتر جایگزین کنید
                      • بررسی می کند که تماس گیرنده بازار نشانه ها است [tokenid]
                      • مالک را با NewOwner جایگزین کنید

                      حراج

                      اکنون که ما راهی داریم ، به لطف استاندارد ما ، برای مدیریت فروش NFT های خود در یک قرارداد جداگانه ، می توانیم انواع استراتژی ها را برای فروش NFT ها تصور کنیم و DAPP های مربوطه را ایجاد کنیم.

                      یکی از ویژگی هایی که می تواند مفید باشد این است که بتوانید زمان را دستکاری کنید. در قراردادهای هوشمند ، می توانید از یک نوع DateTime استفاده کنید ، تاریخ ها را مقایسه کنید و تاریخ و زمان ایجاد بلوک فعلی را دریافت کنید ، که تقریباً به شما می گوید زمان و تاریخ فعلی چیست.

                      سؤال: به این فکر کنید که چگونه می توانید یک قرارداد ایجاد کنید که در آن هر کسی بتواند NFT را برای فروش با استفاده از حراج قرار دهد: هر کسی می تواند پیشنهاد (پیشنهاد) ارائه دهد و هر کس بالاترین پیشنهاد را بدهد ، می تواند NFT را برای آن قیمت خریداری کند. آیا می توانید آن را به گونه ای بسازید که همه چیز همیشه کار کند ، بدون هیچ مشکلی؟

                      ما می توانیم یک قرارداد ایجاد کنیم که هرکسی بتواند نقطه ورود به پیشنهاد را صدا کند و به عنوان پارامتر ، مبلغی که مایل به پرداخت آن هستند ، عبور کند. ما پیشنهادات را در لیستی از سوابق ذخیره می کنیم ، جایی که هر رکورد آدرس یک پیشنهاد دهنده و مبلغی را که ارائه می دهد ذخیره می کند. پس از مدتی ، صاحب NFT یک نقطه ورود نزدیک را صدا می کند ، که حراج را متوقف می کند ، از طریق ورودی های موجود در لیست حلقه می کند تا بالاترین پیشنهاد دهنده را مشخص کند ، سپس آن را به عنوان برنده حراج ذخیره می کند. این برنده سپس می تواند با یک نقطه ورود به خرید تماس بگیرد ، مبلغ ارائه شده را ارسال کند و NFT را بدست آورد.

                      سوال: با این رویکرد چه مشکلی را مشاهده می کنید؟

                      سه موضوع اصلی وجود دارد:

                      مسئله اول این است که اگر تعداد بسیار زیادی از مردم پیشنهاد دهند ، به عنوان مثال از 0 TEZ ، پس وقتی مالک حراج را می بندد ، قرارداد باید از طریق ورودی های زیادی حلقه کند ، که خیلی طول می کشد ، بیش از حدمقدار گاز مجاز به مصرف در یک عملیات و شکست. مالک هرگز نتوانست حراج را ببندد و NFT برای همیشه در قرارداد گیر می کند. حلقه ها در قراردادهای هوشمند خطرناک هستند ، و فقط باید مورد استفاده قرار گیرد اگر با اطمینان بدانیم که تعداد تکرارها محدود است و توسط یک مهاجم نمی توان به طور دلخواه افزایش یافت.

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

                      مسئله سوم این است که فروشنده باید اعتماد کند که بالاترین پیشنهاد دهنده پس از بسته شدن فروشنده حراج ، NFT را خریداری می کند. اگر این کار را نکنند ، NFT برای همیشه در قرارداد گیر می شود.

                      سوال: چگونه می توانیم از این سه موضوع جلوگیری کنیم؟

                      برای اولین بار ، ما واقعاً نیازی به ذخیره همه داوطلبان نداریم: ما فقط می توانیم بالاترین پیشنهاد دهنده را ذخیره کنیم. هر وقت کسی پیشنهاد می دهد ، ما فقط آن را با پیشنهاد دهنده برتر فعلی مقایسه می کنیم ، و اگر پیشنهاد جدید بالاتر باشد ، ما آن را به عنوان پیشنهاد دهنده و مبلغ برتر جدید ذخیره می کنیم.

                      برای مسئله دوم ، ما می توانیم آن را بسازیم تا مالک مجبور نباشد حراج را ببندد. هنگامی که NFT به فروش می رسد ، مهلت ذخیره سازی را تعیین می کنیم. پس از اتمام این مهلت ، حراج بسته می شود و پیشنهاد دهنده برتر می تواند NFT را خریداری کند. نیازی به اعتماد به مالک نیست.

                      برای مسئله سوم و برای اطمینان از پرداخت پیشنهاد دهنده برتر ، ما آن را تغییر می دهیم تا وقتی پیشنهاد می دهند ، بلافاصله پول را به قرارداد منتقل می کنند. اگر شخص دیگری ارزش بالاتری را پیشنهاد کند ، می تواند پول خود را پس بگیرد. اگر به مهلت برسیم و آنها هنوز هم بالاترین پیشنهاد دهنده هستند ، می توانند NFT را جمع کنند و پول به فروشنده ارسال می شود. ما هنگام ارسال پول از سیستم دفترچه / ادعای خود استفاده می کنیم تا از نقص هایی که در ابتدا توضیح داده شده است جلوگیری کنیم. در غیر این صورت ، کسی می تواند با یک قرارداد پیشنهاد دهد ، از هر کسی که پس از آنها پیشنهاد کند ، جلوگیری کند و با قیمت پایین حراج را بدست آورد.

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

برچسب : نویسنده : مهدی امینی‌خواه بازدید : 239 تاريخ : سه شنبه 1 فروردين 1402 ساعت: 15:58