Мавҷҳои дороиҳои интеллектуалӣ: рӯйхати сиёҳ ва сафед, савдои фосилавӣ

Мавҷҳои дороиҳои интеллектуалӣ: рӯйхати сиёҳ ва сафед, савдои фосилавӣ

Дар ду мақолаи қаблӣ мо дар бораи ҳисобҳои интеллектуалӣ ва чӣ гуна истифода бурдани онҳо сӯҳбат кардем барои гузаронидани музоядаҳо ва эҷоди барномаҳои вафодорӣва инчунин ёрй мерасонад шаффофияти воситаҳои молиявиро таъмин намояд.

Ҳоло мо дороиҳои интеллектуалӣ ва якчанд ҳолатҳои истифодаи онҳоро дида мебароем, аз ҷумла яхбандӣ кардани дороиҳо ва эҷоди маҳдудиятҳо барои муомилот дар суроғаҳои муайян.

Waves Smart Assets ба корбарон имкон медиҳад, ки скриптҳоро дар дороиҳо бо риояи ҳамон механикаи ҳисобҳои Smart такрор кунанд. Ҳар як амалиёти наве, ки бо истифода аз дороии интеллектуалӣ сохта шудааст, аввал аз ҷониби скрипт ва танҳо баъд аз blockchain тасдиқ карда мешавад.

Бояд қайд кард, ки фарқиятҳои зерин байни дороиҳои интеллектуалӣ ва ҳисобҳои интеллектуалӣ:

  1. Дар рамзи дороии интеллектуалӣ тафтиш кардани далелҳо ғайриимкон аст (мо дар бораи онҳо сӯҳбат кардем дар мақолаи аввал).
  2. Дар рамзи ҳисоби интеллектуалӣ, шумо метавонед ExchangeTransaction-ро танҳо дар сурате тафтиш кунед, ки ҳисоби шумо ҳисоби мувофиқ бошад. Дар акси ҳол, танҳо фармоиш тафтиш карда мешавад. Дар рамзи дороиҳои интеллектуалӣ, шумо наметавонед фармоишро мустақиман тафтиш кунед; шумо метавонед ExchangeTransaction-ро тафтиш кунед ва дар ҳолати зарурӣ аз он фармоиш гиред.
  3. Дороии интеллектуалӣ, бар хилофи ҳисоби интеллектуалӣ, ҳолат надорад, аммо мо то ҳол ба ҳолати ҳисоб аз скрипт дастрасӣ дорем.

Дороиҳои интеллектуалӣ навиштани шартномаҳоро хеле содда карда, татбиқи бисёр ҳолатҳоро мухтасар ва шево мегардонанд.

Боздоштани дороиҳо

Барои ях кардани дороиҳо ба баландии муайяни блок ҳадаф баландии, шумо метавонед ин арзишро дар скрипти дороии интеллектуалии зерин муқаррар кунед:

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

Ҳолати мушаххаси мувофиқ

Барои таъин кардани мувофиқати мушаххас ҳамчун мувофиқи дилхоҳ, шумо метавонед суроғаи онро ҳамчун ирсолкунанда дар скрипти дороиҳои интеллектуалӣ муқаррар кунед, ки чунин менамояд:

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

"Рӯйхати сафед" -и қабулкунандагон

Барои иҷозаи фиристодани токенҳо танҳо ба ҳисобҳои муайян - барои эҷоди "рӯйхати сафед"-и қабулкунандагон - шумо метавонед дороии интеллектуалиро бо схемаи зерин истифода баред, ки ворид шудан ба рӯйхатро тафтиш мекунад:

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
}

Бо сабабҳои амниятӣ ва пуррагии исботшавандаи забон, рӯйхат татбиқи итераторро дар бар намегирад. Аз ин рӯ, он ҳамчун маҷмӯи унсурҳои мушаххас муайян карда мешавад.

"Рӯйхати сиёҳ" -и қабулкунандагон

Ба ҳамин монанд, барои манъ кардани фиристодани нишонаҳо ба ҳисобҳои муайян, шумо метавонед "рӯйхати сиёҳ" эҷод кунед. Дар ин ҳолат, маҳз ҳамон дороии интеллектуалӣ истифода мешавад, аммо бо суроға тафтиш карда мешавад, то боварӣ ҳосил кунед, ки он дар рӯйхати сиёҳ нест:

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
}

Интиқол бо иҷозати эмитент

Бо истифода аз дороии интеллектуалӣ, шумо инчунин метавонед интихоби фиристодани дороии интеллектуалиро танҳо бо иҷозати эмитент таъин кунед (тамғаи ӯҳдадорӣ/қарз). Эмитент розигии худро бо гузоштани ID-и транзаксия дар ҳолати суратҳисоби худ изҳор мекунад:

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

Танҳо барои тангаҳои муайян иваз кунед

Дорои оқилона иҷозат медиҳад, ки онро танҳо ба тангаҳои муайян иваз кунад. Масалан, танҳо барои мубодилаи Bitcoins, шумо метавонед рамзи зеринро истифода баред:

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

Савдо аз рӯи нарх аз oracle

Дар скрипти дороиҳои интеллектуалӣ, шумо метавонед иҷозати тиҷоратро танҳо бо нархи дар ҳолати oracle боэътимод муқарраршуда муқаррар кунед. Ин аст як мисоли чунин скрипт:

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
}

Дар ин ҷо мо ҳангоми тафтиши ID-и дороие, ки бо он тиҷорат анҷом дода мешавад, бо як нуқтаи норавшан дучор мешавем. Гап дар он аст, ки агар ID-и дороиҳо муайян нашуда бошад, пас мо дар бораи WAVES гап мезанем. Дар скрипт, мо боварӣ ҳосил мекунем, ки савдо дар тандем бо WAVES, маҳз ҳамин тавр сурат мегирад.

Афзоиши нархҳои собит

Шумо метавонед нархи собитро барои дороии интеллектуалӣ муқаррар кунед, ки он дар таносуби додашуда зина ба зина афзоиш хоҳад ёфт. Ин аст як мисоли скрипти дороиҳо, ки нархи он ҳар 5 блок 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
}


Тиҷорати фосилавӣ

Инчунин, ба шарофати скрипт, савдои дороии интеллектуалӣ метавонад бо фосилаҳои пешакӣ муайяншуда маҳдуд карда шавад. Ин аст як мисоли чунин скрипт:

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

Дар скрипт мо боварӣ ҳосил мекунем, ки аз оғози савдо startHeight на бештар аз ҳудуд фосилаҳо. Дарозии фосила ба шумораи блокҳои дар майдон нишондодашуда баробар аст фосила.

Манбаъ: will.com

Илова Эзоҳ