@ -68,8 +68,8 @@ class Blockchain {
statusCb ( ` creation of ${ selectedContract . name } pending... ` )
statusCb ( ` creation of ${ selectedContract . name } pending... ` )
this . createContract ( selectedContract , data , continueCb , promptCb , confirmationCb , finalCb )
this . createContract ( selectedContract , data , continueCb , promptCb , confirmationCb , finalCb )
} , statusCb , ( data , runTxCallback ) => {
} , statusCb , ( data , runTxCallback ) => {
// called for libraries deployment
// called for libraries deployment
this . runTransaction ( data , continue Cb , promptCb , confirmation Cb, runTxCallback )
this . runTx ( data , confirma tio nCb , continueCb , prompt Cb, runTxCallback )
} )
} )
}
}
if ( Object . keys ( selectedContract . bytecodeLinkReferences ) . length ) statusCb ( ` linking ${ JSON . stringify ( selectedContract . bytecodeLinkReferences , null , '\t' ) } using ${ JSON . stringify ( contractMetadata . linkReferences , null , '\t' ) } ` )
if ( Object . keys ( selectedContract . bytecodeLinkReferences ) . length ) statusCb ( ` linking ${ JSON . stringify ( selectedContract . bytecodeLinkReferences , null , '\t' ) } using ${ JSON . stringify ( contractMetadata . linkReferences , null , '\t' ) } ` )
@ -81,10 +81,6 @@ class Blockchain {
} )
} )
}
}
runTransaction ( data , continueCb , promptCb , confirmationCb , finalCb ) {
this . runTx ( data , confirmationCb , continueCb , promptCb , finalCb )
}
createContract ( selectedContract , data , continueCb , promptCb , confirmationCb , finalCb ) {
createContract ( selectedContract , data , continueCb , promptCb , confirmationCb , finalCb ) {
if ( data ) {
if ( data ) {
data . contractName = selectedContract . name
data . contractName = selectedContract . name
@ -92,29 +88,29 @@ class Blockchain {
data . contractABI = selectedContract . abi
data . contractABI = selectedContract . abi
}
}
this . _createContract ( data , confirmationCb , continueCb , promptCb ,
this . runTx ( { data : data , useCall : false } , confirmationCb , continueCb , promptCb ,
( error , txResult ) => {
( error , txResult ) => {
if ( error ) {
if ( error ) {
return finalCb ( ` creation of ${ selectedContract . name } errored: ${ error } ` )
return finalCb ( ` creation of ${ selectedContract . name } errored: ${ error } ` )
}
}
const isVM = this . executionContext . isVM ( )
const isVM = this . executionContext . isVM ( )
if ( isVM ) {
if ( isVM ) {
const vmError = txExecution . checkVMError ( txResult )
const vmError = txExecution . checkVMError ( txResult )
if ( vmError . error ) {
if ( vmError . error ) {
return finalCb ( vmError . message )
return finalCb ( vmError . message )
}
}
}
}
if ( txResult . result . status && txResult . result . status === '0x0' ) {
if ( txResult . result . status && txResult . result . status === '0x0' ) {
return finalCb ( ` creation of ${ selectedContract . name } errored: transaction execution failed ` )
return finalCb ( ` creation of ${ selectedContract . name } errored: transaction execution failed ` )
}
}
const address = isVM ? txResult . result . createdAddress : txResult . result . contractAddress
const address = isVM ? txResult . result . createdAddress : txResult . result . contractAddress
finalCb ( null , selectedContract , address )
finalCb ( null , selectedContract , address )
}
}
)
)
}
}
determineGasPrice ( cb ) {
determineGasPrice ( cb ) {
this . getGasPrice ( ( error , gasPrice ) => {
this . executionContext . web3 ( ) . eth . getGasPrice ( ( error , gasPrice ) => {
const warnMessage = ' Please fix this issue before sending any transaction. '
const warnMessage = ' Please fix this issue before sending any transaction. '
if ( error ) {
if ( error ) {
return cb ( 'Unable to retrieve the current network gas price.' + warnMessage + error )
return cb ( 'Unable to retrieve the current network gas price.' + warnMessage + error )
@ -128,10 +124,6 @@ class Blockchain {
} )
} )
}
}
getGasPrice ( cb ) {
return this . executionContext . web3 ( ) . eth . getGasPrice ( cb )
}
fromWei ( value , doTypeConversion , unit ) {
fromWei ( value , doTypeConversion , unit ) {
if ( doTypeConversion ) {
if ( doTypeConversion ) {
return Web3 . utils . fromWei ( typeConversion . toInt ( value ) , unit || 'ether' )
return Web3 . utils . fromWei ( typeConversion . toInt ( value ) , unit || 'ether' )
@ -182,10 +174,6 @@ class Blockchain {
return this . executionContext . getProvider ( )
return this . executionContext . getProvider ( )
}
}
getAccountBalanceForAddress ( address , cb ) {
return this . getBalanceInEther ( address , cb )
}
updateNetwork ( cb ) {
updateNetwork ( cb ) {
this . networkcallid ++
this . networkcallid ++
( ( callid ) => {
( ( callid ) => {
@ -458,8 +446,8 @@ class Blockchain {
} )
} )
}
}
/** Get the balance of an address */
/** Get the balance of an address, and convert wei to ether */
getBalance ( address , cb ) {
getBalanceInEther ( address , cb ) {
address = stripHexPrefix ( address )
address = stripHexPrefix ( address )
if ( ! this . executionContext . isVM ( ) ) {
if ( ! this . executionContext . isVM ( ) ) {
@ -467,7 +455,7 @@ class Blockchain {
if ( err ) {
if ( err ) {
return cb ( err )
return cb ( err )
}
}
cb ( null , res . toString ( 10 ) )
cb ( null , Web3 . utils . fromWei ( res . toString ( 10 ) , 'ether' ) )
} )
} )
}
}
if ( ! this . accounts ) {
if ( ! this . accounts ) {
@ -478,18 +466,7 @@ class Blockchain {
if ( err ) {
if ( err ) {
return cb ( 'Account not found' )
return cb ( 'Account not found' )
}
}
cb ( null , new BN ( res . balance ) . toString ( 10 ) )
cb ( null , Web3 . utils . fromWei ( new BN ( res . balance ) . toString ( 10 ) , 'ether' ) )
} )
}
/** Get the balance of an address, and convert wei to ether */
getBalanceInEther ( address , callback ) {
this . getBalance ( address , ( error , balance ) => {
if ( error ) {
return callback ( error )
}
// callback(null, this.executionContext.web3().fromWei(balance, 'ether'))
callback ( null , Web3 . utils . fromWei ( balance . toString ( 10 ) , 'ether' ) )
} )
} )
}
}
@ -497,19 +474,6 @@ class Blockchain {
return Object . keys ( this . txRunner . pendingTxs ) . length
return Object . keys ( this . txRunner . pendingTxs ) . length
}
}
/ * *
* deploy the given contract
*
* @ param { String } data - data to send with the transaction ( return of txFormat . buildData ( ... ) ) .
* @ param { Function } callback - callback .
* /
_createContract ( data , confirmationCb , continueCb , promptCb , callback ) {
this . runTx ( { data : data , useCall : false } , confirmationCb , continueCb , promptCb , ( error , txResult ) => {
// see universaldapp.js line 660 => 700 to check possible values of txResult (error case)
callback ( error , txResult )
} )
}
/ * *
/ * *
* call the current given contract
* call the current given contract
*
*
@ -543,35 +507,25 @@ class Blockchain {
if ( network . name === 'Main' && network . id === '1' ) {
if ( network . name === 'Main' && network . id === '1' ) {
return reject ( new Error ( 'It is not allowed to make this action against mainnet' ) )
return reject ( new Error ( 'It is not allowed to make this action against mainnet' ) )
}
}
this . silentRunTx ( tx , ( error , result ) => {
if ( error ) return reject ( error )
this . txRunner . rawRun (
try {
tx ,
resolve ( resultToRemixTx ( result ) )
( network , tx , gasEstimation , continueTxExecution , cancelCb ) => { continueTxExecution ( ) } ,
} catch ( e ) {
( error , continueTxExecution , cancelCb ) => { if ( error ) { reject ( error ) } else { continueTxExecution ( ) } } ,
reject ( e )
( okCb , cancelCb ) => { okCb ( ) } ,
( error , result ) => {
if ( error ) return reject ( error )
try {
resolve ( resultToRemixTx ( result ) )
} catch ( e ) {
reject ( e )
}
}
}
} )
)
} )
} )
} )
} )
}
}
/ * *
* This function send a tx without alerting the user ( if mainnet or if gas estimation too high ) .
* SHOULD BE TAKEN CAREFULLY !
*
* @ param { Object } tx - transaction .
* @ param { Function } callback - callback .
* /
silentRunTx ( tx , cb ) {
this . txRunner . rawRun (
tx ,
( network , tx , gasEstimation , continueTxExecution , cancelCb ) => { continueTxExecution ( ) } ,
( error , continueTxExecution , cancelCb ) => { if ( error ) { cb ( error ) } else { continueTxExecution ( ) } } ,
( okCb , cancelCb ) => { okCb ( ) } ,
cb
)
}
runTx ( args , confirmationCb , continueCb , promptCb , cb ) {
runTx ( args , confirmationCb , continueCb , promptCb , cb ) {
const self = this
const self = this
async . waterfall ( [
async . waterfall ( [