元掩码不存在.当我打电话给合同时



我是区块链以太坊的新手,我试图在合约中调用一个函数,使用没有元任务的Ganache它可以工作。我正试图通过infura在Rinkeby测试合同的前期生产。

我知道这可能是旧的API,但我不确定我做错了什么,我谷歌,但我没有找到正确的响应。

错误是:方法eth_sendTransaction不存在/不可用。

这是合同:

pragma solidity ^0.4.24;
contract Message {
string myMessage;
function setMessage(string x) public {
myMessage = x;
}
function getMessage() public view returns (string) {
return myMessage;
} }

和前端代码都在HTML:

<!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>Deploy a Remix Contract</title>
<link rel="stylesheet" type="text/css" href="main.css">
<script src="https://cdn.jsdelivr.net/gh/ethereum/web3.js/dist/web3.min.js"></script>
<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js"></script>
</head>
<body>
<div>
<h1>Ethereum Secret Messenger</h1>
<hr>
<label for="message">This site writes a secret message to the Ethereum
blockchain!</label>
<input id="userInput" type="text">
<button id="setMessageButton">Set secret message</button>

</div>
<script>

// Connect a the web3 provider
if (typeof web3 !== 'undefined') {
web3 = new Web3(web3.currentProvider);
console.log("Not defined");
} else {
web3 = new Web3(new Web3.providers.HttpProvider("https://rinkeby.infura.io/v3/.....My_Connection"));

console.log("Defined")
}

web3.eth.defaultAccount = web3.eth.accounts[0];
console.log("eth.account " + web3.eth.accounts[0]);
var RemixContract = new web3.eth.Contract([
{
"constant": false,
"inputs": [
{
"name": "x",
"type": "string"
}
],
"name": "setMessage",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "getMessage",
"outputs": [
{
"name": "",
"type": "string"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
}
],'0x.....');

console.log(RemixContract);
$("#setMessageButton").click(function () {
let userMessage = $("#userInput").val()
console.log("user message " + userMessage)
RemixContract.methods.setMessage(userMessage)
.send({from:"0x....."})
.then(console.log);
});
</script>
</body>
</html>

我有另一个问题,它让我感到困惑,我使用infura连接到Rinkeby,因为在这种情况下,infura连接到节点可能我不需要元掩码,我可以创建交易并用私钥签名然后发送。那么使用Metamask和infura有意义吗?

使用fura+私钥或元任务,这将是web3提供商,为此你需要创建一个按钮,并将你的元任务连接到你的dApp。

最新更新