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:
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).
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ẹ.
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.