Estoy tratando de acceder a mi contrato usando web3js y he proporcionado mi archivo html (con los detalles del contrato) aquí. Recibo 2 errores y probé métodos como desbloquear cuenta, configurar cuenta predeterminada, etc., y nada parece funcionar. La operación CURL devuelve el error 405. Cualquier sugerencia por favor.
<!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);
}
}
-->
Errores en el navegador Brave -
Error #1: al cargar la página
Código de estado: 405 Método no permitido
Request Payload: {"jsonrpc":"2.0","id":1,"method":"eth_newFilter","params":[{"topics":["0x6988b3af4053aeb8a7e14aad74b7539182c310204e73eabe35b5aa92938f6db5"],"address":"0x221e64f96560f97d8a06510da8a020484d5669eb"} ]}
Error #2: al hacer clic en 'Agregar proveedor'
Código de estado: 405 Método no permitido
Request Payload: {"jsonrpc":"2.0","id":2,"method":"eth_sendTransaction","params":[{"to":"0x221e64f96560f97d8a06510da8a020484d5669eb","data":"0x705258340000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000024d4b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034653410000000000000000000000000000000000000000000000000000000000","from ":"0x44261BBDAB466E1950Ef173b595322B49F4DA5C5"}]}
Supongo que la rama que se sigue es la que usa Infura como proveedor.
Infura no puede desbloquear cuentas ni firmar transacciones porque no conoce sus claves privadas. El mensaje de error es para indicar que los métodos a los que llama no son compatibles.
Gracias a @smarx, ahora lo entiendo.
Entonces, la respuesta a lo que sea que quería hacer es,
Ahora, esto me permitirá acceder a mi contrato que está implementado en infura.
Matheswaran Kanagarajan
usuario19510
if
declaración intenta usar un proveedor web3 inyectado. MetaMask es el proveedor web3 más utilizado y permitirá que el usuario de su aplicación use cualquier cuenta que haya configurado con MetaMask.Matheswaran Kanagarajan
usuario19510
Matheswaran Kanagarajan
usuario19510
Matheswaran Kanagarajan