¿Cómo enviar datos a un contrato inteligente?

Tengo la variable w1_temp, que necesito enviar para contratar Tengo el siguiente código:

var W1Temp = require('w1temp')
var Web3 = require('web3')
var web3 = new Web3()

web3.setProvider(new web3.providers.HttpProvider('http://localhost:8042'))
var contractAddress = '0x414c49c9552c4bd41401ff0a67ff84431a900c66'
var ABI = JSON.parse(
'[ { "inputs": [], "payable": false, "stateMutability": "nonpayable", "type": "constructor" }, { "constant": false, "inputs": [ 
{ "name": "_sensorData", "type": "int256" } ], "name": "setSensorData", "outputs": [], "payable": false, "stateMutability": 
"nonpayable", "type": "function" }, { "constant": true, "inputs": [], "name": "getSensorData", "outputs": [ { "name": "", 
"type": "int256", "value": "0" } ], "payable": false, "stateMutability": "view", "type": "function" } ] ')

var StoreIntegerValue = web3.eth.contract(ABI).at(contractAddress)

W1Temp.setGpioData(7)
W1Temp.getSensor('28-0316612396ff').then(function (sensor) {
    var _sensorData = sensor.getTemperature();
});

eth.sendTransaction({
    from: 'a57f7e5347bd04076dd02c02212c0221522289ff38940e', 
    to: '0x414c49c9552c4bd41401ff0a67ff84431a900c66',
    value: web3.toWei(100,'finney'),
    data: web3.toHex('_sensorData')
})

Pero estoy casi seguro de que no es correcto Por favor ayuda para que funcione

ingrese la descripción de la imagen aquí

Respuestas (1)

Como tiene el contrato ABI, puede crear una instancia que apunte a la dirección del contrato y los métodos de llamada directamente.

var StoreIntegerValue=web3.eth.contract(ABI).at(contractAddress);

W1Temp.setGpioData(7)
W1Temp.getSensor('28-0316612396ff').then(function (sensor){
  var _sensorData = sensor.getTemperature();

  StoreIntegerValue.setSensorData(_sensorData, { 
    from: "0x123412341234.." 
  });
});

Pero debe preguntarle a la persona que proporcionó el ABI qué métodos están disponibles, sus parámetros y requisitos.

Sigue sin funcionar, cada vez que llamo al contrato me devuelve los mismos datos que envié para ejecutarlo. Según entendí, el valor enviado en el contrato puede ser cualquier cosa. Aquí está mi contrato inteligente. solidez de pragma ^0.4.10; contrato StoreIntegerValue { propietario de la dirección; datos del sensor int; function StoreIntegerValue() { propietario = mensaje.remitente; } function setSensorData(int _sensorData) { require(msg.sender == propietario); sensorData = _sensorData; } función getSensorData() constante devuelve (int) { require(msg.sender == propietario); devolver datos del sensor; } }
No entiendo tu problema. Si llama a setSensorData con un nuevo valor, después de extraer la transacción, debería devolver el nuevo valor cuando llame a getSensorData. Tal vez el requerimiento está fallando y causando que la transacción se revierta, para la prueba simplemente comente las oraciones de requerimiento. Intente también especificar el gas { from: "0x..", gas: 1000000 }.
No llamo datos del sensor, se escribe en campo read from contract. Además, cuando envío la transacción, dice "Parece que la transacción fallará". Si lo envía, puede consumir todo el gas que proporciona”, y luego me deja enviar la transacción.
¿Y cuál es el requerimiento? ¿Cómo encontrarlo? ¿Son artefactos?
En su código de contrato hay una require(msg.sender == owner);causa que solo el propietario del contrato puede enviar datos al contrato.
¿Es el propietario del contrato el que inició sesión en Mist? No asigné ningún propietario al contrato.
El titular es la dirección que desplegó el contrato.
En mist tengo dos cuentas del minero 1, coinbase y la otra. ¿Cuál de ellos es el dueño?
Solo para aclarar, he subido una foto de lo que veo en la niebla, para que puedas ver. Entonces, llamo a setIntegerValue, envío una transacción de un número arbitrario y luego devuelve exactamente el mismo número (en la imagen se muestra mi próximo intento de realizar una transacción), entonces, ¿debería enviarlo desde otra cuenta? o identificar el contrato dueño en alguna parte?
Desde su código de contrato, debe usar la misma cuenta para implementar el contrato y enviar datos al contrato. Si puede editar su contrato y eliminar el require(msg.sender == owner)entonces cualquier dirección debería poder enviar datos a su contrato.