微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Web3:访问 MetaMask 钱包中的私钥

如何解决Web3:访问 MetaMask 钱包中的私钥

我有一个简单的 Dapp,我想签署一笔交易,但我没有字符串形式的私钥。

用户正在使用 MetaMask 钱包。在他们授予 web3 对其帐户的访问权限后,我如何访问私钥以签署交易?

const signPromise = web3.eth.accounts.signTransaction(tx,PRIVATE_KEY);
// PRIVATE_KEY is what I'm trying to get.

解决方法

出于安全原因,Metamask 不会直接共享私钥。有时它甚至没有密钥 - 例如当用户使用 Metamask UI 操作硬件钱包帐户时。

您需要构造交易对象并将其传递给 ethereum.request() 方法。这将打开 Metamask 窗口,用户可以在其中签署或拒绝交易请求。

代码示例非常简单,位于链接文档中。

,

以下是您如何签署 Metamask 交易的示例:

export const mintNFT = async(url,name,description) => {
    
    //error handling
    if (url.trim() == "" || (name.trim() == "" || description.trim() == "")) { 
        return {
            success: false,status: "❗Please make sure all fields are completed before minting.",}
    }
  
    //make metadata
    const metadata = new Object();
    metadata.name = name;
    metadata.image = url;
    metadata.description = description;

    //pinata pin request
    const pinataResponse = await pinJSONToIPFS(metadata);
    if (!pinataResponse.success) {
        return {
            success: false,status: "? Something went wrong while uploading your tokenURI.",}
    } 
    const tokenURI = pinataResponse.pinataUrl;  

    //load smart contract
    window.contract = await new web3.eth.Contract(contractABI,contractAddress);//loadContract();

    //set up your Ethereum transaction
    const transactionParameters = {
        to: contractAddress,// Required except during contract publications.
        from: window.ethereum.selectedAddress,// must match user's active address.
        'data': window.contract.methods.mintNFT(window.ethereum.selectedAddress,tokenURI).encodeABI() //make call to NFT smart contract 
    };
  
    //sign transaction via Metamask
    try {
        const txHash = await window.ethereum
            .request({
                method: 'eth_sendTransaction',params: [transactionParameters],});
        return {
            success: true,status: "✅ Check out your transaction on Etherscan: https://ropsten.etherscan.io/tx/" + txHash
        }
    } catch (error) {
        return {
            success: false,status: "? Something went wrong: " + error.message
        }
    }
}

在本例中,我们正在签署一笔交易以创建 NFT。您可以在此处查看更多详细信息:https://docs.alchemyapi.io/alchemy/tutorials/nft-minter#step-8-implement-the-mintnft-function

祝你好运! :)

,

MetaMask 不会让您访问私钥,而且永远不会。

钱包的全部意义在于保护用户免受恶意 Dapp 的侵害。

,

可以从您的 12 字密码短语中获取私钥,将 12 字密码短语插入站点 https://iancoleman.io/bip39/ 的“BIP39 助记符”字段中,您将获得您插入的密码

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?