URI 는 "Uniform Resource Identifier"의 약어로, 인터넷 상에서 리소스를 고유하게 식별하기 위해 사용되는 표준화된 형식이다.
ERC-1820은 Ethereum 에서도 이러한 URI를 사용하여 컨트랙트 및 서비스를 식별하기 위한 방법을 제안한다.
ERC-1820은 다음과 같은 기능과 목적을 가지고 있다.
식별자 할당: ERC-1820은 컨트랙트와 서비스에 대해 고유한 식별자를 할당한다.
이 식별자는 URI 스킴을 통해 접근할 수 있으며, 해당 컨트랙트 또는 서비스의 정보를 찾을 수 있도록 도와준다.
인터페이스 검색: ERC-1820은 컨트랙트가 지원하는 특정 인터페이스를 검색할 수 있는 기능을 제공한다.
이를 통해 외부 애플리케이션이 컨트랙트나 서비스가 제공하는 기능을 자동으로 식별하고 사용할 수 있다.
표준화된 인터페이스: ERC-1820은 컨트랙트 및 서비스 간의 상호 운용성을 촉진하기 위해 표준화된 인터페이스를 정의한다.
이를 통해 다른 컨트랙트나 서비스 간 통신과 데이터 교환을 원활하게 할 수 있다.
ERC-1820은 Ethereum 생태계에서 컨트랙트와 서비스의 식별 및 통신을 간소화하고 개선하기 위한 표준화된 메커니즘을 제공한다.
이를 통해 개발자는 다른 컨트랙트 및 서비스와 상호 작용하는 데 있어 표준화된 방법을 따를 수 있고, 개발 및 통합 과정을 단순화할 수 있다.
컨트랙트에서 어떤 함수를 호출할 수 있는지 검사하는 것을 다룬다.
이것을 보통 컨트랙트의 interface 라고 한다.
이더리움에서 애플리케이션은 일반적으로 잘못된 호출을 하지 않는다고 믿어야 한다.
이것은 신뢰할 수 있는 경우 문제가 되지 않지만, 알 수 없거나 신뢰할 수 없는 address 와 상호 작용해야 하는 경우가 많다.
예를 들어 ERC20 토큰을 외부로 전송할 방법이 없는 컨트랙트로 토큰을 전송하여 영원히 자산이 잠길 수 있다.
이런 경우 컨트랙트가 interface 를 선언하면 오류를 방지하는데 매우 유용하다.
이에 대한 접근 방식은 주로 두 가지가 있다.
Local : 컨트랙트가 IERC165 를 구현하고 interface 를 선언한 후, 다른 컨트랙트가 ERC165Checker 를 통해 직접 쿼리하는 방식이다. 이 방식은 로컬에서 interface 를 확인하는 방식으로 컨트랙트 간 직접적인 상호작용에 사용될 수 있다.
Global : 전역적인 고유 레지스트리 (IERC1820Registry) 를 사용하여 특정 인터페이스의 구현자 (IERC1820Implementer) 를 등록하는 경우이다.
이후 레지스트리를 쿼리하여 EOA에 대한 interface 를 구현하는 컨트랙트와 같이 더 복잡한 설정을 할 수 있다.
모든 경우에 계정들은 단순히 interface 를 선언할 뿐, 실제로 구현해야 하는 것은 아니다.
이 메커니즘은 오류 방지와 복잡한 상호작용을 허용하는데 사용할 수 있지만, 보안을 위해 이것에 의존해서는 안된다.