Anunciamos nuestra biblioteca de funciones aleatorias verificables (VRF) en Solidity

Recientemente, Gorka Irazoqui Apecechea y yo publicamos con orgullo una biblioteca VRF Solidity como un proyecto de código abierto bajo la licencia MIT.

La biblioteca es una rápido y eficaz Biblioteca de funciones aleatorias verificables (VRF) escrita en Solidez, que sigue el estándar IETF VRF-draft-04 escrito por Sharon Goldberg, Moni Naor, Dimitris Papadopoulos, Leonid Reyzin y Jan Včelák.

Esta biblioteca es la continuación de nuestro trabajo implementando varias primitivas criptográficas de vanguardia que impulsan los componentes críticos del ecosistema Witnet. Este es también el caso de nuestra biblioteca de la Curva elíptica de la curva y nuestra biblioteca VRF Rust.

Los VRF son primitivas criptográficas que proporcionan una función pseudoaleatoria junto con un prueba públicamente verificable de la corrección de sus salidas.

Los VRF se utilizan ampliamente en varios esquemas, protocolos y sistemas criptográficos. Por ejemplo, el Red de oráculo descentralizada Witnet utiliza VRFs para llevar a cabo la clasificación secreta criptográfica que se usa para seleccionar mineros y comités de testigos como parte del protocolo de consenso subyacente.

Para obtener más detalles sobre los VRF y por qué son tan importantes en los sistemas criptográficos actuales, eche un vistazo a esta publicación anterior:

vrf-solidity es una implementación rápida y efectiva de funciones aleatorias verificables (VRF) escritas en Solidity. En la versión actual 01.1, la biblioteca implementa funciones de verificación para pruebas VRF basadas en la curva elíptica secp256k1.

La biblioteca proporciona dos funciones para verificar las pruebas VRF con diferentes compromisos de costo / seguridad.

verificar: Verificación completa de la prueba VRF como se describe en el borrador. Tiene un alto costo de gas asociado, ya que requiere pesados ​​cálculos de EC.FastVerify: Verificación rápida a prueba de VRF proporcionando puntos EC adicionales. Requiere mucho menos gas al aprovechar la función compilada por ecrecuperación del EVM para verificar las multiplicaciones de EC.

Además, proporciona tres funciones de conveniencia que facilitan el cálculo de los parámetros de entrada requeridos:

prueba de decodificación: decodificar de bytes a prueba VRF.decodePoint: decodificar de bytes a punto EC.computeFastVerifyParams: calcular los parámetros (puntos EC) requeridos para la función de verificación rápida VRF.

La biblioteca implementa el conjunto de cifrado SECP256K1_SHA256_TAI, es decir, la curva elíptica secp256k1 y la función de resumen sha256.

Los contratos de solidez pueden usar el contrato VRF.sol directamente, ya sea por herencia o por instanciación:

solidez del pragma ^ 0.5.0;

importar "vrf-solidity / contract / VRF.sol";

contrato MyContract es VRF {

función functionUsingVRF (
uint256 (2) memoria _publicKey,
uint256 (4) memoria _proof,
memoria de bytes _mensaje)
devoluciones publicas (bool)
{
bool isValid = verificar (_publicKey, _proof, _message);
// Hacer algo…
el retorno es Valido;
}
}

Puedes encontrar ejemplos más avanzados en el repositorio de Github:

El análisis del consumo de gas se realizó para comprender los costos asociados con el uso de la biblioteca vrf-solidity, dado que las primitivas VRF implican operaciones EC pesadas.

Realizamos el análisis de consumo de gas en un contrato heredado de VRF.sol y ajustando las funciones de ese contrato para diferentes primitivas VRF, etiquetadas como _methodName.

El consumo de gas y la estimación del precio en USD con un precio de 20 Gwei, derivado de la estación de servicio ETH:

Como se mencionó anteriormente, la biblioteca proporciona dos funciones de verificación diferentes con diferentes compromisos en términos de costo y seguridad. El costo de la función fastVerify () es alrededor del 10% del de la función Verify (), aproximadamente 200k de gas, que es inferior a 1 USD con los precios actuales del gas y el éter.

Las tres funciones de conveniencia (decodeProof, decodePoint y computeFastVerifyParams) se proporcionan para facilitar el cálculo de los parámetros de entrada requeridos por VRF. Si es posible, deben usarse como operaciones fuera de la cadena a través de una llamada local para evitar los costos de gas.

La biblioteca vrf-solidity ha sido probada contra vectores de prueba extraídos de Chuck Batson y vrf-rs con el conjunto de cifrado SECP256K1_SHA256_TAI.

Tenga en cuenta que las VRF se están estandarizando actualmente y que no hay muchos recursos (si los hay) con vectores de prueba para nuestro mismo conjunto de cifrado.

Nos gustaría reconocer los siguientes recursos, ya que sirvieron de inspiración para aumentar el rendimiento de algunas de las operaciones aritméticas de EC: