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:
Sa chód sócmhainne cliste, tá sé dodhéanta cruthúnais a sheiceáil (labhair muid mar gheall orthu sa chéad alt).
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á.
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.