Tonnta sócmhainní cliste: blacklists agus whitelists, trádáil eatramh

Tonnta sócmhainní cliste: blacklists agus whitelists, trádáil eatramh

Sa dá alt roimhe seo, labhair muid faoi chuntais chliste agus conas is féidir iad a úsáid. le haghaidh ceantanna a reáchtáil agus cláir dílseachta a chruthúagus cabhrú freisin trédhearcacht ionstraimí airgeadais a áirithiú.

Anois féachfaimid ar shócmhainní cliste agus ar roinnt cásanna úsáide dóibh, lena n-áirítear sócmhainní a reo agus srianta a chruthú ar idirbhearta ag seoltaí tugtha.

Ligeann Sócmhainní Cliste Waves d'úsáideoirí sócmhainní a script, tar éis na meicníochtaí céanna le cuntais chliste. Deimhneofar gach idirbheart nua a chruthaítear ag baint úsáide as sócmhainn chliste ar dtús leis an script, agus ansin amháin ag an blockchain.

Is fiú na difríochtaí seo a leanas idir sócmhainní cliste agus cuntais chliste a thabhairt faoi deara:

  1. Sa chód sócmhainne cliste, tá sé dodhéanta cruthúnais a sheiceáil (labhair muid mar gheall orthu sa chéad alt).
  2. I gcód an chuntais chliste, ní féidir leat ExchangeTransaction a sheiceáil ach amháin más cuntas meaitseála é do chuntas. Seachas sin, ní dhéantar ach an t-ordú a sheiceáil. Sa chód sócmhainne cliste, ní féidir leat an t-ordú a sheiceáil go díreach, is féidir leat an ExchangeTransaction a sheiceáil, agus an t-ordú a bhaint as más gá.
  3. Níl stát ag sócmhainn chliste, murab ionann agus cuntas cliste, ach tá rochtain againn fós ar na stáit chuntais ón script.

Simplíonn sócmhainní cliste go mór le scríobh conarthaí, rud a fhágann go bhfuil go leor cásanna gonta agus galánta á gcur i bhfeidhm.

Reo sócmhainní

Chun sócmhainní a reo suas go dtí airde bloc áirithe spriocAirde, is féidir leat an luach seo a shocrú go simplí i script na sócmhainne cliste seo a leanas:

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

Coinníoll sonrach meaitseála

Chun meaitseoir ar leith a shocrú mar an ceann atá ag teastáil, is féidir leat a sheoladh mar an seoltóir a shocrú i script sócmhainní cliste mar seo:

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

"Liosta bán" na bhfaighteoirí

Chun gur féidir comharthaí a sheoladh chuig cuntais áirithe amháin - chun "liosta bán" d'fhaighteoirí a chruthú - is féidir leat sócmhainn chliste a úsáid leis an scéimre seo a leanas a sheiceálann le cur san áireamh sa 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
}

Ar chúiseanna sábháilteachta agus críochnaitheacht teanga is féidir a chruthú, níl aon chur i bhfeidhm atriallta sa liosta. Dá bhrí sin, tá sé sonraithe mar shraith d'eilimintí nithiúla.

"Liosta dubh" na bhfaighteoirí

Mar an gcéanna, chun cosc ​​a chur ar chomharthaí a sheoladh chuig cuntais áirithe, is féidir leat "liosta dubh" a chruthú. Sa chás seo, úsáidtear an tsócmhainn chliste chéanna go hiomlán, ach seiceáil an seoladh mura bhfuil liosta dubh ann:

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
}

Á sheoladh le cead an eisitheora

Le sócmhainn chliste, is féidir leat an rogha a shocrú freisin chun sócmhainn chliste a sheoladh ach amháin le cead an eisitheora (lipéad gealltanas/fiachais). Cuireann an t-eisitheoir a thoiliú in iúl trí aitheantas an idirbhirt a phostáil i staid a chuntais:

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

Malartú ach amháin le haghaidh boinn áirithe

Ceadaíonn sócmhainn chliste cead é a mhalartú ar bhoinn áirithe amháin. Mar shampla, chun an malartú a cheadú ach amháin le haghaidh bitcoins, is féidir leat an cód seo a leanas a úsáid:

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

Trádáil de réir praghais ón oracle

Sa script sócmhainní cliste, ní féidir leat an cead trádála a shocrú ach amháin ag an bpraghas atá socraithe i staid oracle iontaofa. Seo sampla de script dá leithéid:

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
}

Anseo ní mór dúinn aghaidh a thabhairt ar nóiméad neamhshoiléir agus ID na sócmhainne atá á trádáil á seiceáil againn. Is é an bhfíric mura bhfuil an ID sócmhainne sainithe, ansin táimid ag caint faoi WAVES. Sa script, déanaimid cinnte go ndéantar trádáil i gcomhar le WAVES, ar an mbealach seo.

Méadú ar phraghas seasta

Is féidir leat praghas seasta a shocrú le haghaidh sócmhainn chliste, rud a mhéadóidh céim ar chéim i gcion áirithe. Seo sampla de script sócmhainní a ardóidh a praghas 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
}


Trádála eatramh

Chomh maith leis sin, a bhuíochas leis an script, is féidir trádáil cliste sócmhainní a theorannú do eatraimh réamhshocraithe. Seo sampla de script dá leithéid:

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

Sa script, déanaimid cinnte go bhfuil ó thús na trádála túsAirde ritheadh ​​​​nach mó ná teorainn a chur le eatraimh. Tá fad an eatramh comhionann le líon na mbloic a shonraítear sa réimse eatramh.

Foinse: will.com

Add a comment