【问题标题】:How to send transaction from metamask wallet to backend node js如何将交易从元掩码钱包发送到后端节点 js
【发布时间】:2022-01-05 18:20:20
【问题描述】:
我正在构建简单的 dapp 应用程序,我想在其中验证某些内容,然后只进行合约交互,但现在我正在努力放置一个中间件,该中间件的作用就像用户将通过元掩码进行 txn 一样,然后这个 txn 或其他东西将转到任何语言的后端服务器都可能是节点 js,我会做一些检查,如果一切正常,然后将其发送到区块链。
有什么建议吗?
现在它全部在反应前端和元掩码浏览器扩展中......我不能限制客户端代码
而且我什至不能要求私钥。
【问题讨论】:
标签:
node.js
ethereum
web3
web3js
metamask
【解决方案1】:
设计上不可能。交易需要由发送者的私钥签名。所以除非用户愿意给你他们的私钥(这样你就可以在后端为他们签署交易),你需要改变你的方法。
如果您需要只允许您的应用授权的用户与合约交互,则合约需要保存授权地址列表。您的应用程序可以更新该列表(该应用程序拥有owner 地址的私钥)。示例:
pragma solidity ^0.8;
contract MyContract {
address public owner = address(0x123);
mapping(address => bool) public isAuthorized;
function setAuthorized(address _address, bool _isAuthorized) external {
require(msg.sender == owner, 'Only the contract owner can set authorized addresses');
isAuthorized[_address] = _isAuthorized;
}
function foo() external {
require(isAuthorized[msg.sender], 'Only authorized addresses can execute this function');
// ...
}
}