WPCI 프로젝트
- WPCI는 wrapped pci의 약어이자, 이더리움 ERC20 기반으로 발행된 PCI를 뜻한다. WPCI는 Hyperledger Fabirc 기반의 PCI를 이더리움 기반의 PCI로 스왑하기 위한 용도이다.
- Wrap 동작원리
- 사용자가 (fab) wrap Tx 수행
- (fab) wrap state 및 wrap balanace log (type=10) 생성
- (fab) multi-sig의 경우 wrap balance log 대신 deposit log(type=4) 생성
- 브릿지가 (fab) wrap tx 감지 -> fee 수량만큼 제외한 (eth) wpci 발행 tx 수행
- 잘못된 수량 (e.g. fee 부족) 등의 문제 있을 시 wpci 발행하지 않고, ‘wrap-complete job 추가’
- 브릿지가 (eth) wpci 발행완료 감지 -> ‘wrap-complete job 추가’
- 브릿지가 job queue에서 tx를 순서대로 처리
- ‘wrap-complete’ tx의 경우, 이더리움에서 wrap 블록 48 Confirm 완료된 후 브릿지에서 호출되며, 성공-complete와 실패-complete가 있음
- 성공-complete가 된 경우는, 정상적인 (eth) tx가 발생하여 eth-tx-id가 있는 경우임
- ‘(fab) 원래 wrap 수량’ - ‘(eth) 실제 wpci 발행 수량’ = fee를 계산 (브릿지의 fee옵션 값은 중간에 바뀔 수 있으므로…)
- (fab) 브릿지 계좌에 fee를 제외한 수량을 합쳐주고, fee 계좌로는 fee수량을 보냄
- (fab) 브릿지 계좌에 wrap-complete balance log (type=12) 생성
- wrap-complete balance log의 rid는 ‘(fab) wrap tx id’, ext_tx_id는 ‘(eth) wrap tx id’
- (fab) wrap state 완료 처리 (중복방지)
- 실패-complete가 된 경우는, (eth) tx가 발생하지 않고 완료 처리를 해야하는 경우임
- (fab) 브릿지 계좌에 ‘원래 wrap 수량’을 전액 합침 (fee 없음)
- (fab) 브릿지 계좌에 wrap-complete balance log (type=12) 생성
- wrap-complete balance log의 rid와 ext_tx_id 둘 다 ‘(fab) wrap tx id’
- (fab) wrap state 완료 처리 (중복방지)
- 성공-complete가 된 경우는, 정상적인 (eth) tx가 발생하여 eth-tx-id가 있는 경우임
- Unwrap 동작원리
- 사용자가 메타마스크를 통해 (eth) unwrap tx 수행
- 브릿지가 (eth) wpci unwrap tx 감지 -> ‘unwrap job 추가’
- 브릿지가 job queue에서 tx를 순서대로 처리
- ‘unwrap’ tx의 경우 일반-unwrap과 불가능-unwrap이 있음
- 일반-unwrap
- (fab) 브릿지 계좌에서 사용자 계좌로 ‘(eth) 실제 wpci 소각 수량’ 만큼 이체
- (fab) 사용자 계좌에는 unwrap balance log (type=11) 생성
- unwrap balance log의 rid는 ‘(eth) 주소 - EOA’, ext_tx_id는 ‘(eth) unwrap tx id’
- (fab) 브릿지 계좌에는 unwrap-complete log (type=13) 생성
- unwrap-complete log의 rid는 ‘(fab) 주소’, ext_tx_id는 ‘(eth) unwrap tx id’
- (fab) unwrap state 생성 (중복방지)
- 불가능-unwrap (사용자 계좌가 잘못된 경우)
- (fab) 자산 이동 없이 브릿지 계좌에 unwrap-complete log (type=13) 생성
- unwrap-complete log의 rid는 ‘(fab) 브릿지 주소’, ext_tx_id는 ‘(eth) unwrap tx id’, diff는 0
- (fab) unwrap state 생성 (중복방지)
- 일반-unwrap