Как да изпратим Ether до 11 440 души

Ако сте следвали актуализациите на крайните случаи на DAO, ще чуете, че етер от акаунта на extraBalance се изпраща на потребителите, които го притежават не чрез договор за теглене, а като го изпратите директно към тях - няма нужда от те да предприемат каквото и да е действие, за да го предявят.

Като се има предвид, че доверителният портфейл е мултисиг, може би се чудите как това може да се постигне. Дали ще прекарат една седмица старателно подписвайки 11,440 индивидуални транзакции? Ще изпратят ли цялата сума по сметка, контролирана от един индивид, за да могат да извършват плащанията? Както се случва, нито едното: благодарение на блестящо предложение на Vitalik, е възможно всички трансфери да се извършват без доверие по начин, който изисква само един трансфер от попечителите. Прочетете, за да разберете как.

Подписване на транзакция в Ethereum

Всички знаят, че за да създадете валидна транзакция на Ethereum, първо трябва да я подпишете с личния си ключ и че валидни са само подписаните транзакции. Това е вярно, но не е съвсем цялата истина.

Процесът, чрез който подписите са валидирани в Ethereum, се нарича „ecrecover“. Това е функция, която приема съобщение и неговия подпис и връща публичния ключ (а оттам и адреса), който го е подписал. В Ethereum адресът „от“ на транзакция не е изрично включен в транзакция; вместо това се извиква ecrecover, а адресът, който връща, е от адреса на транзакцията. Тъй като само собственикът на личния ключ на този адрес може да генерира подписи, които го връщат, само те могат да упълномощават мрежата да изразходва средства от своята сметка.

Какво обаче ако пренебрегнем обичайния процес на подписване и просто попълним каквото ни хареса за подписа на транзакцията? Оказва се, че половината от всички подписи са валидни в смисъл, че ecrecover връща публичен ключ (и по този начин адрес). Тъй като ние нямаме контрол върху това кой адрес е, това, което току-що направихме, е да изградим транзакция, която може да изразходва средства от привидно случаен адрес. Ако създадем такава транзакция и финансираме генерирания адрес с някакъв етер, транзакцията ще може да се изпълни точно като обикновена. Ефективно създадохме „адрес за еднократна употреба“, където средствата могат да бъдат изразходвани само за една транзакция. Ако публикуваме транзакцията и изберем стойности за полето за подпис по някакъв предвидим начин, можем да докажем на всеки, че средствата, изпратени на този адрес, ще могат да се използват само от тази транзакция и нищо друго.

Мултиленди с еднократни адреси

Мултисендърът на ExtraBalance се обработва по такъв начин. Първо, ние генерираме поредица от транзакции, които изпращат етер до множество адреси - 110 от тях на транзакция - и генерираме адреси за тях, използвайки описания по-горе процес. За полетата за подпис попълваме „0xDA0DA0DA0…“ - предсказуема стойност, така че да сте сигурни, че някой всъщност няма частен ключ за генерирания адрес.

Това създава серия от транзакции с „еднократни адреси“, които могат да бъдат използвани за финансирането им. 104 транзакции все още са прекалено много, за да могат попечителите лесно да подпишат, така че повтаряме процеса още веднъж, изграждайки друга транзакция, която изпраща етер към 104 транзакции, които генерирахме в първата стъпка, произвеждайки една сделка със собствен уникален адрес ,

Сега всеки може да провери транзакциите, за да се убеди, че изпраща правилното количество етер в правилния списък с адреси и след като бъде удовлетворен, попечителите могат да разрешат плащане на адреса на основната транзакция. След това всеки може да изпрати транзакциите в мрежата, стартирайки целия процес, който ще доведе до изпращане на етер до всички в списъка - всички с един-единствен подпис и без да е необходимо да се доверявате на дадено лице със средствата.