|
|
(사용자 2명의 중간 판 3개는 보이지 않습니다) |
1번째 줄: |
1번째 줄: |
− | '''ERC-165'''는 Ethereum Request for Comment165의 약자로서 토큰 대신에 방법에 대한 표준을 지정한다. 인터페이스 확인 구현 후 인터페이스 게시하며 스마트 컨트랙트에 주어진 인터페이스를 언제 사용하는지 감지한다. | + | '''ERC-165'''는 "Ethereum Request for Comment 165"의 약자로서, 토큰 대신에 방법에 대한 표준을 지정한다. 인터페이스 확인 구현 후 인터페이스 게시하여 [[스마트 컨트랙트]]에 주어진 인터페이스를 언제 사용하는지 감지한다. |
− | == 개요 ==
| |
− | ERC-165는 Ethereum Request for Comment165의 약자로서 토큰 대신에 방법에 대한 표준을 지정한다. 인터페이스 확인 구현 후 인터페이스 게시하며 스마트 컨트랙트에 주어진 인터페이스를 언제 사용하는지 감지한다.
| |
− | == 종류 ==
| |
− | === ERC-223 ===
| |
− | ERC-223은 ERC-20의 토큰 표준 개선이다. 대부분의 사람은 ERC-20 표준에 지갑과 유사한 방식으로 스마트 계약서로 전송된 모든 전송이 유실될 수 있는 주요 결함이 있음을 알지 못한다. 즉, 트랜잭션이 무효로 등록되는 대신 토큰이 사라지고 회복할 수 없게 된다.[3] 이더리움 커뮤니티가 ERC-20에 있는 결정, 즉, 토큰들이 우연히 사라질 수 있는 오류에 대해 손 놓고 있는 것은 아니다. 그럼에도 많은 디앱 프로젝트들이 ERC-20을 수행했기 때문에 토큰들이 사라졌다. 손실이 70만 달러에서 100만 달러 정도로 추정이 가능하다. ERC-223은 토큰 스마트 계약에서 직접 보냈을 때 토큰 손실이 될 수 있다는 ERC-20의 문제를 수정한 것이다. ERC-223의 또 다른 혜택은 본질적으로 토큰들이 스마트 계약에서 한 번에 다른 지갑으로 보내질 수 있도록 지원한다. 이 기능 때문에 지갑은 원장 업데이트를 위해 토큰 스마트 계약을 필요로 하지 않는다. 이 새로운 기능에 따른 부산물은 두 개가 아니라 하나의 기능을 확인하는 것이기 때문에 가스비가 절반 정도밖에 안 된다는 것이다. 가스비는 소액 결제로 스마트 계약이나 간단한 거래를 실행할 때 필요하다. 거래를 실행할 때마다 이더리움 네트워크 채굴자들에게 보상을 주기 위해 지불하는 소액 수수료 개념이다.<ref name="ERC 종류"> 핵심만 콕콕! 암호화폐 분석, 〈[http://wiki.hash.kr/index.php/ERC-20 해시넷 ERC-20]〉, 《해시넷》 </ref>
| |
− | | |
− | === ERC-777 ===
| |
− | ERC-20의 버그를 위한 또 다른 해결책이 2017년 11일 20일에 제안됐다. 이더리움 커뮤니티에는 ERC-777로 제출됐고, ERC-20에 대한 해결책이면서 ERC-223과 같이 고유의 혜택도 제공한다. ERC-777은 ERC-820의 기능을 가져와 모든 사람에게 스마트 계약 주소를 볼 수 있게 하고, 그것들의 기능을 체크할 수 있게 한다. 그리고 이를 트랜잭션이나 요구된 액션들을 검증하는 데 사용한다. ERC-20의 간단한 전송과 확인에서, ERC-777의 보내기 기능으로 본질을 바꾸면서, 토큰과 스마트 계약 그 자체로 더욱 많은 것들을 할 수 있게 된다. 새로운 기능으로 ERC-777은 실행하려는 행동들의 본성을 체크하고 액션을 실행할지 말지 결론을 내릴 수 있다. 그러나 아쉽게도 ERC-777은 당장 ERC-20을 사용하는 모든 프로젝트에 적용되는 것은 아니다. 하지만 전체적인 이더리움 커뮤니티 합의는, 결과적으로 시간이 걸리겠지만, 결국 ERC-777은 수행될 것이다.<ref name="ERC 종류"> 핵심만 콕콕! 암호화폐 분석, 〈[http://wiki.hash.kr/index.php/ERC-20 해시넷 ERC-20]〉, 《해시넷》 </ref>
| |
− | | |
− | === ERC-721 ===
| |
− | ERC-721은 NFT(Non-Fungible Token)이다. ERC-721은 개발자들이나 복수의 소유자들 사이에서 공유될 수 없는 토큰을 개발할 수 있게 한다. 개별적인 각각의 NFT를 위한 기능과 상태를 포함하게 해준다. ERC-721 기능은 디앱 게임들에 광범위하게 적용됐다. 캐릭터나 아이템을 나타내기 위해 NTF를 구현한 게임들이 있다. 대표적인 사례가 이더몬이다. [4] ERC-721은 본질적으로 토큰이 디앱 내에서 공유될 수 있고 미래 NFT 생성에 영향을 미칠 수 있는 수집물이 되도록 한다. NFT는 무제한으로 공급이 가능하다. 하지만 NFT의 가치가 떨어지지 않게 하려고 대부분의 디앱 프로젝트는 전체 공급량을 제한한다.<ref name="ERC 종류"> 핵심만 콕콕! 암호화폐 분석, 〈[http://wiki.hash.kr/index.php/ERC-20 해시넷 ERC-20]〉, 《해시넷》 </ref>
| |
− | | |
− | | |
− | === ERC-998 ===
| |
− | ERC-998은 ERC-721과 함께 사용되는 기술로 플레이어들이 모든 통계와 항목 및 토큰을 포함한 전체 캐릭터를 한 번에 전송할 수 있게 한다.<ref name="ERC 종류"> 핵심만 콕콕! 암호화폐 분석, 〈[http://wiki.hash.kr/index.php/ERC-20 해시넷 ERC-20]〉, 《해시넷》 </ref>
| |
− | | |
| | | |
| == 기능 == | | == 기능 == |
35번째 줄: |
19번째 줄: |
| } | | } |
| | | |
− | solidity의 함수들은 모두 selector를 가지고 있다. selector는 간단히 생각하시면 함수의 아이디라고 생각한다. 이 아이디를 만드는 방법은 함수의 시그니처를 해싱하는 것이다. 예를 들어서
| + | [[솔리디티]](Solidity)의 함수들은 모두 selector를 가지고 있다. selector는 간단히 생각하시면 함수의 아이디라고 생각한다. 이 아이디를 만드는 방법은 함수의 시그니처를 [[해싱]]하는 것이다. 예를 들어서 |
| | | |
| function balanceOf(address _owner) external view returns (uint256){ | | function balanceOf(address _owner) external view returns (uint256){ |
50번째 줄: |
34번째 줄: |
| | | |
| 이렇게 컨트랙트 내부에서 각 메소드의 selector를 호출해서 확인할 수 있다. 기본적으로 함수의 시그니처에 따라 다른 해시값이 나오고 이 해시값이 해당 함수의 selector가 된다. | | 이렇게 컨트랙트 내부에서 각 메소드의 selector를 호출해서 확인할 수 있다. 기본적으로 함수의 시그니처에 따라 다른 해시값이 나오고 이 해시값이 해당 함수의 selector가 된다. |
− | ERC-165에선 인터페이스의 구현 여부를 확인하기 위해 이 selector를 사용한다. | + | ERC-165에선 인터페이스의 구현 여부를 확인하기 위해 이 selector를 사용한다. 이 때 함수의 selector가 해당 함수의 ID라고 한다면 우리는 인터페이스에서 정의한 함수를 모두 구현했는지 여부를 확인하기 위해 인터페이스의 ID에 해당하는 값이 필요하다. 이 아이디는 인터페이스를 구성하는 모든 함수의 selector를 비트 단위 xor 연산을 해서 구한다. |
− | 이 때 함수의 selector가 해당 함수의 ID라고 한다면 우리는 인터페이스에서 정의한 함수를 모두 구현했는지 여부를 확인하기 위해 인터페이스의 ID에 해당하는 값이 필요하다. 이 아이디는 인터페이스를 구성하는 모든 함수의 selector를 비트 단위 xor 연산을해서 구한다. | |
− | | |
| | | |
| pragma solidity ^0.4.20; | | pragma solidity ^0.4.20; |
79번째 줄: |
61번째 줄: |
| this.is2D.selector ^ this.skinColor.selector | | this.is2D.selector ^ this.skinColor.selector |
| | | |
− | 와 같이 연산하는 것을 볼 수 있다. 해당 스마트 컨트랙트 Homer가 Simpson 인터페이스를 구현했는지 여부를 확인하고 싶다면 function supportsInterface(bytes4 interfaceID) {} 에 Simpson의 인터페이스 id를 파라미터로 넣어서 호출한다. true를 반환한다면 컨트랙트 Homer 는 Simpson 인터페이스를 구현한 것이고, false 를 반환한다면 구현하지 않은 것이다.<ref> 김병하, 〈[https://medium.com/humanscape-tech/erc-165%EB%9E%80-%EB%AD%98%EA%B9%8C-910b29533188 ERC-165란 뭘까?]〉, 《humanscape-tech》 , 2018-08-17 </ref>
| + | 위와 같이 연산하는 것을 볼 수 있다. 해당 스마트 컨트랙트 Homer가 Simpson 인터페이스를 구현했는지 여부를 확인하고 싶다면 function supportsInterface(bytes4 interfaceID) {} 에 Simpson의 인터페이스 id를 파라미터로 넣어서 호출한다. true를 반환한다면 컨트랙트 Homer 는 Simpson 인터페이스를 구현한 것이고, false 를 반환한다면 구현하지 않은 것이다.<ref> 김병하, 〈[https://medium.com/humanscape-tech/erc-165%EB%9E%80-%EB%AD%98%EA%B9%8C-910b29533188 ERC-165란 뭘까?]〉, 《humanscape-tech》 , 2018-08-17 </ref> |
| | | |
| {{각주}} | | {{각주}} |
86번째 줄: |
68번째 줄: |
| * 김병하, 〈[https://medium.com/humanscape-tech/erc-165%EB%9E%80-%EB%AD%98%EA%B9%8C-910b29533188 ERC-165란 뭘까?]〉, 《humanscape-tech》, 2018-08-17 | | * 김병하, 〈[https://medium.com/humanscape-tech/erc-165%EB%9E%80-%EB%AD%98%EA%B9%8C-910b29533188 ERC-165란 뭘까?]〉, 《humanscape-tech》, 2018-08-17 |
| * 아마듈라, 〈[https://blog.naver.com/amadula?Redirect=Log&logNo=221569730112 암호화폐 Tips - ERC 스탠다드 종류 (ERC20 , ERC721, ERC884)[출처] 암호화폐 Tips - ERC 스탠다드 종류 (ERC20 , ERC721, ERC884)]〉, 《아마듈라 블록체인 블로그》, 2019-06-04 | | * 아마듈라, 〈[https://blog.naver.com/amadula?Redirect=Log&logNo=221569730112 암호화폐 Tips - ERC 스탠다드 종류 (ERC20 , ERC721, ERC884)[출처] 암호화폐 Tips - ERC 스탠다드 종류 (ERC20 , ERC721, ERC884)]〉, 《아마듈라 블록체인 블로그》, 2019-06-04 |
− | * 〈[http://wiki.hash.kr/index.php/ERC-20 해시넷 ERC-165]〉, 《해시넷》
| |
− |
| |
− |
| |
| | | |
| + | == 같이 보기 == |
| + | * [[ERC]] |
| | | |
| {{블록체인 기술|검토 필요}} | | {{블록체인 기술|검토 필요}} |
ERC-165는 "Ethereum Request for Comment 165"의 약자로서, 토큰 대신에 방법에 대한 표준을 지정한다. 인터페이스 확인 구현 후 인터페이스 게시하여 스마트 컨트랙트에 주어진 인터페이스를 언제 사용하는지 감지한다.
- 토큰 대신 방법에 대한 표준
- 인터페이스 확인 구현후 인터페이스 게시
- 스마트 컨트랙트에 주어진 인터페이스를 언제 사용하는지 감지[1]
ERC-165 인터페이스[편집]
pragma solidity ^0.4.20;
interface ERC165 {
/// @notice Query if a contract implements an interface
/// @param interfaceID The interface identifier, as specified in ERC-165
/// @dev Interface identification is specified in ERC-165. This function
/// uses less than 30,000 gas.
/// @return `true` if the contract implements `interfaceID` and
/// `interfaceID` is not 0xffffffff, `false` otherwise
function supportsInterface(bytes4 interfaceID) external view returns (bool);
}
솔리디티(Solidity)의 함수들은 모두 selector를 가지고 있다. selector는 간단히 생각하시면 함수의 아이디라고 생각한다. 이 아이디를 만드는 방법은 함수의 시그니처를 해싱하는 것이다. 예를 들어서
function balanceOf(address _owner) external view returns (uint256){
//...
};
위와 같은 함수의 아이디를 얻기 위해서는
bytes4(keccak256("balanceOf(address)"))
위처럼 keccak256을 이용해서 해싱하거나 혹은
this.balanceOf.selector
이렇게 컨트랙트 내부에서 각 메소드의 selector를 호출해서 확인할 수 있다. 기본적으로 함수의 시그니처에 따라 다른 해시값이 나오고 이 해시값이 해당 함수의 selector가 된다.
ERC-165에선 인터페이스의 구현 여부를 확인하기 위해 이 selector를 사용한다. 이 때 함수의 selector가 해당 함수의 ID라고 한다면 우리는 인터페이스에서 정의한 함수를 모두 구현했는지 여부를 확인하기 위해 인터페이스의 ID에 해당하는 값이 필요하다. 이 아이디는 인터페이스를 구성하는 모든 함수의 selector를 비트 단위 xor 연산을 해서 구한다.
pragma solidity ^0.4.20;
import "./ERC165.sol";
interface Simpson {
function is2D() external returns (bool);
function skinColor() external returns (string);
}
contract Homer is ERC165, Simpson {
function supportsInterface(bytes4 interfaceID) external view returns (bool) {
return
interfaceID == this.supportsInterface.selector || // ERC165
interfaceID == this.is2D.selector
^ this.skinColor.selector; // Simpson
}
function is2D() external returns (bool){}
function skinColor() external returns (string){}
}
위 코드에서 보면 Simpson이라는 인터페이스의 인터페이스 id를 구하기 위해
this.is2D.selector ^ this.skinColor.selector
위와 같이 연산하는 것을 볼 수 있다. 해당 스마트 컨트랙트 Homer가 Simpson 인터페이스를 구현했는지 여부를 확인하고 싶다면 function supportsInterface(bytes4 interfaceID) {} 에 Simpson의 인터페이스 id를 파라미터로 넣어서 호출한다. true를 반환한다면 컨트랙트 Homer 는 Simpson 인터페이스를 구현한 것이고, false 를 반환한다면 구현하지 않은 것이다.[2]
- ↑ 아마듈라, 〈암호화폐 Tips - ERC 스탠다드 종류 (ERC20 , ERC721, ERC884)[출처 암호화폐 Tips - ERC 스탠다드 종류 (ERC20 , ERC721, ERC884)]〉, 《아마듈라 블록체인 블로그》 , 2019-06-04
- ↑ 김병하, 〈ERC-165란 뭘까?〉, 《humanscape-tech》 , 2018-08-17
참고자료[편집]
- 김병하, 〈ERC-165란 뭘까?〉, 《humanscape-tech》, 2018-08-17
- 아마듈라, 〈암호화폐 Tips - ERC 스탠다드 종류 (ERC20 , ERC721, ERC884)[출처 암호화폐 Tips - ERC 스탠다드 종류 (ERC20 , ERC721, ERC884)]〉, 《아마듈라 블록체인 블로그》, 2019-06-04
같이 보기[편집]
이 ERC-165 문서는 블록체인 기술에 관한 글로서 검토가 필요합니다. 위키 문서는 누구든지 자유롭게 편집할 수 있습니다. [편집]을 눌러 문서 내용을 검토·수정해 주세요.
|
블록체인 : 블록체인 기술 □■⊕, 합의 알고리즘, 암호 알고리즘, 알고리즘, 블록체인 플랫폼, 블록체인 솔루션, 블록체인 서비스
|
|
블록체인 기술
|
Bech32 • BTP • DRC-20 • EIP • IPFS • KRC-20 • NFT 마켓플레이스 • P2P • P2PKH • P2SH • PFP • PUF • SPV • TPS • TRC-20 • UTXO • 가나슈 • 가명성 • 가스 • 가십 • 가십 프로토콜 • 개념증명(PoC) • 검증가능지연함수(VDF) • 게스 • 고스트 프로토콜 • 공공예산 • 글로벌신뢰인공지능 • 대체가능토큰 • 대체불가토큰(NFT) • 도지더리움 브릿지 • 디지털 자산 • 디지털 희소성 • 라운드 • 라운드 로빈 • 라이트하우스 • 랜덤 • 레그테크 • 레이든 • 리카르디안 계약 • 린스타트업 • 마스터키 • 마스트 • 메인넷 • 멜팅 • 믹싱 • 민팅 • 밈블윔블 • 반감기 • 베타넷 • 변경불가성 • 브릿지 • 블록체인 생태계 • 블록체인 클라우드 서비스(BaaS) • 블룸필터 • 비블록체인 • 비앱 • 비콘체인 • 비트코인코어 • 빤통경제 • 수정 고스트 프로토콜 • 스냅샷 • 스마트 계약 • 스마트 브리지 • 스웜프로토콜 • 스크립트퍼브키 • 스테이킹 • 스텔스 주소 • 스핀오프코인 • 슬래싱 • 시크릿 컨트랙트 • 심플 컨트랙트 • 아토믹스왑 • 암호경제(크립토 이코노미) • 앤드어스체인인공지능 • 앵커링 • 언스테이킹 • 에어드랍 • 에폭 • 오프체인 오더락 • 오피리턴 • 옵코드 • 원토큰 문제 • 웨이 • 위스퍼 프로토콜 • 위임 • 유니스왑 • 유동성 • 이더리움 가상머신(EVM) • 이더리움 클라이언트 • 이중지불 • 익명성 • 인증된 익명 아이디 • 인터레저 프로토콜(ILP) • 자산화 • 잠금 스크립트 • 최소기능제품(MVP) • 컨소시엄 블록체인 • 컬러드코인 • 코인셔플 • 코인소각 • 코인에이지 • 코인조인 • 코인토싱 • 크립토노트 • 키스토어 • 타임락 • 테스트넷 • 토다 • 토큰 이코노미 • 토큰화 • 튜링완전 • 튜링불완전 • 트랜잭션 아이디(TxID) • 트러스트 컨트랙트 • 트루빗 • 트릴레마 • 파워 • 파티셔닝 • 퍼블릭 블록체인 • 페널티 • 프라이버시 • 프라이빗 블록체인 • 플랫폼 • 플러딩 • 피어 • 피투피(P2P) • 하이브리드 블록체인 • 합의 • 해시락 • 해시타임락(HTLC) • 해제 스크립트 • 확장성
|
|
해시
|
레인보우 테이블 • 매핑 • 머클경로 • 머클루트 • 머클트리 • 분산해시테이블(DHT) • 블록해시 • 스큐드 머클트리 • 온라인툴즈 • 이전블록해시 • 카뎀리아 • 해시 • 해시레이트 • 해시맵 • 해시충돌 • 해시테이블 • 해시파워 • 해시함수 • 해싱
|
|
블록
|
고아블록 • 그래핀 • 논스 • 마이크로블록 • 베이킹 • 북키퍼 • 브랜치블록 • 브로드캐스팅 • 블록 • 블록높이 • 블록바디 • 블록생성자 • 블록정보 • 블록타임 • 블록헤더 • 비츠 • 세그윗 • 엉클블록 • 완결성 • 제네시스블록 • 타임스탬프 • 프룻 • 프룻체인
|
|
체인
|
더블체인 • 라이트닝 네트워크 • 라이트닝 루프 • 루트체인 • 루프체인 • 메인체인 • 방향성 비순환 그래프(DAG) • 베리파이어블 프루닝 • 블록격자 • 블록체인 • 사용자 활성화 소프트포크(UASF) • 사용자 활성화 하드포크(UAHF) • 사이드체인 • 서브체인 • 소프트포크 • 오페라체인 • 오프체인 • 온체인 • 인터체인 • 차일드체인 • 체인 • 탱글 • 테스트체인 • 토카막 네트워크 • 포크 • 포크체인 • 퓨어체인 • 프로덕트체인 • 프루닝 • 프리포크 • 플라즈마 알고리즘 • 플라즈마캐시 • 플래시 계층 • 하드포크 • 해시그래프 • 홀로체인
|
|
노드
|
검증인(밸리데이터) • 기본노드 • 노드 • 라이트노드 • 랜덤노드 • 마스터노드 • 베이킹노드 • 보조노드 • 보증노드 • 슈퍼노드(슈퍼대표, 대표노드) • 슬롯 • 슬롯리더 • 엔드포인트노드(레인저노드) • 의회 네트워크 • 작업노드 • 종단노드 • 종자노드(시드노드) • 중계노드 • 지갑노드 • 채굴노드(마이닝노드) • 쿼럼 • 풀노드 • 합의노드
|
|
샤딩
|
네트워크 샤딩 • 데이터베이스 샤딩 • 동적샤딩 • 샤드 • 샤딩 • 스테이트 샤딩 • 알고리즘 샤딩 • 적응형 상태 샤딩 • 체인샤딩 • 트랜잭션 샤딩
|
|
채굴
|
병합채굴 • 사전채굴 • 에이식(ASIC) • 에이식부스트 • 에이식 저항 • 일드파밍 • 채굴 • 채굴 난이도 • 채굴량 • 탄소감축채굴 • 페어런치
|
|
탈중앙화
|
TVL • 거버넌스 • 게임파이 • 다오(DAO) • 다이코(DAICO) • 닥(DAC) • 닥스(DAX) • 덱스(DEX) • 디앱(DApp) • 디지오(DGO) • 디튜브 • 디파이(DeFi) • 분산경제 • 분산원장(DLT) • 분산 클라우드 • 소셜파이 • 씨파이(C-Fi) • 오프체인 거버넌스 • 온체인 거버넌스 • 원장 • 준중앙화 • 중앙화 • 탈중앙화 • 탈중앙화 TPS • 탈중앙화 조직(DO) • 탈중앙화 지수(DQ)
|
|
분산아이디
|
DIDs • IETF • ToIP • 검증가능한 자격증명 • 검증인 • 디지털아이덴티티재단 • 발급자 • 보유자 • 분산아이디(DID) • 분산아이디 기관 • 분산아이디 인증(DID Auth) • 아이온 • 자기주권 • 자기주권신원 • 최소화된 자격증명 데이터 • 탈중앙화 키관리시스템 • 통합해석기
|
|
오라클
|
상호인증 블록체인 • 오라클 • 오라클 머신 • 오라클 문제 • 오라클 서비스 • 중간자
|
|
BIP
|
BIP • BIP9 • BIP16 • BIP32 • BIP39 • BIP43 • BIP44 • BIP47 • BIP49 • BIP63 • BIP70 • BIP84 • BIP141 • BIP148
|
|
ERC
|
ERC • ERC-20 • ERC-165 • ERC-223 • ERC-621 • ERC-721 • ERC-777 • ERC-827 • ERC-884 • ERC-998 • ERC-1155 • ERC-1404
|
|
위키 : 자동차, 교통, 지역, 지도, 산업, 기업, 단체, 업무, 생활, 쇼핑, 블록체인, 암호화폐, 인공지능, 개발, 인물, 행사, 일반
|
|