parent
bbae8d975e
commit
29dd81d029
@ -1,57 +1,26 @@ |
|||||||
window.addEventListener('load', web3Detect) |
const EthQuery = require('ethjs-query') |
||||||
|
|
||||||
|
window.addEventListener('load', loadProvider) |
||||||
window.addEventListener('message', console.warn) |
window.addEventListener('message', console.warn) |
||||||
|
|
||||||
function web3Detect() { |
async function loadProvider() { |
||||||
if (global.web3) { |
const ethereumProvider = window.metamask.createDefaultProvider({ host: 'http://localhost:9001' }) |
||||||
logToDom('web3 detected!') |
const ethQuery = new EthQuery(ethereumProvider) |
||||||
startApp() |
const accounts = await ethQuery.accounts() |
||||||
} else { |
logToDom(accounts.length ? accounts[0] : 'LOCKED or undefined') |
||||||
logToDom('no web3 detected!') |
setupButton(ethQuery) |
||||||
} |
|
||||||
} |
} |
||||||
|
|
||||||
function startApp(){ |
|
||||||
console.log('app started') |
|
||||||
|
|
||||||
var primaryAccount |
|
||||||
console.log('getting main account...') |
|
||||||
web3.eth.getAccounts((err, addresses) => { |
|
||||||
if (err) console.error(err) |
|
||||||
console.log('set address', addresses[0]) |
|
||||||
primaryAccount = addresses[0] |
|
||||||
}) |
|
||||||
|
|
||||||
document.querySelector('.action-button-1').addEventListener('click', function(){ |
|
||||||
console.log('saw click') |
|
||||||
console.log('sending tx') |
|
||||||
primaryAccount |
|
||||||
web3.eth.sendTransaction({ |
|
||||||
from: primaryAccount, |
|
||||||
to: primaryAccount, |
|
||||||
value: 0, |
|
||||||
}, function(err, txHash){ |
|
||||||
if (err) throw err |
|
||||||
console.log('sendTransaction result:', err || txHash) |
|
||||||
}) |
|
||||||
}) |
|
||||||
document.querySelector('.action-button-2').addEventListener('click', function(){ |
|
||||||
console.log('saw click') |
|
||||||
setTimeout(function(){ |
|
||||||
console.log('sending tx') |
|
||||||
web3.eth.sendTransaction({ |
|
||||||
from: primaryAccount, |
|
||||||
to: primaryAccount, |
|
||||||
value: 0, |
|
||||||
}, function(err, txHash){ |
|
||||||
if (err) throw err |
|
||||||
console.log('sendTransaction result:', err || txHash) |
|
||||||
}) |
|
||||||
}) |
|
||||||
}) |
|
||||||
|
|
||||||
} |
|
||||||
|
|
||||||
function logToDom(message){ |
function logToDom(message){ |
||||||
document.body.appendChild(document.createTextNode(message)) |
document.getElementById('account').innerText = message |
||||||
console.log(message) |
console.log(message) |
||||||
} |
} |
||||||
|
|
||||||
|
function setupButton (ethQuery) { |
||||||
|
const button = document.getElementById('action-button-1') |
||||||
|
button.addEventListener('click', async () => { |
||||||
|
const accounts = await ethQuery.accounts() |
||||||
|
logToDom(accounts.length ? accounts[0] : 'LOCKED or undefined') |
||||||
|
}) |
||||||
|
} |
@ -1,19 +0,0 @@ |
|||||||
const Iframe = require('iframe') |
|
||||||
const createIframeStream = require('iframe-stream').IframeStream |
|
||||||
|
|
||||||
module.exports = setupIframe |
|
||||||
|
|
||||||
|
|
||||||
function setupIframe(opts) { |
|
||||||
opts = opts || {} |
|
||||||
var frame = Iframe({ |
|
||||||
src: opts.zeroClientProvider || 'https://zero.metamask.io/', |
|
||||||
container: opts.container || document.head, |
|
||||||
sandboxAttributes: opts.sandboxAttributes || ['allow-scripts', 'allow-popups'], |
|
||||||
}) |
|
||||||
var iframe = frame.iframe |
|
||||||
iframe.style.setProperty('display', 'none') |
|
||||||
var iframeStream = createIframeStream(iframe) |
|
||||||
|
|
||||||
return iframeStream |
|
||||||
} |
|
@ -1,22 +0,0 @@ |
|||||||
const setupIframe = require('./setup-iframe.js') |
|
||||||
const MetamaskInpageProvider = require('../../../app/scripts/lib/inpage-provider.js') |
|
||||||
|
|
||||||
module.exports = getProvider |
|
||||||
|
|
||||||
|
|
||||||
function getProvider(opts){ |
|
||||||
if (global.web3) { |
|
||||||
console.log('MetaMask ZeroClient - using environmental web3 provider') |
|
||||||
return global.web3.currentProvider |
|
||||||
} |
|
||||||
console.log('MetaMask ZeroClient - injecting zero-client iframe!') |
|
||||||
var iframeStream = setupIframe({ |
|
||||||
zeroClientProvider: opts.mascaraUrl, |
|
||||||
sandboxAttributes: ['allow-scripts', 'allow-popups', 'allow-same-origin'], |
|
||||||
container: document.body, |
|
||||||
}) |
|
||||||
|
|
||||||
var inpageProvider = new MetamaskInpageProvider(iframeStream) |
|
||||||
return inpageProvider |
|
||||||
|
|
||||||
} |
|
@ -1,47 +1 @@ |
|||||||
const Web3 = require('web3') |
global.metamask = require('metamascara') |
||||||
const setupProvider = require('./lib/setup-provider.js') |
|
||||||
const setupDappAutoReload = require('../../app/scripts/lib/auto-reload.js') |
|
||||||
const MASCARA_ORIGIN = process.env.MASCARA_ORIGIN || 'http://localhost:9001' |
|
||||||
console.log('MASCARA_ORIGIN:', MASCARA_ORIGIN) |
|
||||||
|
|
||||||
//
|
|
||||||
// setup web3
|
|
||||||
//
|
|
||||||
|
|
||||||
const provider = setupProvider({ |
|
||||||
mascaraUrl: MASCARA_ORIGIN + '/proxy/', |
|
||||||
}) |
|
||||||
instrumentForUserInteractionTriggers(provider) |
|
||||||
|
|
||||||
const web3 = new Web3(provider) |
|
||||||
setupDappAutoReload(web3, provider.publicConfigStore) |
|
||||||
//
|
|
||||||
// ui stuff
|
|
||||||
//
|
|
||||||
|
|
||||||
let shouldPop = false |
|
||||||
window.addEventListener('click', maybeTriggerPopup) |
|
||||||
|
|
||||||
//
|
|
||||||
// util
|
|
||||||
//
|
|
||||||
|
|
||||||
function maybeTriggerPopup(){ |
|
||||||
if (!shouldPop) return |
|
||||||
shouldPop = false |
|
||||||
window.open(MASCARA_ORIGIN, '', 'width=360 height=500') |
|
||||||
console.log('opening window...') |
|
||||||
} |
|
||||||
|
|
||||||
function instrumentForUserInteractionTriggers(provider){ |
|
||||||
const _super = provider.sendAsync.bind(provider) |
|
||||||
provider.sendAsync = function(payload, cb){ |
|
||||||
if (payload.method === 'eth_sendTransaction') { |
|
||||||
console.log('saw send') |
|
||||||
shouldPop = true |
|
||||||
} |
|
||||||
_super(payload, cb) |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in new issue