2016-06-05 20 views

Odpowiedz

2

Edit: Solidność się zmieniło od tego odpowiedź została najpierw napisane @ manuel-Araoz ma poprawną odpowiedź.

Nie ma żadnej solidności, aby sprawdzić, czy adres jest umową. Jednym z celów Ethereum jest, aby ludzie i inteligentne kontrakty byli traktowani jednakowo. To prowadzi do przyszłości, w której inteligentne kontrakty bezproblemowo współdziałają z ludźmi i innymi umowami. Może się to zmienić w przyszłości, ale na razie arbitralny adres jest niejednoznaczny.

0

Co możesz zrobić, jeśli masz dostęp do informacji. Jeśli adres nadawcy transakcji był pusty lub niezajętny, można sprawdzić, czy adres jest kontem umowy, czy EOA (konto należące do właściciela zewnętrznego). tj. Podczas wysyłania transakcji utworzenia umowy w sieci, adres odbioru w transakcji jest pusty/nieużywany.

referencyjny od github: https://github.com/ethereum/go-ethereum/wiki/Contracts-and-Transactions

Nadzieja to pomaga.

4

To nie jest coś, co można wyszukać z poziomu zamówienia przy użyciu solidności, ale jeśli po prostu chcą wiedzieć, czy adres zawiera kod zamówienia lub nie, można sprawdzić przy użyciu Geth konsoli lub podobna np:

> eth.getCode("0xbfb2e296d9cf3e593e79981235aed29ab9984c0f") 

z ciągiem szesnastkowym (tutaj 0xbfb2e296d9cf3e593e79981235aed29ab9984c0f) jako adres, który chcesz przesłać. Spowoduje to zwrócenie kodu bajtowego zapisanego pod tym adresem.

Można również użyć skanera blockchain, aby znaleźć kod źródłowy umowy pod tym adresem, na przykład the ecsol library, jak pokazano na etherscan.io.

29

Tak można, stosując pewne EVM kod montaż, aby uzyskać adres rozmiar kodu:

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

Oto niektóre [info] (http://ethereum.stackexchange.com/questions/14015/using- evm-assembly-to-get-the-address-code-size/14016 # 14016) na temat działania tej funkcji –