체인의정석

Solidity 0.5.0 version) 오류 해결 NomicLabsHardhatPluginError: You are trying to create a contract factory for the contract, which is abstract and can't be deployed. 본문

블록체인/Solidity

Solidity 0.5.0 version) 오류 해결 NomicLabsHardhatPluginError: You are trying to create a contract factory for the contract, which is abstract and can't be deployed.

체인의정석 2022. 1. 27. 14:26
728x90
반응형

다음과 같이 오류가 나서 한참을 해메었다.

https://forum.openzeppelin.com/t/you-are-trying-to-create-a-contract-factory-for-the-contract-which-is-abstract-and-cant-be-deployed/11730/3

 

You are trying to create a contract factory for the contract, which is abstract and can't be deployed

Hello @mansijoshi17 if the compiler forces the contract to be marked as an abstract contract, that is because there are function that are defined and not implemented OR that you inherit from contract that have constructors with arguments, and that are not

forum.openzeppelin.com

해당 글을 보니 이는 상속받은 컨트렉트에 대한 생성자를 다 넣지 않는것과 같이 상속등을 잘 해결하지 않으면 컴파일러가 추상화된 컨트렉트로 여기는 증상이였다.

 

여기서 힌트를 얻어 상속받은 인터페이스를 보니 관리자 권한으로 실행이 되도록 만든 퍼블릭 함수가 인터페이스로 되어 있는 것을 볼 수 있었다. 인터페이스에서는 가져와서 바꾸고 회부에서 호출할 함수만 선택하여 남기도록 하였다.

 

이전에 퍼블릭 함수를 인터페이스에서 정의한 적이 있었는데. 인터페이스에서는 다른곳에서 상속에서 덮어쓸 함수 또는 다른곳에서 import해와서 조회 할 수 있는 view 계열의 함수만 있으면 된다. 이런식으로 인터페이스에서 필요한 항목들만 넣어야 하며 관리자 권한을 내부적으로 사용하고 관리자 개인 권한으로 사용할 경우 public 이더라도 인터페이스에는 추가하지 않는것이 좋은것 같다.

 

728x90
반응형
Comments