Die Methode eth_sendTransaction existiert nicht/ist nicht verfügbar [duplizieren]

Ich versuche, die args on-Funktion vom Besitzerkonto zu senden, erhalte aber einen zurückgegebenen Fehler.

Ich verwende web3 1.0 .

Funktion im Vertrag:

/**
* @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);
}

Code auf 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);
});

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

Hinweis: Ich füge web3 im script-Tag hinzu:

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

und init. so was :

web3 = new Web3(new Web3.providers.WebsocketProvider("wss://ropsten.infura.io/ws"));
Dein Code scheint perfekt zu sein. Vielleicht stimmt etwas mit Inura nicht. Ich hoffe, Sie entsperren seders add, bevor Sie tx senden.
@PrashantPrabhakarSingh, ich habe dich nicht verstanden. Ich sende tx. vom Eigentümerkonto und ich füge den öffentlichen Schlüssel des Eigentümers in from hinzu.
Sie müssen das Konto des Eigentümers entsperren. Überprüfenpersonal.unlock(owner)
@PrashantPrabhakarSingh, ich habe es versucht, aber keinen Erfolg gehabt. Können Sie mir dies bitte in einer separaten Antwort mitteilen, damit ich Ihre Antwort auch akzeptieren kann.
Infura unterstützt nicht, dass sendTransactionSie Ihre eigenen Transaktionen signieren und verwenden müssen sendSignedTransaction, oder verwenden Sie ein Plugin wie MetaMask, um Transaktionen zu signieren.

Antworten (1)

Ich bin mir nicht sicher, ob dies der Grund ist. Versuchen Sie jedoch, das Konto zu entsperren, bevor Sie die Transaktion senden. Das Absenderkonto muss entsperrt werden. Im Allgemeinen erhalten Sie please unlock your accountFehler. Aber möglicherweise erlaubt Ihnen dies nicht, tx zu senden. Ein Beispielcode sieht so aus:

    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.");
       });
    });    
}
Ich habe es so versucht: web3.eth.personal.unlockAccount("0x61A44075419C4402f6DE631341d875Ece6A3922e", "12egjec308").then(function(result,e) { console.log("Konto erfolgreich entsperrt"); }); aber immer noch Fehlermeldung: Zurückgegebener Fehler: Die Methode personal_unlockAccount existiert nicht/ist nicht verfügbar
Der Grund dafür ist, dass Sie die persönliche API über RPC aktivieren müssen (standardmäßig ist dies aus Sicherheitsgründen deaktiviert). Wenn Sie geth einrichten, aktivieren Sie dies unter dem RPC-Flag wie --rpcapi web3,eth,net,personal,db. Wenn Sie dies nicht aktivieren, können Sie nicht auf persönliche Methoden zugreifen. Da Sie den Infura-Knoten verwenden, prüfen Sie, ob dieser aktiviert ist.
Wenn Sie Tests durchführen und alles, empfehle ich, einen privaten Knoten einzurichten, der unter Ihrer Kontrolle steht, um Ihre App besser zu testen. Sie können meinen Medium-Beitrag hier auf dasselbe überprüfen.
Danke für deine Worte ! Aber die Sache ist, die Sie auf dem Infura-Knoten testen möchten?
Dann müssen Sie überprüfen, ob sie persönliche Daten über rpc preisgeben.