Yksi lohkoketjupohjaisten projektien päätavoitteista on tietojen verifiointi. Voit tarkastella live-esimerkkejä digitaalisesta henkilöllisyydestä ja online-asiakirjojen säilytyksestä ja shekistä. Itse asiassa jokainen näistä tapauksista edellyttää toiminnan/tapahtuman aloittajan vahvistusta henkilön tai yhteisön vahvistamiseksi. Esimerkiksi, jos henkilöllä on digitaalinen henkilötodistus, omistusoikeuden varmistaminen tulee ratkaisevaksi. Näin ollen se on erinomainen esimerkki tietojen todennettavuuden ongelmasta. Käydään läpi ratkaisun yksinkertaisin muoto – digitaalinen allekirjoitus, jonka testaus on yksi älykkäiden sopimusten kehittämisen tärkeimmistä kohdista.
Lähestymistapa on yksinkertainen:
1) järjestelmä luo viestin kaikille tunnettujen sääntöjen mukaan
2) allekirjoittaja saa viestin ja lisää siihen tietyn symbolijoukon – digitaalisen allekirjoituksen, viestistä yksityisellä avaimella muodostetun koodin
3) luotu allekirjoitus lähetetään nyt sopimukseen, jossa se hajotetaan allekirjoittajan osoitteen hakemiseksi.
Solidity tarjoaa sinulle ECDSA-algoritmin allekirjoitusten luomiseen ja edelleen hajottamiseen. Meidän ei tarvitse sukeltaa syvälle itse algoritmiin (löydät tarvittavat tiedot sopivissa lähteissä). Meidän tarvitsee vain tietää, että ECDSA on esimerkki epäsymmetrisestä salakirjoituksesta, jossa ensimmäinen käyttäjä luo allekirjoituksen yksityisellä avaimellaan ja toinen käyttäjä käyttää standardialgoritmia noutaakseen allekirjoittajan julkisen avaimen. Siten se voi tarkistaa allekirjoituksen lähteen. Keskitytään sen sijaan käytännön osaan – allekirjoitusten käyttöön ja testaamiseen.
Ensinnäkin meidän on tunnistettava ongelma. Sopimuksen on esimerkiksi suoritettava jokin toimenpide, esimerkiksi tallennettava soittajan osoite. Vaikka sopimuksen tulisi suorittaa tallennus vain, jos soittaja on vahvistettu, meidän on varmistettava, että kukaan ei voi käyttää osoitettaan ilman lupaa. Aidon soittajan hakemiseksi meidän on luotava viesti, allekirjoitettava se ja hajotettava se sopimuksen sisällä.
Voit löytää vakioratkaisu Solidityn dokumentaatiossa (esimerkiksi, 0.8.4: ssä - uusin vakaa versio artikkelin julkaisuhetkellä). Asiakirjat tarjoavat meille sopimuksen, joka on vaatinut seuraavat sisäänrakennetut toiminnot: viestin luominen, allekirjoituksen jakaminen ja kokoonpanokoodi allekirjoittajan hakemiseksi. Esimerkki näyttää kaikki tarvittavat menetelmät ja on melko suoraviivainen, vaikka siinä on kaksi haittaa: siitä puuttuu universaalisuus, eikä ratkaisutestauksesta ole hyvää esimerkkiä. Siksi annan oman versioni koodista ja (todellisen tavoitteen) — sopimuksen testausstrategian.
Toki, voit käyttää tavallinen OpenZeppelin-kirjasto ECDSA:n toimintaan, mutta kohtaat jälleen samat ongelmat – joustavuuden ja testausmenetelmien puute. Sukellaanpa siis esimerkkiini allekirjoituspohjaisesta logiikasta. Löydät täydellisen toimiva esimerkki GitHubissani, mutta on muutamia paikkoja, jotka haluan näyttää kokonaan.
Ensinnäkin valmistelemme viestin. Kuten näet, se muodostuu kahdesta pakatusta ja hajautetusta lompakkoosoitteesta:
Toinen tärkeä koodinpala on viestin hajautus yhteen tavallisen Ethereum-viestin kanssa:
Se osoittaa, että viesti lähetettiin Ethereum-verkossa ja sen pituus on 32 tavua, mikä ei ole satunnainen luku. Aiempien toimien jälkeen meillä on hash, jonka pituus on 32 tavua. On välttämätöntä, että lisähajautustoiminto on tällaisessa muodossa, ja keskustelemme perusteluista hieman myöhemmin.
Muut koodikappaleet ovat melko vakioita. Toiminto allekirjoituksen jakamiseksi on seuraava:
ja tässä on toiminto allekirjoittajan hakemiseksi:
Ulkoisessa käyttöliittymässä käytämme mukautettua toimintoa, joka vastaanottaa allekirjoituksen ja tarvittavat argumentit, tarkistaa, onko käyttäjä jo rekisteröitynyt, muodostaa viestin ja tarkistaa allekirjoituksen:
Ensin jäljittelemme viestiä, joka on allekirjoitettava. Me käytämme ethers.js kirjasto, joka on (yhdessä web3) käytetyin ja kätevin kirjasto. Koska se on avoimen lähdekoodin kirjasto, voit vapaasti tutkia sitä sen koodi ja asiakirjat. Lisäksi tämä kirjasto tarjoaa meille täydellisen käyttöliittymän seuraavan viestin rakentamiseen:
Yksi molempien haitoista web3 ja eetterit kirjastoissa ei ole kaikkia paikallisen Ganache-ympäristön toimintoja, koska molemmat kirjastot on tarkoitettu toimimaan täydellä Ethererum-solmulla. Siitä huolimatta on olemassa lähestymistapa paikalliseen testaukseen web3-tilin toiminnallisuus. Sinun on kuitenkin luotava lisätili, joka ottaa käyttöön laulajan toiminnot ja tarjoaa yhteyden nykyiseen web3-palveluntarjoajaan:
Joten nyt meillä on viesti luotu ja allekirjoitettu. Mutta se ei ole kaikki; muutamista asioista on vielä puhuttavaa. Molemmat kannen alla olevat kirjastot (web3 ja eetterit) tarjoavat viestin lisähajausta ennen allekirjoituksen luomista. Viestiä ei myöskään ole vain tiivistetty, vaan se on yhdistetty aiemmin näkemämme Ethereum-standardin viestiin:
Ja siksi lisäsimme sopimukseen lisämenetelmän. Joten jos haluat käyttää mukautettuja viestejä, ohittaa ylimääräisen hajautustoiminnon jne., sinun on luotava mukautettu versio allekirjoitustoiminnosta. Olemme pohtineet syytä yllä – molemmat standardikirjastot käyttävät tyypillistä lähestymistapaa viestin allekirjoittamiseen, jota voidaan muuttaa vain ohittamalla toiminnallisuus.
Viimeisenä vaiheena suoritetaan testi ja tarkistetaan, toimiiko se oikein:
Olemme testanneet allekirjoituksen luomisen, luodun viestin, allekirjoituksen hyväksymisen ja hylkäämisen. Joten se on melko täydellinen testisarja varmennustoiminnalle.
- Tili
- Toiminta
- lisä-
- algoritmi
- Kaikki
- perustelut
- artikkeli
- Aito
- Bitti
- tapauksissa
- Tarkastukset
- koodi
- sopimus
- kryptografia
- Nykyinen
- tiedot
- Kehitys
- digitaalinen
- digitaalinen identiteetti
- asiakirjat
- ympäristö
- ethereum
- ethereum-verkko
- Kasvot
- Etunimi
- Joustavuus
- Keskittää
- muoto
- Ilmainen
- koko
- toiminto
- hyvä
- hasis
- hajautusta
- HTTPS
- ia
- Identiteetti
- tiedot
- IP
- IT
- avain
- uusin
- Kirjasto
- paikallinen
- keskikokoinen
- verkko
- solmut
- kampanja
- Tarjoukset
- verkossa
- avata
- avoimen lähdekoodin
- Operations
- yksityinen
- yksityinen avain
- hankkeet
- julkinen
- julkinen avain
- arviot
- ajaa
- setti
- Yksinkertainen
- So
- kiinteys
- jakaa
- Levytila
- verkkokaupasta
- Strategia
- järjestelmä
- testi
- Testaus
- testit
- Lähde
- us
- Vahvistus
- Lompakko
- wikipedia
- sisällä
- Referenssit
- toimii