Jak poslat Ether 11,440 lidem

Pokud jste sledovali aktualizace v případech DAO edge, slyšeli jste, že ether z účtu extraBalance je odesílán uživatelům, kteří jej nevlastní prostřednictvím smlouvy o odstoupení, ale zasláním přímo jim - není třeba aby podnikli jakékoli kroky, aby si to nárokovali.

Vzhledem k tomu, že peněženka správce je multisig, možná vás zajímá, jak toho lze dosáhnout. Chystají strávit týden pečlivě podepisováním 11 400 individuálních transakcí? Chystají se poslat celou částku na účet ovládaný jednou osobou, aby mohli provádět platby? Jak se to stane, ani jeden: díky skvělému návrhu Vitalika je možné všechny převody důvěřovat, a to způsobem, který vyžaduje pouze jediný převod ze strany správců. Čtěte dál a zjistěte jak.

Podepisování transakcí v Ethereum

Každý ví, že pro vytvoření platné transakce Ethereum je nutné ji nejprve podepsat pomocí vašeho soukromého klíče a že jsou platné pouze podepsané transakce. To je pravda, ale není to úplně celá pravda.

Proces ověřování podpisů v Ethereum se nazývá „ecrecover“. Toto je funkce, která přebírá zprávu a její podpis a vrací veřejný klíč (a tedy adresu), který ji podepsal. V Ethereum není adresa transakce „z“ výslovně zahrnuta do transakce; místo toho se volá ecrecover a adresa, kterou vrací, je z adresy transakce. Protože pouze vlastník soukromého klíče této adresy může generovat podpisy, které tuto adresu vracejí, mohou síť povolit tak, aby utratila prostředky ze svého účtu.

Co kdybychom však ignorovali obvyklý proces podpisu a vyplnili jsme, co se nám líbilo pro podpis transakce? Ukazuje se, že polovina všech podpisů je platná v tom smyslu, že ecrecover vrací veřejný klíč (a tedy adresu). Protože nemáme žádnou kontrolu nad tím, jaká je adresa, právě jsme provedli transakci, která může utrácet prostředky ze zdánlivě náhodné adresy. Pokud takovou transakci vytvoříme, vygenerovanou adresu financujeme nějakým etherem, transakce bude moci být provedena stejně jako běžná. Efektivně jsme vytvořili „jednorázovou adresu“, kde lze prostředky utratit pouze jednou transakcí. Pokud transakci zveřejníme a vybereme hodnoty pro pole podpisu nějakým předvídatelným způsobem, můžeme každému prokázat, že prostředky zaslané na tuto adresu budou použitelné pouze touto transakcí, a nic jiného.

Vícedílné s jednorázovými adresami

S multisendem extraBalance se pracuje takovým způsobem. Nejprve vygenerujeme řadu transakcí, které odesílají ether na více adres - 110 z nich na transakci - a generujeme adresy pro ně pomocí výše popsaného procesu. Pro pole podpisu vyplníme „0xDA0DA0DA0…“ - předvídatelnou hodnotu, abyste si mohli být jisti, že někdo ve skutečnosti nemá soukromý klíč pro vygenerovanou adresu.

Výsledkem je řada transakcí s „jednorázovými adresami“, které lze použít k jejich financování. 104 transakcí je stále příliš mnoho na to, aby se důvěryhodní uživatelé mohli snadno podepsat, takže proces opakujeme ještě jednou a vytvoříme další transakci, která odešle ether k 104 transakcím, které jsme vygenerovali v prvním kroku, a vytvoří jednu transakci s vlastní jedinečnou adresou .

Nyní si může kdokoli ověřit transakce, aby se ujistil, že posílá správné množství etheru na správný seznam adres, a jakmile budou spokojeni, mohou správci autorizovat platbu na kořenovou adresu transakce. Poté může kdokoli předložit transakce do sítě a zahájit celý proces, který povede k odeslání etheru všem na seznamu - to vše pouze s jediným podpisem, aniž by bylo nutné důvěřovat jednotlivci s prostředky.