체인의정석

컨트렉트 작성시 인터페이스와 상속 순서 본문

블록체인/Solidity

컨트렉트 작성시 인터페이스와 상속 순서

체인의정석 2022. 1. 21. 15:51
728x90
반응형

컨트렉트를 작성하고 컴파일을 하면서 

TypeError: Linearization of inheritance graph impossible

다음과 같은 에러가 나타났다.

 

이러한 에러에 대하여 찾아보니. 상속의 순서를 최소화 시키지 않고 중복되지 않게 해야 오류가 안난다고 한다.

 

이에 따라서 확장성을 고려하여 설계한 각 컨트렉트에서는 하나의 인터페이스로 묶고 인터페이스를 상속해주어야지 실제로 해당 하위 컨트렉트에 external을 불러와서 사용할 수 있게 되기 때문에

 

원래 작성했던 컨트렉트에서 공통된 부분으로 뽑아서 하위에 전달해야 하는 공통부분을 인터페이스로 만드는 작업을 진행하였다.

 

각 토큰 유형별로 있는 컨트렉트의 공통 함수를 뽑아서 하나의 인터페이스로 잡은 후 최상단에서는 해당 인터페이스만 작업하도록 만들었다.

이런식으로 하여서 토큰의 유형이 추가될때 해당 인터페이스를 가져와서 상속받은 상위 컨트렉트를 상속받는다면 다른 토큰 표준도 확장이 가능하다. 또한 한 종류의 토큰에서도 다양한 커스터마이징 기능이 들어갈 수 있으므로 이를 공통으로 묶어주기 위하여 토큰별로 인터페이스를 한번 더 확장하는 식으로 구현해볼 예정이다. 표준이 있는 토큰은 그냥 확장하면 되지만 표준이 없는 랩드된 토큰은 랩드기준으로 인터페이스로 한번 묶는 식으로 확장이 가능하도록 구현하도록 다시 설계를 진행할 예정이다.

 

그간 표준을 그대로 가져와서 사용하다보니 원래는 컨트렉트의 인터페이스를 어떻게 만들까 고민했었는데 이처럼 공통적으로 외부 호출을 하기위하여 abi를 뽑아내는 용도로 사용하면 되는것 같다.

728x90
반응형
Comments