Biblioteca de cadenas Solidity
El almacenamiento o acceso técnico que sea estrictamente necesario para el propósito legítimo de permitir el uso de un servicio específico explícitamente solicitado por el abonado o usuario, o con el único propósito de llevar a cabo la transmisión de una comunicación a través de una red de comunicaciones electrónicas.
El almacenamiento o acceso técnico que se utiliza exclusivamente con fines estadísticos anónimos. Sin una citación, el cumplimiento voluntario por parte de su proveedor de servicios de Internet, o los registros adicionales de un tercero, la información almacenada o recuperada sólo con este fin no puede usarse normalmente para identificarle.
¿Cuál es un ejemplo de concatenación?
La concatenación de dos o más números es el número formado por la concatenación de sus cifras. Por ejemplo, la concatenación de 1, 234 y 5678 es 12345678. El valor del resultado depende de la base numérica, que suele entenderse por el contexto.
¿Qué es el proceso de concatenación?
Concatenar (del latín concatenare, unir) es tomar dos o más cosas situadas por separado y colocarlas una al lado de la otra para que puedan ser tratadas como una sola cosa.
Openzeppelin contrata cadenas de utilidades sol
Dado que la concatenación de cadenas tiene que hacerse manualmente por ahora, y hacerlo en un contrato puede consumir gas innecesario (hay que asignar una nueva cadena y luego escribir cada carácter), vale la pena considerar cuál es el caso de uso que necesita la concatenación de cadenas.
O, si un contrato quiere hacer un hash de una sola cadena larga, tenga en cuenta que todas las funciones de hash incorporadas en Solidity (sha256, ripemd160, sha3) toman un número variable de argumentos y realizarán la concatenación antes de calcular el hash.
No puede concatenar cadenas. Tampoco se puede comprobar la igualdad (str0 == str1) todavía. El tipo de cadena se ha añadido recientemente al lenguaje, por lo que probablemente tardará un tiempo hasta que todo esto funcione. Lo que sí puedes hacer (y que han añadido recientemente) es utilizar cadenas como claves para los mapeos.
Si necesita concatenar para obtener un hash de una cadena resultante, tenga en cuenta que hay funciones de hashing incorporadas en Solidity: sha256, ripemd160, sha3. Toman un número variable de argumentos y realizan la concatenación antes de calcular el hash.
Dirección de solidez a la cadena
Solidity no tiene funciones de manipulación de cadenas, pero hay bibliotecas de cadenas de terceros. También puedes comparar dos cadenas por su keccak256-hash usando keccak256(abi.encodePacked(s1)) == keccak256(abi.encodePacked(s2)) y concatenar dos cadenas usando string.concat(s1, s2).
La comunidad de Ethereum ha implementado algunas funciones de codificación ABI a las que se puede acceder de forma nativa sin tener que llamar a otro contrato. Así es como se puede añadir una cadena a otra con la codificación ABI:
Para la demostración, llamé a ambas funciones, esta y la utilizada en el contrato oraclizeAPI como se propuso antes, en remix con 5x el argumento “string” y comparé el consumo de gas que resultó ser para la codificación ABI menos de 2/3 de lo que quema la otra solución y el coste de ejecución sólo alrededor de 1/7:
Para ser justos, la codificación ABI no ha existido por mucho tiempo y las soluciones propuestas anteriormente hacen el trabajo también. Yo mismo he estado usando la función strConcat de oraclizeAPI durante algún tiempo. Sin embargo, especialmente si necesitas que esta función sea llamada por otro contrato inteligente o internamente por una función que cambie el estado del contrato, en aras de la rentabilidad, definitivamente deberías usar la codificación ABI.
Cadena de solidez a int
Vamos a visitar remix.ethereum.org. utilizaremos la versión pragma solidity 0.8.0. Ahora introduciremos un contrato llamado concat para el propósito de concatenación de cadenas. Vamos a escribir una función “concatenate” dentro del contrato “concat”. Una función de bajo nivel llamada abi.encodePacked puede ser usada como el primer método para concatenar la cadena.
Hemos utilizado dos variables “a” y “b” como memoria y las hemos usado dentro de abi.encodePacked para concatenar las cadenas. Hemos utilizado espacio(‘ ‘) entre las variables sólo para mantenerlas separadas mientras se adjuntan.
Ya que no es posible concatenar las cadenas con “+” o “append” en solidity , usaremos los bytes de memoria para concatenar las cadenas en el método 2. Un método especial llamado bytes.concat nos permite concatenar fácilmente las cadenas en solidity.
Como podemos ver en el fragmento de código, hemos creado dos enteros sin signo “i” y “j” mientras que “j” es el iterador sobre el _newValue y “i” es el iterador sobre cada una de las matrices individuales de cadenas que ya tenemos.