¿Cómo "Agrego datos" a una transacción de envío en Solidity?

En myetherwallet, hay una sección +Avanzado: Agregar datos donde puedo agregar datos a la transacción.

¿Cómo puedo agregar estos mismos datos en una transacción que realizo en Solidity?

ingrese la descripción de la imagen aquí

Respuestas (2)

primero debe convertir su cadena a la forma hexadecimal usando un convertidor en línea como http://string-functions.com/string-hex.aspx .

luego póngalo en el campo de datos (con 0x al principio)

por ejemplo, he convertido StackExchange en 0x 537461636b45786368616e6765

ingrese la descripción de la imagen aquí

colóquelo en el campo de datos y luego he enviado con éxito mi transacción. Puedes verificar la transacción aquí .

ingrese la descripción de la imagen aquí

puede presionar el botón convertir a asci en la parte inferior para recuperar la cadena enviada codificada.

Esta respuesta no muestra cómo se hace en Solidity. Voto negativo.

Puede usar el nivel bajo de Solidity call, pero tenga cuidado con ¿Qué significa `call.value` y cómo permitió el ataque a The DAO?

Ejemplo:

bytes calldata = 0xabcdef;
address to = 0x...
if (to.call(calldata)) {  // checks the return value
    ....
} else {
    ....
}

Si quisiera enviar 2 ETH, la sintaxis sería:

to.call.value(2 * 10**18)(calldata);  // should check the return value

Alguna información en los documentos y preguntas frecuentes de Solidity .

Siempre que use , se puede ejecutar callel código del contrato y, dado que puede devolverle la llamada de formas que no espera (como TheDAO ), se deben seguir pautas como actualizar primero las variables de estado y dar el último paso (un ejemplo que muestra una variable de estado que se establece en cero primero y luego se realiza una llamada a msg.sender).tocall

¿Por qué no usar enviar en lugar de llamar?
@SigTouri Sí sendo transferes mejor si eso es todo lo que se necesita. La pregunta era acerca de agregar datos.
@eth ¿Cómo se hace esto con un contrato de token? value() parece esperar éter.
Los tokens de @nueverest funcionan de manera bastante diferente: invoca una función de transferencia en un contrato de token y especifica el destinatario y la cantidad de tokens. Tiene razón en que value() no debe usarse. Ten cuidado y prueba primero.