ืกืข ืขืœ ื’ืœ ื”-Web 3.0

ื”ืžืคืชื— ื›ืจื™ืกื˜ื•ืฃ ื•ืจื“ื• ืžื“ื‘ืจ ืขืœ ื”ืงื•ืจืก ื”ืžืงื•ื•ืŸ 'ืฉืœื™ื˜ื” ื‘-Web 3.0 ืขื Waves' ืื•ืชื• ืขื‘ืจ ืœืื—ืจื•ื ื”.

ืกืข ืขืœ ื’ืœ ื”-Web 3.0

ืชืกืคืจ ืœื ื• ืงืฆืช ืขืœ ืขืฆืžืš. ืžื” ืขื ื™ื™ืŸ ืื•ืชืš ื‘ืงื•ืจืก ื”ื–ื”?

ืื ื™ ืขื•ืกืง ื‘ืคื™ืชื•ื— ืืชืจื™ื ื›-15 ืฉื ื”, ื‘ืขื™ืงืจ ื›ืคืจื™ืœื ืกืจ.

ืชื•ืš ื›ื“ื™ ืคื™ืชื•ื— ืืคืœื™ืงืฆื™ื™ืช ืื™ื ื˜ืจื ื˜ ืœืจื™ืฉื•ื ืืจื•ืš ื˜ื•ื•ื— ืœืžื“ื™ื ื•ืช ืžืชืคืชื—ื•ืช ืขื‘ื•ืจ ืงื‘ื•ืฆื” ื‘ื ืงืื™ืช, ืขืžื“ื” ื‘ืคื ื™ื™ ื”ืžืฉื™ืžื” ืœืฉืœื‘ ื‘ืชื•ื›ื• ืื™ืฉื•ืจื™ ื‘ืœื•ืงืฆ'ื™ื™ืŸ. ื‘ืื•ืชื• ื–ืžืŸ, ืœื ื™ื“ืขืชื™ ื”ืจื‘ื” ืขืœ ื”ืกืžื›ืช ื‘ืœื•ืงืฆ'ื™ื™ืŸ, ืœืžืจื•ืช ืฉื›ื‘ืจ ื”ืชืขื ื™ื™ื ืชื™ ื‘ื˜ื›ื ื•ืœื•ื’ื™ื•ืช ืงืจื™ืคื˜ื•, ื‘ืขื™ืงืจ ื›ืžืฉืงื™ืข.

ื›ืชื•ืฆืื” ืžื›ืš, ืคื•ื ืงืฆื™ื” ื–ื• ืœื ื™ื•ืฉืžื”, ืืš ืžืชื•ืš ืžื—ืฉื‘ื” ืฉืืจื’ื•ื ื™ื ื•ื‘ื ืงื™ื ืžืขื•ื ื™ื™ื ื™ื ื‘ืคืชืจื•ืŸ ื›ื–ื” ืขื‘ื•ืจ ื”ืืคืœื™ืงืฆื™ื•ืช ืฉืœื”ื, ื”ืชื—ืœืชื™ ืœืœืžื•ื“ ืืช ื”ื ื•ืฉื ื•ืขื“ ืžื”ืจื” ืคืชื—ืชื™ ืืช ื”ืคืจื•ื™ืงื˜ ืฉืจืฉืจืช ื—ืชื™ืžื”.

ืคื™ืชื—ืชื™ ื’ืจืกืช ื‘ื˜ื ืฉืœื•, ืฉื›ื‘ืจ ื–ืžื™ื ื” ื‘ืจืฉืช. ื‘ืื•ืชื” ืชืงื•ืคื”, ืœื ื”ื™ื” Ride [ืฉืคืช ื”ืชื›ื ื•ืช ืฉืœ Waves] ืื– ืขืฉื™ืชื™ ื”ื›ืœ ื‘ืฆื•ืจื” ื”ืคืฉื•ื˜ื” ื‘ื™ื•ืชืจ, ืชื•ืš ืฉื™ืžื•ืฉ ื‘ื˜ืจื ื–ืงืฆื™ื•ืช ืชืจื’ื•ื ืขื JSON ืžืงื•ื ื ื•ืช. ืื‘ืœ ื”ืžื˜ืจื” ื”ืขื™ืงืจื™ืช ื”ื™ื™ืชื” ืœื”ื•ืกื™ืฃ ืคื•ื ืงืฆื™ื•ื ืœื™ื•ืช ืžืชืงื“ืžืช ื™ื•ืชืจ ืœืื—ืจ ื”ืฉืงืช Ride. ื•ื–ื• ื”ืกื™ื‘ื” ื”ืขื™ืงืจื™ืช ืฉื‘ื’ืœืœื” ื”ืฆื˜ืจืคืชื™ ืœืงื•ืจืก: ื”ืฉืœื‘ ื”ื‘ื ื‘ืคื™ืชื•ื— ื”ืคืจื•ื™ืงื˜ ื›ืœืœ ื™ืฆื™ืจืช ืืคืœื™ืงืฆื™ื” ืžื‘ื•ื–ืจืช (dApp).

ืื™ืœื• ื”ื™ื‘ื˜ื™ื ื‘ืงื•ืจืก ืžืฆืืชื ื”ื›ื™ ืงืœื™ื ื•ืื™ืœื• ื”ื™ื• ื”ื›ื™ ืžืืชื’ืจื™ื?

ื”ื“ื‘ืจ ื”ืคืฉื•ื˜ ื‘ื™ื•ืชืจ ื”ื™ื” ืฉื”ื™ื” ืœื ื• ืžืกืคื™ืง ื–ืžืŸ ืœื›ืœ ื”ืžืฉื™ืžื•ืช. ืžื˜ืจืช ื”ืงื•ืจืก ื”ื™ื ืœืœืžื•ื“ ืžืฉื”ื•, ื•ืœื ืœื”ืชื—ืจื•ืช ืื—ื“ ื‘ืฉื ื™. ื”ื”ืกื‘ืจื™ื ื”ื™ื• ืžืื•ื“ ื ื’ื™ืฉื™ื ื•ื”ืื™ื•ืจื™ื ื”ื™ื• ืคืฉื•ื˜ื™ื ืืš ืžืงื™ืคื™ื. ื–ื” ืขื–ืจ ืœื”ืžื—ื™ืฉ ื•ืœื”ื‘ื™ืŸ ื ื•ืฉืื™ื ืฉื•ื ื™ื.

ื‘ืขืช ื”ืฉืœืžืช ืžื˜ืœื•ืช, ืขื•ื“ื“ื• ืื•ืชื ื• ืœื—ืฉื•ื‘ ื‘ืื•ืคืŸ ืขืฆืžืื™ ื•ืœืคืขืžื™ื ืœืœืžื•ื“ ืžืฉื”ื• ื‘ืขืฆืžื ื•. ื–ื• ื”ื“ืจืš ื”ื˜ื•ื‘ื” ื‘ื™ื•ืชืจ ืœืœืžื•ื“ ื•ืœื”ื‘ื™ืŸ ืืช ื”ืจืขื™ื•ื ื•ืช ืฉื ืœืžื“ื• ื‘ื›ื™ืชื”.

ื›ืžื” ืคืขืžื™ื ืœื ื”ื‘ื ืชื™ ืขื“ ื”ืกื•ืฃ ืืช ื”ื—ืœืง ื”ืชื™ืื•ืจื˜ื™ ืขื“ ืฉื”ืชื—ืœืชื™ ืœื›ืชื•ื‘ ืงื•ื“ ืชื•ืš ื›ื“ื™ ืžืฉื™ืžื”. ืœื ื ืชื ื• ืœื ื• ืœืขืฉื•ืช 'ื”ืขืชืง/ื”ื“ื‘ืง', ื”ื™ื™ื ื• ืฆืจื™ื›ื™ื ืœื›ืชื•ื‘ ืืช ื›ืœ ื”ืงื•ื“ ื‘ืขืฆืžื ื•, ื•ื–ื” ื’ื ืขื–ืจ ืœื ื• ืœื”ื‘ื™ืŸ ื”ื›ืœ ื˜ื•ื‘ ื™ื•ืชืจ.

ื”ื“ื‘ืจ ื”ืงืฉื” ื‘ื™ื•ืชืจ ื”ื™ื” ืฉื”ืฉืืœื•ืช ื‘ืžืฉื™ืžื” ืžืจื•ื‘ืช ื”ื‘ืจื™ืจื” ืœื ืชืžื™ื“ ื”ื™ื• ื‘ืจื•ืจื•ืช. ื”ืื ื’ืœื™ืช ืฉืœื™ ืœื ืžื•ืฉืœืžืช, ื•ื”ืฉืืœื•ืช ื ื›ืชื‘ื• ืขืœ ื™ื“ื™ ื“ื•ื‘ืจ ืฉืื™ื ื• ืฉืคืช ืื, ืื– ืœืคืขืžื™ื ื”ื™ื• ืื™ ื”ื‘ื ื•ืช.

ืื•ืœื™ ื”ื—ืœืง ืฉืœ ื”ืงื•ืจืก ื”ืžื•ืงื“ืฉ ืœืื•ืจืงืœื™ื ื•-NFTs ื™ื›ื•ืœ ืœื”ื™ื•ืช ืžืคื•ืจื˜ ื™ื•ืชืจ. ืื‘ืœ, ื‘ื›ืœ ืžืงืจื”, ื”ืžื˜ืจื” ื”ืขื™ืงืจื™ืช ืฉืœ ื”ืงื•ืจืก ื”ื™ื ืœืขื ื™ื™ืŸ ืžืคืชื—ื™ื. ืœืื—ืจ ืžื›ืŸ, ืขืœ ืžื ืช ืœื”ื‘ื™ืŸ ื”ื™ื˜ื‘ ืืช ื›ืœ ื”ื”ื™ื‘ื˜ื™ื ืฉืœื•, ืชืฆื˜ืจืš, ื›ืžื•ื‘ืŸ, ืœื”ืงื“ื™ืฉ ื–ืžืŸ ืœื ื™ืกื•ื™ื™ื ื•ืชืจื’ื•ืœ.

ืกืคืจ ืœื ื• ืขื•ื“ ืขืœ ื”ืคืชืจื•ืŸ ืขืœื™ื• ืขื‘ื“ืช ืœืื•ืจืš ื”ืงื•ืจืก - 'ื‘ื–ืืจ ืงื•ืคื•ื ื™ื'? ื”ืื ืื ื™ ื™ื›ื•ืœ ืœืจืื•ืช ื’ื ื›ืžื” ื“ื•ื’ืžืื•ืช ืงื•ื“?

ื›ืŸ, ืขื‘ื“ื ื• ืขืœ 'ืฉื•ืง ื”ืงื•ืคื•ื ื™ื', ื–ื” ืฉื•ืง ืฉื‘ื• ืื ืฉื™ื ืžื•ื›ืจื™ื ื•ืงื•ื ื™ื ืงื•ืคื•ื ื™ื ืฉื ื•ืชื ื™ื ืœื”ื ืืช ื”ื–ื›ื•ืช ืœืงื ื•ืช ืกื—ื•ืจื•ืช ื•ืฉื™ืจื•ืชื™ื ื‘ืžื—ื™ืจ ื ืžื•ืš ื™ื•ืชืจ. ื›ืœ ืงื•ืคื•ืŸ ืžื™ื•ืฆื’ ืขืœ ื™ื“ื™ ื ื›ืก ื“ื™ื’ื™ื˜ืœื™ ื”ืžืฆื™ืข ื”ื ื—ื” ืžื™ื•ื—ื“ืช ืžื”ืกืคืง.

ืกืข ืขืœ ื’ืœ ื”-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)
        ])
    }
}

ืžืื•ื—ืจ ื™ื•ืชืจ ืคื™ืชื—ื ื• ืžืขืจื›ืช ื”ืฆื‘ืขื” ื”ืžืืคืฉืจืช ืœืš ืœื”ืฆื‘ื™ืข ืœืงื™ื“ื•ื ืื• ื”ืกืจื” ืฉืœ ืžื•ืฆืจื™ื ืžืกื•ื™ืžื™ื. ื›ื“ื™ ืœืžื ื•ืข ื”ืฉืคืขื” ื—ื™ืฆื•ื ื™ืช ืขืœ ืชื”ืœื™ืš ื”ื”ืฆื‘ืขื”, ื”ื™ื ืžืฉืชืžืฉืช ื‘ืชื•ื›ื ื™ืช 'ื”ืชื—ื™ื™ื‘ื•ืช-ื—ืฉื™ืคื”'.

ืฉืœื‘ "ื”ืชื—ื™ื™ื‘ื•ืช" ืžืฉืžืฉ ืœืื™ืกื•ืฃ ื”ื”ืฆื‘ืขื•ืช ื”ืžื•ืฆืคื ื•ืช ื‘ืืžืฆืขื•ืช ืคื•ื ืงืฆื™ื™ืช hash ื•"ืžืœื—".

ืฉืœื‘ ื”"ื—ืฉื™ืคื”" ืžืฉืžืฉ ืœืื™ืกื•ืฃ ื”ืฆื‘ืขื•ืช ืžื•ืฆืคื ื•ืช ื•ืœื”ืฉื•ื•ืืช ื”ื’ื™ื‘ื•ื‘ื™ื ืฉืœื”ื.

ื”ื ื” ื“ื•ื’ืžื” ืœืคื•ื ืงืฆื™ื” ืฉื ืงืจืืช ื”ืžืฉืžืฉืช ื›ืืŸ:

@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)
        ])
    }
}
>

ืžื” ืขื•ื“ ืœืžื“ืช ืžื”ืงื•ืจืก?

ื”ืงื•ืจืก ื›ืœืœ ื’ื ื˜ื•ืงื ื™ื–ืฆื™ื” ื•-Non-fungible tokens (NFTs) - ืืกื™ืžื•ื ื™ื ื”ืžื™ื™ืฆื’ื™ื ืžืฉื”ื• ื™ื™ื—ื•ื“ื™ ื•ืœื›ืŸ ืื™ื ื ื ื™ืชื ื™ื ืœืฉื™ื ื•ื™.

ื”ืฉื™ืขื•ืจ ื”ืื—ืจื•ืŸ ื”ื•ืงื“ืฉ ืœืื•ืจืงืœื™ื. ืžื›ื™ื•ื•ืŸ ืฉื”-blockchain ืื™ื ื• ื™ื›ื•ืœ ืœืงื‘ืœ ื ืชื•ื ื™ื ืžื”ืขื•ืœื ื”ื—ื™ืฆื•ืŸ, ืื ื• ื–ืงื•ืงื™ื ืœืื•ืจืงืœื™ื ื›ื“ื™ ืœืฉืœื•ื— ืืœื™ื• ืืช ื”ื ืชื•ื ื™ื ื”ืœืœื•.

ืขื‘ื•ืจ ื”ืฉื•ืง ืฉืœื ื•, ื”ื™ื” ืฆื•ืจืš ื‘ืื•ืจืงืœ ื›ื“ื™ ืœืืžืช, ื•ื‘ืžืงืจื” ื”ืฆื•ืจืš, ืœืจืฉื•ื ืืช ื”ืกืคืง ื”ืฉื—ื•ืจ, ืœืžืฉืœ, ืฉืœื ืงื™ื‘ืœ ืงื•ืคื•ืŸ ืฉื ืžื›ืจ.

ื”ื ื” ื“ื•ื’ืžื”:

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

ื”ื•ืกืคืช ืชื’ื•ื‘ื”