Я пытаюсь развернуть новый контракт с метамаской (в моем внешнем приложении javascript). Проблема в том, что, когда квитанция возвращается, адрес «не определен», так как, я полагаю, транзакция еще не заминирована, и поэтому адрес еще не существует. Результат развертывания:
Contract {_eth: Eth, transactionHash:
"0x9e3866f52f274874d96bf60932c03d9849ccdb2cef97c010d6b84c5b529768de",
address: undefined, abi: Array(22)}
abi:(22) [{…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}]
address: undefined
transactionHash :"0x9e3866f52f274874d96bf60932c03d9849ccdb2cef97c010d6b84c5b529768de"
_eth: Eth {_requestManager: RequestManager, getBalance: ƒ, getStorageAt: ƒ, getCode: ƒ, getBlock: ƒ, …}
__proto__:Object
Более того, если я попытаюсь получить доступ к mining
состоянию на _eth > mining
выходе:
[Exception: Error: The MetaMask Web3 object does not support synchronous methods like eth_mining without a callback parameter. See https://github.com/MetaMask/faq/blob/master/DEVELOPERS.md#dizzy-all-async
Код Javascript:
deployContent = (name, author, genre, cost) => {
return new Promise((succ, rej) => {
this.web3.eth.contract(Content.abi).new(name, author, genre, cost, {gas: 400000},
(err, res) => {if(!err)succ(res); else rej(err);});
})
}
deployAndPublish = async (name, author, genre, cost) => {
let contRes = await this.deployContent(name, author, genre, cost);
console.log(contRes);
console.log(contRes.address);
// I need the address here in order to push it into an array
}
Есть идеи, как дождаться адреса?
вы всегда можете использовать прослушиватель событий для этого. вот правильный пример: https://medium.com/@marcusmolchany/the-easisest-way-to-deploy-smart-contracts-on-ethereum-65f69ac9a627
Тарик ЭН-НАКДИ
алессандро308
алессандро308
Тарик ЭН-НАКДИ
алессандро308
Тарик ЭН-НАКДИ
алессандро308
Тарик ЭН-НАКДИ