2016-06-05 39 views

risposta

2

Edit: Solidità è cambiato da quando questa risposta è stato scritto prima, @ manuel-Aráoz ha la risposta corretta.

Non c'è modo di solidità per verificare se un indirizzo è un contratto. Uno degli obiettivi di Ethereum è che gli esseri umani e i contratti intelligenti siano trattati allo stesso modo. Questo porta a un futuro in cui i contratti intelligenti interagiscono perfettamente con gli umani e altri contratti. Potrebbe cambiare in futuro, ma per ora un indirizzo arbitrario è ambiguo.

0

Che cosa si può fare, a condizione di avere le informazioni a portata di mano. Se l'indirizzo del mittente delle transazioni era nullo o non occupato, è possibile stabilire se l'indirizzo è un conto di contratto o un EOA (conto di proprietà esterna). Ad esempio, quando si invia una transazione del contratto di creazione sulla rete, l'indirizzo di ricezione nella transazione è nullo/non utilizzato.

Riferimento da github: https://github.com/ethereum/go-ethereum/wiki/Contracts-and-Transactions

Spero che questo aiuti.

4

Questo non è qualcosa che si può interrogare dall'interno di un contratto utilizzando Solidità, ma se si fosse semplicemente desideroso di sapere se un indirizzo detiene il codice contratto o no, si può controllare usando la console Geth o simili, ad esempio con:

> eth.getCode("0xbfb2e296d9cf3e593e79981235aed29ab9984c0f") 

con la stringa esadecimale (qui 0xbfb2e296d9cf3e593e79981235aed29ab9984c0f) come indirizzo che si desidera interrogare. Ciò restituirà il bytecode memorizzato a quell'indirizzo.

È inoltre possibile utilizzare uno scanner blockchain per trovare il codice sorgente del contratto a quell'indirizzo, ad esempio the ecsol library come mostrato su etherscan.io.

29

Sì, è possibile, utilizzando un po 'di codice assembly EVM per ottenere l'indirizzo dimensioni del codice:

function isContract(address addr) returns (bool) { 
    uint size; 
    assembly { size := extcodesize(addr) } 
    return size > 0; 
} 
+0

Ecco alcune [info] (http://ethereum.stackexchange.com/questions/14015/using- evm-assembly-to-get-the-address-code-size/14016 # 14016) su come funziona questa funzione –

Problemi correlati