diff --git a/src/app/tabs/runTab/contractDropdown.js b/src/app/tabs/runTab/contractDropdown.js index 0d5ae4fe3b..0bdd607d81 100644 --- a/src/app/tabs/runTab/contractDropdown.js +++ b/src/app/tabs/runTab/contractDropdown.js @@ -193,7 +193,7 @@ class ContractDropdownUI { { label: 'Force Send', fn: () => { - this.blockchain.deployContract(selectedContract, args, contractMetadata, compilerContracts, {continueCb, promptCb, statusCb, finalCb}, confirmationCb) + this.deployContract(selectedContract, args, contractMetadata, compilerContracts, {continueCb, promptCb, statusCb, finalCb}, confirmationCb) }}, { label: 'Cancel', fn: () => { @@ -201,7 +201,16 @@ class ContractDropdownUI { } }) } - this.blockchain.deployContract(selectedContract, args, contractMetadata, compilerContracts, {continueCb, promptCb, statusCb, finalCb}, confirmationCb) + this.deployContract(selectedContract, args, contractMetadata, compilerContracts, {continueCb, promptCb, statusCb, finalCb}, confirmationCb) + } + + deployContract (selectedContract, args, contractMetadata, compilerContracts, callbacks, confirmationCb) { + const { statusCb } = callbacks + if (!contractMetadata || (contractMetadata && contractMetadata.autoDeployLib)) { + return this.blockchain.deployContractAndLibraries(selectedContract, args, contractMetadata, compilerContracts, callbacks, confirmationCb) + } + if (Object.keys(selectedContract.bytecodeLinkReferences).length) statusCb(`linking ${JSON.stringify(selectedContract.bytecodeLinkReferences, null, '\t')} using ${JSON.stringify(contractMetadata.linkReferences, null, '\t')}`) + this.blockchain.deployContractWithLibrary(selectedContract, args, contractMetadata, compilerContracts, callbacks, confirmationCb) } getConfirmationCb (modalDialog, confirmDialog) { diff --git a/src/blockchain/blockchain.js b/src/blockchain/blockchain.js index 109877c58e..b1426c55e2 100644 --- a/src/blockchain/blockchain.js +++ b/src/blockchain/blockchain.js @@ -86,22 +86,23 @@ class Blockchain { }) } - async deployContract (selectedContract, args, contractMetadata, compilerContracts, callbacks, confirmationCb) { + deployContractAndLibraries (selectedContract, args, contractMetadata, compilerContracts, callbacks, confirmationCb) { const { continueCb, promptCb, statusCb, finalCb } = callbacks + const constructor = selectedContract.getConstructorInterface() + txFormat.buildData(selectedContract.name, selectedContract.object, compilerContracts, true, constructor, args, (error, data) => { + if (error) return statusCb(`creation of ${selectedContract.name} errored: ` + error) + statusCb(`creation of ${selectedContract.name} pending...`) + this.createContract(selectedContract, data, continueCb, promptCb, confirmationCb, finalCb) + }, statusCb, (data, runTxCallback) => { + // called for libraries deployment + this.runTx(data, confirmationCb, continueCb, promptCb, runTxCallback) + }) + } + + deployContractWithLibrary (selectedContract, args, contractMetadata, compilerContracts, callbacks, confirmationCb) { + const { continueCb, promptCb, statusCb, finalCb } = callbacks const constructor = selectedContract.getConstructorInterface() - if (!contractMetadata || (contractMetadata && contractMetadata.autoDeployLib)) { - return txFormat.buildData(selectedContract.name, selectedContract.object, compilerContracts, true, constructor, args, (error, data) => { - if (error) return statusCb(`creation of ${selectedContract.name} errored: ` + error) - - statusCb(`creation of ${selectedContract.name} pending...`) - this.createContract(selectedContract, data, continueCb, promptCb, confirmationCb, finalCb) - }, statusCb, (data, runTxCallback) => { - // called for libraries deployment - this.runTx(data, confirmationCb, continueCb, promptCb, runTxCallback) - }) - } - if (Object.keys(selectedContract.bytecodeLinkReferences).length) statusCb(`linking ${JSON.stringify(selectedContract.bytecodeLinkReferences, null, '\t')} using ${JSON.stringify(contractMetadata.linkReferences, null, '\t')}`) txFormat.encodeConstructorCallAndLinkLibraries(selectedContract.object, args, constructor, contractMetadata.linkReferences, selectedContract.bytecodeLinkReferences, (error, data) => { if (error) return statusCb(`creation of ${selectedContract.name} errored: ` + error)