El método eth_sendTransaction no existe/no está disponible [duplicado]

Estoy tratando de enviar los argumentos en función desde la cuenta del propietario, pero obtengo un error devuelto.

Estoy usando web3 1.0 .

Función en el contrato:

/**
* @dev Adds single address to whitelist.
* @param trusted Address to be added to the whitelist
*/
function addToWhiteList(address trusted) public onlyOwner {
    require(!whitelist[trusted]);
    whitelist[trusted] = true;

    emit UserWhitelist(true);
}

Código en index.html:

// Add user on whitelist
abc.methods.addToWhiteList("0x9DA80947ACf5Fc16299311EdAabc37fF7d201C95")
.send({ from: "0x61A44075419C4402f6DE631341d875Ece6A3922e" })
.on("receipt", function(receipt) {
  console.log(receipt);
})
.on("error", function(error) {
  console.error(error);
});

ERROR : Returned error: The method eth_sendTransaction does not exist/is not available

Nota: agrego web3 en la etiqueta del script:

<script language="javascript" type="text/javascript" src="web3.min.js"></script>

e init. como esto :

web3 = new Web3(new Web3.providers.WebsocketProvider("wss://ropsten.infura.io/ws"));
Su código parece ser perfecto. Quizás algo está roto con Inura. Espero que esté desbloqueando seders add antes de enviar tx.
@PrashantPrabhakarSingh, no te entendí. Estoy enviando tx. desde la cuenta del propietario y agrego la clave pública del propietario desde .
Necesita desbloquear la cuenta del propietario. Controlarpersonal.unlock(owner)
@PrashantPrabhakarSingh, lo intenté pero no tuve éxito. ¿Puede informarme en una respuesta separada para que pueda aceptar su respuesta también?
Infura no admite sendTransactionque tenga que firmar sus propias transacciones y usar sendSignedTransaction, o usar un complemento como MetaMask para firmar transacciones.

Respuestas (1)

No estoy seguro si esta es la razón. Pero intente desbloquear la cuenta antes de enviar la transacción. La cuenta del remitente debe estar desbloqueada. Generalmente obtienes please unlock your accountun error. Pero puede ser que esto no le permita enviar tx. Un código de muestra se parece a:

    custom_func.prototype.SENDCNK=function(from,to,password,amount){
    return new Promise(function(fullfill,reject){
        /* add basic checks like if user has sufficient balance , address are valid etc*/
        web3.eth.personal.unlockAccount(from, password).then(function(result,e){
            console.log("Account "+from+" unlocked successfully");
            amount = parseFloat(amount);
            amount = amount *decimalMultiplier;
            cnkContract.methods.transfer(to ,amount).send({from:from})
                .on('transactionHash',function(txHash){
                    console.log("Transaction hash : "+txHash);
                    fullfill(txHash);
                }).catch(function(error){
                    console.log("Unable to send transaction. Error:"+error);
                    logger.error(error);
                    reject("Sending transaction on blockchain failed");
                });        
       }).catch(function(error){
            logger.error("Incorrect transaction password for account: "+from);
            reject("Incorrect transaction password.");
       });
    });    
}
Intenté así: web3.eth.personal.unlockAccount("0x61A44075419C4402f6DE631341d875Ece6A3922e", "12egjec308").then(function(result,e) { console.log("Cuenta desbloqueada con éxito"); }); pero sigue apareciendo el error: error devuelto: el método personal_unlockAccount no existe/no está disponible
La razón de esto es que necesita habilitar perosnal api sobre rpc (de manera predeterminada, esto está deshabilitado por razones de seguridad). Cuando configuras geth, lo habilitas bajo el indicador rpc como --rpcapi web3,eth,net,personal,db. Si no habilita esto, no podrá acceder a los métodos personales. Dado que está utilizando el nodo infura, verifique si han habilitado lo mismo.
Si está realizando pruebas y todo eso, le recomendaré que configure un nodo privado que estará bajo su control para probar mejor su aplicación. Puedes consultar mi publicación mediana aquí para lo mismo.
Gracias por tus palabras ! ¿Pero la cosa es que quiere probar en el nodo infura?
Luego, debe verificar si están exponiendo personal sobre rpc.