일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 러스트 기초
- git rebase
- 깃허브명령어
- 머신러닝기초
- 러스트기초
- multicall
- ethers
- 컨트렉트 동일한 함수이름 호출
- nestjs 튜토리얼
- 스마트컨트렉트 예약어 함수이름 중복
- Vue
- Vue.js
- nest.js설명
- vue기초
- 스마트컨트렉트 함수이름 중복 호출
- ambiguous function description
- ethers typescript
- chainlink 설명
- SBT표준
- 스마트 컨트렉트 함수이름 중복
- ethers v6
- rust 기초
- 러스트 기초 학습
- 스마트컨트렉트테스트
- 컨트렉트 배포 자동화
- ethers type
- ethers websocket
- 프록시배포구조
- 체인의정석
- 스마트컨트렉트프록시
- Today
- Total
체인의정석
Solidity에서 인터페이스의 상속과 단순 import의 차이 본문
인터페이스는 external로 정의를 한다. 이 경우 상속을 받으면 불러오거나 사용이 불가능하다.
따라서 상속을 해오지 않고 인터페이스를 import 만 해서 사용한다.
만약 인터페이스를 import 하는 경우 덮어써서 사용하는 방법인데 0.5.0 버전까지는 같은 이름으로 다시 작성을 하면 되며
다른것은 override 변수를 씌워주어야 한다.
인터페이스의 경우 활용법이 매우 햇갈리는것 같은데 정리된 사항은 다음과 같다.
1. 인터페이스의 경우 external로 통일한다.
2. 인터페이스의 경우 상속을 하면 오버라이딩을 통하여 사용을 한다.
3. 상속을 하지 않고 import만 하는 경우 함수 그대로 다른 컨트렉트의 주소를 넣어서 외부 호출을 할 때 사용한다.
4. 컨트렉트의 효율성을 위하여 하위 단계의 컨트렉트가 여러 유형이 있을 시 인터페이스를 import 하여 외부호출을 사용하고 하위의 컨트렉트는 인터페이스를 상속받아 함수의 내용을 각자에 맞게 작성한다.
5. 인터페이스가 상속하는 하위 컨트렉트에서 이미 상속이 되었다면 상위 레벨의 컨트렉트에서는 더 이상 상속하지 않아도 된다.
6. ERC 표준이 아닌 확장 부분 mintable, burnable과 같은 경우는 따로 구현하거나 확장 표준을 다운받아 사용할 수 있는데 확장 표준을 가져와서 사용하는 경우에는 Role 부분도 분리되어 있기 때문에 이에 유의한다.
5. 상속관계와 상하위 레벨을 분리할 때는 주소를 set하고 get해오는 함수를 작성해오고 이를 modifier로 작성하여 잘못된 호출의 가능성을 배제시킨다.
6. 변수나 구조체를 public으로 공개하지 말고 프라이빗으로 둔 후 조회하는 view 함수를 구현하다. 구현한 view 함수는 extrnal로 인터페이스에 놓고 다른 컨트렉트는 해당 view 함수를 사용하여서 조회를 해오도록 한다.
7. 인터페이스에 들어갈 address는 설정해둔 프라이빗 변수를 사용하는 식으로 가능하다.
=> 인터페이스와 컨트렉트간의 관계를 레벨에 맞게 잘 설계해야 제대로된 배포와 효율적인 컨트렉트의 관리가 가능하며, 조회의 경우 함수를 만들어서 하고 상속의 경우
'블록체인 > Solidity' 카테고리의 다른 글
Solidity Bytes vs Bytes32 (0) | 2022.01.26 |
---|---|
Solidity 0.5.0 버젼 오류해결 ) Invalid implicit conversion from uint256 to bytes memory requested (0) | 2022.01.25 |
solidity에서의 bytes32 자료형에 대하여 (0) | 2022.01.25 |
Solidity 0.5.0 버젼 오류해결 ) TypeError: Variables cannot be declared in interfaces. (0) | 2022.01.24 |
Solidity 0.5.0 버젼 오류해결 ) TypeError: Functions in interfaces must be declared external (0) | 2022.01.24 |