Waves smart assets: mindandanda yakuda ndi yoyera, kugulitsa kwakanthawi

Waves smart assets: mindandanda yakuda ndi yoyera, kugulitsa kwakanthawi

M'nkhani ziwiri zapitazi tidakambirana za ma akaunti anzeru komanso momwe angagwiritsire ntchito pochita malonda ndi kupanga mapulogalamu okhulupilikakomanso thandizo kuwonetsetsa kuti zida zandalama zikuyenda bwino.

Tsopano tiwona chuma chanzeru ndi milandu ingapo yogwiritsira ntchito, kuphatikiza zinthu zoziziritsa kukhosi ndikupanga zoletsa pakugulitsa pama adilesi otchulidwa.

Ma Waves Smart Assets amalola ogwiritsa ntchito kuphimba zolemba pazachuma, kutsatira zimango zomwezo monga Smart Accounts. Kugulitsa kwatsopano kulikonse komwe kumapangidwa pogwiritsa ntchito chuma chanzeru kudzatsimikiziridwa koyamba ndi script, kenako ndi blockchain.

Ndikoyenera kuzindikira kusiyana kumeneku pakati pa smart assets ndi smart accounts:

  1. Mu code ya smart asset, ndizosatheka kuyang'ana maumboni (tinayankhula za iwo m'nkhani yoyamba).
  2. Muakaunti yanzeru, mutha kuyang'ana ExchangeTransaction pokhapokha ngati akaunti yanu ndi akaunti yofananira. Apo ayi, dongosolo lokha ndiloyang'aniridwa. Mu code yamtengo wapatali, simungathe kuyang'ana dongosolo mwachindunji; mukhoza kuyang'ana ExchangeTransaction, ndipo, ngati n'koyenera, kuchotsa oda kuchokera mmenemo.
  3. Katundu wanzeru, mosiyana ndi akaunti yanzeru, ilibe dziko, komabe timapeza mwayi wopeza akaunti kuchokera palemba.

Katundu wanzeru amathandizira kwambiri kulemba kwamakontrakitala, kupangitsa kukhazikitsidwa kwa milandu yambiri kukhala kwachidule komanso kokongola.

Kuyimitsa katundu

Kuyimitsa katundu mpaka kutalika kwa chipika targetHeight, mutha kungoyika mtengo uwu mu script ya zinthu zotsatirazi zanzeru:

let targetHeight = 1500000
height >= targetHeight
 
height - функция языка, возращающая текущую высоту.

Matcher Specific Condition

Kuti muyike chofananira ngati chomwe mukufuna, mutha kuyika adilesi yake ngati wotumiza mu script yanzeru yomwe imawoneka motere:

match tx {
    case t : ExchangeTransaction =>
        t.sender == addressFromString("3PJaDyprvekvPXPuAtxrapacuDJopgJRaU3")
    case _ => true
}

"Mndandanda woyera" wa olandira

Kulola ma tokeni kuti atumizidwe kumaakaunti ena okha - kupanga "mndandanda woyera" wa olandila - mutha kugwiritsa ntchito chuma chanzeru chokhala ndi dongosolo lotsatirali lomwe limayang'ana kuti likuphatikizidwa pamndandanda:

match tx {
  case t : TransferTransaction =>
    let trustedRecipient1 = addressFromString("3P6ms9EotRX8JwSrebeTXYVnzpsGCrKWLv4")
    let trustedRecipient2 = addressFromString("3PLZcCJyYQnfWfzhKXRA4rteCQC9J1ewf5K")
    let trustedRecipient3 = addressFromString("3PHrS6VNPRtUD8MHkfkmELavL8JnGtSq5sx")
    t.recipient == trustedRecipient1 || t.recipient == trustedRecipient2 || t.recipient == trustedRecipient3
  case _ => false
}

Pazifukwa zachitetezo komanso kukwanira kwachilankhulocho, mndandandawu ulibe kugwiritsa ntchito mawu obwerezabwereza. Chifukwa chake limatanthauzidwa ngati gulu la zinthu za konkriti.

"Mndandanda wakuda" wa olandira

Mofananamo, kuletsa kutumiza zizindikiro ku akaunti zina, mukhoza kupanga "mndandanda wakuda". Pamenepa, katundu wanzeru womwewo umagwiritsidwa ntchito, koma ndi adilesi yoyang'aniridwa kuti zitsimikizire kuti palibe pamndandanda wakuda:

match tx {
  case t : TransferTransaction =>
    let bannedRecipient1 = addressFromString("3P6ms9EotRX8JwSrebeTXYVnzpsGCrKWLv4")
    let bannedRecipient2 = addressFromString("3PLZcCJyYQnfWfzhKXRA4rteCQC9J1ewf5K")
    let bannedRecipient3 = addressFromString("3PHrS6VNPRtUD8MHkfkmELavL8JnGtSq5sx")
    t.recipient != bannedRecipient1 && t.recipient != bannedRecipient2 && t.recipient != bannedRecipient3
  case _ => false
}

Kutumiza ndi chilolezo cha wopereka

Pogwiritsa ntchito chuma chanzeru, mutha kukhazikitsanso mwayi wotumiza katundu wanzeru pokhapokha ndi chilolezo cha woperekayo (chikalata chodzipereka/ngongole). Woperekayo akuwonetsa kuvomereza kwake poyika ID yamalonda muakaunti yake:

match tx {
  case t : TransferTransaction =>
    let issuer = extract(addressFromString("3P6ms9EotRX8JwSrebeTXYVnzpsGCrKWLv4"))
    #убеждаемся, что в стейте эмитента содержится ID текущей транзакции
    isDefined(getInteger(issuer, toBase58String(t.id)))
  case _ => false
}

Sinthani ndalama zachitsulo zokha

Katundu wanzeru amalola chilolezo chosinthitsa ndalama zina zokha. Mwachitsanzo, kuti mulole kusinthana kwa Bitcoins kokha, mutha kugwiritsa ntchito nambala iyi:

let BTCId = base58'8LQW8f7P5d5PZM7GtZEBgaqRPGSzS3DfPuiXrURJ4AJS'
match tx {
  case t : ExchangeTransaction =>
    t.sellOrder.assetPair.priceAsset == BTCId ||
     t.sellOrder.assetPair.amountAsset == BTCId
  case _ => true
}

Kugulitsa ndi mtengo kuchokera ku oracle

Mu script ya smart asset, mutha kukhazikitsa chilolezo chogulitsa pamtengo wokhazikika m'malo odalirika a oracle. Nachi chitsanzo cha script yotere:

let oracle = Address(base58'3PLNmokt22NrSiNvCLvwMUP84LCMJqbXwAD')
let assetId = toBase58String(base58'oWgJN6YGZFtZrV8BWQ1PGktZikgg7jzGmtm16Ktyvjd')
 
match tx {
  #запрещаем передачу ассета
  case t: TransferTransaction | MassTransferTransaction => false
  case e: ExchangeTransaction =>
    #убеждаемся, что торговля происходит по цене, заданной в стейте оракла для этого ассета
    let correctPrice = e.price == extract(getInteger(oracle, assetId))
    #убеждаемся, что торговля происходит в обмен на WAVES
    let correctPriceAsset = !isDefined(e.sellOrder.assetPair.priceAsset) 
correctPrice && correctPriceAsset
  case _ => true
}

Apa tikuyang'anizana ndi mfundo yosadziwika poyang'ana ID ya katundu omwe malonda amachitira. Mfundo ndi yakuti ngati ID yachuma sichikufotokozedwa, ndiye kuti tikukamba za WAVES. Mu script, timaonetsetsa kuti malonda akuchitika motsatira WAVES, chimodzimodzi.

Kuwonjezeka kwamtengo wokhazikika

Mutha kukhazikitsa mtengo wokhazikika wazinthu zanzeru, zomwe zidzachuluke pang'onopang'ono mugawo loperekedwa. Nachi chitsanzo cha script ya katundu yomwe mtengo wake udzakwera ndi 5% midadada iliyonse ya 1000:

let startPrice = 10
let startHeight = 1000
let interval = 1000
#на сколько процентов цена увеличивается за один шаг
let raise = 5
 
match tx {
  case t: TransferTransaction | MassTransferTransaction => false
  case e: ExchangeTransaction =>
    e.price == startPrice + ((height - startHeight) / interval) * (100 + raise) / 100
    && !isDefined(e.sellOrder.assetPair.priceAsset)
  case _ => true
}


Malonda apakati

Komanso, chifukwa cha script, kugulitsa katundu wanzeru kumatha kutsatiridwa ndi nthawi zodziwikiratu. Nachi chitsanzo cha script yotere:

let startHeight = 10000
let interval = 44000
let limit = 1500
 
match tx {
  case t: TransferTransaction | MassTransferTransaction | ExchangeTransaction =>
    (height - startHeight) % interval < limit
  case _ => true
}

Mu script timaonetsetsa kuti kuyambira pachiyambi cha malonda StartHeight osaposa malire nthawi. Kutalika kwa nthawiyi ndi kofanana ndi chiwerengero cha midadada yomwe yatchulidwa m'munda mpata.

Source: www.habr.com

Kuwonjezera ndemanga