我使用ethers.js部署契约,但返回了一个错误:uncaught (承诺)错误:未知事务覆盖0
在ContractFactory。getDeployTransaction (index.ts:1196:1)
ContractFactory.< anonymous> (index.ts:1246:1)
在发电机。下一次()
在履行(index.ts:2:1)
相反,可以使用web3.js成功地部署相同的契约,但部署后三个参数(宫缩名称、压缩符号和压缩符号)会被混淆。
使用ethers.js部署契约的代码如下:
...
window.ethereum.request({ method: 'eth_requestAccounts' });
const provider = new ethers.providers.Web3Provider(window.ethereum);
const signer = provider.getSigner()
console.log("Account:", await signer.getAddress());
const factory = new ethers.ContractFactory( bodyJSON2.abi, bodyJSON2.bytecode, signer );
console.log("factory.signer:", factory.signer);
await factory.deploy([contractName, contractSymbol, contractURI])
.then(async function(contract){
console.log("for debug. Contract Path: ", contract.address);
}); 合同代码如下:
function initialize(string memory name, string memory symbol, string memory url
) public virtual initializer {
__BXPP_init(name, symbol, url);
}
using CountersUpgradeable for CountersUpgradeable.Counter;
CountersUpgradeable.Counter private _tokenIds;
string private _baseTokenURI;
...ethers.js中的相关错误代码如下:
getDeployTransaction(...args: Array<any>): TransactionRequest {
let tx: TransactionRequest = { };
// If we have 1 additional argument, we allow transaction overrides
if (args.length === this.interface.deploy.inputs.length + 1 && typeof(args[args.length - 1]) === "object") {
tx = shallowCopy(args.pop());
for (const key in tx) {
if (!allowedTransactionKeys[key]) {
throw new Error("unknown transaction override " + key);
}
}
}使用web3.js部署契约的代码如下:
const web3 = new Web3(window.ethereum);
const BXPP = new web3.eth.Contract(bodyJSON2.abi);
await BXPP.deploy({
'data': bodyJSON2.bytecode,
'arguments': [contractName, contractSymbol, contractURI]
})
.send({
'from': address,
// gas: ,
// gasPrice: '3000000'
}, function(error, transactionHash){ console.log("error/transactionHash: ", error, transactionHash) })
.on('error', function(error){ console.log("error: ", error) })
.on('transactionHash', function(transactionHash){ console.log("transactionHash: ", transactionHash) })
.on('receipt', function(receipt){ console.log(receipt.contractAddress)
})
.on('confirmation', function(confirmationNumber, receipt){ console.log("confirmationNumber:", confirmationNumber) })
.then(async function(newContractInstance){
console.log("for debug. ContractID: ", newContractInstance.options.address);
}); 我在谷歌搜索了将近一个星期,但没有找到答案。有人和我有同样的问题吗?谢谢!
发布于 2022-08-13 01:58:38
这个问题已经解决了。有两点:
await factory.deploy(contractName, contractSymbol, contractURI)不是这样的:
await factory.deploy([contractName, contractSymbol, contractURI])constructor(string memory name, string memory symbol, string memory url
) {
__ContractTemplate_init(name, symbol, url);
}不是这样的:
function initialize(string memory name, string memory symbol, string memory url
) public virtual initializer {
__ContractTemplate_init(name, symbol, url);
}https://stackoverflow.com/questions/73314354
复制相似问题