Waves smart assets: itom ug puti nga mga lista, interval trading

Waves smart assets: itom ug puti nga mga lista, interval trading

Sa miaging duha ka artikulo naghisgot kami bahin sa mga smart account ug kung giunsa kini magamit alang sa paghimo sa mga subasta ug paghimo sa mga programa sa pagkamaunongonug tabang usab pagsiguro sa transparency sa pinansyal nga mga instrumento.

Karon atong tan-awon ang mga intelihente nga mga kabtangan ug daghang mga kaso sa ilang paggamit, lakip ang pagyelo nga mga kabtangan ug paghimo og mga pagdili sa mga transaksyon sa piho nga mga adres.

Ang Waves Smart Assets nagtugot sa mga tiggamit sa pag-overlay sa mga script sa mga asset, nga nagsunod sa parehas nga mekaniko sa mga Smart Account. Ang matag bag-ong transaksyon nga gihimo gamit ang usa ka smart asset makumpirma una sa script, ug pagkahuman sa blockchain.

Angay nga matikdan ang mosunod nga mga kalainan tali sa mga smart asset ug mga smart account:

  1. Sa code sa usa ka intelihente nga asset, imposible nga susihon ang mga pruweba (naghisgot kami bahin niini sa una nga artikulo).
  2. Sa smart account code, mahimo nimong susihon ang ExchangeTransaction kung ang imong account usa ka matcher account. Kung dili, ang order ra ang gisusi. Sa smart asset code, dili nimo masusi ang order direkta; mahimo nimong susihon ang ExchangeTransaction, ug, kung gikinahanglan, pagkuha og order gikan niini.
  3. Ang usa ka maalamon nga asset, dili sama sa usa ka maalamon nga account, walay estado, apan kita adunay access sa mga estado sa account gikan sa script.

Ang mga Smart asset labi nga gipasimple ang pagsulat sa mga kontrata, nga naghimo sa pagpatuman sa daghang mga kaso nga mubu ug elegante.

Pag-freeze sa asset

Aron ma-freeze ang mga kabtangan sa usa ka piho nga gitas-on sa block targetHeight, mahimo nimong ibutang kini nga bili sa script sa mosunod nga smart asset:

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

Espesipikong Kondisyon sa matcher

Aron itakda ang usa ka piho nga matcher ingon nga gusto, mahimo nimong itakda ang adres niini ingon ang nagpadala sa usa ka smart asset script nga ingon niini:

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

"White list" sa mga nakadawat

Aron tugotan ang mga token nga ipadala lamang sa pipila ka mga account - aron makahimo og "puti nga lista" sa mga nakadawat - mahimo nimong gamiton ang usa ka smart asset nga adunay mosunod nga pamaagi nga nagsusi sa paglakip sa listahan:

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
}

Alang sa mga hinungdan sa seguridad ug mapamatud-an nga pagkakompleto sa lengguwahe, ang lista wala’y sulud nga pagpatuman sa iterator. Busa kini gihubit ingon usa ka hugpong sa mga konkretong elemento.

"Black list" sa mga nakadawat

Sa susama, aron idili ang pagpadala sa mga token sa pipila ka mga account, mahimo ka nga maghimo usa ka "itom nga lista". Sa kini nga kaso, parehas nga intelihente nga asset ang gigamit, apan gisusi ang adres aron masiguro nga wala kini sa blacklist:

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
}

Pagpadala uban ang pagtugot sa nag-isyu

Gamit ang usa ka smart asset, mahimo usab nimo nga itakda ang kapilian sa pagpadala usa ka smart asset lamang kung adunay pagtugot sa nag-isyu (pasalig/utang label). Ang nag-isyu nagpahayag sa iyang pagtugot pinaagi sa pagbutang sa transaction ID sa estado sa iyang account:

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

Ibaylo lamang sa pipila ka mga sensilyo

Ang usa ka maalamon nga asset nagtugot sa pagtugot sa pagbaylo niini alang lamang sa pipila ka mga sensilyo. Pananglitan, aron tugutan lamang ang pagbaylo sa Bitcoins, mahimo nimong gamiton ang mosunod nga code:

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

Pagbaligya pinaagi sa presyo gikan sa orakulo

Sa smart asset script, mahimo nimong itakda ang pagtugot sa pagbaligya lamang sa presyo nga gitakda sa estado sa usa ka kasaligan nga orakulo. Ania ang usa ka pananglitan sa ingon nga script:

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
}

Dinhi nag-atubang kami sa usa ka dili klaro nga punto kung gisusi ang ID sa asset diin gihimo ang trading. Ang punto mao nga kung ang asset ID wala gihubit, nan naghisgot kami bahin sa WAVES. Sa script, gisiguro namon nga ang pagbaligya gihimo dungan sa WAVES, sa eksakto nga paagi.

Fix nga pagtaas sa presyo

Mahimo nimong itakda ang usa ka pirmi nga presyo alang sa usa ka intelihenteng asset, nga magdugang sa matag lakang sa usa ka gihatag nga proporsyon. Ania ang usa ka pananglitan sa usa ka script sa asset kansang presyo motaas sa 5% matag 1000 ka bloke:

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
}


Interval trading

Usab, salamat sa script, ang pagbaligya sa usa ka intelihente nga asset mahimong limitado sa gitakda nang daan nga mga agwat. Ania ang usa ka pananglitan sa ingon nga script:

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

Sa script among gisiguro nga gikan sa pagsugod sa trading pagsugodHeight dili labaw sa utlanan mga agwat. Ang gitas-on sa agwat katumbas sa gidaghanon sa mga bloke nga gipiho sa uma agianan.

Source: www.habr.com

Idugang sa usa ka comment