체인의정석

Solidity 상속관련 컴파일 오류 해결하기, NomicLabsHardhatPluginError: You are trying to create a contract factory for the contract, which is abstract and can't be deployed. 본문

블록체인/Solidity

Solidity 상속관련 컴파일 오류 해결하기, NomicLabsHardhatPluginError: You are trying to create a contract factory for the contract, which is abstract and can't be deployed.

체인의정석 2022. 3. 3. 17:40
728x90
반응형
NomicLabsHardhatPluginError: You are trying to create a contract factory for the contract A, which is abstract and can't be deployed.

위 에러가 나왔다. 이전에도 한참 해맸어서 기억이 나는데 일단 이 경우 봐야 할 점은

 

1. 상속관계

2. 생성자 

 

위 2 부분중 문제가 생겨서 에러가 발생한다고 보면 된다.

 

이러한 에러는 

1. 컴파일 에러 해결

2. 배포 스크립트 실행

 

2번에서 발생되는 에러이다.

 

물론, 어디서 에러가 났는지는 알 방법이 없다. 따라서 나도 여기서 시간을 많이 잡아먹었는데 , 이러한 경우 에러가 나는 부분을 파악하기 위하여 상속해둔 컨트렉트나 새로 만든 함수들 인터페이스 위주로 하나씩 지워가며 어디서 에러가 나는지 확인한다.

 

내 경우에는 상속받은 인터페이스 컨트렉트에서 에러가 났다.

이 부분이 매우 햇갈리는 부분인데, 

인터페이스를 가져와서 다른 컨트렉트에 트랜잭션을 보낼때는 굳이 상속을 할 필요가 없다. 

이때는 위에서 import만 가져오기만 해도 코드가 이미 있으므로 인터페이스를 상속하지 않아도 되며, 인터페이스를 상속하는 경우는 해당 인터페이스를 받아서 이를 오버라이딩 하여 새로운 함수로 정의할 때만 있어야 한다.

 

한마디로 내가 햇갈렸던 부분은 코드를 import 해온 후 인터페이스를 상속받아 오버라이딩 하는 대신 상속받은 컨트렉트의 함수를 외부호출로 사용하려고 하였기 때문이다. 이러면 함수의 내용이 없이 인터페이스만 남기 때문에 추상화 컨트렉트라는 에러가 나오게 된다.

 

따라서 인터페이스를 상속받아 함수를 오버라이딩 하는게 아니라면 import 까지만 하고 이를 상속받아서 사용하는 경우는 없어야 한다.

728x90
반응형
Comments