Waves smart maoin: liostaichean dubh is geal, malairt eadar-amail

Waves smart maoin: liostaichean dubh is geal, malairt eadar-amail

Anns an dà artaigil roimhe bhruidhinn sinn mu chunntasan snasail agus mar a ghabhas an cleachdadh airson ropan a chumail agus prògraman dìlseachd a chruthachadhagus cuidich cuideachd dèanamh cinnteach à follaiseachd ionnstramaidean ionmhais.

A-nis seallaidh sinn ri so-mhaoin snasail agus grunn chùisean cleachdaidh, a’ gabhail a-steach reothadh maoin agus cruthachadh cuingeachaidhean air gnothaichean aig seòlaidhean sònraichte.

Tha Waves Smart Assets a’ leigeil le luchd-cleachdaidh ath-chòmhdach a dhèanamh air sgriobtaichean air maoin, a’ leantainn na h-aon meacanaig ri Smart Accounts. Thèid gach gnothach ùr a thèid a chruthachadh a’ cleachdadh so-mhaoin snasail a dhearbhadh an toiseach leis an sgriobt, agus dìreach an uairsin leis an blockchain.

Is fhiach toirt fa-near na h-eadar-dhealachaidhean a leanas eadar so-mhaoin smart agus cunntasan snasail:

  1. Ann an còd so-mhaoin smart, tha e do-dhèanta dearbhadh a dhearbhadh (bhruidhinn sinn mun deidhinn anns a 'chiad artaigil).
  2. Anns a’ chòd cunntais snasail, chan urrainn dhut sùil a thoirt air ExchangeTransaction ach ma tha an cunntas agad mar chunntas matcher. Rud eile, chan eil ach an òrdugh air a sgrùdadh. Anns a’ chòd so-mhaoin smart, chan urrainn dhut sùil a thoirt air an òrdugh gu dìreach; faodaidh tu sgrùdadh a dhèanamh air an ExchangeTransaction, agus, ma tha sin riatanach, òrdugh a thoirt bhuaithe.
  3. Chan eil stàite aig so-mhaoin snasail, eu-coltach ri cunntas snasail, ach tha cothrom againn fhathast air stàitean cunntais bhon sgriobt.

Bidh so-mhaoin glic gu mòr a’ sìmpleachadh sgrìobhadh chùmhnantan, a’ dèanamh buileachadh mòran chùisean pongail agus eireachdail.

Reothadh maoin

Gus maoin a reothadh gu àirde bloca sònraichte àirde targaid, faodaidh tu dìreach an luach seo a shuidheachadh ann an sgriobt na so-mhaoin snasail a leanas:

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

Suidheachadh sònraichte Matcher

Gus maidsidh sònraichte a shuidheachadh mar an tè a tha thu ag iarraidh, faodaidh tu an seòladh aige a shuidheachadh mar an neach a chuir e ann an sgriobt so-mhaoin snasail a tha coltach ri seo:

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

"Liosta geal" de luchd-faighinn

Gus leigeil le comharran a chuir gu cunntasan sònraichte a-mhàin - gus “liosta geal” de luchd-faighinn a chruthachadh - faodaidh tu so-mhaoin snasail a chleachdadh leis an sgeama a leanas a nì sgrùdadh airson a bhith air an liosta:

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
}

Airson adhbharan tèarainteachd agus iomlanachd a’ chànain, chan eil buileachadh iterator air an liosta. Mar sin tha e air a mhìneachadh mar sheata de eileamaidean concrait.

"Liosta dubh" de luchd-faighinn

San aon dòigh, gus casg a chuir air comharran a chuir gu cunntasan sònraichte, faodaidh tu “liosta dhubh” a chruthachadh. Anns a ’chùis seo, thathas a’ cleachdadh dìreach an aon mhaoin smart, ach leis an t-seòladh air a sgrùdadh gus dèanamh cinnteach nach eil e air an liosta dhubh:

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
}

A 'cur le cead an neach-lìbhrigidh

A’ cleachdadh so-mhaoin spaideil, faodaidh tu cuideachd an roghainn so-mhaoin snasail a chuir a-steach a-mhàin le cead bhon neach-lìbhrigidh (bileag gealltanas/fiachan). Bidh an neach-lìbhrigidh a’ cur an cèill a chead le bhith a’ cur ID a’ ghnothaich ann an staid a’ chunntais aige:

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

Dèan iomlaid a-mhàin airson buinn sònraichte

Tha so-mhaoin snasail a 'toirt cead airson a mhalairt a-mhàin airson buinn sònraichte. Mar eisimpleir, gus leigeil le iomlaid airson Bitcoins a-mhàin, dh'fhaodadh tu a 'cleachdadh an còd a leanas:

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

Malairt a rèir prìs bhon oracle

Anns an sgriobt so-mhaoin smart, faodaidh tu cead a chuir a-steach airson malairt a-mhàin aig a ’phrìs a tha stèidhichte ann an staid oracle earbsach. Seo eisimpleir de leithid de sgriobt:

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
}

An seo tha sinn mu choinneimh puing nach eil follaiseach nuair a bhios sinn a’ sgrùdadh ID na so-mhaoin leis a bheil malairt air a dhèanamh. Is e a’ phuing mura h-eil ID na so-mhaoin air a mhìneachadh, tha sinn a ’bruidhinn mu dheidhinn WAVES. Anns an sgriobt, bidh sinn a’ dèanamh cinnteach gun tèid malairt a dhèanamh an co-bhonn ri WAVES, san dòigh seo.

Àrdachadh prìsean stèidhichte

Faodaidh tu prìs stèidhichte a shuidheachadh airson so-mhaoin snasail, a mheudaicheas ceum air cheum ann an cuibhreann sònraichte. Seo eisimpleir de sgriobt maoin a dh’ èiricheas a phrìs 5% gach 1000 bloc:

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
}


Malairt eadar-amail

Cuideachd, le taing don sgriobt, faodaidh malairt so-mhaoin snasail a bhith cuibhrichte gu amannan ro-shuidhichte. Seo eisimpleir de leithid de sgriobt:

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

Anns an sgriobt bidh sinn a 'dèanamh cinnteach sin bho thoiseach malairt toiseach àirde ni 's mò na cuingealachadh eadar-ama. Tha fad an eadar-ama co-ionann ris an àireamh de bhlocaichean a tha air an sònrachadh san raon àm.

Source: www.habr.com

Cuir beachd ann