背景
OpenseaのDocumentを、PolygonのテストネットMumbaiに書き換えながら、 実施しているときにおきたエラー。このあたり
https://docs.opensea.io/docs/minting-from-your-new-contract-and-improvements
課題
Hardhat内にある、Ethersライブラリにある「getDefaultProvider関数」では、 Mumbaiを標準サポートしていない。そのため、FallbackProviderとして、Infuraを補助的に使うことで、実装できたので、メモ
解決策
コード全体の記載がある記事がWeb上になかったため、記載する。Alchemyだけでなく新たにInfuraにも登録し、こちらでAPIを準備して、2つ共のAPIを使う形で、解決した。
helper.js
function getProvider() {
const alchemyProvider = new ethers.providers.AlchemyProvider(
getEnvVariable("NETWORK"),
getEnvVariable("ALCHEMY_KEY")
);
const infuraProvider = new ethers.providers.InfuraProvider(
getEnvVariable("NETWORK"),
getEnvVariable("INFURA_KEY")
);
return new ethers.providers.FallbackProvider([
{ provider: alchemyProvider, priority: 1 },
{ provider: infuraProvider, priority: 2 },
]);
// return ethers.getDefaultProvider(getEnvVariable("NETWORK", "maticmum"), {
// alchemy: getEnvVariable("ALCHEMY_KEY", undefined),
// });
}
ソースコード全体はこちら
https://github.com/EngineeredReiwa/nft-tutorial/tree/5fb2e7a7b268a3db1b1fa13a98221b6a162f8995
参考
こちらのやり方を、ほぼ真似させていただいた。
書き方は、こちらの質問者を真似させていただいた。
こちらのやり方は、実装できなかった。providerを関数として定義できている筈だが、エラーで弾かれた。
(エラーの内容を、補足で記載))
helper.js
import { Network } from "@ethersproject/networks";
const maticmum: Network = {
name: 'maticmum',
chainId: 80001,
_defaultProvider: (providers) => new providers.JsonRpcProvider('rpc-url')
}
const provider = ethers.getDefaultProvider(maticmum);
function getProvider() {
return provider(getEnvVariable("NETWORK", "maticmum"), {
alchemy: getEnvVariable("ALCHEMY_KEY"),
});
}
$ npx hardhat check-balance
An unexpected error occurred:
TypeError: provider is not a function
at getProvider (/Users/user/Projects/nft-tutorial/scripts/helpers.js:45:12)
at getAccount (/Users/user/Projects/nft-tutorial/scripts/helpers.js:54:9)
at SimpleTaskDefinition.action (/Users/user/Projects/nft-tutorial/scripts/deploy.js:28:25)
at Environment._runTaskDefinition (/Users/user/Projects/nft-tutorial/node_modules/hardhat/src/internal/core/runtime-environment.ts:330:35)
at Environment.run (/Users/user/Projects/nft-tutorial/node_modules/hardhat/src/internal/core/runtime-environment.ts:163:25)
at main (/Users/user/Projects/nft-tutorial/node_modules/hardhat/src/internal/cli/cli.ts:277:17)
(node:4479) ExperimentalWarning: stream/web is an experimental feature. This feature could change at any time
(Use `node --trace-warnings ...` to show where the warning was created)