초당 14~16개의 tx르 처리하는 이더리움은 초당 2만4000개를 처리하는 비자카드 같은 시스템을 구현 하는게 불가능하다.
거래 처리 역량의 부재로 인해 네트워크 과부하현상이 일어나면서 사용자들은 어쩔 수 없이
자신의 거래를 먼저 처리하기 위해 비싼 수수료를 지불하고 이더리움 네트워크를 이용해야 했다.
이러한 확장성 문제는 전부터 블록체인 트릴레마(BlockChain Trilemma) 라는 이름으로 많이 사람들 입에 오르내렸다.
Decentralization (탈중앙화)
Security (보안)
Scalability (확장성)
위 세가지를 모두 만족 시킬 수없다.
이 트릴레마의 확장성 문제를 해결하려는 접근법 중 하나가 바로 롤업(Rollup) 이다.
롤업은 이더리움의 확장성 문제를 해결하기 위해 외부에서 트랜잭션을 실행하고 그 결과값만 이더리움에 기록하는 솔루션이다. 심지어 효율성을 위해 모든 데이터를 기록하지도 않음.
컴퓨팅 파워를 들여 처리해야하는 기존방식이 아닌, 외부에서 하기 때문에 기존보다 많은 트랜잭션을 처리 할 수 있음.
우선 Smart Contract로 코인을 보낸다.
롤업 Contract에는 계속해서 롤업을 사용자들의 코인이 쌓이게 되고 머클트리 형식으로 관리 된다. (사용자들의 잔고를 이용해 만든 머클트리의 상태 루트값을 롤업 컨트랙트에 기록하여 관리)
트랜잭션을 처리한 후 각 계정의 잔고 상태를 바꾸고, 그 결과로 바뀐 루트의 최종값을 롤업 Contract에 올림.
만약 다시 Ethereum Network로 코인을 보내고 싶으면, 롤업 외부로 코인을 출금하는 계약함수를 실행시키면 된다.
이 과정에서 트랜잭션 처리가 제대로 되었는지에 대한 문제를 가용성문제(Data Availability Problem) 라고 한다. 이 데이터 가용성 문제를 해결하는 방식에 따라 롤업을 Optimistic Rollup / ZK Rollup 으로 분류한다.
트랜잭션을 제대로 처리했는지에 대한 문제를 간단한 방식으로 해결하는데, 그 방식은 진위 확인을 위한 모든 트랜잭션을 이더리움에 전송한다.
모든 트랜잭션을 사실이라고 가정하고 처리한다.
만약 의심가는 거래가 발생하면 롤업에 있는 검증자가 이더리움에 있는 트랜잭션들을 모두 재실행하여 값을 하나하나 대조한다.
이 과정을 사기 증명(Fraud Proof) 이라고 하는데, 사기를 밝혀낸 검증자에게는 보상이 주어지고 그 트랜잭션을 문제없다고 처리했던 참여자는 처벌을 받게 됩니다. 옵티미스틱 롤업 네트워크에 사기를 적발하려는 참여자가 1명이라도 있다면 이 시스템은 제대로 작동하게 된다.
단점
수백 개의 트랜잭션을 하나의 트랜잭션으로 묶은 후 이더리움 네트워크에 올리는 것은 동일하지만, 이더리움 네트워크에 올라가는 각 트랜잭션에는 영지식 증명 방식인 zk-SNARK 증명이 함께 제공된다.
이더리움 네트워크에 보내기지 전에 트랜잭션이 유효한지 검증이 완료되기 때문에, 모든 트랜잭션을 그대로 올리는것이 아니라 최적화를 통해 트랜잭션의 크기를 줄인 후 이더리움 네트워크에 전송한다.
예를 들어, 암호화폐를 주고받은 주소를 그대로 보내는 것이 아니라 머클 트리에 주소를 기록한 후 이 주소가 있는 위치의 인덱스를 대신 이더리움 네트워크에 보내게 됩니다. 원래라면 트랜잭션에 32Byte를 기록해야 하지만 4Byte 수준으로 대폭 줄이는 것입니다.
ZK Rollup 에는 두 종류의 참여자가 있다. (Transactor 와 Relayer)
Transactor는 롤업을 사용하는 주소와 그 주소의 잔고에 대해 각각 머클트리 형태로 데이터를 새로 기록한다.
Relayer는 Transactor에게 받은 데이터들을 모아 하나의 트랜잭션으로 합친다. 이 과정에서 Relayer는 zk-SNARK를 이용한 영지식 증명을 트랜잭션에 포함하게 되며, 이더리움 위의 스마트 컨트랙트에서 검증 된다.
ZK Rollup은 거래가 맞다는 증명을 트랜잭션마다 함께 보내기 떄문에