Koulye a, nou pral gade byen entelijan ak plizyè ka itilizasyon yo, ki gen ladan konjelasyon byen ak kreye restriksyon sou tranzaksyon nan adrès espesifye.
Waves Smart Assets pèmèt itilizatè yo kouvri scripts sou byen yo, swiv menm mekanik ak Smart Accounts. Chak nouvo tranzaksyon kreye lè l sèvi avèk yon avantaj entelijan pral konfime premye pa script la, epi sèlman Lè sa a, pa blockchain la.
Li vo sonje diferans sa yo ant byen entelijan ak kont entelijan:
Nan kòd la nan yon avantaj entelijan, li enposib tcheke prèv (nou te pale sou yo nan premye atik la).
Nan kòd kont entelijan an, ou ka tcheke ExchangeTransaction sèlman si kont ou a se yon kont matcher. Sinon, se sèlman lòd la tcheke. Nan kòd avantaj entelijan an, ou pa ka tcheke lòd la dirèkteman; ou ka tcheke Echanj Tranzaksyon an, epi, si sa nesesè, rekipere lòd la nan li.
Yon avantaj entelijan, kontrèman ak yon kont entelijan, pa gen yon eta, men nou toujou gen aksè a eta kont nan script la.
Byen entelijan anpil senplifye ekri nan kontra yo, fè aplikasyon an nan anpil ka kout ak elegant.
Byen friz
Pou friz byen nan yon wotè blòk sèten targetHeight, ou ka tou senpleman mete valè sa a nan script avantaj entelijan sa a:
let targetHeight = 1500000
height >= targetHeight
height - функция языка, возращающая текущую высоту.
Kondisyon Espesifik Matcher
Pou mete yon matche espesifik kòm youn vle a, ou ka mete adrès li kòm moun k la nan yon script avantaj entelijan ki sanble sa a:
match tx {
case t : ExchangeTransaction =>
t.sender == addressFromString("3PJaDyprvekvPXPuAtxrapacuDJopgJRaU3")
case _ => true
}
"Lis blan" moun k ap resevwa yo
Pou pèmèt marqueur yo dwe voye sèlman nan sèten kont - pou kreye yon "lis blan" nan benefisyè - ou ka itilize yon avantaj entelijan ak konplo sa a ki tcheke pou enklizyon nan lis la:
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
}
Pou rezon sekirite ak konplè langaj pwouve, lis la pa genyen yon aplikasyon iteratè. Se poutèt sa li defini kòm yon seri eleman konkrè.
"Lis nwa" moun k ap resevwa yo
Menm jan an tou, pou entèdi voye jeton nan sèten kont, ou ka kreye yon "lis nwa". Nan ka sa a, yo itilize egzakteman menm avantaj entelijan, men adrès la tcheke pou asire li pa sou lis nwa a:
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
}
Voye ak pèmisyon konpayi an
Sèvi ak yon avantaj entelijan, ou kapab tou mete opsyon pou voye yon avantaj entelijan sèlman avèk pèmisyon konpayi an. (etikèt angajman/dèt). Emetteur a eksprime konsantman li lè li mete ID tranzaksyon an nan eta kont li:
match tx {
case t : TransferTransaction =>
let issuer = extract(addressFromString("3P6ms9EotRX8JwSrebeTXYVnzpsGCrKWLv4"))
#убеждаемся, что в стейте эмитента содержится ID текущей транзакции
isDefined(getInteger(issuer, toBase58String(t.id)))
case _ => false
}
Echanj sèlman pou kèk pyès monnen
Yon avantaj entelijan pèmèt pèmisyon pou chanje li sèlman pou sèten pyès monnen. Pou egzanp, pou pèmèt sèlman echanj pou Bitcoins, ou ta ka itilize kòd sa a:
let BTCId = base58'8LQW8f7P5d5PZM7GtZEBgaqRPGSzS3DfPuiXrURJ4AJS'
match tx {
case t : ExchangeTransaction =>
t.sellOrder.assetPair.priceAsset == BTCId ||
t.sellOrder.assetPair.amountAsset == BTCId
case _ => true
}
Komès pa pri soti nan Oracle la
Nan script avantaj entelijan an, ou ka mete pèmisyon nan komès sèlman nan pri a fiks nan eta a nan yon Oracle serye. Men yon egzanp yon script konsa:
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
}
Isit la nou ap fè fas ak yon pwen ki pa evidan lè tcheke ID nan avantaj la ak ki komès yo te pote soti. Pwen an se ke si ID a byen pa defini, Lè sa a, nou ap pale sou WAVES. Nan script la, nou asire w ke komès fèt an tandem ak WAVES, egzakteman nan fason sa a.
Ogmantasyon pri fiks
Ou ka mete yon pri fiks pou yon avantaj entelijan, ki pral ogmante etap pa etap nan yon pwopòsyon bay yo. Isit la se yon egzanp yon script avantaj ki gen pri a ap ogmante pa 5% chak 1000 blòk:
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
}
Komès entèval
Epitou, gras a script la, komès nan yon avantaj entelijan ka limite a entèval Predetermined. Men yon egzanp yon script konsa:
let startHeight = 10000
let interval = 44000
let limit = 1500
match tx {
case t: TransferTransaction | MassTransferTransaction | ExchangeTransaction =>
(height - startHeight) % interval < limit
case _ => true
}
Nan script la nou asire w ke depi nan kòmansman an nan komès startHeight pa plis pase limite entèval. Longè entèval la egal a kantite blòk espesifye nan jaden an entèval.