내 컨트랙트를 만들 때 ElmoToken에 openzeppelin 의 기존 소스 코드를 다음과 같이 상속해주었다.
다음과 같이 작성한 이유는 함수를 작성한 순서대로 그에 따라 필요한 소스코드를 추가하였기 때문이다.
contract ElmoToken is ERC20, AccessControl,Ownable, IERC20 {
하지만 아래와 같은 밑줄의 오류가 발생하였다.
"Linearization of inheritance graph impossible"
https://ethereum.stackexchange.com/questions/63564/question-regarding-linearization-of-inheritance
위 문서에 따르면 다중 상속 과정에서 컴파일 오류가 발생하는 다이아몬드 문제때문에 이 오류가 나타나는 것이다.
솔리디티는 다음과 같이 C3 linearization을 따른다.
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.4.0 <0.9.0;
contract X {}
contract A is X {}
//삐- 컴파일 오류
contract C is A, X {}
//컴파일 성공!
contract C is X, A {}
openzeppelin 소스코드의 상속 관계는 다음과 같다.
interface IERC20{
/////////////////
contract ERC20 is Context, IERC20, IERC20Metadata {
따라서 부모 컨트랙트인 IERC20을 앞으로 위치시켜야 한다.
아래처럼 코드를 수정했더니 오류가 뜨지 않았다.
contract ElmoToken is IERC20, ERC20, AccessControl,Ownable{
'solidity' 카테고리의 다른 글
22.09.05 npx hardhat test (0) | 2022.09.05 |
---|---|
22.08.29 락업이란? (0) | 2022.08.29 |
21.07.27 ERC-20 Token Contract (0) | 2021.07.28 |
21.07.23 Token Role (0) | 2021.07.26 |
21.07.22 Mint & Burn Token (2) | 2021.07.24 |