This EIP adds an opcode that returns the current chain's EIP-155 unique identifier.
## Motivation
[EIP-155](https://github.com/ethereum/EIPs/blob/master/EIPS/eip-155.md) proposes to use the chain id to prevent replay attacks between different chains. It would be a great benefit to have the same possibility inside smart contracts when handling signatures, especially for Layer 2 signature schemes using [EIP-712](https://github.com/ethereum/EIPs/blob/master/EIPS/eip-712.md).
## Specification
Adds a new opcode at 0x46, which takes 0 stack arguments. It will return the chain id of the chain where the block was mined. It should cost 2 gas (`G_base`) to execute this opcode.
## Rationale
The current approach proposed by EIP-712 is to specify the chain id on compile time. Using this approach will result in problems after a hardfork, as well as human error that may lead to loss of funds or replay attacks on signed messages.
By adding the opcode it would be possible to access the current chain id and validate signatures based on that.
## Backwards Compatibility
This EIP should be fully backwards compatible for all chains which implement EIP-155 chain ID domain separator for transaction signing.
## Test Cases
TBD
## Implementation
A sample implementation was attempted here: https://github.com/fubuloubu/py-evm/commit/eaab5ffa2164d4cc06ae5c855a49d030965be828
## Copyright
Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/).