Version: 0.1 (Draft)
Authors: Ricardo Guilherme Schmidt ricardo3@status.im
In this specification, we describe how Status relates with EIPs.
Status should follow all standards as possible. Whenever a feature is needed, it should be first checked if there is a standard for that, if not, Status should propose a standard.
Status v0 | Status v1 | Other | |
---|---|---|---|
BIP32 | N | Y | N |
BIP39 | Y | Y | Y |
BIP43 | N | Y | N |
BIP44 | N | Y | N |
EIP20 | Y | Y | Y |
EIP55 | Y | Y | Y |
EIP67 | P | P | N |
EIP137 | P | P | N |
EIP155 | Y | Y | Y |
EIP165 | P | N | N |
EIP181 | P | N | N |
EIP191 | Y? | N | Y |
EIP627 | Y | Y | N |
EIP681 | Y | N | Y |
EIP712 | P | P | Y |
EIP721 | P | P | Y |
EIP831 | N | Y | N |
EIP945 | Y | Y | N |
EIP1102 | Y | Y | Y |
EIP1193 | Y | Y | Y |
EIP1577 | Y | P | N |
EIP1581 | N | Y | N |
Support: Dependency.
Reference: https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki
Description: Enable wallets to derive multiple private keys from the same seed.
Used for: Dependency of BIP39 and BIP43.
Support: Dependency.
Reference: https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki
Description: Enable wallet to create private key based on a safe seed phrase.
Used for: Security and user experience.
Support: Dependency.
Reference: https://github.com/bitcoin/bips/blob/master/bip-0043.mediawiki
Description: Enable wallet to create private keys branched for a specific purpose.
Used for: Dependency of BIP44, uses "ethereum" coin.
Support: Dependency.
Reference: https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki
Description: Enable wallet to derive multiple accounts in top of BIP39.
Used for: Privacy.
Sourcecode: https://github.com/status-im/status-react/blob/develop/src/status_im/constants.cljs#L240
Observation: BIP44 don't solve privacy issues regarding the transparency of transactions, therefore directly connected addresses through a transactions can be identifiable by a "network reconnaissance attack" over transaction history, this attack together with leakage of information from centralized services, such as exchanges, would be fatal against the whole privacy of users, regardless of BIP44.
Support: Full.
Reference: https://eips.ethereum.org/EIPS/eip-20
Description: Enable wallets to use tokens based on smart contracts compilant with this standard.
Used for: Wallet feature.
Sourcecode: https://github.com/status-im/status-react/blob/develop/src/status_im/ethereum/tokens.cljs
Support: Full.
Reference: https://eips.ethereum.org/EIPS/eip-55
Description: Checksum standard that uses lowercase and uppercase inside address hex value.
Used for: Sanity check of forms using ethereum address.
Related: status-im/status-mobile#4959 status-im/status-mobile#8707
Sourcecode: https://github.com/status-im/status-react/blob/develop/src/status_im/ethereum/eip55.cljs
Support: Partial.
Reference: ethereum/EIPs#67
Description: A standard way of creating Ethereum URIs for various use-cases.
Used for: Legacy support.
status-im/status-mobile#875
Support: Partial.
Reference: https://eips.ethereum.org/EIPS/eip-137
Description: Enable wallets to lookup ENS names.
Used for: User experience, as a wallet and identity feature, usernames.
Sourcecode: https://github.com/status-im/status-react/blob/develop/src/status_im/ethereum/ens.cljs#L86
Support: Full.
Reference: https://eips.ethereum.org/EIPS/eip-155
Description: Defined chainId parameter in the singed ethereum transaction payload.
Used for: Signing transactions, crucial to safety of users against replay attacks.
Sourcecode: https://github.com/status-im/status-react/blob/develop/src/status_im/ethereum/core.cljs
Support: Dependency/Partial.
Reference: https://eips.ethereum.org/EIPS/eip-165
Description: Standard interface for contract to answer if it supports other interfaces.
Used for: Dependency of ENS and EIP721.
Sourcecode: https://github.com/status-im/status-react/blob/develop/src/status_im/ethereum/eip165.cljs
Support: Partial.
Reference: https://eips.ethereum.org/EIPS/eip-181
Description: Enable wallets to render reverse resolution of Ethereum addresses.
Used for: Wallet feature.
Sourcecode: https://github.com/status-im/status-react/blob/develop/src/status_im/ethereum/ens.cljs#L86
Support: Full.
Reference: https://eips.ethereum.org/EIPS/eip-191
Description: Contract signature standard, adds an obrigatory padding to signed message to differentiate from Ethereum Transaction messages.
Used for: Dapp support, security, dependency of ERC712.
Support: Full.
Reference: https://eips.ethereum.org/EIPS/eip-627
Description: format of Whisper messages within the ÐΞVp2p Wire Protocol.
Used for: Chat protocol.
Support: Partial.
Reference: https://eips.ethereum.org/EIPS/eip-681
Description: A link that pop up a transaction in the wallet.
Used for: Useful as QRCode data for tranasction requests, chat transaction requests and for dapp links to transaction requests.
Sourcecode: https://github.com/status-im/status-react/blob/develop/src/status_im/ethereum/eip681.cljs
Related: Issue #9183: URL Format for Transaction Requests (EIP681) is poorly supported status-im/status-mobile#9240 status-im/status-mobile#9238 status-im/status-mobile#7214 status-im/status-mobile#7325 status-im/status-mobile#8150
Support: Partial.
Reference: https://eips.ethereum.org/EIPS/eip-712
Description: Standarize types for contract siganture, allowing users to easily inspect whats being signed.
Used for: User experience, security.
Related: status-im/status-mobile#5461 https://github.com/status-im/status-react/commit/ba37f7b8d029d3358c7b284f6a2383b9ef9526c9
Support: Partial.
Reference: https://eips.ethereum.org/EIPS/eip-721
Description: Enable wallets to use tokens based on smart contracts compilant with this standard.
Used for: Wallet feature.
Related: status-im/status-mobile#8909
Sourcecode: https://github.com/status-im/status-react/blob/develop/src/status_im/ethereum/erc721.cljs https://github.com/status-im/status-react/blob/develop/src/status_im/ethereum/tokens.cljs
Support: Full.
Reference: ethereum/EIPs#945
Used for: Sharing contactcode, reading transaction requests.
Related: status-im/status-mobile#5870
Support: Full.
Reference: https://eips.ethereum.org/EIPS/eip-1102
Description: Allow users to opt-in the exposure of their ethereum address to dapps they browse.
Used for: Privacy, DApp support.
Related: status-im/status-mobile#7985
Support: Full.
Reference: https://eips.ethereum.org/EIPS/eip-1193
Description: Allows dapps to recognize event changes on wallet.
Used for: DApp support.
Related: status-im/status-mobile#7246
Support: Partial.
Reference: https://eips.ethereum.org/EIPS/eip-1577
Description: Allows users browse ENS domains using contenthash standard.
Used for: Browser, DApp support.
Related: status-im/status-mobile#6688
Sourcecode: https://github.com/status-im/status-react/blob/develop/src/status_im/utils/contenthash.cljs https://github.com/status-im/status-react/blob/develop/test/cljs/status_im/test/utils/contenthash.cljs#L5
Support: Partial.
Reference: https://eips.ethereum.org/EIPS/eip-1581
Description: Allow wallet to derive keys that are less sensible (non wallet).
Used for: Security (dont reuse wallet key) and user experience (dont request keycard every login).
Related: status-im/status-mobile#9088 status-im/status-mobile#9096
Sourcecode: https://github.com/status-im/status-react/blob/develop/src/status_im/constants.cljs#L242