Ropsten-Netzwerk - 405-Methode bei eth_sendTransaction nicht zulässig

Ich versuche, mit web3js auf meinen Vertrag zuzugreifen, und habe hier meine HTML-Datei (mit Vertragsdetails) angegeben. Ich erhalte 2 Fehler und versuchte Methoden wie Konto entsperren, Standardkonto festlegen usw., und nichts scheint zu funktionieren. Die CURL-Operation gibt den Fehler 405 zurück. Irgendwelche Vorschläge bitte.


<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>HC</title>

    <link rel="stylesheet" type="text/css" href="./js/main.css">

    <script src="./js/web3.min.js"></script>

</head>
<body>
    <div class="container">

        <h1>HC Demo</h1>

        <h2 id="instructor"></h2>

        <label for="name" class="col-lg-2 control-label">Provider Name</label>
        <input id="name" type="text">

        <label for="name" class="col-lg-2 control-label">Account Type</label>
        <input id="type" type="text">

        <button id="button">Add provider</button>


    </div>

    <script src="./js/jquery-3.2.1.slim.min.js"></script>

    <script>

    if (typeof web3 !== 'undefined') {
        web3 = new Web3(web3.currentProvider);
    } else {
        // set the provider you want from Web3.providers
        web3 = new Web3(new Web3.providers.HttpProvider("https://ropsten.infura.io/"));
    }

    web3.eth.defaultAccount = "0x44261BBDAB466E1950Ef173b595322B49F4DA5C5";
    console.log("Default account = " + web3.eth.defaultAccount );
    //web3.eth.defaultAccount = "0x44261BBDAB466E1950Ef173b595322B49F4DA5C5";
    //personal.unlockAccount(web3.eth.defaultAccount);
    var hcContract = web3.eth.contract([{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"subscribers","outputs":[{"name":"id","type":"uint256"},{"name":"name","type":"string"},{"name":"accountType","type":"string"},{"name":"accBalance","type":"uint16"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"name","type":"string"},{"name":"accountType","type":"string"}],"name":"addProvider","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"anonymous":false,"inputs":[{"indexed":false,"name":"id","type":"uint256"},{"indexed":false,"name":"name","type":"string"},{"indexed":false,"name":"accountType","type":"string"},{"indexed":false,"name":"accBalance","type":"uint16"}],"name":"eveSubscriber","type":"event"},{"constant":false,"inputs":[{"name":"id","type":"uint256"}],"name":"getAccountBalance","outputs":[{"name":"_accBal","type":"uint16"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"id","type":"uint256"}],"name":"getProviderName","outputs":[{"name":"_name","type":"string"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_id","type":"uint256"},{"name":"_claimAmount","type":"uint16"}],"name":"submitClaim","outputs":[{"name":"status","type":"bool"},{"name":"_remainingBalance","type":"uint16"}],"payable":false,"stateMutability":"nonpayable","type":"function"}]);
    //hcContract.web3.eth.defaultAccount="0x44261BBDAB466E1950Ef173b595322B49F4DA5C5";

    var Contract = hcContract.at('0x221e64f96560f97d8a06510da8a020484d5669eb');
    //hcContract.web3.eth.defaultAccount = "0x44261BBDAB466E1950Ef173b595322B49F4DA5C5";
    console.log(Contract);

    var event = Contract.eveSubscriber({},'latest');

    $("#button").click(function() {
        console.log($("#name").val(), $("#type").val());
        Contract.addProvider($("#name").val(), $("#type").val());
    });
    </script>
</body>
</html>


<!--


https://ropsten.etherscan.io/tx/0x5d16f717691d796a1ec901014981e2594ec8356a06cce25dca061abe65ae432a


pragma experimental ABIEncoderV2;
contract HealthCareDemo {

    //ERC20 standard 
    string public constant name = "HealthCare_v0.1";
    string public constant symbol = "HC";
    uint8 public constant decimals = 18;  // 18 is the most common number of decimal places
    address owner;

    function kill() { // returns (bool){
    //    if (msg.sender == owner)
            selfdestruct(owner);
    }
    struct SubscriberStruct {
        uint id;
        string name;
        string accountType;
        uint16 accBalance;

    }
    SubscriberStruct[] public subscribers;
//  mapping (address => SubscriberStruct[]) public subscribers;

    event eveSubscriber (
        uint id,
        string name,
        string accountType,
        uint16 accBalance
        );

    //Provider gets added and based on account type, balance is set
    function addProvider(string name, string accountType) returns (bool) {
        uint16 _accBal = 0;
        if(compareStrings(accountType,"HRA")) {
            _accBal = 500;
        }
        else if (compareStrings(accountType,"FSA")) {
            _accBal = 1000;
        }
        else {
            _accBal = 100;
        }

        SubscriberStruct memory s;
        s.name = name;
        s.accountType = accountType;
        s.id = subscribers.length;
        s.accBalance = _accBal;
        subscribers.push(s);

        //eveSubscriber(subscribers[id].id,subscribers[id].name,subscribers[id].accountType,subscribers[id].accBalance);
        eveSubscriber(s.id,s.name,s.accountType,s.accBalance);

        return true;
    }
    //https://github.com/ethereum/solidity/issues/2948 -- returning struct has issue
    function getProviderName(uint id) public returns (string _name) {
        return subscribers[id].name;
    }
    function getAccountBalance(uint id) public returns (uint16 _accBal) {
        return subscribers[id].accBalance;
    }

    function submitClaim(uint _id, uint16 _claimAmount) public returns (bool status, uint16 _remainingBalance) {
        if(subscribers[_id].accBalance >= _claimAmount) {
            subscribers[_id].accBalance -= _claimAmount;
            return (true, subscribers[_id].accBalance);
        }
        else {
            return (false, subscribers[_id].accBalance);
        }
    }

    function compareStrings (string a, string b) view private returns (bool){
       return keccak256(a) == keccak256(b);
   }

}


-->

Fehler im Brave-Browser -

Fehler Nr. 1: beim Laden der Seite

Statuscode:405 Methode nicht erlaubt

Request Payload: {"jsonrpc":"2.0","id":1,"method":"eth_newFilter","params":[{"topics":["0x6988b3af4053aeb8a7e14aad74b7539182c310204e73eabe35b5aa92938f6db5"],"address":"0x221e64f96560f97d8a06510da8a020484d5669eb"} ]}

Fehler Nr. 2: beim Klicken auf „Anbieter hinzufügen“

Statuscode:405 Methode nicht erlaubt

Request Payload: {"jsonrpc":"2.0","id":2,"method":"eth_sendTransaction","params":[{"to":"0x221e64f96560f97d8a06510da8a020484d5669eb","data":"0x705258340000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000024d4b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034653410000000000000000000000000000000000000000000000000000000000","from ":"0x44261BBDAB466E1950Ef173b595322B49F4DA5C5"}]}

Antworten (2)

Ich gehe davon aus, dass die Branche, die verfolgt wird, diejenige ist, die Infura als Anbieter verwendet.

Infura kann keine Konten entsperren oder Transaktionen signieren, da es Ihre privaten Schlüssel nicht kennt. Die Fehlermeldung soll darauf hinweisen, dass die von Ihnen aufgerufenen Methoden nicht unterstützt werden.

Welchen Zweig kann ich also außer infura verwenden, der es mir ermöglicht, mein Konto zu entsperren?
Der andere Zweig der ifAnweisung versucht, einen eingefügten web3-Anbieter zu verwenden. MetaMask ist der am häufigsten verwendete Web3-Anbieter und ermöglicht es dem Benutzer Ihrer App, jedes Konto zu verwenden, das er mit MetaMask eingerichtet hat.
Entschuldigung für die lahme Frage hier. Mein HTML-Code ruft web3 = new Web3(new Web3.providers.HttpProvider(" ropsten.infura.io/" )); was im Grunde bedeutet, dass ich mit dem ropsten-Netzwerk verbunden werde. Tatsächlich kann ich Daten aus dem Vertrag „lesen“, aber wenn ich versuche zu schreiben, habe ich ein Problem.
Haben Sie etwas an meiner Antwort nicht verstanden?
Was Sie über Metamaske und injiziertes Web3 gesagt haben, ist in Ordnung. Tatsächlich verbindet mein Code ropsten infura. Nun stellt sich die Frage, ob infura Konten nicht entsperren/Transaktionen signieren kann, gibt es eine alternative (öffentliche Test-) Umgebung, die dies tut? Wird Kovan/Rinkeby in der Lage sein, Konten freizuschalten?
Es macht keinen Sinn, dass ein öffentlicher Knoten Ihre privaten Schlüssel enthält. Wenn Sie ein Konto auf einem öffentlichen Knoten entsperrt haben, könnte jemand anderes, der mit diesem Knoten verbunden ist, Ihren gesamten Ether stehlen.

Danke an @smarx - jetzt verstehe ich es.

Also, die Antwort auf das, was ich tun wollte, ist:

  • Erstellen Sie ein Konto bei infura - wo ich ein eindeutiges Zugriffstoken erhalte
  • Richten Sie einen lokalen Knoten ein, der eine Verbindung zum Ropsten-Netzwerk herstellt
  • Schreiben Sie eine HTML-Seite, die Ihre eindeutige Zugriffstoken-URL enthält – Web3.providers.HttpProvider

Jetzt kann ich auf meinen Vertrag zugreifen, der in Infura bereitgestellt wird.