Precompiled Contracts

메타디움 블록체인은 미리 컴파일되어 있는 컨트랙트를 제공합니다. 메타디움 블록체인에는 사전에 컴파일된 컨트랙트가 존재합니다. 해당 컴파일된 컨트랙트는 이더리움에서 배포된 컨트랙트와 메타디움에서 새로 지원하는 컨트랙트가 제공됩니다.

ECDSA 서명의 공개키 복구 함수

0x01 주소에는 타원 곡선 디지털 서명 알고리즘의 공개키를 복구하는 함수가 제공됩니다. 트랜잭션의 해시값과 v, r, s 서명값을 입력받아 주소를 반환합니다. 메타디움 테스트넷에 배포된 컨트랙트의 주소는 0x9AC3d2729e7e38949a5b7E9896C4b05B13765eaC으로 테스트넷 익스플로러를 통해 확인이 가능합니다.

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.10;

contract Ecrecover {
    function test() public pure returns(bool) {
        address addressTest = 0x12Cb274aAD8251C875c0bf6872b67d9983E53fDd;
        bytes32 msgHash = 0xc51dac836bc7841a01c4b631fa620904fc8724d7f9f1d3c420f0e02adf229d50;
        uint8 v = 0x1b;
        bytes32 r = 0x44287513919034a471a7dc2b2ed121f95984ae23b20f9637ba8dff471b6719ef;
        bytes32 s = 0x7d7dc30309a3baffbfd9342b97d0e804092c0aeb5821319aa732bc09146eafb4;

        return (recoverSignature(msgHash, v, r, s) == (addressTest));
    }

    function recoverSignature(bytes32 hash, uint8 v, bytes32 r, bytes32 s) public pure returns(address) {
        // Use ECRECOVER to verify address
        address addr = ecrecover(hash, v, r, s);
        require(addr != address(0), "signature is invalid");
        return addr;
    }
}

SHA256 해시 함수

0x02 주소에는 SHA-256 해시 함수가 제공됩니다. 데이터를 입력하면 이에 해당하는 SHA-256 해시값이 반환됩니다. 메타디움 테스트넷에 배포된 컨트랙트 주소는 0x1eFd33eaB481C903CB3e0766D71DAF4391B26043 으로 테스트넷 익스플로러를 통해 확인이 가능합니다.

RIPEMD160 해시 함수

0x03 주소에는 RIPEMD-160 해시 함수가 제공됩니다. 데이터를 입력하면 이에 해당하는 RIPEMD-160 해시값이 반환됩니다. 메타디움 테스트넷에 배포된 컨트랙트 주소는 0xf8C8cB0941b9A2fD511c87a73f9707D3c7Eb695c 으로 테스트넷 익스플로러를 통해 확인이 가능합니다./

Data Copy 함수

0x04 주소에는 데이터 복사 함수가 제공됩니다. 이 기능은 메모리에 데이터를 복사하는 더 저렴한 방법으로 사용됩니다.현재 Solidity에는 dataCopy 함수 지원이 없으므로 인라인 어셈블리로 호출해야 합니다. 메타디음 테스트넷에 배포된 컨트랙트 주소는 0xF1935F6236b6558d44aD2275B9d453082EBD9d68 으로 테스트넷 익스플로러를 통해 확인이 가능합니다.

Modular Exponentiation 함수

0x05 주소에는 정수 b(밑수)를 e-제곱(지수)으로 올리고 양의 정수 m(모듈러스)으로 나눌 때 나머지를 계산하는 함수를 제공합니다. Solidity 컴파일러는 이를 지원하지 않으므로 인라인 어셈블리로 호출해야 합니다. 메타디움 테스트넷에 배포된 컨트랙트 주소는 0xA41b9c323527b1214cE7276364465183385a67fF 으로 테스트넷 익스플로러를 통해 확인이 가능합니다.

타원 곡선 상의 점에 대한 덧셈 함수

0x06 주소에는 타원 곡선 상의 점에 대한 덧셈 연산을 구현한 함수가 제공됩니다. 이 연산은 타원 곡선 bn256 상의 유효한 두점 (ax,ay)와 (bx,by)를 입력받아 타원 곡선위의 점 (ax,ay)+(bx,by)를 결과로 반환합니다. Solidity 컴파일러는 이 함수를 지원하지 않으므로 인라인 어셈블리로 호출해야 합니다. 메타디음 테스트넷에 배포된 컨트랙트 주소는 0xa6a7c21EbB8af0e7514daB6de8E8143E5E780e83 으로 테스트넷 익스플로러를 통해 확인이 가능합니다.

타원 곡선 상의 점에 대한 곱셈 함수

0x07 주소에는 스칼라 값으로 표현된 타원 곡선 상의 점에 대한 곱셈 연산을 구현한 함수가 제공됩니다. 이 연산은 타원 곡선 bn256 상의 유효한 점 (x,y)를 입력받아 타원 곡선 위의 점 scalar * (x,y)를 결과로 반환합니다. Solidity 컴파일러는 이 함수를 지원하지 않으므로 인라인 어셈블리로 호출해야 합니다. 메타디음 테스트넷에 배포된 컨트랙트 주소는 0xa424E85E2930375626612EaC99D6574eF59F090b 으로 테스트넷 익스플로러를 통해 확인이 가능합니다.

zkSNARK 검증을 위한 타원곡선 페어링 함수

0x08 주소에는 EIP-197에 제안된 zkSNARK 검증하기 위한 타원 곡선 페이링 연산에 대한 함수가 제공됩니다. Solidity 컴파일러는 이 함수를 지원하지 않으므로 인라인 어셈블리로 호출해야 합니다. 메타디음 테스트넷에 배포된 컨트랙트 주소는 0x405b7c971c2Ae9F1f79BD43ef59C680811B1612A 으로 테스트넷 익스플로러를 통해 확인이 가능합니다.

Last updated