Hirarka hantida caqliga leh: liisaska madow iyo caddaanka, ganacsiga dhexda

Hirarka hantida caqliga leh: liisaska madow iyo caddaanka, ganacsiga dhexda

Labadii maqaal ee hore waxaan uga hadalnay xisaabaadka smart iyo sida loo isticmaali karo qabashada xaraashka iyo abuurista barnaamijyo daacad ahiyo sidoo kale caawin Hubi hufnaanta agabka maaliyadeed.

Hadda waxaan eegi doonaa hantida caqliga leh iyo dhowr kiis oo isticmaalkooda ah, oo ay ku jiraan hantida la qaboojiyey iyo abuurista xaddidaadyo ganacsi ee cinwaanno cayiman.

Mawjadaha Smart Assets waxay u oggolaanayaan isticmaaleyaasha inay ku dul-kordhiyaan qoraallada hantida, iyagoo raacaya farsamooyin la mid ah Xisaabaadka Smart. Xawaalad kasta oo cusub oo la abuuro iyadoo la adeegsanayo hanti caqli badan ayaa marka hore lagu xaqiijin doonaa qoraalka, ka dibna kaliya blockchain.

Waxaa xusid mudan faraqa u dhexeeya hantida smart iyo xisaabaadka smart:

  1. In code of hantida smart, waa wax aan macquul aheyn in la hubiyo cadeymaha (waxaan ka hadalnay iyaga maqaalka koowaad).
  2. Koodhka koontada smart, waxaad ku hubin kartaa ExchangeTransaction kaliya haddii koontadaadu tahay akoon ku habboon. Haddii kale, kaliya amarka ayaa la hubiyaa. Koodhka hantida smart, si toos ah uma hubin kartid amarka; waxaad hubin kartaa ExchangeTransaction, iyo, haddii loo baahdo, ka soo saar dalab.
  3. Hantida caqliga badan, oo ka duwan akoonka smart, ma laha dawlad, laakiin wali waxaan ka heli karnaa dawladaha xisaabta qoraalka.

Hantida casriga ah waxay si weyn u fududaysaa qorista qandaraasyada, taasoo ka dhigaysa hirgelinta kiisas badan mid kooban oo qurux badan.

Qabow hantida

Si aad u qaboojiso hantida ilaa dhererka go'an dhererka bartilmaameedka, waxaad si fudud u dejin kartaa qiimahan qoraalka hantida smart ee soo socota:

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

Xaaladda Gaarka ah ee Matcher

Si aad u dejiso ku habbooneeyaha sida la doonayo, waxaad u dejin kartaa ciwaankiisa sidii soo diraha qoraalka hantida smart ee sidan u eg:

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

"Liiska cad" ee qaataha

Si aad u ogolaato in calaamada loo diro akoonnada qaarkood - si aad u abuurto "liiska cad" ee qaatahayaasha - waxaad isticmaali kartaa hanti caqli badan leh nidaamka soo socda kaas oo hubinaya ka mid noqoshada liiska:

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
}

Sababaha amniga iyo dhammaystirka luqadda ee macquulka ah awgeed, liisku kuma jiro hirgelinta ku celcelinta. Sidaa darteed waxaa lagu qeexaa inay tahay xubno la taaban karo.

"Liiska madow" ee qaataha

Sidoo kale, si loo mamnuuco dirista calaamadaha xisaabaadka qaarkood, waxaad samayn kartaa "liiska madow". Xaaladdan oo kale, isla hanti caqli leh ayaa la isticmaalaa, laakiin iyadoo cinwaanka la hubiyay si loo hubiyo inuusan ku jirin liiska madow:

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
}

Dirista ogolaanshaha soo saaraha

Adigoo isticmaalaya hanti caqli badan, waxaad sidoo kale dejin kartaa ikhtiyaarka aad ku diri karto hanti caqli badan oo keliya ogolaanshaha soo saaraha (calaamadaynta ballan qaadka/daynta). Soo saaraha wuxuu muujinayaa ogolaanshihiisa isagoo dhigaya aqoonsiga macaamil ganacsi ee gobolka koontada:

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

Ku beddelo qadaadiicda qaarkood

Hantida caqliga leh waxay ogolaataa ogolaanshaha in lagu beddelo qadaadiicda qaarkood. Tusaale ahaan, si aad u oggolaato beddelka Bitcoins, waxaad isticmaali kartaa koodka soo socda:

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

Wax kaga beddelashada qiimaha afka

Qoraalka hantida smart, waxaad dejin kartaa ogolaanshaha ganacsiga ee kaliya qiimaha go'an ee gobolka oraah la isku halayn karo. Waa kan tusaale qoraalkan oo kale:

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
}

Halkan waxa ina soo food saartay meel aan caddayn marka la hubinayo aqoonsiga hantida lagu ganacsado. Ujeedadu waxay tahay in haddii aqoonsiga hantida aan la qeexin, markaa waxaan ka hadlaynaa MOwjadaha. Qoraalka, waxaan hubineynaa in ganacsiga lagu fuliyo mowjadaha, sida saxda ah sidaan.

Kor u kaca qiimaha go'an

Waxaad dejin kartaa qiimo go'an oo loogu talagalay hanti caqli-gal ah, taas oo kordhin doonta tallaabo-tallaabo saamiga la bixiyay. Waa kuwan tusaale qoraalka hantida oo qiimihiisu kordhin doono 5% 1000kii baloog kasta:

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
}


Dhexdhexaad ganacsi

Sidoo kale, mahad qoraalka, ka ganacsiga hantida caqliga leh waxay ku koobnaan kartaa waqtiyo hore loo sii go'aamiyay. Waa kan tusaale qoraalkan oo kale:

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

Qoraalka waxaan ku hubineynaa in laga bilaabo bilawga ganacsiga startHeight aan ka badnayn xadka durugsan Dhererka barqiga wuxuu la mid yahay tirada baloogyada lagu cayimay goobta bareeg.

Source: www.habr.com

Add a comment