Kā soli pa solim izveidot pielāgojamus dApps un viedos līgumus Ethereum ar State Channels. 1. daļa

Ir daudz dažādu risinājumu, lai izveidotu decentralizētas lietojumprogrammas, kuru mērogs ir tūkstošiem vai pat miljoniem reālā laika lietotāju, piemēram, plazmas un valsts kanāli. Šajā ceļvedī jūs soli pa solim uzzināsit, kā darbojas valsts kanāli un kā šobrīd Ethereum var izveidot mērogojamas lietojumprogrammas.

Jums nav jāgaida turpmākie uzlabojumi blokķēdē. Tehnoloģija ir palikusi šeit, un jūs to varat izmantot, lai izveidotu visu veidu dApp. Pašlaik valsts kanāli galvenokārt tiek izmantoti bloķēšanas ķēdes balstītām spēlēm Ethereum.

Padomājiet azartspēles ar kriptovalūtām. Ir veidi, kā šifrēt informāciju, lai vēlāk to atklātu, kas ir šīs sistēmas galvenais punkts.

Kas ir valsts kanāli?

Tas ir mērogošanas risinājums, lai izveidotu decentralizētas lietojumprogrammas un viedos līgumus, ko gandrīz reāllaikā var izmantot miljoniem lietotāju. Viņi darbojas, uzsākot kanālu starp 2 vai vairāk lietotājiem, kurā viņi apmainās ar šifrētiem, parakstītiem ziņojumiem ar informāciju par darījumu, kuru viņi vēlas izpildīt.

Tos sauc par “stāvokli”, jo katrai mijiedarbībai ir jābūt stāvoklim, ko var atjaunināt. Padomājiet par spēles rezultātu vai bankas bilanci.

Kāpēc viņi pastāv?

Valsts kanāli tika izveidoti, jo ethereum lietojumprogrammu popularitāte ātri pieauga, padarot blokķēdi nelietojamu, jo tā tika izstrādāta ar mērenu izmantošanu. Tie ļauj veikt nepārtrauktus darījumus, nemaksājot par gāzi vai negaidot, kamēr ogļrači apstrādās darījumus.

Kas nozīmē bezmaksas un ātrus darījumus.

Kas mums ir nepieciešams, lai izveidotu valsts kanālu?

  1. Vismaz 2 lietotāji, kas mijiedarbosies viens ar otru. Kanāls ir jāatver starp 2 vai vairāk lietotājiem. Līdzīgi kā tērzēšanas lietojumprogrammai.
  2. Gudrs līgums ar valsts kanāla loģiku, kas to atvērs un aizvērs.
  3. Ja štata kanāls tiks izmantots spēlē, abiem lietotājiem būs nepieciešams darījums. Šis darījums ēterī tiks saglabāts viedajā līgumā, atverot kanālu.
  4. Javascript lietojumprogramma, kas ģenerēs parakstītos ziņojumus, ar kuriem lietotāji apmainīsies bez ķēdes.
  5. Metamaska ​​vai līdzīgs rīks ziņojumu parakstīšanai. Ziņojumu parakstīšana nemaksā par gāzi, un tie tiek izpildīti uzreiz. Abiem lietotājiem ir jāparaksta ziņojumi, lai garantētu, ka tieši Tehy ir tie, kas rada šādu darījumu.
  6. E-pasts vai jebkura cita ārēja lietojumprogramma, lai apmainītos ar parakstītajiem ziņojumiem, lai šī lietojumprogramma būtu iespējama.

Kā viņi strādā?

Valsts kanāla uzstādīšana ir nedaudz sarežģīta, jo jums jāpārliecinās, ka abi spēlētāji tiek aizsargāti gadījumā, ja kaut kas noiet greizi, tāpēc mums ir vajadzīgs pārdomāts līgums. Šie ir soļi:

  1. Valsts kanālā starp 2 lietotājiem pirmais izvieto viedo līgumu, kas “atvērs” kanālu.
  2. Otrais izpilda šī viedā līguma funkciju, lai “pievienotos” šim valsts kanālam ”
  3. Tad viņi var sākt apmainīties ar parakstītajiem ziņojumiem par lietojumprogrammu. Abiem lietotājiem ir piekļuve pielāgotajai javascript lietojumprogrammai, lai ģenerētu ziņojumus ar informāciju, ko viņi darītu viedā līgumā, bet bez ķēdes.
  4. Darījumu ātrums ir atkarīgs no tā, cik ātri katrs lietotājs var izveidot un parakstīt šos ziņojumus. Viņi turpina apmainīties ar ziņojumiem, spēlējot ķēdi, līdz nolemj, ka spēle ir beigusies.
  5. Kad viņi pabeidz spēli, jebkurš no viņiem var doties uz viedo līgumu un izpildīt to, lai sāktu “sarunu” fāzi.
  6. Šajā posmā abiem lietotājiem ir vienas dienas noildze, lai augšupielādētu pēdējos 2 ziņojumus, kas viņiem ir viedā līguma noslēgšanai. Gudrais līgums pārbauda jaunākos ziņojumus un, pamatojoties uz šo informāciju, atbrīvo līdzekļus, lai pabeigtu spēli. Katrā ziņojumā ir iepriekšējo mijiedarbību rezultāti, tāpēc ir droši pārbaudīt tikai jaunākos.

Kā jūs to varat izmantot reālās situācijas apstākļos?

Šajā ceļvedī es jums parādīšu, kā izveidot valsts kanālu starp 2 lietotājiem Ethereum spēlei. Atcerieties, ka stāvokļa kanālus var izmantot jebkura veida lietojumprogrammām, kurām ir “stāvoklis” vai skaitītājs. Tāpēc spēles ir ideālas. Tā kā jūs varat izsekot, kurš uzvar katrā spēlē, katrai spēlei ir noteikts stāvoklis, kuru var atjaunināt.

Mēs izveidosim kauliņu spēli, kurā 1. spēlētājs izvēlas nogriezto kauliņu skaitu, un 2. spēlētājam ir jāuzmin šis skaitlis, lai uzvarētu. Viņi varēs spēlēt tik daudz spēles, cik vēlas, neveicot darījumus blokķēdē. Mums būs arī tīmekļa lietotne, kas parādīs interfeisu.

Šis ir indekss, kuru mēs sekosim, lai izveidotu šādu decentralizētu lietojumprogrammu:

  1. Vizuālās tīmekļa lietotnes izveidošana. Šī ir saskarne, kā spēle izskatīsies ārējiem lietotājiem. Tas tiks izmantots kā līdzeklis, lai apmainītos ar parakstītiem ziņojumiem par valsts kanāliem.
  2. Ziņu parakstīšanai un šifrēšanai nepieciešamo funkcionalitāšu izveidošana.
  3. Viedā līguma izveidošana.

1. Vizuālās tīmekļa lietotnes izveidošana

Pirms sākt pat ar kodu, es vēlētos pārliecināties, ka mēs esam noskaidrojuši pilnīgu tīmekļa lietotnes informāciju. Kā tas izskatīsies, kam tiek pievērsta galvenā uzmanība.

Šajā gadījumā mēs vēlamies parādīt līdzīgas lietas abiem spēlētājiem. 1. spēlētājs redzēs 6 kauliņu sejas kā attēlus un viņam būs jāizvēlas, kurš no tiem iznāks, tad otrajam spēlētājam arī būs jāizvēlas starp šīm sejām, un viņš varēs redzēt rezultātu.

Tātad ietvars būs kaut kas līdzīgs šim:

  1. 1. spēlētājs dodas uz tīmekļa lietotni, noklikšķina uz pogas, kas saka “Sākt jaunu spēli”, pēc tam veic metamaskas darījumu, lai izvietotu un iestatītu viedo līgumu. Viņš saņem viedo līguma adresi, kuru viņš var nosūtīt otram spēlētājam, lai sāktu spēli.
  2. 2. spēlētājs dodas uz tīmekļa lietotni, noklikšķina uz pogas, kas saka “Pievienojies esošajai spēlei” ar līguma adresi, kas saņemta no 1. spēlētāja, tad viņš veic metamaskas darījumu, lai iestatītu jau esošo spēli, un nosūta darījuma kontu.

Sāksim turpat. Izveidosim lodziņu tīmekļa lietotnes vidū ar 2 pogām. Izveidojiet mapi ar kauliņu un failu, kuras nosaukums ir index.html. Šis ir kods:

Šādi pēc noklusējuma izskatās 2 pogas


    
        
         Dice ethereum spēle 
    
    
        
                                  
    

Šajā kodā es tikko izveidoju HTML pamata struktūru ar div, kurā ir pogas un nosaukums. Ņemiet vērā, ka div ir klase, ko sauc par galveno saturu un kuru mēs pēc brīža izmantosim.

Padarīsim to glītāku ar kādu css. Izveidojiet failu ar nosaukumu index.css ar šādu kodu (varat to nokopēt un ielīmēt):

Lūk, kā tas izskatīsies
ķermeņa {
    fontu saime: sans-serif;
}
.main-content {
    rezerve: auto;
    maksimālais platums: 500 pikseļi;
    fona krāsa: balta krāsa;
    polsterējums: 50 pikseļi;
    apmales rādiuss: 10 pikseļi;
    displejs: režģis;
    režģa-veidnes-rindas: 1fr 1fr;
    režģa-veidnes-kolonnas: 1fr 1fr;
    režģa-kolonnas sprauga: 10 pikseļi;
}
.main-content h1 {
    režģa kolonna: 1 / laidums 2;
}
.main-satura poga {
    robeža: nav;
    krāsa: balta;
    fona krāsa: # 007dff;
    polsterējums: 20 pikseļi;
    apmales rādiuss: 5 pikseļi;
    kursors: rādītājs;
}
.main-satura poga: virziet kursoru {
    necaurredzamība: 0,8;
}
.main-satura poga: aktīva {
    necaurredzamība: 0,6;
}

Es html pievienoju h1 virsrakstu, lai tas izskatās labāk, noteikti atjauniniet html, pievienojot saiti css:



    
        
        
         Dice ethereum spēle 
    
    
        
            

Ethereum Dice

                                  
    

Jūs, iespējams, pamanījāt, ka es izmantoju jauno CSS režģi. Tas ir tāpēc, ka lielākoties tas ir pieejams lielajiem pārlūkiem, tāpēc to ir diezgan droši lietot, jo vairums cilvēku pareizi redzēs css.

Es izlēmu, ka labākais veids, kā parādīt nākamo no lietotāja pieprasīto darbību, ir parādīt div javascript ar nepieciešamo informāciju. Tātad, kad viņš noklikšķina uz “Sākt jaunu spēli”, viņš redzēs rūtiņu, kurā vaicās, cik lielu darījuma summu viņš vēlas izveidot šai spēlei.

Kad viņš noklikšķina uz “Pievienoties esošajai spēlei”, viņam tiks lūgts norādīt esošās spēles darījuma kontu un līguma adresi.

Lūk, kā reaģēs pogas darbības:

Kā lietotne izskatās ar vienkāršu javascript

Lai tas būtu iespējams, es izveidoju index.js failu ar zināmu javascript loģiku. Šis ir javascript. Noteikti ierakstiet to ar rokām, ja vēlaties uzzināt labāk:

Ļaujiet man paskaidrot, ko es tur izdarīju:

  • Vispirms es izveidoju funkciju ar nosaukumu start (), kas tiks nekavējoties izpildīta, lai iesaiņotu saturu, lai tas būtu jauks un ietverts vienā lielā funkcijā.
  • Tad es izveidoju 2 notikumu klausītājus, kas tiek aktivizēti ikreiz, kad es html failā noklikšķinu uz sākuma vai pievienošanās pogām. Viena pogai # jauna spēle un otra pogai # pievienoties spēlei. Es izmantoju document.querySelector (), kas ir viens no visspēcīgākajiem veidiem, kā atlasīt jebko savā js kodā.
  • Šajos klausītājos es parādu vai paslēpju katra atbilstošā elementa div lodziņu. Pamatā atlasot rūtiņu ar querySelector un noņemot vai pievienojot slēpto klasi, kas ir iestatīta CSS, lai parādītu: nav; .

Tad mēs varam savienot js failu ar modifie index.html:



    
        
        
         Dice ethereum spēle 
    
    
        
            

Ethereum Dice

                         
            
                

Cik lielu darījuma summu jūs izmantosit ETH?

                             
            
                

Kāda ir esošās spēles viedā līguma adrese?

                             
             Turpināt 
        
         
    

Es treknrakstā pievienoja jaunos koda gabalus. Tālāk ir atjaunināta CSS, lai veidotu jauno informāciju:

ķermeņa {
    fontu saime: sans-serif;
}
.slēpts {
    displejs: nav;
}
.main-content {
    rezerve: auto;
    maksimālais platums: 500 pikseļi;
    fona krāsa: balta krāsa;
    polsterējums: 50 pikseļi;
    apmales rādiuss: 10 pikseļi;
    displejs: režģis;
    režģa veidņu rindas: 1fr 80 pikseļi automātiska;
    režģa-veidnes-kolonnas: 1fr 1fr;
    režģa-kolonnas sprauga: 10 pikseļi;
}
.main-content h1 {
    režģa kolonna: 1 / laidums 2;
}
.main-satura poga {
    robeža: nav;
    krāsa: balta;
    fona krāsa: # 007dff;
    polsterējums: 20 pikseļi;
    apmales rādiuss: 5 pikseļi;
    kursors: rādītājs;
}
.main-satura poga: virziet kursoru {
    necaurredzamība: 0,8;
}
.main-satura poga: aktīva {
    necaurredzamība: 0,6;
}
.main-satura poga: atspējota {
    necaurredzamība: 0,5;
    fona krāsa: pelēka;
    kursors: auto;
}
.main-satura ievade {
    platums: 100%;
    apmales rādiuss: 10 pikseļi;
    polsterējums: 10 pikseļi;
    apmale: 1px cieta gaiši pelēka;
}
.main-content div.new-game-setup, .main-content div.join-game-setup {
    režģa kolonna: 1 / laidums 2;
}
# poga-turpināt {
    režģa kolonna: 1 / laidums 2;
    augšējā robeža: 20 pikseļi;
}

Poga “Turpināt” šobrīd neko nedara, tāpēc izveidosim šo funkcionalitāti, lai ieviestu jaunu viedo līgumu un atvērtu valsts kanālu, kad lietotājs nākamajā sadaļā vēlas izveidot jaunu spēli.

2. Sākotnējā viedā līguma izveidošana un savienošana

Ir pienācis laiks izveidot viedā līguma pamata versiju un savienot to ar savu javascript, izmantojot web3.js. Pagaidām mums ir nepieciešams tikai konstruktors un dažas pamatinformācijas. Ar savām rokām pierakstiet šo kodu jaunā failā ar nosaukumu Dice.sol:

pragmas cietība 0,4,25;
līguma kauliņš {
    uzrunāt publisko spēlētāju1;
    uzrunāt publisko spēlētāju2;
    uint256 public player1Ecrow;
    uint256 public player2Esrow;
    būvnieks () publiski maksājams {
        pieprasīt (msg.vērtība> 0);
        player1 = msg.sender;
        player1Escrow = msg.vērtība;
    }
    funkcija setupPlayer2 () publiski maksājama {
        pieprasīt (msg.vērtība> 0);
        player2 = msg.sender;
        player2Escrow = msg.vērtība;
    }
}

Ir 2 funkcijas: konstruktors pirmā atskaņotāja adreses un darījuma iestatīšanai un funkcija setupPlayer2 (), lai iestatītu otrā atskaņotāja informāciju.

Mēs vēlamies izvietot līgumu un izpildīt konstruktoru ar norādīto msg.value tiesības, kad lietotājs noklikšķina uz pogas “Turpināt”. Lai to izdarītu, mūsu viedajā līgumā būs jāievieš web3.js. Tā kā tas ir galvenais veids, kā sazināties ar blokķēdi pārlūkā.

Iegūstiet web3.js savas lietotnes mapē no šejienes: https://github.com/ethereum/web3.js/blob/develop/dist/web3.js, kas ir oficiālais atjaunināšanas izplatīšanas kods.

Lai lejupielādētu to savam projektam, dodieties uz šo saiti, noklikšķiniet uz neapstrādāts, lai redzētu pilnu kodu, un nokopējiet kodu, lai ielīmētu to jaunā failā ar nosaukumu web3.js projekta mapē:

Atveriet lapu, noklikšķiniet uz “raw”, atlasiet visas ar taustiņu kombināciju ctrl + a, nokopējiet kodu un ielīmējiet to jaunā failā jūsu projektā ar nosaukumu web3.js

Tas tiešām nav jādara, ja izmantojat metamasku, jo metamaska ​​jums ievada web3.js versiju, taču ir noderīgi, ja jūsu projektā ir Web3 bibliotēka, kas mijiedarbojas ar blokķēdi, ja metamaska ​​nav pieejama.

Mēs izmantojam metamasku, lai runātu ar blokķēdi. Atverot index.html failu pārlūkprogrammā, tas nedarbojas, jo faila: // paplašinājums netiek atbalstīts metamaskā.

Pēc tam mums jāpalaiž vietējais serveris, kas failus apkalpos URL: http: // localhost: 8080, jo metamasks nedarbojas, kad tieši atverat index.html failu. Lai to izdarītu, atveriet termināli un instalējiet šo:

npm i -g http-serveris

Pēc tam projekta mapē izpildiet http-serveri, lai jūsu index.html sāktu vietējo serveri:

http-serveris

Tas kalpos failiem localhost: 8080, lai jūs tiem varētu piekļūt un no metamaskas ievadīt Web3.

Ja tas nav iespējams, ļaujiet koncentrēties uz līguma, ko tikko izveidojām no mūsu tīmekļa lietotnes, izvietošanu tieši tad, kad lietotājs noklikšķina uz “Turpināt”.

Lai ieviestu jaunu līgumu, mums ir nepieciešams ABI, konstruktora parametri un baitkods. Šīs ir prasības vietnei web3.js.

  1. Lai ģenerētu ABI, dodieties uz remix.ethereum.org, galvenajā sadaļā ielīmējiet kodu un noklikšķiniet uz ABI:

Tas nokopēs ABI kodu. Dodieties uz sava projekta mapi un izveidojiet failu ar nosaukumu lepingData.js, lai ielīmētu kodu tur ar mainīgo ar nosaukumu abi, piemēram:

2. Tagad mums ir nepieciešams jūsu viedā līguma bytekods. Baitkods ir apkopots viedais līgums, kas tiks izvietots blokķēdē, mums ir nepieciešama šī informācija, lai mēs varētu to izvietot. Lai iegūtu bytecodu, vajadzēja vēlreiz remiksēt un noklikšķināt uz šīs pogas:

Tava koda baitu koda kopēšanas poga

Un izveidojiet vēl vienu mainīgo līgumāData.js, ko sauc par bytecode ar šādu informāciju:

Jūs varat nokopēt to pašu kodu, ja jūsu viedais līgums ir tieši tāds pats, kādu izveidoju iepriekš.

Importējiet šo javascript failu html pirms faila index.js, lai būtu pieejami abi un baitu kodu mainīgie:

 
 

Pirms līguma slēgšanas ar javascript mums jāpievieno pasākuma klausītājs sadaļā “Sākt jaunu spēli” turpināšanas pogai:

Tas, ko es tur izdarīju, ir:

  • Ievadei pievienoju ID ID, kur lietotājam tiek jautāts, cik daudz ētera viņš vēlas ievietot darījumā, un līguma adresi, ja viņš pievienojas esošai spēlei.
  • Pēc tam virs index.js es pievienoju javascript importēšanu , jo mēs vēlamies, lai abi un bytecode būtu pieejami index.js iekšpusē, jo tas vispirms ir jāimportē.

Tad mēs pievienojam nepieciešamo loģiku, lai šī poga darbotos. Mēs pārbaudīsim, vai līguma adreses HTML ievade ir tukša vai nē.

Ja tā nav tukša, mēs pieņemsim, ka spēlētājs sāk jaunu spēli, kas interesanti ļauj sākt spēli, izmantojot pievienošanās pogu, ja atstājat adresi tukšu.

Pirms es parādīšu visu kodu, es vēlos jums paskaidrot, kā izvietot līgumu, izmantojot web3.js. Tas izskatās vienkārši, bet es iestrēdzu dažās jomās.

Tātad, kad lietotājs noklikšķina uz “Sākt jaunu spēli”, viņš dod mums darījuma summu ēterī un viņa adresi, mēs varam izvietot jaunu līgumu ar šo funkciju:

Būtībā jūs izveidojat līguma gadījumu ar abi un jūs izpildāt metodi .new () šim līgumam ar baitskodu.

Pēc tam, atzvanot, tiek parādīta kļūda, ja tāda ir, un tiek parādīts objekts. Rezultāta objektā būs līguma adrese, kas izvietota, kad darījumu apstrādā kalnračiem.

Kas nozīmē, ka šis atzvans tiks izpildīts 2 reizes. Vienu, kad izpildāt līguma izveidi, un otru, kad ir pieejama šī līguma adrese.

Varat pārbaudīt, kad līguma adrese ir pieejama, izmantojot vienkāršu paziņojumu:

if (! rezultāts.adrese) {
    // Ir sākusies līguma izveidošana
} cits {
    // Līgums ir ieviests, un jūs varat izmantot adresi ar rezultātu.adrese
}

Tas ir, kā jūs izvēlaties līgumu ar web3.

Bet ko tad, ja vēlaties piekļūt esošajam līgumam par “blockchain”?

Tas ir tieši tas, kas mums nepieciešams, lai “pievienotos” kauliņu spēlei, lai izveidotu līguma gadījumu. Šim nolūkam mums ir nepieciešams tikai ABI un līguma adrese, baitkods nav nepieciešams. Lūk, kā jūs to darāt web3:

Līgums = web3.eth.contract (abi)
contractInstance = Contract.at (addressSelected)

Pēc tam jūs varat izpildīt šī līguma funkcijas šādi:

contractInstance.setupPlayer2 ({
  vērtība: web3.toWei (valueSelected),
  gāze: 4e6
}, (kļūda, rezultāts) => {
    // Dariet kaut ko pēc funkcijas izpildes
})

Jums nepieciešams tikai piemērs, funkcijas nosaukums, parametri, ja tādi ir, un atzvanīšanas funkcija.

Tagad, kad jūs saprotat, kā viedā līguma ieviešana un ieviešana darbojas ar javascript, es jums parādīšu pilnu lietojumprogrammas kodu:

Ignorējiet visu iepriekš minēto, un tas, kas jums jākoncentrē, atrodas klausītāja # pogas turpināšanas blokā:

document.querySelector ('poga-turpinājums'). addEventListener ()

Tā kā jums ir jārūpējas tikai par to, kas notiek, kad 1. vai 2. spēlētājs noklikšķina uz pogas “Turpināt”. Šis sadalījums:

  • Kad kāds spēlētājs noklikšķina uz šīs pogas, šī notikuma klausītājs tiek izpildīts
  • Iekšpusē es iegūstu vērtības, kas vajadzīgas darījuma iestatīšanai, un izmantotā līguma adresi, ja spēlētājs pievienojas esošai spēlei. Tie ir mainīgie ValueSelected un addressSelected.
  • Tad es izveidoju līguma iestatīšanas mainīgo ar abi, kas būs nepieciešami abiem spēlētājiem.
  • Pēc tam es redzu, vai ir iestatīta dislocētā līguma adrese. Ja adrese ir tukša, tas nozīmē, ka spēlētājs noklikšķināja uz “Sākt jaunu spēli”, jo tādā gadījumā viņš neredzēs adreses ievadi.
  • Tas nozīmē, ka es izvēlos jaunu spēli vai viedo līgumu šim spēlētājam ar izvēlēto darījuma kontu.
  • Pirmais spēlētājs redzēs izmantotā viedā līguma adresi. Viņam būs jādalās šajā adresē ar otru spēlētāju, lai sāktu kauliņu spēli, jo jums nepieciešami 2 spēlētāji.
  • Ja viņš ir norādījis adresi, tas nozīmē, ka viņš vēlas pievienoties esošai spēlei. Mēs to varam izdarīt, izveidojot viedā līguma gadījumu, izmantojot tā adresi, un pēc tam izpildot funkciju setupPlayer2 ().
  • Es izmantoju funkciju setInterval, lai ik pēc 1 sekundes pārbaudītu, vai spēlētāja 2 iestatīšana ir pabeigta vai nav jāsāk spēle.

Lieliski! Ja jūs to esat izdarījis līdz šim, tas nozīmē, ka esat apņēmības pilns un jūs faktiski kaut ko mācāties. Labākā daļa ir tuvāk, nekā jūs domājat. Nākamajā rakstā redzēsit, kā javascript var izveidot savas spēles kanālus savai spēlei, lai izveidotu mērogojamu Ethereum decentralizētu lietojumprogrammu.

Nepalaidiet garām un esiet pirmais, kas to lasīs, kad tas būs pabeigts. Pievienojieties manam ekskluzīvo Ethereum izstrādātāju adresātu sarakstam, lai saņemtu atjauninājumus un informāciju tieši no manis šeit: http://eepurl.com/dDQ2yX

2. daļa tagad ir pieejama šeit: https://medium.com/@merunasgrincalaitis/how-to-create-scalable-dapps-and-smart-contracts-in-ethereum-with-state-channels-step-by-step- 690f71a9bf2f

Ja jūtaties satriekts par tik modernu informāciju vai arī esat tikko pārliecināts par drošumu un Ethereum dapps, pārbaudiet manu grāmatu “Ethereum Developer: Learn Solidity from Scratch” šeit https://merunas.io/