Awọn ohun-ini ọlọgbọn igbi: awọn atokọ dudu ati funfun, iṣowo aarin

Awọn ohun-ini ọlọgbọn igbi: awọn atokọ dudu ati funfun, iṣowo aarin

Ninu awọn nkan meji ti tẹlẹ a sọrọ nipa awọn akọọlẹ smati ati bii wọn ṣe le lo fun idaduro awọn titaja ati ṣiṣẹda awọn eto iṣootọati tun ṣe iranlọwọ rii daju akoyawo ti owo èlò.

Bayi a yoo wo awọn ohun-ini ọlọgbọn ati ọpọlọpọ awọn ọran ti lilo wọn, pẹlu awọn ohun-ini didi ati ṣiṣẹda awọn ihamọ lori awọn iṣowo ni awọn adirẹsi ti o pato.

Awọn ohun-ini Smart Waves gba awọn olumulo laaye lati bori awọn iwe afọwọkọ lori awọn ohun-ini, ni atẹle awọn oye kanna bi Awọn akọọlẹ Smart. Idunadura tuntun kọọkan ti a ṣẹda nipa lilo dukia ọlọgbọn ni yoo jẹrisi ni akọkọ nipasẹ iwe afọwọkọ, ati lẹhinna nikan nipasẹ blockchain.

O tọ lati ṣe akiyesi awọn iyatọ wọnyi laarin awọn ohun-ini ọlọgbọn ati awọn akọọlẹ ọlọgbọn:

  1. Ninu koodu ti dukia ọlọgbọn, ko ṣee ṣe lati ṣayẹwo awọn ẹri (a sọrọ nipa wọn ni akọkọ article).
  2. Ninu koodu akọọlẹ ọlọgbọn, o le ṣayẹwo ExchangeTransaction nikan ti akọọlẹ rẹ ba jẹ akọọlẹ ibaramu. Bibẹẹkọ, aṣẹ nikan ni a ṣayẹwo. Ninu koodu dukia ọlọgbọn, o ko le ṣayẹwo aṣẹ taara; o le ṣayẹwo ExchangeTransaction, ati, ti o ba jẹ dandan, jade aṣẹ lati ọdọ rẹ.
  3. Ohun-ini ọlọgbọn, ko dabi akọọlẹ ọlọgbọn, ko ni ipinlẹ, ṣugbọn a tun ni iwọle si awọn ipinlẹ akọọlẹ lati iwe afọwọkọ naa.

Awọn ohun-ini Smart ṣe irọrun kikọ kikọ ti awọn adehun, ṣiṣe imuse ti ọpọlọpọ awọn ọran ni ṣoki ati yangan.

Didi dukia

Lati di awọn ohun-ini si giga bulọọki kan ìfojúsùnHeight, o le jiroro ni ṣeto iye yii ni iwe afọwọkọ ti dukia ọlọgbọn atẹle yii:

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

Matcher Specific Ipò

Lati ṣeto ibaamu kan pato bi eyiti o fẹ, o le ṣeto adirẹsi rẹ bi olufiranṣẹ ni iwe afọwọkọ dukia ọlọgbọn ti o dabi eyi:

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

"Akojọ funfun" ti awọn olugba

Lati gba awọn ami laaye lati firanṣẹ si awọn akọọlẹ kan nikan - lati ṣẹda “akojọ funfun” ti awọn olugba - o le lo dukia ọlọgbọn pẹlu ero atẹle ti o ṣayẹwo fun ifisi ninu atokọ naa:

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
}

Fun awọn idi aabo ati pipe ede naa, atokọ naa ko ni imuse aṣetunṣe ninu. Nitorina o ti wa ni telẹ bi a ti ṣeto ti nja eroja.

"Akojọ dudu" ti awọn olugba

Bakanna, lati ṣe idiwọ fifiranṣẹ awọn ami si awọn akọọlẹ kan, o le ṣẹda “akojọ dudu”. Ni ọran yii, gangan dukia ọlọgbọn kanna ni a lo, ṣugbọn pẹlu adirẹsi ti a ṣayẹwo lati rii daju pe ko si lori atokọ dudu:

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
}

Fifiranṣẹ pẹlu igbanilaaye ti olufunni

Lilo dukia ọlọgbọn, o tun le ṣeto aṣayan lati firanṣẹ dukia ọlọgbọn nikan pẹlu igbanilaaye ti olufunni (ifaramo / gbese aami). Olufunni ṣalaye ifọkansi rẹ nipa gbigbe ID idunadura si ipo akọọlẹ rẹ:

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

Ṣe paṣipaarọ fun awọn owó kan nikan

Ohun-ini ọlọgbọn gba igbanilaaye lati ṣe paṣipaarọ rẹ nikan fun awọn owó kan. Fun apẹẹrẹ, lati gba paṣipaarọ fun Bitcoins nikan, o le lo koodu atẹle:

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

Iṣowo nipasẹ idiyele lati ẹnu-ọrọ

Ninu iwe afọwọkọ dukia ọlọgbọn, o le ṣeto igbanilaaye lati ṣowo nikan ni idiyele ti o wa titi ni ipo ti ọrọ-ọrọ ti o gbẹkẹle. Eyi ni apẹẹrẹ ti iru iwe afọwọkọ kan:

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
}

Nibi a dojuko pẹlu aaye ti kii ṣe kedere nigba ti n ṣayẹwo ID ti dukia pẹlu eyiti iṣowo ṣe. Oro naa ni pe ti ID dukia ko ba ni asọye, lẹhinna a n sọrọ nipa WAVES. Ninu iwe afọwọkọ, a rii daju pe iṣowo ti gbe jade ni tandem pẹlu WAVES, ni deede ni ọna yii.

Ti o wa titi owo ilosoke

O le ṣeto idiyele ti o wa titi fun dukia ọlọgbọn, eyiti yoo pọ si ni igbesẹ nipasẹ igbese ni ipin ti a fun. Eyi ni apẹẹrẹ ti iwe afọwọkọ dukia ti idiyele rẹ yoo pọ si nipasẹ 5% gbogbo awọn bulọọki 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
}


Iṣowo aarin

Paapaa, o ṣeun si iwe afọwọkọ, iṣowo ti dukia ọlọgbọn le ni opin si awọn aaye arin ti a ti pinnu tẹlẹ. Eyi ni apẹẹrẹ ti iru iwe afọwọkọ kan:

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

Ninu iwe afọwọkọ a rii daju pe lati ibẹrẹ iṣowo ibẹrẹHeight ko si ju iye awọn aaye arin. Awọn ipari ti aarin jẹ dogba si nọmba awọn bulọọki ti a pato ninu aaye naa aarin.

orisun: www.habr.com

Fi ọrọìwòye kun