Sådan sendes Ether til 11.440 mennesker

Hvis du har fulgt opdateringerne om DAO-kanter, har du hørt, at ether fra ekstraBalance-kontoen bliver sendt til de brugere, der ejer den ikke via en tilbagetrækningskontrakt, men ved at sende den direkte til dem - ikke nødvendigt dem til at gribe ind for at gøre krav på det.

Da trustee-tegnebogen er en multisig, kan du undre dig over, hvordan dette kan opnås. Skal de bruge en uge omhyggeligt på at underskrive 11.440 individuelle transaktioner? Skal de sende hele beløbet til en konto, der kontrolleres af en enkelt person, så de kan foretage betalingerne? Som det sker, hverken: takket være et strålende forslag fra Vitalik er det muligt at foretage alle overførsler tillidløst, på en måde, der kun kræver en enkelt overførsel fra trustees. Læs videre for at finde ud af hvordan.

Transaktionssignering i Ethereum

Alle ved, at for at oprette en gyldig Ethereum-transaktion, skal du først underskrive den ved hjælp af din private nøgle, og at kun underskrevne transaktioner er gyldige. Det er sandt, men det er ikke helt sandheden.

Den proces, hvorpå underskrifter valideres i Ethereum, kaldes 'ecrecover'. Dette er en funktion, der tager en meddelelse og dens underskrift og returnerer den offentlige nøgle (og dermed adressen), der underskrev den. I Ethereum er "fra" -adressen for en transaktion ikke eksplicit inkluderet i en transaktion; i stedet kaldes ecrecover, og den adresse, den returnerer, er transaktionens adresse. Da kun ejeren af ​​den adresses private nøgle kan generere underskrifter, der returnerer den adresse, er det kun de, der kan autorisere netværket til at bruge midler fra deres konto.

Hvad nu hvis vi ignorerer den sædvanlige signeringsproces og bare udfyldte hvad vi kunne lide til transaktionssignaturen? Det viser sig, at halvdelen af ​​alle underskrifter er gyldige i den forstand, at ecrecover returnerer en offentlig nøgle (og dermed en adresse). Da vi ikke har kontrol over, hvilken adresse det er, hvad vi lige har gjort er at opbygge en transaktion, der kan bruge penge fra en tilsyneladende tilfældig adresse. Hvis vi opretter en sådan transaktion, og finansierer den genererede adresse med et Ether, vil transaktionen være i stand til at udføre ligesom en almindelig en. Vi har effektivt oprettet en "engangsadresse", hvor midler kun kan bruges ved en transaktion. Hvis vi offentliggør transaktionen og vælger værdier for signaturfeltet på en eller anden forudsigelig måde, kan vi bevise for enhver, at midler, der sendes til denne adresse, kun kan bruges af den transaktion og intet andet.

Multisend med engangsadresser

Den ekstraBalance multisend håndteres på en sådan måde. Først genererer vi en række transaktioner, der sender ether til flere adresser - 110 af dem pr. Transaktion - og genererer adresser til dem ved hjælp af processen beskrevet ovenfor. For signaturfelterne udfylder vi '0xDA0DA0DA0…' - en forudsigelig værdi, så du kan være sikker på, at nogen ikke har en privat nøgle til den genererede adresse.

Dette producerer en række transaktioner med 'engangsadresser', der kan bruges til at finansiere dem. 104 transaktioner er stadig et par for mange til, at trustees nemt kan underskrive, så vi gentager processen endnu en gang og bygger en anden transaktion, der sender eter til de 104 transaktioner, vi genererede i det første trin, og producerer en enkelt transaktion med sin egen unikke adresse .

Nu kan hvem som helst verificere transaktionerne for at tilfredsstille sig, at de sender det korrekte mængde eter til den korrekte adresseliste, og når de først er tilfredse, kan administratorerne godkende en betaling til rodtransaktionens adresse. Derefter kan hvem som helst indsende transaktionerne til netværket ved at starte hele processen, som vil resultere i at sende eter til alle på listen - alt med kun en enkelt underskrift krævet, og uden at skulle have tillid til en person med midlerne.