Hidden in Plain Sight: En lusket soliditetsimplementering af en forseglet bud auktion PlatoBlockchain Data Intelligence. Lodret søgning. Ai.

Hidden in Plain Sight: En lusket soliditetsimplementering af en auktion med forseglet bud

November 16, 2022

Michael Zhu

Redaktørens note: Dette stykke er en del af vores igangværende serie om alt, hvad auktioner for web3 angår. del 1 var en oversigt over auktionsdesign og tekniske udfordringer (og muligheder) specifikke for mekanismedesign i en tilladelsesfri blockchain-kontekst. del 2 var et stykke om at rydde markedet og undgå gaskrige. del 3 deler et overblik over kanoniske auktionstyper, et kig på, hvordan teori omsættes til praksis, og vores første implementering af en ny Vickrey-auktion med forseglet bud. 

On-chain auktioner er et af de mest interessante (og allestedsnærværende) designrum i web3 - fra NFT-salg til sikkerhedsauktioner - hvilket giver anledning til et nyt landskab af implementeringer og forskning. Mens auktionsmekanismedesign har eksisteret i århundreder og har udviklet sig i de seneste årtier med fremkomsten af ​​internettet og e-handel, anvender vi først nu disse tilgange til smarte kontrakter.

Vi er også begyndt at se flere auktionsdesigns, der er hjemmehørende i blockchains, herunder vores open source Soliditetsimplementering af en Vickrey-auktion og flere interessante udviklinger fra fællesskabet (inklusive forslag til effektivitetsforbedringer, nyt teoretiske resultaterog to hackathon-vindende implementeringer af auktioner med lukkede bud). I vores første design lavede vi en afvejning mellem privatliv og kapitaleffektivitet: Vi brugte oversikkerhed (budgivere låser mere sikkerhed, end deres bud kræver) for at gennemtvinge betaling fra den vindende budgiver uden at afsløre de præcise budværdier via sikkerhedsstillelsen beløb. Ved at låse mere kapital inde får du mere privatliv til en potentielt større mulighedspris. Men hvad nu hvis vi kunne have budt privatliv uden oversikkerhed? 

Dette indlæg introducerer et nyt auktionsdesign, som vi kalder "SneakyAuction", som kombinerer CREATE2 op-kode og statslige beviser for at garantere privatlivets fred uden at kræve, at tilbudsgivere låser mere sikkerhed end nødvendigt. Vi begynder med at nedbryde, hvordan det fungerer, og derefter sammenligne det med vores tidligere implementering (OverCollateralizedAuction) med hensyn til gasomkostninger, brugeroplevelse og privatliv. Vi har også tilføjet implementeringen til vores Auktions Zoo repository på GitHub, så du kan forgrene det, bygge på det og følge med, mens vi dykker ned i mere mekanik; i mellemtiden, mere om, hvordan det fungerer og sammenlignet med vores tidligere design nedenfor. 

Sådan fungerer det: Forpligter sig til at byde ved hjælp af CREATE2

Der er to krav, vi skal bruge for at skabe en "efterhånden offentlig" auktion med forseglet bud på kæden. For det første skal bud være private i løbet af budperioden og derefter afsløres, når det slutter. commit-reveal-skemaer (hvor brugere offentliggør hash-forpligtede værdier og derefter afslører deres input senere) kan replikere denne mekanisme i kæden. Det andet krav er sikkerhedsstillelse: bud skal understøttes af sikkerhed for at sikre, at vinderen har tilstrækkelige midler til at opfylde deres forpligtelse. 

I vores oversikrede Vickrey-implementering afgiver potentielle købere bud ved at ringe til commitBid funktion, leverer en hash-forpligtelse og den sikkerhed, der skal deponeres. Denne tilgang opfylder kravene, men har nogle ulemper. Selvom selve buddet er skjult af hashen, er det commitBid transaktionen signalerer åbent og øjeblikkeligt brugerens hensigt: "Jeg vil gerne byde på denne auktion, og her er sikkerheden for mit bud." Uden oversikkerhed, synligheden (og sammenkoblingen) af begge hensigt , sikkerhedsstillelse ville afsløre budværdier. Men hvis vi kan tilsløre hensigten med en transaktion, kan vi muligvis opnå budfortrolighed uden at stole på oversikkerhed. 

CREATE2 opcode, introduceret i EIP-1014 og inkluderet i Konstantinopel hårde gaffel, giver os en måde at gøre netop det på. Det CREATE , CREATE2 Opkoder bruges begge til at implementere smarte kontrakter, men de adskiller sig i, hvordan implementeringsadresserne beregnes. Det CREATE implementeringsadressen beregnes som en hash af deployerens adresse og nonce; det CREATE2 implementeringsadresse på den anden side beregnes som en hash af kontraktens bytekode og konstruktørparametre, et vilkårligt salt og deployerens adresse (detaljer).

CREATE2 bruges ofte i fabriksmønsteret til at implementere kontrakter til forudsigelige adresser - for eksempel UniswapV3PoolDeployer kontraktanvendelser CREATE2 at implementere hver puljekontrakt til en adresse, som er en funktion af tokenparret og gebyrniveauet. CREATE2 kan også bruges til at (gen)implementere opgraderbare smarte kontrakter, især i metamorfe kontraktmønster.

Endnu vigtigere for os er CREATE2 implementeringsadressen kan fungere som en hash-forpligtelse til enhver adfærd defineret af input-bytekoden og parametrene. Hvis konstruktørparametrene koder et bud, vil CREATE2 adresse kan tjene som budforpligtelse.

Hidden in Plain Sight: En lusket soliditetsimplementering af en forseglet bud auktion PlatoBlockchain Data Intelligence. Lodret søgning. Ai.

Beregning af adressen på en boks i Solidity

Desuden kan selve kontrakten tjene som en boks - en budgiver kan sende ETH til CREATE2 hvælving adresse før kontrakten er implementeret at stille sikkerhed og forpligte sig til deres bud i én simpel overførsel! Da budgiveren ikke har den private nøgle til hvælvingsadressen, låses sikkerhedsstillelsen, indtil buddet afsløres, hvorefter SneakyAuction-kontrakten implementerer og låser boksen op. 

sneakyvault Solidity auktionskontraktsneakyvault Solidity auktionskontrakt

SneakyVault-kontrakten. Kontrollerer, om dets bud har vundet, og sender dets ETH til sælgeren eller budgiveren i overensstemmelse hermed. Alt sammen i konstruktøren!

Denne tilgang gør, at transaktionen ikke kan skelnes fra en overførsel til en eksternt ejet adresse (EOA). Budtransaktionen er skjult i almindeligt syn, blandt andre overførsler på blockchain. En vigtig advarsel: denne tilsyneladende ryddelige løsning gør det også vanskeligt at bestemme hvornår sikkerhedsstillelsen var låst. Det er vigtigt for auktionssikkerheden, at boksen blev finansieret, før nogen bud afsløres. Ellers kan en opportunistisk køber vente til slutningen af ​​afsløringsperioden, hvor de fleste bud allerede er blevet afsløret, med at beslutte, om de vil stille sikkerhed i deres hvælving. Vi er nødt til at sikre, at hvælvinger er sikret i tilbudsperioden, ikke under afsløringsperioden, ved hjælp af et andet værktøj: statsbeviser.

Tilbagevirkende verifikation af sikkerhedsstillelse ved hjælp af statslige beviser

En måde at sikre, at en boks blev stillet til sikkerhed i løbet af budperioden, er ved at kontrollere dens saldo ved en tidligere blok. Det er relativt nemt at gøre dette uden for kæden ved at forespørge på en arkivnode; men meget sværere at opnå (utroligt) på kæden. EVM'erne BALANCE opcode læser den aktuelle saldo på en adresse, men der findes ingen sådan opcode til at hente en forbi balance. Faktisk er den eneste EVM-opkode, der giver nogen form for historisk statsadgang BLOCKHASH, som returnerer hashen for en af ​​de sidste 256 blokke. Heldigvis - med lidt hjælp uden for kæden - fungerer blockhash lige godt nok til vores brugssag.

Blockhash er hashen af ​​blokoverskriften, som inkluderer (blandt andre metadata) den statsrod af den blok. Tilstandsroden er rodknudepunktet for en Merkle-Patricia forsøger, hvor hver bladknude svarer til en bestemt adresse og inkluderer adressen' balance ved den blok. Vi kan ikke direkte få adgang til disse bladknudepunkter på kæden, men vi kan bekræfte, at indholdet af en bladknude er korrekt. Faktisk eth_getProof RPC-metode understøttet af Alchemy (blandt andre udbydere) returnerer de Merkle-beviser, der er nødvendige for at udføre denne verifikation (Leo Zhang giver en dybdegående forklaring af, hvordan dette fungerer i sammenhæng med Ethereum light-klienter). Det betyder, at med en lille smule hjælp uden for kæden (et enkelt RPC-opkald), kan budgivere bevise over for SneakyAuction-kontrakten, at deres boks var stillet som sikkerhed i budperioden. 

Hidden in Plain Sight: En lusket soliditetsimplementering af en forseglet bud auktion PlatoBlockchain Data Intelligence. Lodret søgning. Ai.Hidden in Plain Sight: En lusket soliditetsimplementering af en forseglet bud auktion PlatoBlockchain Data Intelligence. Lodret søgning. Ai.

Komponenterne i en EVM-blokhoved. Kilde: https://ethereum.stackexchange.com/a/6414

I vores implementering er første bud afsløret til en auktion butikker blockhash af den forrige blok. Denne transaktion overfører effektivt auktionen fra budfasen til afsløringsfasen - alt sammen efterfølgende bud afsløret skal give et Merkle-bevis for, at deres boks var tilstrækkeligt sikret før den blokering (dvs. før det første bud blev afsløret). Bemærk, at første revealBid transaktionen ville ideelt set blive indsendt via en privat transaktionspulje (f.eks. Flashbots); Ellers kan en budgiver, der ser mempoolen (der ser værdien af ​​det afslørede bud), køre transaktionen foran og afgive et bud i sidste sekund. 

LibBalanceProof

For at minimere omkostningerne for tilbudsgivere skrev vi en gasoptimeret bibliotek at verificere balancebeviser på kæden, der bygger på kontrakter skrevet af Aragon-teamet (som var banebrydende for on-chain storage proofs i 2018), og Hamdi Allams kontrakter for on-chain RLP afkodning. Vores bibliotek bruger en række tricks og optimeringer på lavt niveau, der er afhængige af statens særlige struktur, så det kan ikke bruges til generiske Merkle-Patricia-prøvebeviser. Til gengæld giver det SneakyAuction-kontrakten mulighed for at verificere den tidligere balance i en boks i mindre end 30,000 gas.

Vi skrev også en letvægter JavaScript-indpakning for eth_getProof RPC metode. Med en adresse og et bloknummer returnerer det balancebeviset og RLP-serialiseret blokoverskrift, som kan bruges til at afsløre et bud. 

Hvordan det sammenligner 

Lad os sammenligne vores nye SneakyAuction-tilgang med det OverCollateralizedAuction-design, vi sidst udgav, langs flere nøgledimensioner, som tekniske designere eller brugere interesserer sig for: gasomkostninger, brugeroplevelse og privatliv. 

Gas omkostninger

SneakyAuction's revealBid, endAuctionog withdrawCollateral funktioner kræver implementering af en SneakyVault, så de er dyrere end deres OverCollateralizedAuction-modstykker. revealBid er særligt dyrt, fordi det også verificerer en balancebevis, som koster omkring 25,000 gas.

Omtrentlig gasomkostninger ved forskellige operationer, baseret på støbeenhedstests

Brugererfaring

Selvom de to implementeringer følger et lignende overordnet flow (budfase, afsløringsfase, auktionsafslutning), er der nogle forskelle i brugeroplevelsen. SneakyAuction har et par mindre ulemper:

  • Oplevelsen af ​​at sende ETH til en ikke-udrullet vault, selvom den kunne abstraheres væk af front-end, er potentielt forvirrende for brugere, der undersøger deres budtransaktion på en blokudforsker.
  • Med OverCollateralizedAuction er det muligt at afslutte auktionen tidligt, hvis alle bud er blevet afsløret. Dette er ikke muligt i SneakyAuction, fordi kontrakten ikke har nogen mulighed for at vide, hvor mange bud der er afgivet.
  • Budgivere kan opdatere deres bud og fylde deres sikkerhed med OverCollateralizedAuction ved at ringe commitBid igen. I SneakyAuction kan budgivere ikke foretage opdateringer, når først budets boks er stillet som sikkerhed.

Privatliv

Budfortroligheden for OverCollateralizedAuction afhænger af, at budgivere vælger at låse op for ekstra sikkerhed (så tilskuere kender en øvre grænse for et bud, men ikke det nøjagtige beløb). SneakyAuction, på den anden side, henter privatlivets fred fra aktivitet i kæden, der er fuldstændig uden relation til selve auktionen: ETH-overførsler, der sker i auktionens budperiode. 

Lad os for nemheds skyld antage, at hvert bud er sikret ved hjælp af en enkelt ETH-overførsel. Vi bemærker, at: 

  1. Sikkerhedstransaktionen bør være første gang, nogen har interageret med vault-adressen i kæden. 
  2. Vi forventer ikke, at andre transaktioner berører boksens adresse i resten af ​​budperioden. 
  3. Ingen transaktioner kan stamme fra vault-adressen (fordi ingen har den private nøgle). 

ETH-overførsler i løbet af budperioden til ellers "uberørte" adresser er plausibelt bud - med andre ord er de "støjen", der skjuler budtransaktioner. For at hjælpe med at kvantificere privatlivets fred for SneakyAuction kan vi se på formen af ​​denne støjfordeling.Hidden in Plain Sight: En lusket soliditetsimplementering af en forseglet bud auktion PlatoBlockchain Data Intelligence. Lodret søgning. Ai.

Hidden in Plain Sight: En lusket soliditetsimplementering af en forseglet bud auktion PlatoBlockchain Data Intelligence. Lodret søgning. Ai.

Dette histogram viser år-til-dato-fordelingen af ​​daglige ETH-overførsler (på Ethereums hovednet) til uberørte adresser, hvilket illustrerer støjfordelingen for en 24-timers budperiode. Vi kan se, at de fleste transaktioner falder inden for [0.001, 1] ETH-intervallet, hvilket antyder, at auktioner med en forventet budværdi i det interval ville have det stærkeste privatliv. På den anden side giver den typiske støj muligvis ikke tilstrækkelig privatliv til auktioner, hvor det forventede bud er større end 10 ETH - der er sjældent mere end 100 overførsler i det interval, så en auktion, der tiltrækker mange bud, ville skabe en iøjnefaldende stigning i fordelingen . 

For et andet perspektiv på disse data viser disse spredningsplot overførslerne den 15. oktober 2022, overlejret med bud fra to hypotetiske auktioner: 

Hidden in Plain Sight: En lusket soliditetsimplementering af en forseglet bud auktion PlatoBlockchain Data Intelligence. Lodret søgning. Ai.Hidden in Plain Sight: En lusket soliditetsimplementering af en forseglet bud auktion PlatoBlockchain Data Intelligence. Lodret søgning. Ai.

200 bud, normalt fordelt omkring 1 ETH

Hidden in Plain Sight: En lusket soliditetsimplementering af en forseglet bud auktion PlatoBlockchain Data Intelligence. Lodret søgning. Ai.Hidden in Plain Sight: En lusket soliditetsimplementering af en forseglet bud auktion PlatoBlockchain Data Intelligence. Lodret søgning. Ai.

200 bud, normalt fordelt omkring 100 ETH

Intuitivt ville det være meget lettere for en observatør at identificere bud fra den anden auktion. I praksis kan du bruge en klyngealgoritme som f.eks forventningsmaksimering (EM) algoritme til at forudsige, hvilke transaktioner der er bud. 

Der er dog et par andre faktorer, der kan gøre SneakyAuction mere privat (og derfor mere overbevisende) i praksis:

  1. Længere budperioder: Privatliv skalerer med længden af ​​budperioden –– jo længere budperioden er, jo flere overførsler er der til at skjule bud. 
  2. Samtidige auktioner: Privatlivets fred skalerer med antallet af samtidige auktioner –– hvis to auktioner er i deres budfaser på samme tid, fungerer den ene auktions bud som støj for den anden.

SneakyAuction kan også drage fordel af oversikkerhed – da SneakyVault returnerer ethvert overskydende ETH til budgiveren, kan budgivere vælge at overbestille for yderligere privatliv. Så på en måde giver SneakyAuction strengt taget stærkere privatliv end vores tidligere implementering.

En simpel konsekvens af SneakyAuctions privatlivsmekanisme er, at den skjuler nummer af bud i tilbudsperioden. Dette er en fordel i forhold til OverCollateralizedAuction, som kun skjuler budværdierne - antallet af budtilsagn, der er givet for en given auktion, er fuldt ud offentligt (og kan give væk, hvor konkurrencedygtig auktionen er).

***

Mens vores første implementering af en auktion med lukkede bud oversatte funktioner fra den virkelige verden til designbeslutninger i kæden, er vores andet design afhængig af en ny og praktisk mekanisme til at bruge blockchains offentlige karakter til sin fordel: forseglede bud "gemmer sig" blandt ikke-relaterede blockchain aktivitet.

Selvom denne nye tilgang er en bekvem måde at opnå budfortrolighed uden oversikkerhed, er den ikke nødvendigvis egnet til alle auktioner (f.eks. auktioner med mange bud af høj værdi). Privatlivets fred forbedres for auktioner, der forventer mindre bud (og især over en længere periode).

***
De synspunkter, der er udtrykt her, er dem fra det enkelte AH Capital Management, LLC ("a16z") personale, der er citeret, og er ikke synspunkter fra a16z eller dets tilknyttede selskaber. Visse oplysninger indeholdt heri er indhentet fra tredjepartskilder, herunder fra porteføljeselskaber af fonde forvaltet af a16z. Selvom det er taget fra kilder, der menes at være pålidelige, har a16z ikke uafhængigt verificeret sådanne oplysninger og fremsætter ingen repræsentationer om den aktuelle eller vedvarende nøjagtighed af oplysningerne eller dens passende for en given situation. Derudover kan dette indhold omfatte tredjepartsreklamer; a16z har ikke gennemgået sådanne annoncer og støtter ikke noget reklameindhold indeholdt deri.

Dette indhold er kun givet til informationsformål og bør ikke påberåbes som juridisk, forretningsmæssig, investerings- eller skatterådgivning. Du bør rådføre dig med dine egne rådgivere om disse spørgsmål. Henvisninger til værdipapirer eller digitale aktiver er kun til illustrationsformål og udgør ikke en investeringsanbefaling eller tilbud om at levere investeringsrådgivningstjenester. Ydermere er dette indhold ikke rettet mod eller beregnet til brug af nogen investorer eller potentielle investorer og kan under ingen omstændigheder stoles på, når der træffes en beslutning om at investere i en fond, der administreres af a16z. (Et tilbud om at investere i en a16z-fond vil kun blive givet af private placement-memorandummet, tegningsaftalen og anden relevant dokumentation for en sådan fond og bør læses i deres helhed.) Eventuelle investeringer eller porteføljeselskaber nævnt, refereret til eller beskrevne er ikke repræsentative for alle investeringer i køretøjer, der administreres af a16z, og der kan ikke gives sikkerhed for, at investeringerne vil være rentable, eller at andre investeringer foretaget i fremtiden vil have lignende karakteristika eller resultater. En liste over investeringer foretaget af fonde forvaltet af Andreessen Horowitz (undtagen investeringer, hvortil udstederen ikke har givet tilladelse til, at a16z offentliggør såvel som uanmeldte investeringer i offentligt handlede digitale aktiver) er tilgængelig på https://a16z.com/investments /.

Diagrammer og grafer, der er angivet i, er udelukkende til informationsformål og bør ikke stoles på, når der træffes nogen investeringsbeslutning. Tidligere resultater er ikke vejledende for fremtidige resultater. Indholdet taler kun fra den angivne dato. Alle fremskrivninger, estimater, prognoser, mål, udsigter og/eller meninger udtrykt i disse materialer kan ændres uden varsel og kan afvige fra eller være i modstrid med andres meninger. Se venligst https://a16z.com/disclosures for yderligere vigtige oplysninger

Tidsstempel:

Mere fra Andreessen Horowitz