Mitä tarvitset:
- tietojenkäsittelytieteen tausta
- Ethereumin perusteet
- laskun perusteet (rajoitusten optimointi)
Mitä saat:
- nollatiedon SNARKien perusteet
- Merklen puiden perusteet
- kuinka Ethereum pystyi skaalautumaan tuhansiin tapahtumiin sekunnissa SNARK-tuotteiden ansiosta
SNARK: t antavat Proverin todistaa todentajalle, että hänellä on ratkaisu W ongelmaan F jaetuilla / tunnetuilla tuloilla X paljastamatta W: tä.
Ratkaisun löytäminen ongelmaan voi vaatia valtavan määrän laskentatehoa ja muistia.
Todentaja voi siis periaatteessa olla 100% varma siitä, että Prover on toiminut kunnolla (ja löytänyt ratkaisun), tekemättä itse työtä uudelleen tarkistamaan ratkaisua tai tietämättä ratkaisua lainkaan. Se on taikaa!
Prosessissa on 3 vaihetta:
- SETUP - Ongelma F (joka on ilmaistava neliöllisenä aritmeettisena ohjelmana, katso alla) valmistellaan SNARKeille. Tämä prosessi on erittäin korkea muisti ja laskenta on intensiivistä ongelman monimutkaisuudesta riippuen (→ Syöttöjen ja rajoitusten määrä → Rajoitusten tyytyväisyysongelman matriisin ulottuvuus). Kaikkien osapuolten on luotettava soittimeen, joka suorittaa asennuksen (voi olla itse todentaja), koska asennuksen lähtöä käytetään seuraavissa vaiheissa. Asennus tehdään yleensä libsnark, C ++ -kirjasto, joka on zkSNARKsin suosituin toteutus.
- TODISTAMINEN - Prover, jolla on ratkaisu W ongelmaan F jaetuilla tuloilla X (ehkä hän käytti valtavasti CPU: ta ja muistia sen löytämiseen!), Käyttää libsnark ja Perustaa vaihe luoda todiste 𝚷. Tämä prosessi on ehdottomasti paljon muistia ja vaativa laskenta (ongelman monimutkaisuudesta riippuen, kuten yllä). Tuloksen koko (eli todiste 𝚷) on sen sijaan ytimekäs ja vakio riippumatta ongelman monimutkaisuudesta. Proverin on luotettava siihen, kuka on suorittanut asennusvaiheen, koska hän käyttää sen tulosta…
- TARKASTUS - Todentaja - antaa tuloksi asennusvaiheen lähdön, jaetut tulot X ja todistuksen 𝚷 - tarkistaa todistuksen. Jos vahvistus onnistuu, Prover onnistui todentamaan todentajalle löytäneensä ratkaisun W ongelmaan F… paljastamatta W: tä! Kiva osa on, että todistus ei ole pelkästään ytimekäs ja sillä on aina sama pituus .., vahvistusprosessi on nopea eikä lainkaan muistia / tietojenkäsittelyä vaativa. Toisin kuin kahdessa edellisessä vaiheessa ... tarkistus voidaan tehdä helposti älypuhelimella millisekunneissa!
Hyvä yhteenveto (lähde):
Kuinka tämä voi tapahtua? No, se on Merlinin taikuutta! Jos haluat saada takana olevan matematiikan, aloita täältä.
Kuinka voin muuttaa ohjelmistoni asteikolliseksi aritmeettiseksi ohjelmaksi?
Kuten edellä mainittiin, asennusvaiheen ongelman F on oltava neliöllinen aritmeettinen ohjelma. Pelisäännöt ovat tiukat:
- Ohjelmiston syötteiden tulee olla numeroita. Muunna tavarasi (taulukot, merkkijonot jne.) Numeroiksi. Se on triviaalia.
- "Neliöllisesti rajoitettu yhtälöjärjestelmä" tarkoittaa:
missä x on syötteidesi n-ulotteinen vektori, m on rajoitusten määrä (ts. järjestelmän yhtälöiden lukumäärä), C on n-kerrallaan kerroinmatriisi ja q on n-ulotteisten kertoimien vektori. Jos et pidä matriisista ja vektoreista, tässä on n = 3 ja m = 2 tapaus (3 tuloa, 2 rajoitusta):
- Toteutus on aritmeettinen piiri, mikä tarkoittaa, että lopputulos on Ongelma ratkaistu (järjestelmä on ratkaistu, ts. kaikki polynomit ovat yhtä suuria kuin 0) tai Ongelma ei ratkennut (kaikki muut tapaukset). Toisin sanoen: "nämä syötteet eivät ole / eivät ole ratkaisuja tähän ongelmaan".
- C₁, C₂,…, C𝚖, q₁, q₂,…, q𝚖 kertoimet ovat järjestelmän rajoituksia. Tämä määrittelee ohjelmistosi periaatteessa. Vaihda ne ... ja saat toisen ohjelmiston! Palaa SNARKien toimintaan: C₁, C₂,…, C𝚖, q₁, q₂,…, q𝚖 ovat asetusvaiheen tulo. Asennusvaiheen lähtö (jota tarvitset todentamiseen ja tarkistamiseen) liittyy siten tiukasti niihin C₁, C₂,…, C𝚖, q₁, q₂,…, q𝚖 ja toimii vain kyseisen ongelman yhteydessä. Jos muutat niitä, määrität toisen ohjelmiston / ongelman ja sinun on suoritettava asennusvaihe uudelleen! x₁, x₂,…, x𝗇 ovat muuttujia (ts. mitä sinun on arvattava saadaksesi järjestelmän ratkaisun). Joten kun sanomme "Hyvä Prover, voisitko löytää salaisen ratkaisun W ongelmaan F jaetuilla / julkisilla sisääntuloilla X", tarkoitamme esimerkiksi "Hyvä Prover, löytyykö järjestelmän ratkaisevat x₁, x₂,…, x𝗇 arvot esimerkiksi x₇ = 2393, x₅₂₆ = 5647? " Voit tehdä mitä haluat kaikilla x𝗇: llä, paitsi x₇ ja x₅₂₆, jotka on rajoitettu jaettuihin / julkisiin syötteisiin.
Se on kova elämä, mutta voit selviytyä ... Jos tarvitset silmukoita, voit avata ne toistamalla saman toiminnan useita kertoja. Tai jos tarvitset esimerkiksi x₁⁴ x₂⁵, määrität uuden syötteen x₃ = x₁⁴ x₂⁵ ja käytät x₃: tä rajoituksissasi. Kyse on muuttujien ja rajoitusten lisäämisestä ... Jopa melko yksinkertaisilla ohjelmistoilla on helppo saavuttaa satoja miljoonia tai miljardeja panoksia ja rajoituksia!
Haluatko tietää enemmän? Lukea tätä. Ja tutustu myös tähän perusasetukseen code_to_r1cs.py ethereumista / tutkimuksesta.
Mikä on Merklen puu?
Hajautusfunktio on sääntö, joka kartoittaa mielivaltaisen kokoisen syötteen kiinteän koon tulokseen. Voisimme keksiä melko hyödytön hash-toiminto "Yhdistä kaksi ensimmäistä kahdella viimeisellä kirjaimella", joka muuttaa "Woody Allenin" "Woeniksi" ja "Paul McCartneyn" "Paeyiksi".
Merkle-puu on tietorakenne, jossa jokainen vanhempi on kahden poikansa hash. Yläosassa on juuri, joka on tason 1 kahden pojan hash. Alareunassa jokainen lehti on ulkoisen syötteen hash.
Sanakirjaamme "Woody Allen" → "Woen" käyttämällä hash-toimintoa:
Kun lehti muuttuu, muunnos levitetään juuri. Jos ANTHONY muuttuu, muuttuu myös ANNY (lehti), CENY ja CECO (juuri). Kumpi lehti muuttuu, juuri myös muuttuu.
Sinun ei tarvitse koko puuta laskea juuri. Esimerkissämme, jos ANTHONY muuttuu ja tiedät sekä JACOn että CECILYn, voit helposti laskea juuren uudelleen, vaikka sivuutat täysin JAMESin, MARCOn, JAESin ja MACOn. Suurille puille tämä säästää paljon aikaa!
Niin mitä?
Merkle-puut soveltuvat erinomaisesti tietojen eheyden tarkistamiseen. Yleensä: tiedät mikä on kelvollinen juuri, ja tarkistat, että vastaanotetut tiedot vastaavat kyseistä juurta. Esimerkiksi: luotettu osapuoli, joka ei voi antaa sinulle koko tietojoukkoa maan päällä olevien ihmisten etunimistä (ei aikaa, ei kaistanleveyttä tai ehkä hänellä ei ole tietoja lainkaan) antaa sinulle vain juuren (esim. ”CECO”). Jälkiasennukset: tuhannet epäluotettavat osapuolet saavat miljoonia etunimiä lehdenumeroon viitaten. No, koska sinulla on oikea juuri, voit tarkistaa keneen voit luottaa, kuka antaa sinulle väärennettyjä tietoja…
Merkle-puut ovat myös osa elämääsi! Kun lataat 3 Gt: n Torrent-tiedostoa, tiedosto jaetaan miljooniin pieniin paloihin. Jokaisen palan tiiviste varastoidaan lehteen. Koska tiedät mikä on kelvollinen puun juuri, voit aina tarkistaa, onko se oikea, kun joku saa osan tiedostosta. Jos se ei ole, voit pyytää saman palan jollekin muulle.
Voit tehdä sen, vaikka et olisi vielä ladannut koko puuta / kaikkia lehtiä: jos tiedät, että juuri on CECO ja luotat JACOon ... kun saat palan ANTHONY, voit tarkistaa sen, vaikka et olisi ladannut vielä palat MARCO ja JAMES.
Miksi Merkle-puista on hyötyä hajautetussa kirjanpitotekniikassa, on suoraviivaista: konsensusprotokollia (hitaita, kalliita) käytetään vain päästäkseen yksimielisyyteen juuresta. Tällöin verkon epäluotettavat solmut voivat jakaa dataa tehokkaasti ja suoraan… ja voivat nukkua turvallisesti ja luotettavasti juuren eheystarkastusten ansiosta.
Kun Jumala pyysi Ethereumia valitsemaan kaksi supervoimaa turvallisuuden, skaalautuvuuden ja hajauttamisen joukosta… Ethereum uhrasi skaalautuvuuden. Oikeastaan "transaktioita sekunnissa" ei ole vahvaa ylärajaa: yläraja koskee kunkin lohkon kaasumäärää - mikä yksinkertaistaa toimintojen määrää, jonka voin tehdä kussakin lohkossa. Tämä raja on 2 miljoonaa kaasua. Tämä voi tarkoittaa monia "pieniä" tapahtumia (ei tapahtumiin liitettyjä tietoja, ei kyseisille tiedoille suoritettavia toimintoja) tai muutamia suuria tapahtumia. Se on Ethereumin solmujen, jotka lähettävät tapahtumia, ja Ethereumin kaivostyöläisten, jotka sisällyttävät lohkoon maksut, jotka maksavat enemmän.
Lohko louhitaan joka ~ 15 sekuntia. Tämä tarkoittaa ~ 32 miljoonaa kaasua minuutissa, mikä ei todellakaan riitä, jos haluamme Ethereumin dappien kulkevan valtavirtaan.
Muuten: lopeta noihin ikäviin vertailuihin Ethereumin ja Visan välillä. Keskitetty järjestelmä tulee aina olla nopeampi kuin Ethereum ... suunnittelun perusteella! He tekevät erilaisia juttuja ja tarvitset niitä eri tilanteissa. Jos et tarvitse hajauttamista ja luottamuksellista ympäristöä ... tietysti sinun tulisi valita Visa. Lyhyesti: se, että tehosekoitin pyörii nopeammin kuin pesukoneesi, ei tarkoita, että puhdistat housusi tehosekoittimessa!
Laitetaan palapeli yhteen! Kuvittele, että SNARKien ansiosta voit "pakata" monia pieniä tapahtumia yhdeksi suureksi tapahtumaksi. Jos tämän suuren tapahtuman käyttämä kaasu on pienempi kuin pienien tapahtumien kuluttaman kaasun summa, se tarkoittaa, että säästät kaasua.
Ja polttoaineen säästäminen tarkoittaa:
- Käyttäjät käyttävät vähemmän tapahtumiin → Tämä olisi työntö koko ekosysteemille
- Mahdollisuus laittaa enemmän tavaraa lohkoon → Ethereum pyörii nopeammin kuin tehosekoitin!
Miten tämä toimii?
On käyttäjiä, välittäjä (tai useampi välittäjä), joka yhdistää tapahtumat ja älykkään sopimuksen.
- Käyttäjät, jotka haluavat pelata tätä peliä, lähettävät eetterinsä (tai rahakkeensa) julkisesti tarkastettuun älykkääseen sopimukseen. Jokaiselle uudelle pelaajalle luodaan uusi lehti Merkle-puuhun. Lehti sisältää tietoja Eetterin omistajasta (hänen osoitteestaan, joka on myös julkinen avain), Eetterin ja nonce-määrän (kyseisen tilin tapahtumalaskuri, joka on 0, kun lehti lisätään)
- Kun A haluaa lähettää Eetterin B: lle (molemmilla on oltava lehti / tili älykkäässä sopimuksessa), A pakkaa tapahtuman, joka sisältää alkaenhuomioon että huomioon nuntiuksen tililtä, määrä siirrettävä Eetteri ja allekirjoitus (tietysti allekirjoitettu “from” -tilin yksityisellä avaimella). Sitten hän lähettää pakatun tapahtuman välittäjälle.
- Relay yhdistää kaikki tietyssä aikaikkunassa (esim. Yksi tunti) vastaanotetut tapahtumat, päivittää Merkle-puun uusilla saldoilla ja luo SNARK-todistuksen, joka osoittaa, että kaikki allekirjoitukset ja uuden Merkle-puun juuri ovat kelvolliset. Välittäjä lähettää lopulta uuden valtion ja todistuksen älykkääseen sopimukseen.
- Älykäs sopimus vahvistaa Proof-ketjun. Jos se on kelvollinen, se tallentaa uuden valtion Merkle-puun juuren sopimuksen sisäiseen muistiin.
Pohjimmiltaan Merkle-puun juuri kuvaa kaikkien tilien koko tilaa. Etkä voi muuttaa sitä (= varastaa rahaa), ellet pysty todistamaan allekirjoitusten oikeellisuutta, joiden tapahtumat johtavat uuteen tilaan, yhteenvetona lähettämästäsi uudesta juuresta.
Lyhyesti: käyttäjillä on erittäin nopeita ja melkein ilmaisia tapahtumia, kuten Coinbasessa, ilman, että heidän tarvitsee luottaa välittäjään, joka ei voi tehdä mitään, toisin kuin Coinbase, ilman allekirjoitustasi.
Se on ei-vapaarahallinen sivuketju, jonka tilan tiivistää Merkle-puun juuri.
Yhdistetään se, mitä olemme oppineet edellä SNARK-tuotteista, siihen, mistä juuri keskustelimme skaalauksesta. On olemassa erilaisia tapoja tehdä se. Vertailen 2 reseptiä: Vitalikin reseptit versio ja barryWhiteHat's versio.
ASETUKSET suorittaa…
Kaveri, joka aloittaa projektin, joka myös luo älykkään sopimuksen. Mitä enemmän se on kuultavissa, sitä parempi. Sinun pitäisi luottaa häneen ... se on a luotettu asennus!
Älykäs sopimus säästää…
2 Merkle-juurta (tavua32-arvot): ensimmäinen puu sisältää tilien osoitteet (julkiset allekirjoitukset), toisen tilin saldot ja nonces
TODISTAMINEN on tehnyt…
Välittäjä
Välittäjä lähettää älykkääseen sopimukseen…
- Uuden valtion 2 Merklen juurta (osoitepuu ja tasapainot + nonces-puu)
- luettelo tapahtumista ilman allekirjoituksia. ”Jokainen tapahtuma maksaa 68 kaasua tavua kohden. Siksi säännöllisen siirron osalta voidaan odottaa, että rajakustannukset ovat 68 * 3 (mistä) + 68 * 3 (mihin) + 68 * 1 (maksu) + 68 * 4 + 4 * 2 (summa) + 68 * 2 (nonce) tai 892 kaasu ”
PROVING-prosessin tunnetut panokset ovat…
- Vanhan valtion Merklen kaksi juurta
- 2 uuden valtion Merkle-juuret
- tapahtumaluettelo
TODISTAMISProsessi osoittaa, että…
Tietty
- 2 vanhan valtion Merkle-juurta (jo tallennettu sopimukseen)
- 2 uuden valtion Merkle-juuret (lähetetty aggressiotapahtumaan)
- tapahtumaluettelo (lähetetty aggressiivisessa tapahtumassa)
… Välittäjällä on kelvolliset allekirjoitukset siirtyäksesi tilasta, jossa on 2 vanhaa juurta, tilaan, jossa on 2 uutta juurta, näiden tapahtumien kanssa.
TARKASTUS tapahtuu…
Älykäs sopimus (koodattu kiinteästi, vyper, kuten haluat!)
TARKISTETTAVAT prosessin tunnetut panokset ovat…
Sama PROVING-prosessin tunnetut panokset, selvästi…!
Skaalautuvuuden rajat
Jokainen yhteenlaskettu tapahtuma käyttää 650 kt kaasua SNARK-todentamiseen (kiinteä kustannus) plus ~ 900 kaasua rajakustannukset tapahtumaa kohti (tietojen lähettäminen maksaa!). Joten koko lohkon avulla relay voi koota enintään:
joka tarkoittaa ~ 544 tx sekunnissa
barryWhiteHat's versio
ASETUKSET suorittaa…
Kaveri, joka aloittaa projektin.
Älykäs sopimus säästää…
1 Merklen juuri nykyisen valtion kanssa. Jokainen lehti on tilin tiivistetty tila.
Haluatko luoda tili?
tila = AccountState (pubkey, saldo, nonce)
state.index = self._tree.append (state.hash ())
TODISTAMINEN on tehnyt…
Välittäjä
Välittäjä lähettää älykkääseen sopimukseen…
- todiste 𝚷
- uuden valtion merklejuuri
- todiste 𝚷
PROVING-prosessin tunnetut panokset ovat…
- vanhan valtion Merklen juuri
- uuden valtion merklejuuri
TODISTAMISProsessi osoittaa, että…
Tietty
- vanha Merklen juuri (jo tallennettu sopimukseen)
- uuden Merklen juuri (senti in aggr. transaktio)
… Välittäjällä on luettelo tapahtumista, joilla on kelvolliset allekirjoitukset siirtyäksesi tilasta, jossa on vanha juuret, tilaan, jossa on uusi juuret
TARKASTUS tapahtuu…
Älykäs sopimus (koodattu kiinteästi, vyper, kuten haluat!)
TARKISTETTAVAT prosessin tunnetut panokset ovat…
Sama PROVING-prosessin tunnetut panokset, selvästi…!
Skaalautuvuuden rajat
Välittäjä ei lähetä tapahtumien tietoja älykkääseen sopimukseen (mikä on kallista), joten raja on itse asiassa kaasumäärä SNARK-todistuksen tarkistamiseksi.
Mainitaan Howard Wu's työ SNARKin PROVING-vaiheen suorittamisesta hajautetuissa järjestelmissä, barryWhiteHat optimistisesti toteaa, että on mahdollista vahvistaa 16666 tapahtumaa valtavassa SNARKissa (miljardi rajoitusta!).
myös barryWhiteHat ajattelee on mahdollista tarkistaa todiste 𝚷 ketjussa 500k kaasulla, mikä tarkoittaa, että voit laittaa 16 SNARKia (8 miljoonaa / 500k) lohkoa kohti, mikä on ~ 1.07 SNARK-sekuntia ... mikä tarkoittaa ~ 17,832 XNUMX tx sekunnissa (16,666 1.07 * XNUMX).
Kohti ääretöntä ja sen yli
- Kaikki, mikä kimaltelee, ei ole kultaa / 1. Proving-vaiheessa tarvitsemasi laskentatehon ja muistin määrä voi olla kirjaimellisesti järkyttävä. Varsinkin barryWhiteHat-versiossa, jossa osa monimutkaisuudesta siirretään ketjun ulkopuolelta. Barry kirjoittaa "Kannettavassa tietokoneessa, jossa on 7 Gt RAM-muistia ja 20 Gt vaihtotilaa, se yrittää koota 20 tapahtumaa sekunnissa". No, jos tavoite on 17,832 XNUMX tx sekunnissa ... LOL. Tämä tuo esiin ei-triviaalisia rinnakkaislaskennan haasteita. Mutta jos keskimääräinen dollarin hinta per tapahtuma on paljon halvempi kuin tavallinen ei-SNARK-vaihtoehto ... peli on kynttilän arvoinen.
- Kaikki, mikä kimaltelee, ei ole kultaa / 2. Tietojen saatavuuteen liittyy asiaankuuluva ongelma! Koska sopimukseen on tallennettu vain puun juuri, sinun on oltava varma, että koko puun versio (tai se on sama, koko tapahtumahistoria) on aina käytettävissä. Jos tietoja ei ole saatavana, välittäjä ei voi tehdä mitään, koska voimassa olevilla allekirjoitetuilla tapahtumilla ei ole todisteita, koska hän ei pysty todistamaan Vanha tila → Tapahtumat → Uusi tila.
- Jotta välittäjä olisi luotettava ja sopimuksen eettereillä olisi sama arvo eettereitä ulkopuolella (likviditeettiongelma)… käyttäjien tulisi voida nostaa rahaa älykkäästä sopimuksesta milloin haluavat luottamatta (tiettyyn) välittäjään. Miten? Tämä ei kuulu tämän 101 viestin piiriin, mutta voit lukea siitä oheisista linkeistä.
- Haluatko tietää enemmän siitä, miten nykyinen tila (osoitteet, saldot ja ei-valtiot) voidaan käsitellä Merkle-puulla? Lisätäänkö lehti, päivitetäänkö lehti jne.? Tarkista tämä kirjasto (testitiedosto tätä), joka käyttää tätä kohde-etuutta moduuli. Kiitos HarryR!
- Haluatko määrittää henkilökohtaisen Ethereum-SNARKs -ympäristön? Aloitetaan ketjun ulkopuolella C ++: lla (määritys, todentaminen, vahvistaminen) tätä. Sitten voit siirtyä Ethereumiin (älä unohda, vain vahvistus tehdään ketjussa!) Zokratesin (repo, The aloitusopas).
- Entä käyttää RSA-akkuja Merklen puiden sijaan? Google "Rsa-akut ethereum" aloittaa…
Enjoy!
Twitter @marco_derossi
- 7
- Tili
- Kaikki
- keskuudessa
- saatavuus
- Perusasiat
- Miljardi
- tapauksissa
- muuttaa
- Tarkastukset
- coinbase
- tietojenkäsittely
- Yhteisymmärrys
- sopimus
- kustannukset
- Nykyinen
- Nykyinen tila
- DApps
- tiedot
- tietojoukko
- hajauttaminen
- Ulottuvuus
- Distributed Ledger
- hajautetun kirjanpidon tekniikka
- ympäristö
- Eetteri
- ethereum
- EU
- EV
- väärennös
- Vihdoin
- Etunimi
- Ilmainen
- toiminto
- peli
- GAS
- GitHub
- Antaminen
- Kulta
- hyvä
- suuri
- ohjaavat
- hasis
- tätä
- Korkea
- historia
- Miten
- hr
- HTTPS
- valtava
- Sadat
- ia
- indeksi
- tiedot
- IP
- IT
- Job
- avain
- kannettava tietokone
- suuri
- johtaa
- pääkirja
- Taso
- LG
- Kirjasto
- likviditeetti
- Lista
- Valtavirta
- Kartat
- keskikokoinen
- miljoona
- kaivostyöläisten
- raha
- kk
- Suosituin
- liikkua
- nimet
- verkko
- solmut
- numerot
- Operations
- tilata
- Muut
- omistaja
- Maksaa
- Ihmiset
- soitin
- Suosittu
- teho
- yksityinen
- yksityinen avain
- Ohjelma
- projekti
- todiste
- osoittautuu
- julkinen
- julkinen avain
- kertaus
- rsa
- säännöt
- juoksu
- turvallista
- tallentaa
- skaalautuvuus
- Asteikko
- skaalaus
- tiede
- turvallisuus
- setti
- Jaa:
- yhteinen
- Lyhyt
- Yksinkertainen
- Koko
- nukkua
- fiksu
- älykäs sopimus
- älypuhelin
- So
- Tuotteemme
- kiinteys
- Ratkaisumme
- SOLVE
- Tila
- menot
- Alkaa
- alkoi
- Osavaltio
- Valtiot
- onnistunut
- järjestelmä
- järjestelmät
- Elektroniikka
- testi
- aika
- tokens
- ylin
- ryöppy
- kauppa
- Liiketoimet
- Luottamus
- Päivitykset
- Käyttäjät
- arvo
- Vahvistus
- Visa
- W
- KUKA
- sanoja
- Referenssit
- toimii
- arvoinen
- X