tipo de datos recomendado para "datos" en la transacción ethereum

Estoy enviando datos con mi transacción usando la siguiente manera

var tx = {from: eth.coinbase, to:eth.accounts[1], value: web3.toWei(1, "ether"),data:web3.toHex("Test Data")}

personal.sendTransaction(tx, "password")

Como podemos ver, estoy usando una cadena simple en los datos que se convierten a hexadecimal, tengo algunas preguntas al respecto.

  1. ¿Hay algún tipo de datos recomendado para usarlo dentro del campo de datos?
  2. ¿Hay alguna forma estándar de poner datos JSON en ese campo de datos?

(nota: actualmente estoy enviando datos JSON al convertir manualmente los datos a una cadena JSON de la siguiente maneradata:web3.toHex("{\"key1\":\"Data1\",\"key2\":\"Data2\"}"))

Respuestas (1)

Codificar una cadena JSON no parece una buena idea. Mira esto .

En lugar de proporcionar un objeto como datos, debe definir su función de contrato para tomar las entradas relevantes (como function f(string key1, uint key2){}) y usar una biblioteca de transacciones como ethereumjs-tx para calcular los datos de acuerdo con sus parámetros. Aquí hay un ejemplo con solo Web3.

De acuerdo con esto, los datos se almacenan en el almacenamiento por contrato, pero quiero almacenar datos en blockchain como una transacción, por ejemplo. Si tomamos el ejemplo de la gestión de activos de la oficina, si obtengo un mouse nuevo del tipo de hardware, debería estar almacenado en la cadena de bloques, ¿cuál es la mejor manera de hacerlo?
Almacenar datos como una transacción es una idea interesante, pero la forma estándar es almacenarlos en un contrato. Será más accesible. Solo necesitarás la dirección del contrato y el ABI. Para restaurar datos de un tx. hash (o recibo) probablemente necesitará un software más complejo y especializado.
No se necesitó ningún software especial, puede obtener un hash en el campo de entrada de los datos de la transacción y convertirlo a ASCII para obtener los campos de entrada, pero el único problema importante es que el campo de datos en la transacción solo aceptará datos de cadena Hay un ejemplo de transacciónvar tx = {from: eth.coinbase, to:eth.accounts[1], value: web3.toWei(10, "ether"),data:web3.toHex("D1:Testing Data")}
¿Puede sugerirme algún buen ejemplo de almacenamiento de datos en almacenamiento de contrato que se adapte al caso de uso de gestión de activos anterior?
El campo de datos suele ser la codificación RLP del nombre de la función, los nombres de los parámetros y los valores. Cualquier ejemplo básico de llamada de contrato servirá. No puede simplemente codificar hexadecimal "name: value"y ponerlo como datos. Si lo hace, su contrato necesita hacer un análisis complejo, eso es lo que llamé software especial.
Gracias por la explicación, lo que entiendo de esta discusión es que debemos almacenar datos en el contrato en lugar de transacciones. Si lo entendí bien, ¿puede sugerir algún enlace a un ejemplo de cómo almacenar datos en el contrato?
Es tan simple como definir una variable y asignarle un valor. Una variable puede ser un tipo de datos primitivo, una estructura, una matriz o una combinación de estos. Creo que cualquier ejemplo de Solidity tendrá estos. Revisa esta pregunta .
Creo que todavía estoy confundido con esta necesidad de retroceder mi comprensión, por cierto, gracias por la muy buena explicación.