Aset cerdas gelombang: dhaptar ireng lan dhaptar putih, dagang interval

Aset cerdas gelombang: dhaptar ireng lan dhaptar putih, dagang interval

Ing rong artikel sadurunge, kita ngomong babagan akun cerdas lan carane bisa digunakake. kanggo nyekeli lelang lan nggawe program kasetyanlan uga bantuan njamin transparansi instrumen finansial.

Saiki kita bakal ndeleng aset cerdas lan sawetara kasus panggunaan kanggo wong-wong mau, kalebu pembekuan aset lan nggawe watesan ing transaksi ing alamat sing diwenehake.

Aset Cerdas Gelombang ngidini pangguna skrip aset, miturut mekanika sing padha karo akun pinter. Saben transaksi anyar digawe nggunakake aset pinter bakal dikonfirmasi pisanan dening script, lan mung banjur blockchain.

Perlu dicathet beda ing ngisor iki antarane aset cerdas lan akun cerdas:

  1. Ing kode aset cerdas, ora bisa mriksa bukti (kita ngomong babagan ing artikel kapisan).
  2. Ing kode akun pinter, sampeyan bisa mriksa ExchangeTransaction mung yen akun iku akun matcher. Yen ora, mung pesenan sing dicenthang. Ing kode aset pinter, sampeyan ora bisa mriksa pesenan langsung, sampeyan bisa mriksa ExchangeTransaction, lan extract pesenan saka iku yen perlu.
  3. A aset pinter, ora kaya akun pinter, ora duwe negara, nanging kita isih duwe akses menyang negara akun saka script.

Aset cerdas banget nyederhanakake nulis kontrak, nggawe implementasine akeh kasus sing ringkes lan elegan.

Aset beku

Kanggo beku aset nganti dhuwur blok tartamtu target Dhuwur, sampeyan mung bisa nyetel nilai iki ing skrip saka aset pinter ing ngisor iki:

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

Kondisi matcher tartamtu

Kanggo nyetel matcher tartamtu minangka sing dikarepake, sampeyan bisa nyetel alamate minangka pangirim ing skrip aset cerdas kaya iki:

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

"Dhaptar putih" panampa

Kanggo ngidini token dikirim mung menyang akun tartamtu - kanggo nggawe "dhaftar putih" panampa - sampeyan bisa nggunakake aset cerdas kanthi skema ing ngisor iki sing mriksa kalebu ing dhaptar:

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
}

Kanggo alasan safety lan finalitas basa sing bisa dibuktekake, dhaptar kasebut ora ngemot implementasi iterator. Mulane, kasebut minangka set unsur konkrit.

"Dhaptar ireng" panampa

Kajaba iku, kanggo nyegah ngirim token menyang akun tartamtu, sampeyan bisa nggawe "daftar ireng". Ing kasus iki, aset pinter sing padha digunakake, nanging kanthi mriksa alamat yen ora ana dhaptar ireng:

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
}

Ngirim kanthi ijin saka sing ngetokake sekuritas

Kanthi aset cerdas, sampeyan uga bisa nyetel pilihan kanggo ngirim aset cerdas mung kanthi ijin saka sing ngetokake sekuritas (label komitmen/utang). Sing ngetokake sekuritas nyatakake idin kanthi ngirim ID transaksi ing negara akun:

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

Exchange mung kanggo dhuwit recehan tartamtu

A aset pinter ngidini ijin kanggo ngganti mung kanggo dhuwit recehan tartamtu. Contone, kanggo ngidini ijol-ijolan mung kanggo bitcoins, sampeyan bisa nggunakake kode ing ngisor iki:

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

Dagang kanthi rega saka oracle

Ing script aset pinter, sampeyan bisa nyetel ijin kanggo perdagangan mung ing rega tetep ing negara oracle dipercaya. Ing ngisor iki conto skrip kasebut:

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
}

Ing kene kita ngadhepi titik sing ora jelas nalika mriksa ID aset sing didol. Kasunyatane yen ID aset ora ditetepake, mula kita ngomong babagan WAVES. Ing skrip, kita priksa manawa dagang ditindakake bebarengan karo WAVES, kanthi cara iki.

Tambah rega tetep

Sampeyan bisa nyetel rega tetep kanggo aset cerdas, sing bakal nambah langkah demi langkah ing proporsi tartamtu. Iki minangka conto skrip aset sing bakal nambah regane 5% saben 1000 blok:

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 dagang

Uga, thanks kanggo skrip, dagang aset cerdas bisa diwatesi karo interval sing wis ditemtokake. Ing ngisor iki conto skrip kasebut:

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

Ing naskah, kita priksa manawa saka wiwitan dagang wiwitanDhuwur liwati ora luwih saka watesan interval. Dawane interval padha karo jumlah blok sing ditemtokake ing lapangan interval.

Source: www.habr.com

Add a comment