mirror of https://github.com/status-im/EIPs.git
36 lines
1.7 KiB
Markdown
36 lines
1.7 KiB
Markdown
---
|
|
eip: 1344
|
|
title: ChainID opcode
|
|
author: Richard Meissner (@rmeissner)
|
|
discussions-to: https://ethereum-magicians.org/t/add-chain-id-opcode-for-replay-protection-when-handling-signed-messages-in-contracts/1131
|
|
category: Core
|
|
type: Standards Track
|
|
status: Draft
|
|
created: 2018-08-22
|
|
---
|
|
|
|
## Abstract
|
|
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/).
|