سوار موج وب 3.0 شوید

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

سوار موج وب 3.0 شوید

به ما کمی درباره خودتان بگوید. چه چیزی به این دوره علاقه داشتید؟

من حدود 15 سال است که توسعه وب انجام می دهم، بیشتر به عنوان یک فریلنسر.

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

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

من یک نسخه بتا از آن را توسعه دادم که در حال حاضر در شبکه اصلی موجود است. در آن زمان، [زبان برنامه‌نویسی Waves] Ride وجود نداشت، بنابراین همه کارها را به ساده‌ترین روش انجام دادم، با استفاده از تراکنش‌های ترجمه با JSON تودرتو. اما هدف اصلی اضافه کردن قابلیت های پیشرفته تر پس از راه اندازی Ride بود. و این دلیل اصلی پیوستن من به دوره است: مرحله بعدی توسعه پروژه شامل ایجاد یک برنامه غیرمتمرکز (dApp) بود.

کدام جنبه‌های دوره را ساده‌ترین و کدامیک چالش‌برانگیزترین را دیدید؟

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

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

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

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

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

در مورد راه حلی که در طول دوره روی آن کار کردید - «بازار کوپن» بیشتر بگویید؟ آیا می توانم چند نمونه کد را هم ببینم؟

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

سوار موج وب 3.0 شوید

چندین مؤلفه برنامه مورد نیاز برای توسعه است. ابتدا لازم بود سامانه ای برای ثبت نام تامین کنندگان و مدیریت کوپن ها ایجاد شود. سپس ما به یک تابع تأیید و توانایی جستجوی کوپن برای کاربران نیاز داشتیم.

سوار موج وب 3.0 شوید

در طول دوره ما چندین ویژگی جدید نیز اضافه کردیم، از جمله سیستم رای گیری و قابلیتی که به شما امکان می دهد تامین کنندگان را تأیید کنید و در لیست سیاه قرار دهید.

ابتدا، تفاوت بین دارایی‌های هوشمند، حساب‌های هوشمند و حساب‌های dApp و اصول اولیه کار با توابع تأییدکننده را یاد گرفتیم. توابع تأیید کننده به شما امکان می دهد رفتار پیش فرض حساب خود را تغییر دهید. به‌طور پیش‌فرض، آنها امضای تراکنش‌ها را تأیید می‌کنند، اما ویژگی تأییدکننده به شما امکان می‌دهد «قوانین» دیگری را تنظیم کنید.

{-# STDLIB_VERSION 3 #-}
{-# CONTENT_TYPE DAPP #-}
{-# SCRIPT_TYPE ACCOUNT #-}
letownerPublicKey = base58'H8ndsHjBha6oJBQQx33zqbP5wi8sQP7hwgjzWUv3q95M'
@Verifier(tx)
funcverify() = {
    matchtx {
        cases: SetScriptTransaction=>sigVerify(tx.bodyBytes, tx.proofs[0], ownerPublicKey)
        cased: DataTransaction=>true
        case_ =>false
    }
}

سپس شروع به اضافه کردن کوپن کردیم. ما از یکی از مهمترین عملکردهای dApp استفاده کردیم که به شما امکان می دهد داده ها را از هر نوع در بلاک چین به شکل جفت های کلید-مقدار ثبت کنید - یک تراکنش داده. ما آن را با یک تراکنش جدید، invokeScript ترکیب کردیم، که برای فراخوانی یک تابع قابل فراخوانی در dApp از خارج از زنجیره بلوکی استفاده می‌شود.

نوع تراکنش داده ای که ما در طول دوره استفاده کردیم، اضافه کردن کوپن به بازار بود:

letdatajson = {
    "title":        "t-shirt with , vote 1",
    "coupon_price": 10000000,
    "old_price":    1000000000,
    "new_price":    100000000,
    "address":      "Universe",
    "description":  "I want you to make love, not war, i know you've heard it before",
    "image":        "https://bit.ly/2EXTghg"
}
it('add item', asyncfunction(){
    letts = invokeScript({
       dApp: dappAddress,
           call:{
               function:"addItem",
               args:[
                    { type:"string", value: datajson.title },
                    { type:"integer", value: datajson.coupon_price },
                    { type:"string", value: JSON.stringify(datajson) }
               ]},
               payment: []
           }, accountSupplierSeed)
    lettx = awaitbroadcast(ts)
    awaitwaitForTx(tx.id)
})

برای پردازش این داده‌ها با تابع addItem و توسعه عملکرد خرید و سایر گزینه‌ها، از یک تابع قابل فراخوانی استفاده کردیم که کاربر می‌تواند از خارج از بلاک چین آن را فراخوانی کند. در نتیجه می تواند کارهای مختلفی از جمله شروع انتقال وجه، نوشتن یا به روز رسانی داده ها در فروشگاه داده dApp و غیره را انجام دهد.

در اینجا نمونه ای از تابع فراخوانی استفاده شده در تابع addItem آورده شده است:

@Callable(i)
funcaddItem(title: String, price: Int, data: String) = {
    letsupplierAddress = toBase58String(i.caller.bytes)
    letitem = getKeyItem(supplierAddress, title)
    if( price <= 0) thenthrow("purchase amount cannot be less than item price")
    elseif( getValueItemSupplier(item) !=NONE ) thenthrow("an item is already exist")
    else{
        WriteSet([
           DataEntry(getKeyItemSupplier(item), supplierAddress),
           DataEntry(getKeyItemPrice(item), price),
           DataEntry(getKeyItemData(item), data)
        ])
    }
}

ما بعداً یک سیستم رأی‌گیری ایجاد کردیم که به شما امکان می‌دهد به تبلیغ یا حذف برخی محصولات رأی دهید. برای جلوگیری از تأثیر خارجی بر روند رأی گیری، از طرح «تعهد- افشاگری» استفاده می کند.

مرحله "تعهد" برای جمع آوری آرای رمزگذاری شده با استفاده از یک تابع هش و یک "سالت" استفاده می شود.

مرحله "افشای" برای جمع آوری آرای رمزگذاری شده و مقایسه هش آنها استفاده می شود.

در اینجا نمونه ای از تابع فراخوانی شده استفاده شده در اینجا آمده است:

@Callable(i)
funcvoteCommit(item: String, hash: String) = {
    letuser = toBase58String(i.caller.bytes)
    letcommits = getValueCommitsCount(item)
    letstatus = getValueItemStatus(item)
    if( commits >=VOTERS) thenthrow("reached max num of voters")
    elseif(getValueCommit(item, user) !=NONE) thenthrow("user has already participated")
    elseif(getKeyItemSupplier(item) ==NONE) thenthrow("item does not exist")
    elseif(status !=NONE && status !=VOTING) thenthrow("voting is not possible")
    else{
        WriteSet([
           DataEntry(getKeyCommit(item, user), hash),
           DataEntry(getKeyCommitsCount(item), commits +1),
           DataEntry(getKeyItemStatus(item),if(commits ==VOTERS) thenREVEAL elseVOTING)
        ])
    }
}
>

چه چیز دیگری از دوره یاد گرفتید؟

این دوره همچنین شامل توکن‌سازی و توکن‌های غیرقابل تعویض (NFT) بود – توکن‌هایی که چیزی منحصر به فرد را نشان می‌دهند و بنابراین قابل تعویض نیستند.

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

برای بازار ما، اوراکل ها مورد نیاز بودند تا تأیید کنند و در صورت لزوم، عرضه کننده ای را که مثلاً کوپن فروخته شده را قبول نکرده است، در لیست سیاه قرار دهند.

در اینجا یک مثال است:

funcgetExtValueItemWhiteListStatus(item:String) = {
    item +"_verifier_status"
}
 
letverifier = "3Mx9qgMyMhHt7WUZr6PsaXNfmydxMG7YMxv"
letVERIFIED = "verified"
letBLACKLISTED = "blacklist"
@Callable(i)
funcsetstatus(supplier: String, status: String) = {
    letaccount = toBase58String(i.caller.bytes)
    if( account !=verifier ) thenthrow("only oracle verifier are able to manage whitelist")
    elseif( status !=VERIFIED && status !=BLACKLISTED) thenthrow("wrong status")
    else{
        WriteSet([
           DataEntry(getExtValueItemWhiteListStatus(supplier), status)
        ])
    }
}

مفیدترین چیز برای شما چه بود؟

مفیدترین بخش تکالیف است. به لطف آنها، مطالب سخنرانی واضح تر شد و دانش تازه به دست آمده از طریق آزمون و خطا تثبیت شد. کار عملی با IDE, کاوشگر и اورالس.

چگونه می خواهید آنچه را که یاد گرفته اید در عمل پیاده کنید؟

از همان ابتدا انتظار داشتم که این دوره به ارتقای پروژه من به سطح بعدی کمک کند. ایده این بود که اکنون کد را بنویسیم sign-web.app در RIDE. نسخه موجود در حال حاضر دارای عملکردهای صدور گواهینامه است، اما به لطف RIDE می توان آن را به طور قابل توجهی بهبود بخشید. نسخه جدید انعطاف‌پذیرتر و بصری‌تر خواهد بود و دارای ویژگی‌های بیشتری از جمله صدور گواهینامه ایمیل، توافق‌نامه‌های چند طرفه و غیره خواهد بود.

این دوره همچنین قابل تامل بود و ایده های جدید زیادی به من داد. من مطمئن هستم که نتایج در آینده ظاهر خواهد شد.

منبع: www.habr.com

خرید هاست قابل اعتماد برای سایت های دارای حفاظت DDoS، سرورهای VPS VDS 🔥 خرید هاستینگ معتبر با محافظت در برابر حملات DDoS، سرورهای VPS و VDS | ProHoster