駕馭 Web 3.0 的浪潮

開發者 Christophe Verdot 談論線上課程'使用 Waves 掌握 Web 3.0’他最近通過了這項法案。

駕馭 Web 3.0 的浪潮

告訴我們一些關於你自己的事。您對本課程感興趣的是什麼?

我從事 Web 開發已有大約 15 年了,大部分時間是作為自由工作者。

在為一家銀行集團開發用於發展中國家長期登記的網路應用程式時,我面臨著將區塊鏈認證整合到其中的任務。當時我對區塊鏈認證了解不多,雖然我已經對加密技術感興趣,主要是作為投資者。

結果,這個功能沒有實現,但是,想到組織和銀行對其應用程式有這樣的解決方案感興趣,我開始研究這個問題並很快啟動了該項目 簽名鏈.

我開發了它的測試版,該版本已經在主網上提供。當時,還沒有 [Waves 程式語言] Ride,所以我以最簡單的方式做了一切,使用帶有巢狀 JSON 的翻譯事務。但主要目標是在 Ride 推出後添加更多進階功能。這就是我加入課程的主要原因:專案開發的下一階段涉及創建去中心化應用程式(dApp)。

您認為課程的哪些方面最簡單,哪些方面最具挑戰性?

最簡單的是我們有足夠的時間來完成所有任務。課程的目的是學習一些東西,而不是互相競爭。解釋非常通俗易懂,插圖簡單但全面。這有助於可視化和理解不同的主題。

完成作業時,我們被鼓勵獨立思考,有時自己研究一些東西。這是學習和理解課堂上所涵蓋的想法的最佳方式。

有幾次我沒有完全理解理論部分,直到我在完成作業時開始編寫程式碼。我們不允許進行“複製/貼上”,我們必須自己編寫所有程式碼,這也有助於我們更好地理解一切。

最困難的是多項選擇題的題目並不總是很清楚。我的英文不太好,而且問題是非母語人士寫的,所以有時會出現誤解。

也許課程中專門討論預言機和 NFT 的部分可以更詳細。但是,無論如何,該課程的主要目標是引起開發人員的興趣。那麼,為了充分理解它的各個方面,你當然需要花一些時間進行實驗和練習。

告訴我們更多有關您在整個課程中所研究的解決方案的資訊 - “Coupon Bazaar”?我還可以看一些程式碼範例嗎?

是的,我們參與了“優惠券集市”,這是一個人們出售和購買優惠券的市場,這些優惠券使他們有權以較低的價格購買商品和服務。每張優惠券都由一種數位資產代表,該資產提供供應商的特別折扣。

駕馭 Web 3.0 的浪潮

需要開發幾個應用程式組件。首先,有必要創建一個供應商註冊和優惠券管理系統。然後我們需要一個驗證功能以及用戶搜尋優惠券的能力。

駕馭 Web 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)
        ])
    }
}

我們後來開發了一個投票系統,允許您投票以推廣或刪除某些產品。為了防止外部影響投票過程,它使用「Commit-Reveal」方案。

「提交」階段用於使用雜湊函數和「鹽」收集加密投票。

「揭示」階段用於收集加密投票並比較它們的雜湊值。

以下是此處使用的被呼叫函數的範例:

@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, 探險家 и 神諭.

您打算如何將所學到的知識付諸實踐?

從一開始,我就期望該課程能夠幫助我的專案更上一層樓。我的想法是現在寫程式碼 登入-web.app 在騎行中。現有版本已經具有文件認證功能,但由於RIDE,它可以顯著改進。新版本將更加靈活和直觀,並將具有更多功能,包括電子郵件認證、多方協定等。

課程也發人深省,給了我很多新的想法。我相信,成果將在未來不斷顯現。

來源: www.habr.com

為具有 DDoS 保護、VPS VDS 服務器的站點購買可靠的主機 🔥 購買具備 DDoS 防護的可靠網站寄存服務,包括 VPS 和 VDS 伺服器 | ProHoster