컨트랙트 구현1
265
投稿した質問数 2
constructor() 내에서
(this.functionname.selector ^ ... 의 내용이 길어서 생략으로 표현하신 거라면 아래의 의문은 유효하지 않습니다.)
1.
supportedInterfaces[ ]를
함수의 selector값을 xor연산 시킨값이 들어가야 한다고 설명을 하셨습니다. 그런데supportedInterfaces[0x80ac58cd]처럼 값을 지정을 시켜서 true값을 준다면
ERC165의 규정을 지키고 있다는 것을 '거짓'으로 보일 수 있는 것 아닌가요 ?
값을 지정시켜놓으면 Contract내부에서 ERC165의 규정을 지키지 않으면서도 지킨다는 것을 보이는 거라고 생각합니다.
2.
supportedInterfaces[this.supportInterface.selector] = true를 주었더니 compile은 되는데
Warning: "this" used in constructor. Note that external functions of a contract cannot be called while it is being constructed.
이라는 경고 메세지가 뜹니다.
반면 bytes4(keccak256("supportsInterface(bytes4)")) 을 이용한 부분은 경고 메세지가 뜨지 않았습니다.
this의 사용이 옳다고 봐도 되나요?
回答 2
1
1. 표준을 지키도록 것을 권고하는 것이죠. 구현하지 않은 인터페이스가 있음에도 불구하고 모두 구현한 것처럼 true로 한다면, 예를 들어 구현하지 않은 메소드를 있는 것으로 알고 호출하면 오류가 나겠죠? 모두 구현한 것처럼 거짓말을 하면 오류가 발생할 뿐입니다.
ERC-721을 설계한 윌리암 엔트리켄에 의하면 앞으로 솔리디티 내에서 인터페이스ID를 상수처럼 그냥 사용할 수 있도록 할 수도 있다는 말을 한 적이 있습니다. 각 컨트랙트에서 XOR를 하거나 아예 값을 적지 않아도 말입니다. 예를 들어 다음과 같은 식으로 말이죠: ERC721Enumerable.interfaceId
2. this는 컨트랙트를 가리키는 예약어 입니다. 경고의 의미는, 예를 들어 external로 지정한 함수는 원칙적으로 컨트랙트 내부에서 호출할 수 없지만 this를 사용하여 호출할 수 있습니다. 하지만 불필요한 가스를 소모하므로 장려하지도 않고 내부에서도 호출할 것이라면 external로 지정하면 안되겠죠? 컴파일러의 경고는 "this를 사용했다면 혹시 external 함수를 호출하려는 것이 아닌가?" 로 판단하여, 그렇다면 생성자에서는 this를 사용하여 함수를 호출할 수 없다는 것을 경고하는 의미가 되겠습니다.
좋은 질문 감사드립니다.
useEffect와 lifecycle문의
0
8
1
cd 다음에 어떻게 자연스럽게 문자가 써지죠?
0
12
1
클로드코드에 적용할 하네스? 툴? 추천 부탁드립니다.
0
13
0
14강 GIT 설치후 ~ config 명령어 입력이 안돼요
0
14
1
161강 자료 파일 안에 내용이 없네요.
0
18
1
/ide 명령어 실행 오류
0
18
1
Next.js 사전렌더링 이해하기 부분
0
13
1
subagents에 관한 질문이 있습니다.
0
18
1
클로드 코드 설치가 되지 않습니다...
0
25
1
output sytles 모든 프로젝트 적용시 디렉토리가 헷갈립니다 ㅠㅠ
0
22
1
터미널 줄바꿈 세팅
0
23
1
setting.json과 setting.local.json
0
27
1
카드 뉴스 만들기..
0
23
1
프로젝트 구성에 대해서 질문을 드려봅니다.
1
359
1
기본인터페이스에,
1
264
1
부트스트렙
1
252
1
IPFS
2
335
1
이더스캔 사이트 문의
1
412
1
안녕하세요 선생님
1
187
1
버전차이
1
242
3
module not found.
1
242
1
TypeError: Cannot read property “drizzle” of undefined
1
269
2
컴파일 오류 : MainContainer.js
1
276
2
Import 경로 설정 문의
1
242
2

