簡體   English   中英

Web3:訪問 MetaMask 錢包中的私鑰

[英]Web3: accessing private key in MetaMask wallet

我有一個簡單的 Dapp,我想簽署一筆交易,但我沒有私鑰作為字符串。

用戶正在使用 MetaMask 錢包。 在他們授予 web3 對其帳戶的訪問權限后,我如何訪問私鑰來簽署交易?

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

出於安全原因,Metamask 不直接共享私鑰。 有時它甚至沒有密鑰——例如當用戶使用 Metamask UI 操作硬件錢包帳戶時。

您需要構建事務 object 並將其傳遞給ethereum.request()方法。 這將打開 Metamask window,用戶可以在其中簽署或拒絕交易請求。

代碼示例非常簡單,並且在鏈接的文檔中。

以下是如何簽署 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 不會讓您訪問私鑰,而且永遠不會。

錢包的全部意義在於保護用戶免受惡意 Dapps 的侵害。

可以從您的 12 字密碼短語中獲取私鑰,將 12 字密碼短語插入站點https://iancoleman.io/bip39/的“BIP39 助記符”字段中,您將獲得所有帳戶的每個私鑰和公鑰在您插入的密碼下

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM