ERC20 토큰은 일종의 토큰 판매로 배포되는 몇 개를 소유하고 있기 때문에 모두 익숙합니다. 하지만 ERC20 외에 더 많은 표준이 존재한다는 것을 알고 계셨습니까? 이더 리움은 개발 된 표준의 오랜 역사를 가지고 있습니다..
ERC가 무엇을 의미하는지 더 잘 이해하기 위해 “Ethereum Request for Comment”의 약자입니다. 실제 표준에 대한 논의 및 제안을 위해 제출 된 제안입니다. 번호 (예 : 20)는 코드 공유 플랫폼의 문제 번호를 나타냅니다. Github. 먼저 ERC20 표준을 살펴 보겠습니다..
ERC20 표준
ERC20 표준은 정확히 무엇입니까?
ERC20 토큰의 출현은 암호 화폐 시장에 혁명을 일으켰고 ICO 암호 화폐 2015 년에 도입 된 ERC20 코드는 특정 이더 리움 기반 토큰이 배포해야하는 특정 규칙 목록을 요약하여 이더 리움 블록 체인에서 토큰의 기능을 프로그래밍하는 프로세스를 단순화합니다. 기본적으로 ERC20 토큰은 이더 리움의 블록 체인을 활용하는 특별한 형태의 스마트 계약입니다..
ERC20 토큰의 가장 눈에 띄는 예는 Bancor, EOS, Tronix, BNB, VeChain 및 Bankex입니다..
이더 리움 토큰에 대한 ERC20 표준이 혁신되기 전에 코더는 토큰을 개발하고 이더 리움 네트워크에서 실행하기위한 특정 구현 표준을 만들어야했습니다. 그럼에도 불구하고 ERC20 토큰 코드는 간소화 된 프로토콜과 스마트 계약 표준 덕분에 토큰 생성 프로세스를 단순화했습니다. ERC20 코드는 토큰의 스마트 계약 구현과 관련된 복잡성을 완화하여 토큰의 계약 위반 가능성을 크게 줄였습니다..
2018 년 4 월 현재 66,468 ERC20 토큰 계약, ERC20 표준에서 제공하는 토큰 코드의 균일 성 덕분에 암호 화폐 거래소가 거래 플랫폼에 다양한 토큰을 쉽게 상장 할 수있었습니다. 따라서 ERC20 표준은 암호화 커뮤니티가 엄청난 수의 이더 리움 기반 토큰과 관련 될 수있는 유동성 문제를 극복하는 데 도움이되었습니다..
ERC20 토큰 기능 :
ERC20 코드는 토큰에 대한 6 가지 특정 기능을 설명합니다.
1-를 통해 토큰의 총 공급량 얻기 "totalSupply" 함수
2-와 관련된 다른 계정의 토큰 잔액 검색 "_소유자" 주소를 통해 " balanceOf (address _owner) 상수 반환 (uint256 잔액)" 함수.
3- 특정 양의 토큰 보내기 "_값" 를 통해 주어진 주소로 " transfer (address _to, uint256 _value) returns (bool success)" 함수.
4- 특정 양의 토큰 보내기 "_값" 한 토큰 (계약) 주소에서 다른 토큰 (계약) 주소로 "transferFrom (address _from, address _to, uint256 _value)은 (bool 성공)을 반환합니다." 함수.
5- 특정 계정이 자신의 계정에서 토큰을 반복적으로 인출 할 수 있도록하는 동시에 인출 할 토큰 양에 대한 상한을 미리 정의합니다. "_값" 매개 변수. 이것은 "승인 (주소 _spender, uint256 _value) 반환 (bool 성공)". 인출 상한, 즉 "_값" 매개 변수, 함수를 호출 할 때 덮어 쓸 수 있음.
6- 토큰의 잔여 금액을 반환합니다. "_돈 쓰는 사람" 의 계정에서 인출 "_소유자". 이것은 다음을 통해 실행할 수 있습니다. "allowance (address * _owner *, address * _spender *) 상수 반환 (uint256 남음)" 함수.
ERC20 코드에 의해 정의 된이 6 가지 기능은 이러한 토큰이 서로 다른 계정간에 전송되는 방법과 사용자가 주어진 ERC20 토큰과 관련된 데이터를 검색 할 수있는 방법을 포함하는 기본 기능 문제를 나타냅니다. 이러한 기능 그룹은 이더 리움 기반 토큰이 이더 리움 플랫폼의 모든 부분에서 유사하게 작동하도록 규정되어 있습니다. 따라서 이더 코인을 준수하는 모든 암호 화폐 지갑은 ERC20 표준을 기반으로 한 토큰도 지원합니다..
심각한 버그 :
ERC20 이더 리움의 첫 번째 토큰 표준입니다. 새 코드의 경우와 마찬가지로 버그 나 논리적 실수가 포함되어 있습니다. ERC20은 토큰 거래를 수행하는 두 가지 방법을 가정합니다. 우선 전송 기능을 사용하면 다른 사람의 주소로 토큰을 보낼 수 있습니다. 토큰을 스마트 컨트랙트에 예치하려면 ‘승인 + 이체 출처’조합을 사용해야합니다. 승인 기능을 통해 토큰을 인출하려면이 계약을 승인해야합니다. 그런 다음 transferFrom 함수를 통해 입금 및 토큰 인출을 처리 할 계약 함수를 호출해야합니다..
이전 기능이있는 계약에 실수로 토큰을 예치하면 어떻게 되나요? 거래는 성공하지만이 거래는 수취인 계약에 의해 인식되지 않습니다. 예를 들어, 분산 형 거래소 계약에 토큰을 보내면 거래소 계약은 토큰을 받지만이 토큰을 거래소 토큰 잔액에 적립하지 않습니다. 또한 탈 중앙화 거래소 계약이 긴급 토큰 추출 기능을 구현하지 않으면 어떤 경우에도 토큰을 되 찾을 수 없어 토큰이 영구적으로 손실됩니다. 이 버그로 인해 이더 리움 생태계는 이미 수백만 달러를 잃었습니다..
여전히 ERC20 표준을 사용하는 이유?
Reddit 사용자 u / 덱 사란, ERC223 표준의 작성자는 앞서 언급 한 버그에 대해 커뮤니티에 알린 최초의 개발자 중 한 명입니다. 우리는 그에게이 중요한 버그에 대해 알면서도 ERC20이 여전히 널리 사용되는 이유를 물었습니다. 그는 다음과 같은 이유를 제시했습니다.
- 토큰 개발자의 행위에 대한 범죄 무책임으로 인해.
- Ethereum Foundation은 버그가 포함 된 것으로 알려진 경우에도 ERC20 토큰 표준을 계속 홍보하고 있기 때문입니다. 이전 TheDAO와 동일한 상황입니다. 그들은 말할 필요가 있습니다 "지금 그만해" 그러나 그들은.
- 토큰 개발의 주된 이유는 제품 생성이 아닌 자금 확보이기 때문입니다..
- 다른 표준을 사용하면 네트워크 효과가 높아지기 때문입니다. 이것은 Ethereum 네트워크에 이미 확장 성 문제가 있다는 점을 감안할 때 실제로 필요한 것이 아닙니다..
ERC223 표준
그만큼 ERC223 표준은이 기사를 만드는 데 도움을 준 u / Dexaran에 의해 제안되었습니다. ERC223은 토큰 전송이 이더 트랜잭션과 똑같이 작동하도록 허용하는 토큰 표준입니다. ERC223은 이벤트 처리 (트랜잭션을 이벤트로 간주)를 활용하여 처리되지 않은 트랜잭션에서 토큰이 손실되는 것을 방지합니다. 이 개선 된 표준은 이체 기능이 유효하지 않은 이체에 오류를 발생시키고 자금 손실이 없도록 거래를 취소함으로써 ERC20 중요한 버그를 해결합니다. 요컨대, ERC223은 보안.
추가 및 문제점
ERC223은 전송 함수에 추가 데이터 매개 변수를 추가하여 토큰 전송보다 더 복잡한 작업을 허용합니다..
Dexaran의 주요 관심사는 너무 많은 사람들이 이전에 논의한대로 승인 및 transferFrom 메소드가 아닌 전송 기능을 사용하여 계약에 토큰을 전송함으로써 토큰을 잃을 수 있다는 것입니다. 그의 해결책은 수신 주소가 계약 (즉, 데이터 포함)인지 여부를 확인하기 위해 전송 방법을 수정하는 것입니다. 계약 인 경우 다시 호출하는 tokenFallback 함수가 있다고 가정합니다. 가장 큰 약점은 tokenFallback이 존재하지 않으면 수신 계약의 fallback 함수가 호출되고 전송 된 토큰이 여전히 손실 될 수 있다는 것입니다..
ERC777 표준
ERC777 ERC820 (Contract pseudo-introspection registry)에 의존하고 Ethereum 생태계에서 수백만 달러의 손실을 초래 한 트랜잭션 처리 메커니즘의 부족과 같은 ERC20의 문제를 해결하려는 새로운 대체 가능한 토큰 표준입니다. 요컨대 ERC777은 양자 제공함으로써 광범위한 트랜잭션 처리 메커니즘.
혜택
ERC777의 가장 큰 장점은 계약 인터페이스를 인식하는 새로운 방법을 사용한다는 것입니다. 이 표준은 Ethereum 네트워크에 중앙 계약 레지스트리가 있다고 가정합니다 (ERC820에서 정의 됨). 누구나이 레지스트리를 호출하여 특정 주소 (이 주소가 계약인지 여부는 중요하지 않음)가 특정 기능 집합, 즉 ‘인터페이스’를 지원하는지 알 수 있습니다..
Ethereum의 주요 문제 중 하나는 계약이 구현하는 기능을 알 수 없다는 것입니다. ERC820은이를 해결하기위한 것입니다. ERC777은 확실히 좋은 생각 인이 접근 방식을 활용합니다..
다른 한편으로, 오버라이드없이 새로운 ERC777 기능과 함께 ERC20의 기본 기능을 구현할 토큰을 생성 할 수 있습니다 (선택적으로 ERC20의 중요한 버그를 상속). 이것은이 새로운 토큰 표준과 더 빠른 채택을위한 좋은 네트워크 효과를 보장 할 수 있습니다. 실습에서 알 수 있듯이 토큰 개발자의 주요 목표는 토큰을 거래소에 푸시해야한다고 가정하는 돈을 모으는 것입니다. 거래소가 새로운 토큰 표준의 새로운 기능에 대한 연구없이 레거시 ERC20 기능을 구현하는 토큰을 지원하는 것이 더 쉽습니다 (이러한 기능에 버그가 있는지 여부는 중요하지 않음). 거래소가 새로운 표준에서 토큰을 지원하는 것이 더 쉬울수록 더 많은 개발자가이를 사용할 것입니다. 이것은 ERC777의 채택을 촉진하는 반면 ERC223에는이 속성이 없습니다..
다른 점?
이 토큰 표준은 완전히 새로운 기능 집합, 즉 ‘전송’기능 대신 ‘보내기’기능을 정의합니다. `approve` 대신`authoriseOperator`. `tokenFallback` 핸들러 함수 대신`tokensReceived` 핸들러 함수.
이러한 접근 방식은이 표준의 기능이 다른 토큰 표준의 기능과 교차하거나 무시하지 않도록 보장 할 수 있으므로 ERC777 및 ERC820 표준과 동시에 호환되는 토큰을 만들 수 있습니다..
마침내 ERC777은 민트와 번 토큰의 기능.
실패 지점 및 보안 문제
ERC777은 누군가가 귀하를 대신하여 토큰을 관리 할 수 있도록하는`authoriseOperator` 기능을 구현합니다. Dexaran은이 방법이 더 이상 사용되지 않으며 사용해서는 안된다고 생각한다고 설명했습니다. 또한 누군가를 대신하여 토큰을 관리하도록 권한을 부여하면 네트워크의 대역폭이 손상되고 더 많은 가스가 필요합니다. `authoriseOperator`는 이미 하나의 트랜잭션을 나타내며이를 수행하려면 다른 트랜잭션이 필요합니다. "승인 된 인출". 따라서 한 번의 트랜잭션으로 수행 할 수있는 전송을 수행하려면 두 개의 트랜잭션이 필요합니다..
다음으로 ERC777 표준에는 ITokenRecipient 인터페이스에 대한 몇 가지 검사를 수행하여 토큰 중단을 방지하고 주소가 화이트리스트에 있는지 확인하는 선택적 플래그가 포함되어 있습니다. 이 표준은 수백만 달러 가치가있는 토큰을 처리하는 네트워크의 보안에 초점을 맞추고 있으므로 이러한 검사를 선택 사항으로 만드는 것은 좋지 않습니다..
기타 표준
다음과 같은 많은 다른 표준이 있습니다. ERC827 ERC223의 몇 가지 장점을 레거시 ERC20 기능과 결합합니다. 그만큼 ERC664 표준은 토큰 표준의 모듈성에 중점을 둡니다. 이 표준은 토큰 계약을 업그레이드 할 수 있도록 허용하지만 ERC20 중요한 버그를 상속했습니다. 다른 표준에는 ERC721, ERC677 및 ERC820이 포함되지만 잘 알려지지 않았습니다..
표준 간의 호환성
우리는 Dexaran에게 어떤 표준이 이전 버전과 호환되는지 물었습니다. 그는 먼저 ‘역 호환성’이 무엇을 의미하는지 이해해야한다고 말했습니다. “역 호환성은 이전 레거시 시스템 또는 그러한 시스템을 위해 설계된 입력과의 상호 운용성을 허용하는 시스템, 제품 또는 기술의 속성입니다.”
ERC20 & ERC223 : ERC223 토큰은 ERC20과 호환됩니다. ERC20 (지갑과 같은)에서 제대로 작동하도록 설계된 모든 것이 ERC223에서도 작동 할 수 있습니다. 여기서 유일한 예외는 토큰 입금 패턴에서 승인 + 이체에 의존하는 계약입니다. 그러나 지금은 표준에 포함되어 있지 않더라도 ERC223 토큰으로 승인 + transferFrom 함수를 구현할 수 있습니다. 스마트 컨트랙트가 아닌 지갑 및 타사 서비스의 경우 ERC20 토큰의 입력 호출 데이터가 ERC223에 유효하기 때문에 자동으로 ERC223을 지원합니다..
ERC20 & ERC777: ERC777 제안의 ‘역 호환성’섹션에서 다음 문구를 찾을 수 있습니다. “이 EIP는 이전 버전의 비 호환성을 도입하지 않으며 이전 ERC-20 토큰 표준과 호환됩니다.”
그러나 Dexaran은 정반대라고 말했고 다음 예제를 제공했습니다.“MetaMask, Mist 및 MyEtherWallet과 같은 지갑과 서비스는 ERC20 토큰으로 작업하고 있습니다. ERC20 토큰 용으로 설계된 입력은 인코딩 된 매개 변수와 함수 서명이 포함 된 계약 호출입니다. Ethereum 가상 머신의 함수 호출은 트랜잭션과 함께 전송 된 데이터의 처음 4 바이트로 지정됩니다. 이러한 4 바이트 서명은 함수 서명의 표준 표현 해시의 처음 4 바이트로 정의됩니다. 즉,`transfer (address, uint256)`및`send (address, uint256)`함수는 다른 서명을 갖습니다. 결과적으로 ERC20 토큰을 위해 설계된 입력은 ERC777 토큰에 유효하지 않습니다.” 이전 버전과의 호환성에 대한 정의를 사용하므로 ERC777은 ERC20 토큰 표준과 호환되지 않습니다..
어떤 표준을 사용하는 경우
ERC20 : Reddit 사용자 u / Dexaran은“버그 때문에 투자자가 손해를보기를 원할 때”라는 냉소적 인 조언을했습니다.
ERC223 : 이 토큰 표준은 ERC777과 함께 사용할 수도 있습니다. ERC777에는 ERC223에없는 우아한 기능이 있지만 ERC223의 논리는 ERC777에 비해 간단합니다. 오류가 발생하기 쉬운 코드. 또한 ERC223은 중앙 서비스에 의존하지 않으므로 ERC223 토큰은 자체 구현에만 의존합니다. 앞서 언급했듯이 ERC223은 보안 개선을 목표로하지만 이로 인해 ERC223 토큰이 ERC20 표준을 준수하지 않게되었습니다..
ERC777 : 이 토큰 표준은 이미 사용 가능합니다. 반면에 ERC777에는 위에서 언급 한 보안 문제가 있습니다. 또한 보안 문제인 중앙 계약 레지스트리에 의존합니다. 중앙 레지스트리는 개발자의 삶을 더 쉽게 만들 수 있지만 Parity Multisig에서와 마찬가지로 정확히 실패의 중심점 역할도합니다. 모든 Parity Multisig는 중앙 코드 라이브러리에 의존했습니다. 라이브러리에 버그가 발생하여 악용되었습니다. 결과적으로 모든 Parity Multisig가 충돌했습니다. 또한 ERC777은 새로운 기능 세트를 정의합니다. 이는 토큰 개발자가 채택을 위해 토큰을 ERC20 및 ERC777 표준과 동시에 호환되도록하기위한 시도입니다. 이는 개발자가 ERC777에서 ERC20 버그를 상속 할 수 있지만 개발자가 더 많은 트랜잭션 처리 이벤트를 사용할 수 있음을 의미합니다..
일반적으로: 모든 토큰은 비슷한 사용 사례 인 ICO를 가지고 있습니다. ERC223과 ERC777은 ERC20의 한 가지 문제를 다른 방식으로 해결하려고 노력하고 있다고 말하고 싶습니다. ERC223은 이미 틈새 시장을 차지하고 있습니다. 이더 리움 클래식 ERC20 대신.
이 기사는 ERC223 개발자 Dexaran의 도움으로 작성되었습니다. Ethereum의 토큰 표준에 대한 Paul Edge의 의견 중 일부도 사용되었습니다..