mirror of https://gitlab.com/ecentrics/concordia
Ezerous
6 years ago
8 changed files with 26 additions and 102 deletions
@ -1,86 +0,0 @@ |
|||
// See also: https://github.com/trufflesuite/drizzle-utils
|
|||
const Web3 = require('web3'); |
|||
|
|||
const resolveWeb3 = (resolve, options, isBrowser) => { |
|||
let provider; |
|||
|
|||
if (options.customProvider) { |
|||
// use custom provider from options object
|
|||
provider = options.customProvider; |
|||
} else if (isBrowser && window.ethereum) { |
|||
// use `ethereum` object injected by MetaMask
|
|||
provider = window.ethereum; |
|||
} else if (isBrowser && typeof window.web3 !== 'undefined') { |
|||
// use injected web3 object by legacy dapp browsers
|
|||
provider = window.web3.currentProvider; |
|||
} else if (options.fallbackProvider) { |
|||
// use fallback provider from options object
|
|||
provider = options.fallbackProvider; |
|||
} else { |
|||
// connect to development blockchain from `truffle develop`
|
|||
provider = new Web3.providers.HttpProvider('http://127.0.0.1:9545'); |
|||
} |
|||
|
|||
const web3 = new Web3(provider); |
|||
resolve(web3); |
|||
}; |
|||
|
|||
const getWeb3 = (options = { |
|||
}) => new Promise((resolve) => { |
|||
// handle server-side and React Native environments
|
|||
const isReactNative = typeof navigator !== 'undefined' && navigator.product |
|||
=== 'ReactNative'; |
|||
const isNode = typeof window === 'undefined'; |
|||
if (isNode || isReactNative) { |
|||
return resolveWeb3(resolve, options, false); |
|||
} |
|||
|
|||
// if page is ready, resolve for web3 immediately
|
|||
if (document.readyState === 'complete') { |
|||
return resolveWeb3(resolve, options, true); |
|||
} |
|||
|
|||
// otherwise, resolve for web3 when page is done loading
|
|||
return window.addEventListener('load', () => resolveWeb3(resolve, options, true)); |
|||
}); |
|||
|
|||
const getContractInstance = (options = { |
|||
}) => new Promise(async (resolve, reject) => { |
|||
if (!options.web3) { |
|||
return reject(new Error('The options object with web3 is required.')); |
|||
} |
|||
|
|||
const { web3 } = options; |
|||
|
|||
let instance; |
|||
try { |
|||
if (options.artifact) { |
|||
// if artifact exists, attempt to get network ID and the deployed address
|
|||
const { artifact } = options; |
|||
const networkId = await web3.eth.net.getId(); // web3 v1.0.0-beta.47 breaks here
|
|||
const deployedNetwork = artifact.networks[networkId]; |
|||
|
|||
// if no deployed address is found, instantiate without the address
|
|||
const address = deployedNetwork && deployedNetwork.address; |
|||
|
|||
instance = new web3.eth.Contract(artifact.abi, address); |
|||
} else if (options.abi) { |
|||
// otherwise, use passed-in ABI and deployed address (optional)
|
|||
const { abi, address } = options; |
|||
|
|||
instance = new web3.eth.Contract(abi, address); |
|||
} else { |
|||
return reject( |
|||
new Error( |
|||
'You must pass in a contract artifact or the ABI of a deployed contract.', |
|||
), |
|||
); |
|||
} |
|||
|
|||
return resolve(instance); |
|||
} catch (err) { |
|||
return reject(err); |
|||
} |
|||
}); |
|||
|
|||
export { getWeb3, getContractInstance }; |
Loading…
Reference in new issue