驾驭 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,它可以得到显着改进。 新版本将更加灵活和直观,并且将具有更多功能,包括电子邮件认证、多方协议等。

课程也发人深省,给了我很多新的想法。 我相信,成果将在未来不断显现。

来源: habr.com

为具有 DDoS 保护、VPS VDS 服务器的站点购买可靠的主机 🔥 购买具备 DDoS 防护的可靠网站托管服务,包括 VPS 和 VDS 服务器 | ProHoster