아마 Ice age 보다도 더 심한놈 같습니다;;
만약에 이더리움 재단측의 하드포크를 안따라가는, 혹은 별도의 체인이 생길 경우 Geth 클라이언트는 다른 노드가 보내준 서명된 거래를 블록안에 포함시키게 되어 있습니다.
만약에 두개의 이더리움 체인이 존재하고 이 둘이 같은 거래확장자, 혹은 같은 형식의 전자서명된 거래를 처리한다면 노드는 하드포크된 블록은 구별해도 거래는 구별을 못하기 떄문에 같은 형식의 거래는 2개의 체인에서 리플레이 됩니다.
이 리플레이를 막기 위해서는 노드 분리로도 막을수 있겠지만 수동으로 거래를 집어넣는 경우도 존재하기에 반드시 트랜젝션 폼을 바꿔서 노드가 체인 안에 포함시키지 못하게 막아야 합니다.
이 대안으로 EIP-155를 제안하여 적용하였으나 만약에 이더리움체인에 불만이 있어서 이더리움 체인을 하드포크하거나 하드포크가 안된 체인을 유지시키고자 하면은 chainid 값을 바꾸지 않는 이상 리플레이 어택에 취약해 집니다.
더군다나 "이미" EIP-155가 적용된 체인을 하드포크하고자 하면
1. chainid 값을 바꿀경우 기존 체인 데이터베이스와 충돌이 일어나서 EIP-155가 적용되기 전 블록으로 돌아갑니다.
2. 대안으로 거래를 서명하는 소스에서 chainid값을 특정블록 이후에 값을 증가시켜서 서명하게 하는 경우에는 기존에 chainid 값 1 으로 서명된 거래도 받아들이기에 리플레이 방지의 반쪽 성공이 됩니다. https://github.com/etherite/go-etherite/commit/116a9774d12689199919882bc2c9dfc185c72990
3. 위 1,2번 의 경우가 실패하였으니 가장 간단하게 떠올릴수 있는 방안은 클라이언트를 EIP-155를 적용하기 전 상태로 되돌려서 특정 시점 이후부터 적용시키는것, 그러니까 꼼수를 써서 기존의 EIP-155 서명을 무시하고 특정시점 이후부터 새로운 chainid 값으로 EIP-155를 발동시키면 다른 이더리움 클래식 체인이나 다른 테스트넷 체인과 같은 입장이 됩니다. https://github.com/EthereumVega/EVA-00D/commit/649e5eda59099e7a0a17fdbaba87fed2fc8aedcb
이 3번을 연구하고 있으나 컴파일하고 실행시켜보면 결과는 2번과 같게 나옵니다. 힘들군요 ㅠㅠ
이더리움 재단이 자신들의 체인 하나를 강요하는것이 아닌 다른 Alternative 체인도 허용해 줬으면 하는 생각입니다.
분명히 다른 의견이 존재할텐데 그걸 묵살시키는 것은 decentralized 에 안맞다고 봅니다.
-------------------------------------
꼬리말
* 게시글 내용 삭제시 레벨 강등
* 질문은 각 주제별 게시판에.
비트코인 암호화화폐 커뮤니티 땡글~ 땡글~
-------------------------------------
https://twitter.com/VitalikButerin/status/918372499091374080