0

我已经将我的智能合约部署到我的钱包并将其连接到我的 Alchemy 帐户。

这是我的编码(请注意,出于安全目的,我的合约地址、PUBLIC_KEY、PRIVATE_KEY、API_URL 和炼金术地址已被编辑)。

mint-nft.js

  require('dotenv').config();
const API_URL = process.env.API_URL;
const PUBLIC_KEY = process.env.PUBLIC_KEY;
const PRIVATE_KEY = process.env.PRIVATE_KEY;

const { createAlchemyWeb3 } = require("@alch/alchemy-web3");
const web3 = createAlchemyWeb3(API_URL);

const contract = require("../artifacts/contracts/MyNFT.sol/MyNFT.json");
const contractAddress = "My_Contract_Adress";
const nftContract = new web3.eth.Contract(contract.abi, contractAddress);

async function mintNFT(tokenURI) {
  const nonce = await web3.eth.getTransactionCount(PUBLIC_KEY, 'latest'); //get latest nonce

  //the transaction
  const tx = {
    'from': PUBLIC_KEY,
    'to': contractAddress,
    'nonce': nonce,
    'gas': 500000,
    'data': nftContract.methods.mintNFT(PUBLIC_KEY, tokenURI).encodeABI()
  };

  const signPromise = web3.eth.accounts.signTransaction(tx, PRIVATE_KEY);
  signPromise.then((signedTx) => {

    web3.eth.sendSignedTransaction(signedTx.rawTransaction, function(err, hash) {
      if (!err) {
        console.log("The hash of your transaction is: ", hash, "\nCheck Alchemy's Mempool to view the status of your transaction!"); 
      } else {
        console.log("Something went wrong when submitting your transaction:", err)
      }
    });
  }).catch((err) => {
    console.log(" Promise failed:", err);
  });
}

mintNFT("https://gateway.pinata.cloud/ipfs/My_NFT_Picture_Hash");

alchemyContext.js

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.makeAlchemyContext = void 0;
var tslib_1 = require("tslib");
var sturdy_websocket_1 = tslib_1.__importDefault(require("sturdy-websocket"));
var websocket_1 = require("websocket");
var jsonRpc_1 = require("../util/jsonRpc");
var version_1 = require("../version");
var alchemySendHttp_1 = require("./alchemySendHttp");
var alchemySendWebSocket_1 = require("./alchemySendWebSocket");
var httpProvider_1 = require("./httpProvider");
var sendPayload_1 = require("./sendPayload");
var webSocketProvider_1 = require("./webSocketProvider");
var NODE_MAX_WS_FRAME_SIZE = 100 * 1024 * 1024; // 100 MB
function makeAlchemyContext(url, config) {
    var makePayload = jsonRpc_1.makePayloadFactory();
    if (/^https?:\/\//.test(url)) {
        var alchemySend = alchemySendHttp_1.makeHttpSender(url);
        var _a = sendPayload_1.makePayloadSender(alchemySend, config), sendPayload = _a.sendPayload, setWriteProvider = _a.setWriteProvider;
        var senders = jsonRpc_1.makeSenders(sendPayload, makePayload);
        var provider = httpProvider_1.makeAlchemyHttpProvider(sendPayload);
        return { provider: provider, senders: senders, setWriteProvider: setWriteProvider };
    }
    else if (/^wss?:\/\//.test(url)) {
        var protocol = isAlchemyUrl(url) ? "alchemy-web3-" + version_1.VERSION : undefined;
        var ws = new sturdy_websocket_1.default(url, protocol, {
            wsConstructor: getWebSocketConstructor(),
        });
        var alchemySend = alchemySendWebSocket_1.makeWebSocketSender(ws);
        var _b = sendPayload_1.makePayloadSender(alchemySend, config), sendPayload = _b.sendPayload, setWriteProvider = _b.setWriteProvider;
        var senders = jsonRpc_1.makeSenders(sendPayload, makePayload);
        var provider = new webSocketProvider_1.AlchemyWebSocketProvider(ws, sendPayload, senders);
        return { provider: provider, senders: senders, setWriteProvider: setWriteProvider };
    }
    else {
        throw new Error("Alchemy URL protocol must be one of http, https, ws, or wss. Recieved: " + url);
    }
}
exports.makeAlchemyContext = makeAlchemyContext;
function getWebSocketConstructor() {
    return isNodeEnvironment()
        ? function (url, protocols) {
            return new websocket_1.w3cwebsocket(url, protocols, undefined, undefined, undefined, {
                maxReceivedMessageSize: NODE_MAX_WS_FRAME_SIZE,
                maxReceivedFrameSize: NODE_MAX_WS_FRAME_SIZE,
            });
        }
        : WebSocket;
}
function isNodeEnvironment() {
    return (typeof process !== "undefined" &&
        process != null &&
        process.versions != null &&
        process.versions.node != null);
}
function isAlchemyUrl(url) {
    return url.indexOf("alchemyapi.io") >= 0;
}

.env

API_URL = "https://eth-rinkeby.alchemyapi.io/v2/KEY"
PRIVATE_KEY = "MY_PRIVATE_KEY"
PUBLIC_KEY = "MY_PUBLIC_KEY"

但是后来我尝试使用元数据和 nft-mint.js 部署我的 NFT,我收到了这些错误。 在此处输入图像描述

谁能告诉我错误是什么?

4

1 回答 1

1

您的问题可能是 dotenv 没有读取 .env 中的值。如果添加 console.log(API_URL),它是正确的还是未定义的?如果它未定义,我可以通过将路径添加到我的 .env 来解决问题,如下所示:

require('dotenv').config({path:"../.env"});

(在我的情况下,我的 mint-nft.js 位于 scripts/mint-nft.js 中,而 .env 位于根目录中。)

于 2021-11-09T11:51:35.480 回答