목차


Summary

SafeBridge 문제는 L1 → L2 브리지 문제이다. 사용자는 L1(레이어 1) 브릿지에 ERC20 토큰을 입금하고 해당 L2(레이어 2) 브릿지와 동기화할 수 있다. 계약은 CrossDomainEnabled 라이브러리를 사용하여 L1과 L2 간의 통신을 활성화하고, SafeERC20 라이브러리는 안전한 토큰 전송을 위해 사용된다. 계약은 예금 매핑을 사용하여 예치된 토큰을 추적한다.

contract Challenge {
    address public immutable BRIDGE;
    address public immutable MESSENGER;
    address public immutable WETH;

    constructor(address bridge, address messenger, address weth) {
        BRIDGE = bridge;
        MESSENGER = messenger;
        WETH = weth;
    }

    function isSolved() external view returns (bool) {
        return IERC20(WETH).balanceOf(BRIDGE) == 0;
    }
}

문제 풀이의 조건은 L1 브릿의 WETH ERC 20을 모두 빼오면 된다.

ENTRYPOINT [ "python3", "-u", "challenge/relayer.py" ]

그리고 문제에는 relayer.py 라는 코드가 실행 중이다.


Relayer.py

Thread(
            target=self._relayer_worker, args=(l1, l1_messenger, l2_messenger)
        ).start()
        Thread(
            target=self._relayer_worker, args=(l2, l2_messenger, l1_messenger)
        ).start()

relayer.py의 run() 함수에서는 _relayer_worker() 함수를 쓰레드로 위와 같이 실행 시키고 있다.

_relayer_worker()