Johdatus vakauteen: ACL ja tapahtumat. [Osa 2]

Tämä artikkeli on seuraava sarjassa edellisen kanssa, jossa puhuttiin tietosopimuksista. Edellisen keskustelun esimerkkisopimus periytyi sopimuksesta nimeltä “ACLContract”, mutta emme käyttäneet mitään ACLContractin tarjoamaa ominaisuutta, koska olimme vielä näkemässä, miten ACL: ää (pääsynhallintaluettelo) ja “eventing” voidaan käyttää toimittamaan kulunvalvonta ja kulunvalvonta.

Pääsynvalvonta on mekanismi, jolla rajoitetaan valikoivasti resurssien käyttöä. Tietotekniikassa on erilaisia ​​kulunvalvontamalleja, joista suurin osa keskittyy käyttäjän tai “päämiehen” ympärille, joka yrittää käyttää resurssia. On tilanteita, joissa resurssi itse voi määritellä pääsyn siihen, mutta emme aio mennä siihen. Pidämme kiinni tarkoituksestamme kahdentyyppisistä pääsynhallinnoista – rooli- ja attribuuttipohjaisista.

Johdatus vakauteen: ACL ja tapahtumat. [Osa 2]

Perintö:

#Crypto ExchangeBenefits

1

Binance
Best exchange


VISIT SITE
  • ? The worlds biggest bitcoin exchange and altcoin crypto exchange in the world by volume.
  • Binance provides a crypto wallet for its traders, where they can store their electronic funds.

2

Coinbase
Ideal for newbies


Visit SITE
  • Coinbase is the largest U.S.-based cryptocurrency exchange, trading more than 30 cryptocurrencies.
  • Very high liquidity
  • Extremely simple user interface

3

eToro
Crypto + Trading

VISIT SITE
  • Multi-Asset Platform. Stocks, crypto, indices
  • eToro is the world’s leading social trading platform, with thousands of options for traders and investors.

Koska kulunvalvonta on ominaisuus, jonka pitäisi olla jossain määrin liitettävissä, hyödynnämme perintöä tämän ominaisuuden tarjoamiseksi verkkotunnussopimuksillesi. Vakavaraisuuden periminen käyttää kopiokoodimekanismia “super-sopimus” -koodin “alihankintaan” – supersopimus on perittävä sopimus ja alihankinta perintösopimus. Solidity tukee myös Object Oriented Programming (OOPS) -konseptia polymorfismista, jossa sopimusinstanssi voi kaksinkertaistaa minkä tahansa alaluokan esiintymänsä.

ACL (Access Control List) -sopimuksemme peri verkkotunnussopimus, ja se tarjoaa tiedonsiirron hallintaominaisuudet. Verkkotunnussopimuksen on vain ympäröitävä resurssikutsunsa ACL-sopimusmenetelmillä, jotka se perii.

ACL-sopimus:

ACL-sopimuksen peruslähtökohtana on tarjota menetelmiä luettelon tai käyttäjäluetteloiden luomiseksi / hallitsemiseksi ja tarjota menetelmiä, joilla kukin tietty käyttäjä voidaan tarkistaa luettelon perusteella. Oletuksemme on, että jokainen sopimuksen käyttäjä on “osoitetyyppi” – osoite on erityinen vakiomuuttuja, joka edustaa lompakkoasi tai tilisi osoitetta. On järkevää käyttää sitä käyttäjätiedoina, koska käyttäjä pääsee sopimukseen vain tiliosoitteellaan. Voimme myös olettaa, että puhelu osoitteesta on aito, koska se voidaan soittaa vain, jos käyttäjällä on pääsy tilin yksityiseen avaimeen, joka on ethereumin aitouden perusedellytys..  

Sopimuksen perusmallissa on kaksi instanssimuuttujaa:

#CRYPTO BROKERSBenefits

1

eToro
Best Crypto Broker

VISIT SITE
  • Multi-Asset Platform. Stocks, crypto, indices
  • eToro is the world’s leading social trading platform, with thousands of options for traders and investors.

2

Binance
Cryptocurrency Trading


VISIT SITE
  • ? Your new Favorite App for Cryptocurrency Trading. Buy, sell and trade cryptocurrency on the go
  • Binance provides a crypto wallet for its traders, where they can store their electronic funds.

#BITCOIN CASINOBenefits

1

Bitstarz
Best Crypto Casino

VISIT SITE
  • 2 BTC + 180 free spins First deposit bonus is 152% up to 2 BTC
  • Accepts both fiat currencies and cryptocurrencies

2

Bitcoincasino.io
Fast money transfers


VISIT SITE
  • Six supported cryptocurrencies.
  • 100% up to 0.1 BTC for the first
  • 50% up to 0.1 BTC for the second

 

osoite julkinen omistaja;

osoite [] julkisille käyttäjille;

Omistajan osoite on sopimuksen luoja. Välitämme sen rakentajan puhelun aikana. Tämä on oikeudenmukainen oletus, koska omistajan tulisi ottaa vain sopimus käyttöön, ellei meidän tarvitse siirtää omistajan toimintoja toiseen osoitteeseen, josta annamme sopimuksen mukaiset ehdot, kuten näemme.

Joten jos sopimusta kutsutaan ACLContractiksi, seuraava koodi välittää omistajan osoitteen ja tekee omistajasta myös yhden käyttäjistä.

funktio ACLContract () {

omistaja = viesti lähettäjä;

users.push (omistaja);

}

Kun olemme solmineet sopimuksen, tarvitsemme joitain toimintatapoja käyttäjäluettelon hallinnoimiseksi. Viesti on erityinen kiinteän tyyppinen objekti, joka sisältää tietoja soittajan tai tapahtuman lähettäjän tiedoista. Tässä tapauksessa palveluntarjoajatili on soittaja, joka suorittaa sopimuksen, joten osoitamme kyseisen omistajan osoitteen tämän soittajan osoitteeseen.

funktio addUser (osoitteen käyttäjä) {

if (msg.sender! = omistaja) heittää;

users.push (käyttäjä);

}

funktio getIthUser (uint i) vakio palauttaa (osoite) {

paluukäyttäjät [i];

}

funktio getUserCount () vakio palauttaa (uint) {

palaavat käyttäjät.pituus;

}

funktio deleteIthUser (uint i) {

if (msg.sender! = omistaja) heittää;

poista käyttäjät [i];

}

Asiakkaat käyttävät näitä menetelmiä käyttäjien luettelon hallintaan. Näemme, että vain omistajalla on mahdollisuus hallinnoida luetteloa tällä tarkistuksella:

if (msg.sender! = omistaja) heittää;

Joten tämä koodi vastaa soittajan osoitetta omistajan kanssa ja epäonnistuu tapahtumissa heitolla, jos kyseessä on ristiriita. Ennen kuin siirrymme pidemmälle, meidän on tarkasteltava hieman poikkeusten heittämistä, koska tämä on tärkein suoja, jonka annamme, jos kulunvalvontamekanismimme epäonnistuu.

Poikkeukset:

Poikkeuksena ovat vakauden mekanismi, joka osoittaa tapahtuman virhetilanteen. Poikkeuksen seurauksena nykyinen puhelu lopetetaan ja kaikki tapahtuman vaikutukset kumotaan. Jos poikkeus esiintyy puhelupinossa, poikkeus palautetaan pinosta ylöspäin ensimmäiselle soittajalle. Tällä hetkellä poikkeuksesta ei ole mahdollista toipua vakavasti, koska tapahtunut osittainen tilamuutos ei välttämättä ole turvallista tapahtuman jatkamiseksi, joten tapahtuman atomisuuden ylläpitämiseksi kaikki muutokset palautetaan.

On olemassa kahdenlaisia ​​poikkeuksia, ajonaikaisia ​​poikkeuksia ja käyttäjän tarjoamia poikkeuksia.

Suorituksenaikaiset poikkeukset tapahtuvat automaattisesti, jos koodi kohtaa vakavuusdokumentaatiossa luetellut 12 tilannetta (katso ohjeet – liian laaja ja turha liittää tähän), ne ovat enimmäkseen poikkeamia, joita saattaa esiintyä suoritettavan lausunnon / tapahtuman tilassa on onnistunut.

Käyttäjän antamat poikkeukset heittävät koodin manuaalisesti. Niitä voidaan luoda kahdella tavalla – käyttämällä vaatimuksen kanssa ehtoa, joka osoittautuu vääräksi, tai käyttämällä nimenomaista heittoa. Käytämme ehdollista heitettä, ja haluamallamme tavalla se palauttaa tapahtumavaikutukset ja epäonnistuu puhelussa, jos käyttöön otettu pääsyvalvonta rikkoo.

Palataksemme ACLContractiin, olemme saaneet valmiiksi luettelon käyttäjistä ja menetelmistä, joita tarvitsemme sen hallitsemiseksi. Tehtäväämme on joitain varoituksia. On mahdollista luoda kaksi luetteloa – yksi vain luku -käyttäjille ja toinen luku- ja kirjoituskäyttäjille.

Tosiasia on, että kaikki ethereum-lohkoketjussa olevat tiedot ovat luonteeltaan julkisia, joten sillä ei ole järkevää luoda vain luku -käyttäjiä, koska kuka tahansa voi nähdä nämä tiedot, mutta siinä tapauksessa, että tietojen käyttö on salattu tavalla jonka avulla se voidaan liittää käyttäjätiliin, voimme ajatella vain luku -käyttäjää. Ethereum-yhteisössä käydään keskusteluja, jotta ethereum blockchain -ympäristö olisi ystävällistä, ja on olemassa useita ehdotuksia siitä, miten se voidaan tehdä.

Jos voimme olettaa, että jollakin noista ehdotuksista tai mukautetun mallin avulla pystymme salaamaan tietomme ja voimme varmistaa, että pääsy tietoihin voidaan tehdä vain koko sopimuskoodin ajan, meidän on hyödyllistä luoda kaksi luetteloa – vain luku -käyttäjä ja kirjoitus-käyttäjä. Tämän koodi on hyvin samanlainen kuin mitä olemme kirjoittaneet yhden ryhmän käyttäjille. Tarvitsemme vain neljä hallintatapaa jokaiselle listalle (readUsers ja writeUsers).

Pääsynhallinnan luominen:

Jotta käyttäjä voidaan vetää sisään kulunvalvontaluettelosta, meidän on sovitettava se osoiteluetteloon. Voimme luoda yksinkertaisen menetelmän, joka hyväksyy käyttäjän osoitteen ja yrittää sovittaa sen luetteloon:

funktio isUser (osoitekandidaatti, merkkijonomenetelmä) palauttaa (bool) {

for (uint8 i = 0; i < users.pituus; i ++) {

jos (käyttäjät [i] == ehdokas) {

palaa totta;

}

}

return false;

}

Logiikka on helppo ymmärtää, jos löydämme käyttäjän luettelosta, poistumme silmukasta true-arvon kanssa, jos luettelossa olevat elementit loppuvat, palautamme sitten false. Välitettyä merkkijonomenetelmän parametria käytetään myöhemmin, kun puhumme tapahtumista käyttäjän pääsyn ja pääsyyrityksen tuloksen kirjaamiseksi.

Tapahtumien käyttöoikeuksien kirjaaminen:

Turvallisuusperiaatteissa määritelty peruskäsite on AAA (todennus, valtuutus ja tarkastus).

Todentamisen tarjoaa ethereum, kun käyttäjä aloittaa tapahtuman tietyllä tilillä. Oletetaan, että käyttäjä omistaa tilin, koska hän pystyy käyttämään sitä tapahtuman aloittamiseen. Kyseisen validoinnin vastuu, joka johtaa käyttäjän todennukseen tilin salasanalla, suoritetaan ethereum-solmun asiakastasolla.

ACLContract on toteuttanut AAA: n valtuutusosan, jossa valvotaan rooliin perustuvaa pääsynhallintaa.

AAA: n kolmas osa on Auditointi – Auditoinnin vaatimus on, että käyttäjien käyttöoikeudet on kirjattava. Tätä varten käytämme tapahtumia.

Vakuutustapahtumat:

Tapahtumat ovat aivan kuin sopimuksen normaalit instanssimuuttujat, ne voidaan periä kuten mikä tahansa muuttuja. Tapahtumia käytetään palauttamaan arvot asiakkaalle, jos arvoluettelo on palautettava, mutta tutkimme niitä vain keinona luoda lokeja estoketjuun. Tapahtumat, kun heidät “ammutaan” lohkoketjun osasta heille toimitettujen parametrien avulla.

Lokitapahtuman toteuttamiseksi määritämme tapahtumamuuttujan:

tapahtuma LogAccess (osoite indeksoitu, uint indeksoitu accessTime, merkkijonomenetelmä, merkkijonon kuvaus);

Tätä tapahtumaa käytetään pääsynvalvontamenetelmässämme isUser () kirjaamaan sisäänpääsy, jota yritetään tuloksella.

funktio isUser (osoitekandidaatti, merkkijonomenetelmä) palauttaa (bool) {

for (uint8 i = 0; i < users.pituus; i ++) {

jos (käyttäjät [i] == ehdokas) {

LogAccess (ehdokas, nyt, menetelmä, "onnistunut pääsy");

palaa totta;

}

}

LogAccess (ehdokas, nyt, menetelmä, "epäonnistui pääsy");

return false;

}

 

Tapahtuma parametroi pääsevän tilin (ehdokas) ajan, (nyt) resurssin (menetelmän) ja tuloksen (epäonnistunut käyttö, onnistunut käyttö). Käytämme merkkijonoa kuvaamaan tulosta, mutta on suositeltavaa käyttää uint-vakioita haun helpottamiseksi.

Tapahtuma laukaistaan ​​aina, kun isUser () -sovellusta käytetään, ja kirjaa pääsyn estoketjuun tarkastustarkoituksia varten. Tapahtumiin pääsee web3-asiakaspuhelulla, jonka näemme seuraavassa osiossa.

Laittaminen ACLCopimus käyttää:

Luomamme sopimuksen voi periä mikä tahansa muu sopimus käyttämään sen toimittamia ACL-luetteloita. Datasopimus peri sen rakenteella.

contrat DataContract on ACLContract {

ACL-palvelun käyttämiseksi sieppaamme isUser (): n kanssa tehdyssä sopimuksessa esitetyt menetelmäpuhelut:

function updateCustomer (uint-hakemisto, merkkijonon nimi) {

if (isUser (msg. lähettäjä, "updateCustomer")) {

jos (indeksi > laskea) heittää;

asiakkaat [hakemisto] .nimi = nimi;

}

muu heittää;

}

function updateCustomerStatus (uint-indeksi, uint-tila) {

if (isUser (msg. lähettäjä, "updateCustomer")) {

jos (indeksi > laskea) heittää;

asiakkaat [hakemisto] .tila = tila;

}

muu heittää;

}

funktio createCustomer (

uint id,

merkkijonon nimi,

uint dateOfBirth,

uint sosiaalinen) {

if (isUser (msg. lähettäjä, "createCustomer")) {

customers [count] = asiakas (tunnus, nimi, syntymäpäivä, sosiaalinen, odottaa);

laskea ++;

}

muu heittää;

}

Tarjoamme kulunvalvontarajoituksia vain menetelmille, jotka päivittävät tietoja, jos olisimme salanneet asiakastiedot sopimuksessa, voisimme soveltaa rajoituksia myös sen lukuominaisuuksiin.

Sopimus ei voi käyttää luomiaan tapahtumia, joten pääsemiseksi tapahtumiin tarvitsemme web3-asiakkaamme luomaan puhelun:

Olettaen, että ABI on saanut ABI: n ja osoite on sen sijainti lohkoketjussa.

var DataContract = web3.eth.contract (abi) .at (osoite);

var eventLogs = DataContract.allEvents (). get ();

console.log (eventLogs);

Tapahtumissa on paljon enemmän kuin miten käytämme sitä yllä. Tavoitteenamme on hakea ne tarkastustarkoituksiin.

Attribuuttipohjainen kulunvalvonta:

On mahdollista käyttää toisen tyyppistä käyttöoikeuksien hallintaa, jossa valtuutetut käyttäjät tunnistetaan määritteellä. Keskustelemme tästä esimerkkinä “attribuuttipohjaisesta pääsynvalvonnasta”, josta puhuimme johdannossa. Tämä on vain muunnelma isUser () -kutsusta:

function isUserAuthorized (osoitekandidaatti, merkkijonomenetelmä) palauttaa (bool) {

for (uint8 i = 0; i < users.pituus; i ++) {

jos (ehdokas. tasapaino > 100) {

LogAccess (viestin lähettäjä, nyt, menetelmä, "onnistunut pääsy");

palaa tosi;

}

}

LogAccess (viestin lähettäjä, nyt, menetelmä, "epäonnistui pääsy");

return false;

}

Tämä on hyvin triviaali esimerkki, jossa valtuutettu käyttäjä on se, jonka saldo eetterit ovat yli 100.

Mike Owergreen Administrator
Sorry! The Author has not filled his profile.
follow me
Like this post? Please share to your friends:
Adblock
detector
map