Ethereum eth_sendTransaction不存在/不可用

Ethereum eth_sendTransaction不存在/不可用,ethereum,solidity,web3js,Ethereum,Solidity,Web3js,我目前正在使用Node.js后端服务器中的智能合约和Web3.js库。当我尝试使用以下方法调用函数时: var myContract=new web3.eth.Contract(ERC721pResetMinterPauserautoIDBI,ERC721PresetMinterPauserAutoIdContractAddress{ from:from,, 加斯普里斯:加斯普里斯 }); 让结果; 试一试{ 结果=wait myContract.methods.mint(receipenadd

我目前正在使用Node.js后端服务器中的智能合约和Web3.js库。当我尝试使用以下方法调用函数时:

var myContract=new web3.eth.Contract(ERC721pResetMinterPauserautoIDBI,ERC721PresetMinterPauserAutoIdContractAddress{
from:from,,
加斯普里斯:加斯普里斯
});
让结果;
试一试{
结果=wait myContract.methods.mint(receipenaddress.send();
资源状态(201).发送(结果)
}捕获(错误){
资源状态(201).发送(错误)
}
我得到以下错误:

返回错误:方法eth_sendTransaction不存在/不可用

我正在通过Infura网关与Rinkeby区块链通信,根据这一点,Infura只支持
eth_sendRawTransaction
,而不支持
eth_sendRawTransaction

我能够通过以下方式成功发送乙醚:

const gasPrice=wait web3.eth.getGasPrice()
const txCount=wait web3.eth.getTransactionCount(来自“待定”)
var rawTx={
暂时:txCount,
加斯普里斯:“0x”+加斯普里斯,
气体极限:“0x200000”,
致:致,,
值:“0x10000000000000”,
数据:“0x”,
链号:4
};
var privateKey=新的缓冲区。从(pk,“十六进制”)
var tx=新tx(rawTx,{“链”:“林克比”});
tx.sign(私钥);
var serializedTx=tx.serialize();
const signedTx=wait web3.eth.sendSignedTransaction(“0x”+序列化dtx.toString(“十六进制”);
但是,我无法使用原始事务调用智能合约上的
mint
方法。我试过:

等待myContract.methods.mint(receipentaddress).sendSignedTransaction(“0x”+serializedTx.toString(“hex”);

等待myContract.methods.mint(receipentaddress.sendRawTransaction(“0x”+serializedTx.toString(“十六进制”);
但是,我仍然收到错误消息
eth\u sendTransaction不存在/不可用

更新

根据@Mikkoohtama的建议,我尝试使用块菌库对交易进行签名:

const HDWalletProvider=require(“@truffle/hdwallet provider”);
const privateKeys=process.env.PRIVATE|u KEYS
const walletapirl=`https://rinkeby.infura.io/v3/${process.env.INFURA\u API\u KEY}`
const provider=新的HDWalletProvider(
privateKey.split(','),
瓦莱塔皮乌尔
);
const web3=新的Web3API(提供程序)

安装一个Web3.js中间件层,在本地对事务进行签名,而不是向Infura发送JSON-RPC方法


解决方案之一是。

我更新了这个问题,但我感到困惑的是,我是否从用户那里动态获取私钥来配置
HDWallet
?另外,我是否应该将JSON-RPC方法与
HDWallet
一起使用,因为有一些Web3功能,比如创建一个不需要私钥的钱包?我相信没有私钥或助记符就无法配置
HDWallet
从用户动态配置
您不需要。您从不将用户密钥导入服务器端。如果你从用户那里获得私钥,那么实际上你就是一个黑客,所有区块链安全保证都会丢失。只是澄清一下,这是否意味着交易的签名总是必须在前端完成,而不是在服务器上完成?我问的原因是我想使用web3.js库,但我没有在前端使用Javascript,所以我无法这样做。
只是澄清一下,这是否意味着必须在前端完成交易签名
->是的