La configurazione del proxy di cui tutti parlano in Web3

La configurazione del proxy di cui tutti parlano in Web3

La configurazione del proxy di cui tutti parlano in Web3

Panoramica tecnica: l'ascesa del proxy minimo aggiornabile (ERC1967/Universal Proxy Standard)

A seguito di molteplici attacchi alla governance e costosi errori di aggiornamento, la comunità Web3 ha convergenza su una nuova configurazione proxy, che bilancia aggiornabilità, sicurezza ed efficienza del gas. Il proxy minimo aggiornabile, spesso implementato in seguito a ERC1967 standard, è diventato il modello de facto. Questa configurazione, a volte chiamata Universal Proxy Standard, non è una mera evoluzione tecnica; è una risposta ricca di han ai punti deboli dei modelli proxy del passato.


Componenti chiave e i loro ruoli

Componente Scopo Esempio di slot di indirizzo
Contratto di delega Delega le chiamate al contratto logico n / a
Contratto di implementazione (logica) Contiene la logica aziendale effettiva n / a
Amministratore (proprietario) Aggiornamenti dei controlli 0xb53127684a568b3173ae13b9f8a6016
Slot di archiviazione (standard ERC1967) Previene la collisione dell'archiviazione 0x360894a13ba1a3210667c828492db98
Logica di aggiornamento Gestito dall'amministratore tramite una funzione sicura n / a

The Korean Mirror: perché questo schema proxy?

Proprio come i personaggi stoici della "Catena montuosa Taebaek" di Jo Jung-rae sopportano le difficoltà per costruire un futuro migliore, questa configurazione proxy è forgiata dall'han collettivo di Web3: il trauma derivante da fallimenti di aggiornamento e perdite di fondi. I proxy precedenti, come EIP-897 "DelegateProxy", ovvero il proxy trasparente di OpenZeppelin, ha sofferto di collisioni di storage o di modelli di amministrazione complessi. Il proxy minimale ERC1967 è progettato per essere resiliente ed elegante.


Procedura dettagliata: implementazione del proxy minimo ERC1967

  1. Distribuisci il contratto logico
  2. Scrivi e distribuisci la tua logica aziendale come un contratto standard (senza logica di aggiornamento).

solidità
// contratti/MyLogic.sol
solidità pragma ^0.8.0;
contratto MyLogic {
uint256 valore pubblico;
funzione setValue(uint256 _value) pubblico {
valore = _valore;
}
}

  1. Distribuisci il contratto proxy
  2. Utilizzare un'implementazione proxy minima che faccia riferimento all'indirizzo del contratto logico.

solidità
// contratti/MyProxy.sol
solidità pragma ^0.8.0;
contratto ERC1967Proxy {
costruttore(indirizzo _logica, byte memoria _dati) {
slot bytes32 = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;
assemblaggio {
sstore(slot, _logica)
}
se(_lunghezza dati > 0) {
(bool successo,) = _logic.delegatecall(_data);
require(success, "Inizializzazione fallita");
}
}
fallback() esterno pagabile {
assemblaggio {
lascia che impl := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)
chiamatadatacopy(0, 0, chiamatadatasize())
lascia risultato := delegatecall(gas(), impl, 0, calldatasize(), 0, 0)
returndatacopy(0, 0, returndatasize())
cambia risultato
caso 0 { revert(0, returndatasize()) }
predefinito { ritorno(0, dimensione dati ritorno()) }
}
}
}

  1. Inizializzazione tramite dati del costruttore
  2. Passare i dati di inizializzazione (ad esempio, abi.encodeWithSignature("inizializza(uint256)", 42)) per impostare lo stato iniziale.

  3. Logica di aggiornamento

  4. Solo l'amministratore può aggiornare l'indirizzo del contratto logico memorizzato nello slot ERC1967.

solidità
funzione upgradeTo(indirizzo nuovaimplementazione) solo esternoAdmin {
slot bytes32 = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;
assemblaggio {
sstore(slot, nuovaimplementazione)
}
}


Integrità dello slot di archiviazione: evitare le collisioni

Questa configurazione memorizza l'indirizzo di implementazione in uno slot deterministico (0x3608…bbc), evitando le tragiche collisioni che hanno caratterizzato i precedenti modelli di delega. Ciò è simile alla pratica coreana dei jangseung (totem guardiani del villaggio) che fanno da sentinella, garantendo la sacralità della conservazione del contratto.

Tipo di proxy Rischio di collisione di archiviazione Modello di aggiornamento Efficienza del gas Separazione amministrativa
Proxy trasparente Medio Controllato dall'amministratore Moderare
UUPS (ERC1822) Basso Auto-aggiornabile Alto Opzionale
ERC1967 Proxy minimo Molto basso Controllato dall'amministratore Molto alto Opzionale

Lezioni apprese a fatica: considerazioni pratiche

  • Aggiorna sicurezza: Utilizza multi-firma o timelock per l'amministrazione. I proverbi coreani insegnano che "una tigre non lascia altro che la sua pelle": anche tu devi assicurarti l'autorità di aggiornamento, per evitare che il tuo progetto venga vanificato da aggressori.
  • Inizializzazione: Inizializzare sempre l'archiviazione del proxy tramite il costruttore o una funzione dedicata, mai nel costruttore del contratto logico.
  • Test: Simula gli aggiornamenti sulle testnet. Usa Fonderia O Elmetto per programmare gli aggiornamenti e convalidare l'integrità dell'archiviazione.

Esempio di codice: distribuzione e aggiornamento con Hardhat

Distribuisci proxy

const logic = await MyLogic.deploy(); const proxy = await ERC1967Proxy.deploy(logic.address, "0x"); // dati di inizializzazione

Implementazione dell'aggiornamento

attendi proxy.upgradeTo(newLogic.address); // Chiamabile solo dall'amministratore

Approfondimento: confronto dei costi del gas

Operazione Proxy trasparente Proxy UUPS ERC1967 Proxy minimo
Distribuzione Alto Moderare Basso
Aggiornamento Moderare Basso Basso
Chiamata di funzione Moderare Basso Basso

Han in pratica: perché non usare semplicemente i cloni EIP-1167?

I proxy minimi EIP-1167 sono efficienti, ma non dispongono di funzionalità di aggiornamento integrate. Il proxy minimo aggiornabile ERC1967 rappresenta il punto di riferimento per la risoluzione han: minimo, ma duraturo, come le case hanok di Jeonju, resistenti alla prova del tempo e al cambiamento.


Note finali: best practice per la produzione

  • Amministrazione decentralizzata: Utilizzare la governance on-chain o Gnosis Safe.
  • Aggiornamenti del monitor: Emetti eventi di aggiornamento e monitorali come un geomante che legge i venti di montagna.
  • Revisione contabile: Commissionare audit esterni prima di implementare o aggiornare i proxy di produzione.

Tabella di esempio: riepilogo dei modelli principali

Modello Aggiornabile Cassaforte di stoccaggio Efficiente a gas Pronto per la produzione
EIP-1167 Proxy minimo NO Limitato
Proxy trasparente Moderare Moderare
UUPS (ERC1822)
ERC1967 Proxy minimo

Il proxy minimale aggiornabile ERC1967 è la configurazione di cui tutti in Web3 parlano, non solo per i suoi meriti tecnici, ma perché è una testimonianza vivente della tendenza del settore: il desiderio sia di innovazione che di sicurezza, sia di velocità che di resilienza.

Il mio Seok

Il mio Seok

Analista di dati

Myeon Seok è un analista di dati dedicato e metodico presso ProxyLister, dove è specializzato nella cura e nel mantenimento di elenchi completi di server proxy gratuiti. Con un occhio attento ai dettagli e una passione per la sicurezza informatica, Myeon garantisce che i dati siano accurati e aggiornati, fornendo risorse affidabili per gli utenti in tutto il mondo. Le sue capacità analitiche e di risoluzione dei problemi lo rendono un membro inestimabile del team, guidando la missione aziendale di fornire servizi proxy affidabili.

Commenti (0)

Non ci sono ancora commenti qui, potresti essere il primo!

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *