¿Qué son?
Las funciones en Stamping.io brindan a los usuarios la capacidad de personalizar, transformar y gestionar el comportamiento de sus flujos de datos de manera sencilla (no-code), eliminando la necesidad de realizar programación manual. Esta característica hace que la creación de procesos sea accesible para una variedad de casos de uso, permitiendo que incluso aquellos sin experiencia en programación puedan utilizarlas de manera sencilla y eficaz.
Stamping.io proporciona un conjunto diverso y potente de funciones que permiten a los usuarios crear flujos de trabajo personalizados y automatizar procesos dentro del ecosistema blockchain. Estas funciones se diseñan para ser utilizadas en flujos de trabajo, facilitando la gestión y manipulación de datos, la interacción con contratos inteligentes, la generación de firmas digitales, y más.
Modo de uso
Una función puede integrarse en las interfaces de las tareas de su proceso. Para invocarla, simplemente coloque el nombre de la función seguido de sus parámetros, como se muestra en el siguiente ejemplo:
functionName(param1, param2...)
Ejemplo
A continuación se muestra una imagen donde se usa la función
getQuery({file})
. Esta función devuelve el valor asociado al parámetro denominado file
cuando el proceso es ejecutado por una aplicación externa.Beneficios
En una herramienta NoCode (sin código), las funciones desempeñan un papel clave al permitir a los usuarios definir lógica y comportamientos específicos para sus aplicaciones o flujos de trabajo sin la necesidad de escribir código tradicional. Estas funciones suelen ser invocadas mediante las interfaces gráficas de cada tarea, en lugar de escribir código manualmente.
- Timer (Temporizador): Las funciones relacionadas con el tiempo, como TIMER.getTimeStamp(), permiten a los usuarios obtener timestamps actuales y realizar operaciones de manipulación de fechas y horas.
- EIP-712 (Ethereum Improvement Proposal 712): Stamping.io ofrece funciones basadas en el estándar EIP-712 para la creación y verificación de mensajes estructurados. Esto es útil para la firma digital de datos y la verificación de la autenticidad de transacciones.
- Generación de Aleatorios: Funciones como random(digitos) y random256() facilitan la generación de números aleatorios y hashes criptográficos aleatorios.
- Operaciones en Cadenas: Stamping.io incluye funciones para operar en cadenas de texto, como substr(), toUpperCase(), toLowerCase(), y otras, facilitando la manipulación de datos de texto.
- Operaciones en Tiempo Blockchain: Funciones como EIP712.addDays() permiten operaciones temporales específicas de la cadena de bloques, como agregar días a un timestamp en la cadena de bloques.
- Operaciones Criptográficas: Stamping.io proporciona funciones para operaciones criptográficas, como la generación y verificación de firmas digitales con ECDSA, hashes como SHA-256, y más.
- Operaciones de Conversión: Funciones como base64(), hex2asc(), y asc2hex() facilitan la conversión entre diferentes formatos de datos.
- Funciones de Utilidad: Funciones como getUUID() para obtener identificadores únicos y getIPRequest() para obtener información sobre la solicitud del cliente.
Estas funciones permiten a los desarrolladores y usuarios de Stamping.io construir flujos de trabajo robustos y seguros, interactuar con la cadena de bloques de Ethereum y realizar operaciones avanzadas sin necesidad de conocimientos extensos de programación. A continuación se muestra la lista de funciones disponibles:
Listado de funciones
trim(string)
Esta función elimina los espacios en blanco situados a la izquierda y derecha de una cadena de caracteres. Los espacios en blanco incluyen espacios simples, tabulaciones y saltos de línea. La función es comúnmente utilizada para limpiar y normalizar cadenas de texto, asegurando que no haya caracteres no deseados en los extremos de la cadena.
strLen(string)
Esta función devuelve la cantidad de caracteres presentes en una cadena de texto. Es útil para obtener la longitud de una cadena y se utiliza comúnmente para realizar operaciones basadas en la cantidad de caracteres, como la validación de la longitud de una contraseña o la manipulación de cadenas de texto de manera dinámica en un programa.
uppercase(string)
Esta función transforma todos los caracteres de una cadena de texto a letras mayúsculas. Al aplicar esta función, obtendrás la misma cadena de texto, pero con todos sus caracteres convertidos a su forma en mayúsculas.
lowercase(string)
Esta función transforma todos los caracteres de una cadena de texto a letras minúsculas. Al aplicar esta función, obtendrás la misma cadena de texto, pero con todos sus caracteres convertidos a su forma en minúsculas.
uppercaseFirst(string)
Devuelve el primer carácter del string en mayúsculas.
uppercaseFirst(string)
Devuelve el primer carácter de cada palabra del string en mayúsculas.
substr(string, from, number)
Esta función devuelve un fragmento de una cadena de texto. El parámetro string representa la cadena original, from indica la posición de inicio y number especifica la cantidad de caracteres que se deben incluir en el fragmento resultante. Es útil para extraer porciones específicas de texto dentro de una cadena y se utiliza comúnmente para manipular y trabajar con datos de manera precisa en el contexto de los flujos creados en Stamping.io.
strReplace(search, replace, text)
Esta función realiza la sustitución de todas las instancias de la cadena de búsqueda (search) por la cadena de reemplazo (replace) dentro del texto especificado (text). Su utilidad radica en la capacidad de modificar dinámicamente el contenido de una cadena, facilitando la manipulación y adaptación de datos en los flujos de Stamping.io.
strPos(text, search, from)
Esta función devuelve la posición de la primera ocurrencia de la cadena de búsqueda (search) dentro del texto especificado (text). El parámetro opcional from indica la posición desde la cual iniciar la búsqueda. Si se encuentra la cadena de búsqueda, se devuelve la posición de su primera aparición; de lo contrario, se devuelve -1.
base64(textASCII)
esta función realiza la codificación Base64 de una cadena de texto ASCII (textASCII). Convierte la cadena de caracteres ASCII en una representación codificada en Base64, proporcionando una forma eficiente de representar datos binarios en formato de texto.
base64Decode(textBASE64)
Esta función decodifica una cadena de texto que ha sido codificada en formato Base64 (textBASE64). Convierte la representación codificada de datos binarios de vuelta a su forma original, facilitando la manipulación y el procesamiento de datos en el flujo de trabajo de Stamping.io.
asc2hex(textASCII)
Esta función convierte una cadena de texto ASCII (textASCII) en su representación hexadecimal. Cada carácter de la cadena se convierte en su equivalente hexadecimal, lo que facilita la manipulación y el análisis de datos en un formato hexadecimal en el flujo de trabajo de Stamping.io.
hex2asc(textHEX)
Esta función convierte una cadena de texto hexadecimal (textHEX) en su equivalente ASCII. Cada par de caracteres hexadecimales se interpreta como un carácter ASCII, permitiendo la conversión de datos en formato hexadecimal de vuelta a su forma legible en el flujo de trabajo de Stamping.io.
split(separator, text)
Esta función toma un texto (text) y lo divide en un objeto JSON donde cada elemento es separado según el valor proporcionado en el separador (separator). Cada segmento del texto, delimitado por el separador, se convierte en una entrada en el objeto JSON resultante.
JSON.parse(string)
Esta función convierte una cadena de texto (string) en un objeto JSON. Transforma la representación de texto estructurado en un formato JSON en un objeto JavaScript que puede ser manipulado y utilizado dentro del flujo de trabajo de Stamping.io. Es especialmente útil cuando se reciben datos en formato JSON y se requiere trabajar con ellos de manera dinámica en el entorno de Stamping.io.
array_map(function, text)
Esta función convierte un texto (text) en un objeto JSON utilizando el punto y coma (";") como separador. Luego, aplica una función (function) a cada elemento del JSON resultante y devuelve un nuevo array con los resultados de aplicar la función a cada elemento.
Las funciones admitidas incluyen:
- trim: Elimina espacios en blanco al principio y al final de cada elemento.
- ucwords: Convierte la primera letra de cada palabra a mayúscula.
- strlen: Devuelve la longitud de cada elemento.
- strtolower: Convierte todos los caracteres a minúsculas.
- strtoupper: Convierte todos los caracteres a mayúsculas.
- ucfirst: Convierte la primera letra de cada elemento a mayúscula.
Esta función es útil para procesar y transformar datos estructurados en flujos de trabajo de Stamping.io, permitiendo la aplicación de funciones específicas a cada elemento del texto convertido en JSON.
iif(variable, condition, value, resultTrue, resultFalse)
En el contexto de flujos creados en Stamping.io, esta función implementa una lógica condicional similar a un operador ternario. Evalúa la condición especificada y, si el valor de la variable cumple con la condición, devuelve resultTrue; de lo contrario, devuelve resultFalse. La lógica subyacente se asemeja a la siguiente expresión:
if (vartiable {condition} value) return resulttrue; else resultfalse;
Esta función es útil para realizar evaluaciones condicionales y tomar decisiones dentro de los flujos de trabajo en Stamping.io, permitiendo la ejecución de acciones específicas según la cumplimentación de una condición.
contac(value1, value2, ...)
Esta función concatena todos los valores proporcionados, separados por comas. Es útil para unir varios valores en una única cadena de texto en el flujo de trabajo de Stamping.io. Por ejemplo, concat("valor1", "valor2", "valor3") producirá la cadena "valor1, valor2, valor3".
TIMER.getTimeStamp()
La función TIMER.getTimeStamp() en el contexto de flujos creados en Stamping.io devuelve el timestamp del servidor. Un timestamp es una representación numérica del tiempo transcurrido desde un punto de referencia específico, generalmente la medianoche (00:00:00 UTC) del 1 de enero de 1970, conocido como el "epoch" en sistemas Unix.
Esta función devuelve el timestamp actual del servidor en el que se está ejecutando el flujo de Stamping.io. Los timestamps son útiles para rastrear y comparar eventos en el tiempo, y se utilizan comúnmente en sistemas informáticos para registrar y sincronizar actividades.
Ten en cuenta que el timestamp devuelto puede estar en formato UNIX (segundos desde el epoch) o incluir milisegundos o microsegundos, dependiendo de la implementación específica en Stamping.io.
TIMER.addDays(timer, days)
La función TIMER.addDays(timer, days) en el contexto de flujos creados en Stamping.io se utiliza para aumentar una cantidad de días a un timestamp dado. Aquí están los parámetros asociados con la función:
- {timer}: Representa el timestamp al que se le agregarán los días.
- {days}: Representa la cantidad de días que se agregarán al timestamp.
Un ejemplo común de uso sería TIMER.addDays(TIMER.getTimeStamp(), days), donde se toma el timestamp actual utilizando TIMER.getTimeStamp() y se le suma la cantidad específica de días.
Esta función es útil para realizar operaciones de manipulación de fechas y tiempos en flujos de Stamping.io, como calcular fechas de vencimiento, programar eventos futuros o realizar cualquier otra tarea que involucre el manejo de tiempo.
TIMER.addHours(timer, hours)
La función TIMER.addHours(timer, hours) en el contexto de flujos creados en Stamping.io se utiliza para aumentar una cantidad de horas a un timestamp dado. Aquí están los parámetros asociados con la función:
- {timer}: Representa el timestamp al que se le agregarán las horas.
- {days}: Representa la cantidad de horas que se agregarán al timestamp.
Un ejemplo común de uso sería TIMER.addHours(TIMER.getTimeStamp(), hours), donde se toma el timestamp actual utilizando TIMER.getTimeStamp() y se le suma la cantidad específica de horas.
Esta función es útil para realizar operaciones de manipulación de fechas y tiempos en flujos de Stamping.io, como calcular fechas de vencimiento, programar eventos futuros o realizar cualquier otra tarea que involucre el manejo de tiempo.
TIMER.addMinutes(timer, minutes)
La función TIMER.addMinutes(timer, minutes) en el contexto de flujos creados en Stamping.io se utiliza para aumentar una cantidad de minutos a un timestamp dado. Aquí están los parámetros asociados con la función:
- {timer}: Representa el timestamp al que se le agregarán los minutos.
- {minutes}: Representa la cantidad de minutos que se agregarán al timestamp.
Un ejemplo común de uso sería TIMER.addMinutes(TIMER.getTimeStamp(), minutes), donde se toma el timestamp actual utilizando TIMER.getTimeStamp() y se le suma la cantidad específica de minutos.
Esta función es útil para realizar operaciones de manipulación de fechas y tiempos en flujos de Stamping.io, como calcular fechas de vencimiento, programar eventos futuros o realizar cualquier otra tarea que involucre el manejo de tiempo.
TIMER.addSeconds(timer, seconds)
La función TIMER.addSeconds(timer, seconds) en el contexto de flujos creados en Stamping.io se utiliza para aumentar una cantidad de segundos a un timestamp dado. Aquí están los parámetros asociados con la función:
- {timer}: Representa el timestamp al que se le agregarán los segundos.
- {days}: Representa la cantidad de segundos que se agregarán al timestamp.
Un ejemplo común de uso sería TIMER.addSeconds(TIMER.getTimeStamp(), seconds), donde se toma el timestamp actual utilizando TIMER.getTimeStamp() y se le suma la cantidad específica de segundos.
Esta función es útil para realizar operaciones de manipulación de fechas y tiempos en flujos de Stamping.io, como calcular fechas de vencimiento, programar eventos futuros o realizar cualquier otra tarea que involucre el manejo de tiempo.
EIP712.getTimeStamp()
La función EIP712.getTimeStamp() en el contexto de flujos creados en Stamping.io se utiliza para retornar el timestamp actual de la cadena de bloques. Este timestamp se refiere al tiempo actual en el que se encuentra el bloque actual en la cadena de bloques.
Un timestamp de cadena de bloques generalmente representa la marca de tiempo en la que se creó el bloque y puede ser utilizado en aplicaciones descentralizadas (dApps) para realizar lógica basada en el tiempo dentro de contratos inteligentes.
Ten en cuenta que el timestamp de cadena de bloques está sujeto a la precisión y la manipulación de los mineros en la red, por lo que puede haber variaciones pequeñas entre el timestamp de cadena de bloques y el tiempo real.
function getTimeStamp()
public view returns (uint256){
return block.timestamp;
}
EIP712.addDays(EIP712.getTimeStamp(),{days})
La expresión EIP712.addDays(EIP712.getTimeStamp(), {days}) en el contexto de flujos creados en Stamping.io se utiliza para agregar una cantidad específica de días a un timestamp obtenido de la cadena de bloques. Aquí está el significado de cada componente:
- EIP712.getTimeStamp(): Retorna el timestamp actual de la cadena de bloques.
- {days}: Representa la cantidad de días que se agregarán al timestamp.
En resumen, esta expresión toma el timestamp actual de la cadena de bloques utilizando EIP712.getTimeStamp() y luego agrega la cantidad especificada de días utilizando EIP712.addDays(). Esto puede ser útil para realizar cálculos que involucren fechas y tiempos en el contexto de contratos inteligentes basados en la cadena de bloques.
Es importante señalar que el manejo del tiempo en contratos inteligentes debe realizarse cuidadosamente, ya que los timestamps pueden ser influenciados por factores como la variabilidad en la generación de bloques y la posibilidad de que los mineros manipulen los tiempos de bloque.
sha1(text)
Esta función devuelve el hash de tipo SHA-1 de un texto proporcionado. SHA-1 es un algoritmo de función hash que produce una cadena de caracteres hexadecimal única y fija para una entrada dada.
sha256(text)
Esta función devuelve el hash de tipo SHA-256 de un texto proporcionado. SHA-256 es un algoritmo de función hash que produce una cadena de caracteres hexadecimal única y fija para una entrada dada.
sha236(text)
Esta función devuelve el hash de tipo SHA-356 de un texto proporcionado. SHA-356 es un algoritmo de función hash que produce una cadena de caracteres hexadecimal única y fija para una entrada dada.
solidity.getKeccak256({text})
En el contexto de flujos creados en Stamping.io, esta función genera un hash de tipo Keccak256 de Ethereum para el texto proporcionado.
Keccak256 es una función hash criptográfica que forma parte del conjunto de funciones hash de la familia Keccak, diseñada por Guido Bertoni, Joan Daemen, Michaël Peeters y Gilles Van Assche. Aunque a veces se llama simplemente "Keccak", en el contexto de Ethereum, se utiliza la versión específica Keccak256.
En Ethereum, la función Keccak256 se utiliza para generar identificadores únicos de contenido, como las direcciones de contratos inteligentes y las funciones. Es una función de hashing criptográfico que produce una cadena de 256 bits (32 bytes) de longitud fija, representada generalmente como una cadena hexadecimal.
Esta función es crucial en Ethereum para garantizar la integridad y la seguridad de los datos almacenados en la cadena de bloques. Se utiliza en varios contextos, incluidos contratos inteligentes y transacciones, para crear representaciones únicas y seguras de los datos.
trxidOfSha256(sha256)
Devuelve el trxid de una evidencia digital que se enviará a Estampar.
trxidOfText(text)
Devuelve el trxid de un texto que se enviará a Estampar.
getNameHash(val1.val2....valn)
Calcula el hash de una secuencia de valores que se separan por puntos. El calculo es:
$node = str_repeat("\0", 32);
$labels = explode('.', $nameOfParam);
foreach ($labels as $label) {
$labelhash = hash('sha3-256', utf8_encode($label), true); // Usar true para obtener datos binarios
$node = hash('sha3-256', $labelhash . $node, true);
}
return '0x' . bin2hex($node);
getTokenId(name)
Devuelve un SHA3 como identificador de un token usando la siguiente lógica:
base_convert(
hash(
'sha3-256',
utf8_encode($valueOfParam)
),
16,
10
);
EIP-712 (Ethereum Improvement Proposal 712) es un estándar propuesto para la mejora de Ethereum que define un método para estructurar y validar mensajes de firma en la cadena de bloques Ethereum. Este estándar tiene el objetivo de proporcionar una manera estandarizada y segura de realizar la firma y verificación de mensajes estructurados, especialmente en el contexto de contratos inteligentes.
La propuesta EIP-712 se centra en la mejora de la seguridad y la interoperabilidad al definir una estructura específica para los mensajes que se van a firmar, lo que ayuda a prevenir ciertos tipos de ataques de suplantación de identidad y mejora la claridad en la interpretación de los mensajes.
Características clave de EIP-712:
- Estructura Estandarizada de Mensajes: Define una estructura estándar para los mensajes que se firman, incluyendo campos específicos y sus tipos de datos.
- Domain Separator (Separador de Dominio): Introduce un "separador de dominio" que identifica el contrato inteligente que define el dominio del mensaje, ayudando a evitar ataques de reutilización de firmas.
- Tipos de Datos Estructurados: Permite el uso de tipos de datos estructurados, como estructuras anidadas y arreglos, proporcionando flexibilidad en la definición de mensajes.
- Firma con Estructura: Establece un método para firmar el hash del mensaje estructurado, lo que permite a los contratos inteligentes verificar la autenticidad de la firma.
- Mejora la Seguridad: Ofrece mejoras en la seguridad al evitar ciertos ataques de suplantación de identidad y proporcionar una forma más clara de gestionar y verificar mensajes firmados.
EIP-712 es especialmente útil en aplicaciones descentralizadas (dApps) y contratos inteligentes que requieren interacciones seguras y verificables mediante firmas criptográficas. La implementación de este estándar permite una gestión más robusta de la seguridad en el ecosistema Ethereum.
getChainIdEIP712()
Devuelve el identificador de la red (Chain ID) en la que se encuentra el contrato utilizado para EIP-712.
getContractEIP712()
Devuelve la dirección del contrato en el cual se está utilizando EIP-712.
Esta dirección es parte de la estructura de mensajes EIP-712 y ayuda a definir el dominio del mensaje. En combinación con el identificador de la red (Chain ID) y otros parámetros, proporciona un contexto claro y único para la firma y verificación de mensajes estructurados en contratos inteligentes que siguen el estándar EIP-712.
EIP712.getDomain({name},{version},{chainid},{verifyingContract})
La función EIP712.getDomain({name}, {version}, {chainid}, {verifyingContract}) en el contexto de flujos creados en Stamping.io se utiliza para generar un dominio (domain) de acuerdo con el estándar EIP-712. Aquí están los parámetros asociados con la función:
- {name}: Representa el nombre del contrato o la aplicación.
- {version}: Representa la versión del contrato o la aplicación.
- {chainid}: Representa el identificador de la cadena (Chain ID) de la red Ethereum en la que se encuentra el contrato.
- {verifyingContract}: Representa la dirección del contrato que realizará la verificación.
El estándar EIP-712 especifica que un dominio debe incluir ciertos parámetros, como el nombre, la versión, el identificador de la cadena y la dirección del contrato que realiza la verificación. Estos parámetros ayudan a prevenir ataques de suplantación de identidad y proporcionan contexto a las firmas realizadas en Ethereum.
La función EIP712.getDomain toma estos parámetros como entrada y devuelve una estructura que representa el dominio según las especificaciones de EIP-712. Esta estructura se utiliza luego en la construcción y verificación de mensajes estructurados en contratos inteligentes que siguen el estándar EIP-712.
// Function to set the EIP-712 domain
function getDomain(
string memory _name,
string memory _version,
uint256 _chainId,
address _verifyingContract)
public pure returns (bytes32){
return keccak256(
abi.encodePacked(
_name,
_version,
_chainId,
_verifyingContract
)
);
}
EIP712.hashCredentialSignedETH({eip712Domain},{TSFrom},{TSTo},{issuer},{addressSubject},{text})
Se utiliza para generar un hash de transferencia de credenciales que será firmado usando ECDSA (Elliptic Curve Digital Signature Algorithm) en modo OFFCHAIN. Este hash permitirá al contrato verificar la autorización del emisor para realizar una transferencia. Aquí están los parámetros asociados con la función:
- {eip712Domain}: Representa el dominio generado según el estándar EIP-712, que incluye información sobre el contrato, la versión, el identificador de cadena y la dirección del contrato que realizará la verificación.
- {TSFrom}: Representa el timestamp de inicio de la transferencia.
- {TSTo}: Representa el timestamp de finalización de la transferencia.
- {issuer}: Representa la dirección del emisor (issuer) que realizará la firma.
- {addressSubject}: Representa la dirección del destinatario de la transferencia.
- {text}: Representa algún texto adicional que se incluirá en el hash.
La función toma estos parámetros y genera un hash que será firmado con la llave privada del emisor usando el algoritmo ECDSA. El hash resultante, junto con la firma, se utilizará para demostrar la autorización del emisor al contrato en el momento de realizar la transferencia.
Este tipo de procedimiento es común en aplicaciones descentralizadas (dApps) y contratos inteligentes en Ethereum, donde se necesita verificar la autenticidad y autorización de una acción, como una transferencia de activos, a través de firmas digitales criptográficas.
// Function to calculate the hash of a signed ETH credential
function hashCredentialSignedETH(
bytes32 eip712Domain,
uint256 _from,
uint256 _to,
address _issuer,
address _subject,
string calldata _nonce)
public pure returns (bytes32) {
return keccak256(abi.encodePacked(
"\x19Ethereum Signed Message:\n32",
hashCredential( eip712Domain,
_from,
_to,
_issuer,
_subject,
_nonce)
)
);
}
EIP712.hashTransferSignedETH({eip712Domain},getAddress(),{addressTo},{amount},{text})
Genera un hash de transferencia de tokens para ser firmado usando ECDSA en modo OFFCHAIN, que permitirá el contrato verificar la autorización del emisor para hacer una transferencia.
// Function to calculate the hash of a signed ETH transfer
function hashTransferSignedETH(
bytes32 eip712Domain,
address _from,
address _to,
uint24 _amount,
string calldata nonce)
public pure returns (bytes32) {
return keccak256(abi.encodePacked(
"\x19Ethereum Signed Message:\n32",
hashTransfer(eip712Domain,
_from, _to,
nonce,
_amount
)
)
);
}
EIP712.hashTransferNFTSignedETH({eip712Domain},getAddress(),{addressTo},{tokenId},{text})
Genera un hash de transferencia de NFT para ser firmado usando ECDSA en modo OFFCHAIN, que permitirá el contrato verificar la autorización del emisor para hacer una transferencia.
// Function to calculate the hash of a signed ETH NFT transfer
function hashTransferNFTSignedETH(
bytes32 eip712Domain,
address _from,
address _to,
uint256 _tokenId,
string calldata nonce)
public pure returns (bytes32) {
return keccak256(abi.encodePacked(
"\x19Ethereum Signed Message:\n32",
hashTransferNFT(
eip712Domain,
_from,
_to,
nonce,
_tokenId
)
)
);
}
EIP712.hashEvidenceSignedETH({eip712Domain},{TSTo},getAddress(),{text})
Genera un hash de evidencias de NFT para ser firmado usando ECDSA en modo OFFCHAIN, que permitirá el contrato verificar la autorización del emisor para hacer una transferencia.
// Function to calculate the hash of a signed ETH evidence
function hashEvidenceSignedETH(
bytes32 eip712Domain,
uint256 _to,
address _issuer,
string memory _nonce)
public pure returns (bytes32) {
return keccak256(abi.encodePacked(
"\x19Ethereum Signed Message:\n32",
hashEvidence(
eip712Domain,
_to,
_issuer,
_nonce
)
)
);
}
EIP712.hashEvidence({eip712Domain},EIP712.addDays(EIP712.getTimeStamp(),360),getAddress(),{text})
Genera un hash de evdiencias digitales donde se incluye el tiempo de duración.
// Function to calculate the hash of an EIP-712 evidence message
function hashEvidence(
bytes32 eip712Domain,
uint256 _validTo,
address _issuer,
string memory _nonce)
public pure returns (bytes32) {
require(eip712Domain != VALUE_NULL, "Execute setDomain");
return
keccak256(
abi.encodePacked(
"\x19\x01",
abi.encode(eip712Domain),
keccak256(abi.encode(
TYPEHASH_CREDENTIAL,
_validTo,
_issuer,
_nonce))
)
);
}
EIP712.getTimeStamp()
La función EIP712.getTimeStamp() en el contexto de flujos creados en Stamping.io se utiliza para retornar el timestamp actual de la cadena de bloques. Este timestamp se refiere al tiempo actual en el que se encuentra el bloque actual en la cadena de bloques.
Un timestamp de cadena de bloques generalmente representa la marca de tiempo en la que se creó el bloque y puede ser utilizado en aplicaciones descentralizadas (dApps) para realizar lógica basada en el tiempo dentro de contratos inteligentes.
Ten en cuenta que el timestamp de cadena de bloques está sujeto a la precisión y la manipulación de los mineros en la red, por lo que puede haber variaciones pequeñas entre el timestamp de cadena de bloques y el tiempo real.
function getTimeStamp()
public view returns (uint256){
return block.timestamp;
}
EIP712.addDays(EIP712.getTimeStamp(),{days})
La expresión EIP712.addDays(EIP712.getTimeStamp(), {days}) en el contexto de flujos creados en Stamping.io se utiliza para agregar una cantidad específica de días a un timestamp obtenido de la cadena de bloques. Aquí está el significado de cada componente:
- EIP712.getTimeStamp(): Retorna el timestamp actual de la cadena de bloques.
- {days}: Representa la cantidad de días que se agregarán al timestamp.
En resumen, esta expresión toma el timestamp actual de la cadena de bloques utilizando EIP712.getTimeStamp() y luego agrega la cantidad especificada de días utilizando EIP712.addDays(). Esto puede ser útil para realizar cálculos que involucren fechas y tiempos en el contexto de contratos inteligentes basados en la cadena de bloques.
Es importante señalar que el manejo del tiempo en contratos inteligentes debe realizarse cuidadosamente, ya que los timestamps pueden ser influenciados por factores como la variabilidad en la generación de bloques y la posibilidad de que los mineros manipulen los tiempos de bloque.
La codificación ABI (Application Binary Interface) en el contexto de Ethereum se refiere a un conjunto de reglas y convenciones que especifican cómo los datos deben ser codificados en binario para la comunicación entre contratos inteligentes y para la interacción con la blockchain. La codificación ABI se utiliza para garantizar la consistencia en la representación de datos, especialmente cuando se comunican entre contratos inteligentes o cuando se realizan llamadas desde y hacia contratos inteligentes en la red Ethereum.
En Ethereum, la codificación ABI es esencial para la serialización y deserialización de datos en binario que se intercambian entre diferentes partes del sistema, como los nodos de la red, los clientes de Ethereum, y los contratos inteligentes. La codificación ABI asegura que los datos se representen de manera coherente y se interpreten correctamente.
Para trabajar con la codificación ABI, se utilizan tipos de datos específicos y reglas de codificación, como la longitud de las cadenas, la representación de números enteros, la estructura de arreglos y la identificación de funciones en las llamadas a contratos inteligentes. Cada tipo de dato tiene su propia forma de ser codificado, y la codificación sigue ciertos estándares para garantizar la interoperabilidad entre diferentes implementaciones de Ethereum.
En resumen, el ABIEncode se refiere a la codificación según las reglas establecidas por la ABI de Ethereum y es fundamental para la correcta comunicación y ejecución de contratos inteligentes en la red Ethereum.
solidity.getABIEncode({text})
Esta función se utiliza para codificar un texto utilizando el formato de codificación de Ethereum ABI (Application Binary Interface). La codificación ABI es un estándar utilizado en Ethereum para representar y codificar datos de manera eficiente.
- {text}: Representa el texto que se desea codificar utilizando la codificación ABI.
Esta función es útil cuando se necesita interactuar con contratos inteligentes en Ethereum y se requiere enviar datos de manera que sea compatible con la codificación ABI. La codificación ABI garantiza que los datos sean interpretados correctamente por los contratos inteligentes en la cadena de bloques Ethereum.
solidity.getABIDecode({base64})
Esta función se utiliza para decodificar datos que han sido codificados en formato base64 utilizando el esquema de codificación de Ethereum ABI (Application Binary Interface).
- {base64}: Representa los datos codificados en base64 que se desean decodificar utilizando el formato de codificación ABI de Ethereum.
La función se encarga de decodificar los datos codificados según las reglas de la ABI de Ethereum, proporcionando como resultado la representación en texto plano de la información original.
Esta función es útil cuando se trabajan con datos que han sido codificados utilizando la ABI de Ethereum y luego codificados en base64, y se necesita recuperar la información original. Puede ser especialmente relevante cuando se interactúa con contratos inteligentes en Ethereum y se gestionan datos codificados en base64.
solidity.getKeccak256({text})
En el contexto de flujos creados en Stamping.io, esta función genera un hash de tipo Keccak256 de Ethereum para el texto proporcionado.
Keccak256 es una función hash criptográfica que forma parte del conjunto de funciones hash de la familia Keccak, diseñada por Guido Bertoni, Joan Daemen, Michaël Peeters y Gilles Van Assche. Aunque a veces se llama simplemente "Keccak", en el contexto de Ethereum, se utiliza la versión específica Keccak256.
En Ethereum, la función Keccak256 se utiliza para generar identificadores únicos de contenido, como las direcciones de contratos inteligentes y las funciones. Es una función de hashing criptográfico que produce una cadena de 256 bits (32 bytes) de longitud fija, representada generalmente como una cadena hexadecimal.
Esta función es crucial en Ethereum para garantizar la integridad y la seguridad de los datos almacenados en la cadena de bloques. Se utiliza en varios contextos, incluidos contratos inteligentes y transacciones, para crear representaciones únicas y seguras de los datos.
solidity.getETHSignedMessage({hash})
Esta función se utiliza para preparar un hash específico para ser firmado con el estándar de Ethereum. Aquí está la descripción de los parámetros:
- {hash}: Representa el hash que se preparará para ser firmado utilizando el estándar de Ethereum.
Preparar un hash para ser firmado en Ethereum generalmente implica añadir un prefijo específico al hash antes de realizar la firma. Este prefijo se conoce como "message prefix" o "Éter mágico" y se utiliza para evitar ataques de repetición y para indicar explícitamente que el hash es un mensaje que se va a firmar.
Esta función puede ser útil cuando se trabaja con firmas en Ethereum, especialmente al interactuar con contratos inteligentes o al verificar la autenticidad de ciertos mensajes mediante la firma criptográfica. La preparación adecuada del mensaje es esencial para garantizar que la firma sea verificable correctamente en el contexto de Ethereum.
keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", {hash}))
solidity.getAddressSignMessage({ETHhash},{signature})
Se utiliza para obtener la dirección (address) que firmó el hash Ethereum (ETHhash) con una firma específica (signature).
- {ETHhash}: Representa el hash Ethereum que fue firmado.
- {signature}: Representa la firma asociada al hash Ethereum.
La función realiza la verificación de la firma en relación con el hash proporcionado y devuelve la dirección que corresponde a la entidad que realizó la firma. Esto puede ser útil para verificar la autenticidad de ciertos mensajes o transacciones en Ethereum, ya que la dirección proporciona información sobre la entidad que realizó la firma.
Es importante señalar que la verificación de firmas en Ethereum a menudo implica más pasos y consideraciones de seguridad, y la dirección obtenida se utiliza para identificar la entidad que realizó la firma. Este proceso es común al trabajar con contratos inteligentes y funciones que requieren autenticación criptográfica.
addressOf(privateKey)
La función addressOf(privateKey) en el contexto de flujos creados en Stamping.io devuelve la dirección Ethereum que corresponde a una llave privada específica.
- {privateKey}: Representa la llave privada de la cual se desea obtener la dirección Ethereum.
La dirección Ethereum es derivada de la llave privada mediante un proceso de generación de claves. En Ethereum, se utiliza la función ECDSA (Elliptic Curve Digital Signature Algorithm) para generar la dirección a partir de la llave privada.
Es importante destacar que la llave privada es una información sensible y secreta. La dirección derivada de la llave privada es pública y puede compartirse sin comprometer la seguridad de la cuenta, pero la llave privada nunca debe ser divulgada.
Esta función puede ser útil cuando se necesita determinar la dirección Ethereum asociada a una llave privada específica en el contexto de flujos creados en Stamping.io.
formatExp(value, base)
La función formatExp(value, base) en el contexto de flujos creados en Stamping.io se utiliza para codificar un valor con notación exponencial según la base especificada. El resultado se devuelve en el formato uint256={value}.
- {value}: Representa el valor que se desea codificar con notación exponencial.
- {base}: Especifica la base a la que se aplica la notación exponencial.
El uso de notación exponencial es común al trabajar con valores que involucran decimales o números muy grandes en Ethereum. Esta función puede ser útil para generar valores formateados que se enviarán como parámetros en smart contracts o para generar QR codes basados en EIP-681, que es un estándar para la creación de URLs que facilitan la recepción de tokens o criptoactivos en una red específica.
El resultado de la función es una cadena de texto que sigue el formato uint256={value}, lo que permite representar el valor de manera adecuada para su uso en contratos inteligentes o para otros propósitos específicos en el contexto de Stamping.io.
formatExpValue(value, base)
La función formatExpValue(value, base) en el contexto de flujos creados en Stamping.io codifica un valor con notación exponencial según la base especificada y devuelve el resultado en el formato notacion(value, base).
- {value}: Representa el valor que se desea codificar con notación exponencial.
- {base}: Especifica la base a la que se aplica la notación exponencial.
El resultado de la función es una cadena de texto que sigue el formato notacion(value, base), lo que permite representar el valor de manera adecuada para su uso en contratos inteligentes u otros propósitos específicos en el contexto de Stamping.io. La notación exponencial es comúnmente utilizada para representar números grandes o con decimales de manera más compacta y legible.
Este tipo de función es útil cuando se trabaja con valores en Ethereum que involucran decimales o números grandes, y la notación exponencial se utiliza para manejar estos valores de manera eficiente.
getTaskName()
Esta función devuelve el nombre de la tarea que se está ejecutando actualmente en el proceso. Esta función proporciona la capacidad de obtener dinámicamente el nombre de la tarea en la que se encuentra el flujo de trabajo, lo que puede ser útil para personalizar o adaptar la ejecución del proceso según la tarea específica en curso.
getVariable(name)
Esta función permite obtener el valor de una variable específica en el proceso en ejecución.
- {name}: Representa el nombre de la variable de la cual se desea obtener el valor.
Esta función es útil para acceder y utilizar dinámicamente el contenido de las variables dentro del flujo de trabajo, permitiendo una gestión flexible de datos durante la ejecución del proceso en Stamping.io.
getResponse(name)
Esta función permite obtener el valor de la respuesta asociada a una tarea específica dentro del proceso en ejecución.
- {name}: Representa el nombre de la tarea de la cual se desea obtener la respuesta.
Esta función es útil para acceder y utilizar dinámicamente la información generada por una tarea anterior en el flujo de trabajo. Proporciona la capacidad de recuperar datos específicos generados durante la ejecución del proceso, permitiendo una gestión eficiente de la información dentro de Stamping.io.
getService(name)
Esta función permite obtener el valor asociado a un servicio específico en el proceso en ejecución.
- {name}: Representa el nombre del servicio del cual se desea obtener el valor.
getContract(name)
Esta función permite permite obtener la información sobre un contrato específico, incluyendo la dirección del contrato y la red en la que se encuentra. El valor de retorno dependerá del scope en el que se ejecuta.
- {name}: Representa el nombre del contrato del cual se desea obtener la información.
El formato del valor de retorno puede ser algo similar a "0x1234...ABCD@1627", donde "0x1234...ABCD" es la dirección del contrato y "1627" es la identificación de la red.
Esta función es útil para acceder y utilizar dinámicamente la información sobre contratos en el contexto del proceso en curso en Stamping.io. Proporciona la capacidad de recuperar datos específicos de los contratos utilizados durante la ejecución del flujo de trabajo.
getValueRemote(command, name)
Esta función permite obtener valores remotos según el comando ejecutado. Estos comandos se ejecutan en el sitio web del emisor y no en los servidores de Stamping.io, lo que contribuye a mejorar la seguridad de las credenciales de acceso a ciertos servicios o el proceso de firmado de transacciones, donde no se desea divulgar el acceso a Stamping.io.
- {command}: Representa el comando que se ejecutará en el sitio web del emisor para obtener el valor remoto.
- {name}: Representa el nombre asociado al valor remoto que se desea obtener.
Esta función es útil para situaciones en las que es necesario interactuar con servicios externos, realizar operaciones específicas en el sitio web del emisor y recuperar valores sin comprometer la seguridad de las credenciales o la información sensible dentro de Stamping.io. Proporciona una capa adicional de seguridad al ejecutar ciertos comandos de manera remota.
getAddress()
Esta función permite obtener el "address" del emisor (issuer).
Esta función es útil para recuperar dinámicamente el "address" asociado al emisor en el contexto del proceso en ejecución. Proporciona la capacidad de acceder a información específica del emisor, como puede ser necesario para la interacción con contratos inteligentes o servicios externos dentro de Stamping.io.
getPrivateKey()
Esta función proporciona la capacidad de obtener la llave privada asociada al emisor (issuer()).
Es fundamental destacar que la exposición de la llave privada es una práctica extremadamente riesgosa desde el punto de vista de seguridad. Las llaves privadas son información sensible y su divulgación puede comprometer la seguridad de cualquier sistema o proceso que dependa de esa llave. En entornos seguros, las llaves privadas suelen mantenerse de manera confidencial y no se deben exponer sin una justificación y medidas de seguridad adecuadas.
Si estás utilizando esta función en un entorno de desarrollo o para fines educativos, asegúrate de entender los riesgos asociados y evita su uso en un entorno de producción o donde la seguridad sea una preocupación crítica. En entornos reales, las interacciones con llaves privadas generalmente se gestionan de manera más segura, como a través de billeteras criptográficas seguras o módulos de hardware dedicados.
getIpRequest() y getAgentRequest()
Proporcionan información sobre la solicitud realizada al API por parte del cliente:
- getIpRequest(): Devuelve la dirección IP del cliente que realizó la solicitud al API REST. Esto puede ser útil para rastrear la ubicación o tomar decisiones basadas en la ubicación del cliente.
- getAgentRequest(): Devuelve el agente del usuario (user-agent) que realizó la solicitud al API REST. El agente del usuario es una cadena de texto que generalmente contiene información sobre el navegador y el sistema operativo del cliente. Puede ser utilizado para adaptar la respuesta del API según las capacidades del cliente.
Ambas funciones son útiles para obtener información contextual sobre el cliente que interactúa con el API REST, lo que puede ser relevante para personalizar respuestas o realizar ciertas acciones basadas en el contexto de la solicitud.
random(digitos)
Esta función se utiliza para generar un número aleatorio con la cantidad de dígitos especificados. Aquí está el parámetro asociado con la función:
- {digitos}: Representa la cantidad de dígitos que se desea en el número aleatorio.
La función generará un número aleatorio con la cantidad de dígitos especificada y lo devolverá como resultado. Este tipo de función puede ser útil en diversas situaciones, como la generación de valores únicos, códigos, identificadores o cualquier otra necesidad en la que se requiera un número aleatorio con un número específico de dígitos.
random256()
Devuelve un hash SHA-256 aleatorio. Esta función utiliza el algoritmo de hash criptográfico SHA-256 para generar un valor aleatorio de 256 bits (32 bytes) y lo devuelve como resultado.
El hash SHA-256 es conocido por ser un algoritmo de hash seguro y ampliamente utilizado en aplicaciones criptográficas y blockchain, incluido Ethereum. La salida de esta función puede ser utilizada para generar valores únicos, semillas aleatorias, o cualquier otro escenario en el que se necesite un valor aleatorio criptográficamente seguro.
getUUID()
Devuelve un identificador único (UUID). Un UUID es un identificador universalmente único que se genera de manera que se espera que sea único en cualquier momento y lugar.
La función getUUID() utiliza una forma de implementación estándar para generar UUIDs, como UUIDv4, que es uno de los métodos comunes para generar UUIDs aleatorios. Estos identificadores son útiles en situaciones donde se necesita asignar identificadores únicos a entidades o recursos, por ejemplo, en sistemas distribuidos o bases de datos.
SECURITY.steganographyEncode(fileInput,text,fileOutput)
Esta función permite ocultar un código secreto (text) dentro de una imagen especificada (fileInput), que puede ser de formato jpg, bmp, png, ico o webp. Luego, devuelve la imagen con el código oculto como un nuevo archivo con el nombre proporcionado en fileOutput y formato png.
La esteganografía es la técnica de ocultar información dentro de otro medio de manera que no sea evidente para observadores externos. En este caso, se está ocultando un código secreto dentro de la imagen, y la nueva imagen generada con el código oculto se guarda en formato png.
Esta función puede ser útil para situaciones en las que se requiere la ocultación de información confidencial dentro de imágenes, proporcionando una capa adicional de seguridad y discreción.
SECURITY.steganographyDecode(fileOutput,base64|url)
Esta función recupera el código secreto oculto dentro de la imagen especificada (fileOutput), que se espera que esté en formato png. La información puede estar codificada como base64 o proporcionada a través de una URL.
1) Si la información se encuentra, la función devuelve el código secreto contenido dentro de la imagen.
2) Si no se encuentra información, la función devuelve un valor vacío.
Esta función es útil para recuperar información oculta utilizando esteganografía y puede ser utilizada en situaciones en las que se necesita extraer datos confidenciales de una imagen esteganografiada en formato png, ya sea a través de su representación base64 o desde una URL.
encryptAES256({data},{key})
Esta función utiliza el método de encriptación AES-256-CBC mediante OpenSSL. El resultado de la encriptación se devuelve en formato hexadecimal.
- {data}: Representa los datos que se desean encriptar.
- {key}: Es la clave utilizada para la encriptación.
El algoritmo AES-256-CBC (Advanced Encryption Standard con clave de 256 bits en modo Cipher Block Chaining) es un estándar ampliamente utilizado para encriptar datos de manera segura. La función proporciona una capa adicional de seguridad al transformar los datos utilizando una clave específica.
El resultado de la encriptación se entrega en formato hexadecimal, lo que facilita su representación y manipulación en flujos de trabajo de Stamping.io. Esta función puede ser útil en situaciones donde se requiere proteger la confidencialidad de los datos mediante la encriptación.
decryptAES256({data},{key})
Esta función utiliza el método de desencriptación AES-256-CBC mediante OpenSSL. El resultado de la desencriptación se devuelve en formato ASCII.
- {data}: Representa los datos encriptados.
- {key}: Es la clave utilizada para la desencriptación .
El algoritmo AES-256-CBC (Advanced Encryption Standard con clave de 256 bits en modo Cipher Block Chaining) es un estándar ampliamente utilizado para encriptar datos de manera segura. La función proporciona una capa adicional de seguridad al transformar los datos utilizando una clave específica.
getOTP(nonce, seconds)
Esta función genera un código OTP (One-Time Password) válido por una cantidad específica de tiempo.
- {nonce}: Es un valor único y aleatorio utilizado como base para generar el código OTP.
- {seconds}: Representa la cantidad de segundos durante los cuales el código OTP será válido.
La función utiliza un algoritmo que combina el valor único (nonce) con la marca de tiempo actual o código único y genera un código OTP que cambia con el tiempo. Este código es válido por la cantidad de segundos especificada.
Esta función es útil para generar códigos temporales de un solo uso que pueden ser empleados para autenticación o verificación en procesos de seguridad. Los códigos OTP proporcionan una capa adicional de seguridad al ser válidos solo por un breve período.