Pact 4.2.0 Blazes a Mainnet!. Pact 4.2.0 se esfuerza por ofrecer… de José Cardona Kadena ene, 2022

En Kadena, nos esforzamos por ofrecer mejoras continuas para mejorar nuestra experiencia de usuario al desarrollar nuestra plataforma. Con Pact a la vanguardia de los contratos inteligentes seguros, expresivos y eficaces, nos complace anunciar el lanzamiento de ¡Pacto 4.2.0! Esta versión agrega funciones "lambda" anónimas, nuevos nativos para mejorar la experiencia del usuario, mejoras en la persistencia y varias correcciones de errores que se eliminaron.

Las continuas mejoras de Pact y nuestro compromiso de brindar una mejor experiencia de usuario es la razón por la cual Pact es el principal estándar para contratos inteligentes. Puedes probar la última versión de Pact out por descargando desde nuestro Github o en Mac brew instale kadena-io/pact/pact!

4.2.0 trae Lambdas, una nueva característica importante de Pact!

Pact ya es un lenguaje funcional y permite que las funciones sean tratadas como argumentos en casos especiales como map y fold. Sin embargo, el uso de estos requería hacer definiciones de funciones de nivel superior que se vuelven parte de la API de contrato inteligente y requieren técnicas de privacidad para garantizar la seguridad. Las funciones vinculadas localmente están más restringidas, lo que reduce la exposición y, por lo tanto, aumenta la seguridad.

También aporta más expresividad para que pueda hacer más con menos código Pact. Con lambdas, los usuarios ahora pueden escribir declaraciones ligadas a let de lambdas como valores de ámbito local, así como funciones completamente anónimas para su uso en los sitios de llamada. Esto permite una mejor localidad de código en los casos en que, de lo contrario, escribiría una función de nivel superior para una funcionalidad única.

El mejor ejemplo de cómo puede usar lambdas en su construcción diaria es usarlos con el nuevo doblar-db nativo – ¡sigue leyendo!

Pact 4.2.0 continúa introduciendo nuevas y poderosas operaciones para hacer que la programación de contratos inteligentes de sea más fácil y segura.

fold-db: consulta y procesamiento de clave/valor

fold-db brinda una metáfora completamente funcional para la consulta de bases de datos, proporciona consultas clave por primera vez y resuelve el manejo de claves en los resultados al delegar consultas y procesamiento de listas a funciones que usted proporciona que toman el par clave y valor.

En el siguiente ejemplo, seleccionamos todos los bonos con claves que comienzan con p: y un bloqueo de más de 30 días, vinculando una lambda a query . También proporcionamos una lambda anónima para la función de procesamiento que simplemente devuelve la clave y el valor como un solo objeto.

(dejar*
( (consulta (lambda (valor clave))
(y (= "p:" (tomar 2 k))
(> (en 'valor de bloqueo) 30)))
)
(enlaces fold-db (consulta)
(lambda (k o) { "clave": k, "valor": o })))

Nuevos nativos iniciados por la comunidad: zip y cond

Pact se beneficia de una comunidad comprometida y activa que genera nuevas ideas y requisitos para hacer de Pact el mejor lenguaje de contrato inteligente. Estos nuevos nativos fueron propuestos por constructores de comunidades.

zip le permite tomar dos listas cualesquiera y una función de combinación f para cada par de elementos, y devuelve una nueva lista con f aplicada a cada par. En el siguiente ejemplo, comprimimos dos listas de enteros usando la suma (+) como nuestra función de combinación y recibimos una lista que contiene su suma por pares.;; (+) se aplica por pares
;; entonces obtenemos la lista resultante ((+ 1 4) (+ 2 5) (+ 3 6))
;; que se evalúa como (5 7 9)
(zip (+) (1 2 3) (4 5 6))cond es nuestra nueva macro para expresiones condicionales de ramificación múltiple. Como ejemplo, el siguiente código se bifurcará en score para devolver un nombre de premio. Si la puntuación es inferior a 10 devolverá "Bronce", en caso contrario si es inferior a 20 devolverá "Plata" y así sucesivamente, y finalmente en el caso de que ninguna de las condiciones anteriores se cumpla devolverá "Platino":(defun premio:cadena (puntuación:entero)
(cond ((< puntuación 10) "Bronce")
((< puntuación 20) "Plata")
((< puntuación 30) "Oro")
"Platino")))

Ejemplo detallado de Lambda: llegada del código 2021, día 1

Este ejemplo (parte 2 del día 1 de AOC) requiere crear ventanas deslizantes de 3 elementos de una lista de medidas (como números enteros) y contar cuántas ventanas aumentaron desde la suma anterior. En pacto 4.2.0, podemos expresar este algoritmo como:

(defun día1 (li:(entero))
(dejar* (
(suma (lambda (x:(entero)) (fold (+) 0 x)))
(ptl (lambda (x: entero y: entero) (x, y)))
(añadir (lambda (x:(entero) y:entero) (+ x (y))))
(gt-ventana (lambda (x: entero y: entero) (if (< x y) 1 0)))
(triples (zip (añadir) (zip (ptl) li (soltar 1 li)) (soltar 2 li))
(sumas triples (mapa (suma) triples))
)
(sum (zip (gt-window) sumas triples (soltar 1 sumas triples))))

Desglosándolo:

Comenzamos con una lista original li, que contiene la lista de enteros. Creamos algunas funciones auxiliares usando nuestra nueva palabra clave lambda: sum para sumar una lista de enteros, ptl que agrupará un par de elementos en una lista de dos elementos, append que agrega un solo elemento a una lista, gt-window que verificará si la suma anterior de una ventana es mayor. Con nuestras funciones auxiliares creadas, podemos crear un elemento triple que consiste en una lista de agrupaciones de medidas de 3 elementos que son nuestras ventanas deslizantes, usando nuestro nuevo nativo, zip, que toma dos listas y les aplica una función de combinación. Al tener triples, podemos construir sumas triples, que es la suma de cada ventana deslizante. Finalmente, usamos zip nuevamente para comparar cada elemento de las sumas triples con el elemento que sigue, y sumar el resultado para contar cuántos elementos son realmente aumentos desde la ventana deslizante anterior.

Si bien la solución se puede optimizar para evitar la creación de estructuras intermedias (es decir, las sumas triples se pueden construir de forma más directa), esta forma de solución ilustra cómo las habilidades expresivas del pacto permiten a los usuarios abordar problemas en partes claras y con la adición de lambda. expresiones, evite declaraciones de nivel superior para funciones de un solo uso.

Para obtener más información sobre cómo redactar contratos seguros, inteligentes y rápidos en Pact, visite nuestros recursos educativos:

docs.kadena.io: encuentre videos, tutoriales, información sobre conceptos clave y código de ejemplo. Pruebe Pact: comience a explorar Pact (4.2.0) en su navegador, ¡no es necesario realizar descargas! Contratos inteligentes de prueba beta: comuníquese con el equipo a través de Discord si desea participar en nuestra red de prueba pública de .