// contract address: 0x0000000000000000000000000000000000000002
function sha256(bytes data) returns (bytes32);
RIPEMD160
데이터의 ripemd160-해시 값을 반환합니다. 솔리디티 코드에서 직접 호출할 수 있습니다.
// contract address: 0x0000000000000000000000000000000000000003
function ripemd160(bytes data) returns (bytes32);
Identity
데이터 복사 (datacopy)라고도 알려진 이 함수는 메모리에서 데이터를 효율적으로 복사하는 방법을 제공합니다. 솔리디티 컴파일러는 이 함수를 지원하지 않으므로, 이 함수는 다음과 같이 어셈블리 (assembly)를 통해 호출해야 합니다.
// contract address: 0x0000000000000000000000000000000000000004
contract Identity{
bytes public memoryStored;
function callDatacopy(bytes memory data) public returns (bytes memory) {
bytes memory result = new bytes(data.length);
assembly {
let len := mload(data)
if iszero(call(gas(), 0x04, 0, add(data, 0x20), len, add(result,0x20), len)) {
invalid()
}
}
memoryStored = result;
return result;
}
}
Modular Exponentiation
이 함수는 정수 b (밑)를 e승 (지수)한 후 양의 정수 m (모듈러스)으로 나누었을 때의 나머지를 계산합니다. 솔리디티 컴파일러는 이 함수를 지원하지 않으므로, 이 함수는 다음과 같이 어셈블리 (assembly)를 통해 호출해야 합니다.
// contract address: 0x0000000000000000000000000000000000000005
contract ModularCheck {
uint public checkResult;
// Function to Verify ModExp Result
function verify( uint _base, uint _exp, uint _modulus) public {
checkResult = modExp(_base, _exp, _modulus);
}
function modExp(uint256 _b, uint256 _e, uint256 _m) public returns (uint256 result) {
assembly {
// Free memory pointer
let pointer := mload(0x40)
// Define length of base, exponent and modulus. 0x20 == 32 bytes
mstore(pointer, 0x20)
mstore(add(pointer, 0x20), 0x20)
mstore(add(pointer, 0x40), 0x20)
// Define variables base, exponent and modulus
mstore(add(pointer, 0x60), _b)
mstore(add(pointer, 0x80), _e)
mstore(add(pointer, 0xa0), _m)
// Store the result
let value := mload(0xc0)
// Call the precompiled contract 0x05 = bigModExp
if iszero(call(not(0), 0x05, 0, pointer, 0xc0, value, 0x20)) {
revert(0, 0)
}
result := mload(value)
}
}
}
BN128Add
BN128Add 사전 컴파일 컨트랙트는 네이티브 타원 곡선 점 덧셈을 구현합니다. 이는 (ax, ay)와 (bx, by)가 BN256 곡선 상의 유효한 점일 때, (ax, ay) + (bx, by)를 나타내는 타원 곡선 점을 반환합니다. 솔리디티 컴파일러는 이 함수를 지원하지 않으므로, 이 함수는 다음과 같이 어셈블리 (assembly)를 통해 호출해야 합니다.
BN128Mul 사전 컴파일 컨트랙트는 스칼라 값과의 네이티브 타원 곡선 곱셈을 구현합니다. 이는 (x, y)가 BN256 곡선 상의 유효한 곡선 점일 때, 스칼라 * (x, y)를 나타내는 타원 곡선 점을 반환합니다. 솔리디티 컴파일러는 이 함수를 지원하지 않으므로, 이 함수는 다음과 같이 어셈블리 (assembly)를 통해 호출해야 합니다.
BN128Pairing 사전 컴파일은 zkSNARK 검증을 수행하기 위한 타원 곡선 페어링 (pairing) 연산을 구현합니다. 더 자세한 정보는 표준을 확인하세요. 솔리디티 컴파일러는 이 함수를 지원하지 않으므로, 이 함수는 다음과 같이 어셈블리 (assembly)를 통해 호출해야 합니다.
이 EIP는 BLAKE2b 해시 함수 및 다른 상위 라운드 64비트 BLAKE2 변형이 EVM에서 비용 효율적으로 실행될 수 있도록 하여, 이더리움과 Zcash 또는 다른 Equihash 기반 PoW 코인 간의 상호 운용성을 용이하게 합니다. 더 자세한 정보는 표준을 확인 바랍니다.