require metamascara

feature/default_network_editable
frankiebee 7 years ago
parent bbae8d975e
commit 29dd81d029
  1. 67
      mascara/example/app.js
  2. 6
      mascara/example/app/index.html
  3. 19
      mascara/src/lib/setup-iframe.js
  4. 22
      mascara/src/lib/setup-provider.js
  5. 48
      mascara/src/mascara.js
  6. 1
      package.json

@ -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')
})
}

@ -3,13 +3,13 @@
<html lang="en"> <html lang="en">
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
<title>MetaMask ZeroClient Example</title>
<script src="http://localhost:9001/metamascara.js"></script> <script src="http://localhost:9001/metamascara.js"></script>
<title>MetaMask ZeroClient Example</title>
</head> </head>
<body> <body>
<button class="action-button-1">SYNC TX</button> <button id="action-button-1">GET ACCOUNT</button>
<button class="action-button-2">ASYNC TX</button> <div id="account"></div>
<script src="./app.js"></script> <script src="./app.js"></script>
</body> </body>
</html> </html>

@ -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)
}
}

@ -99,6 +99,7 @@
"json-rpc-engine": "^3.1.0", "json-rpc-engine": "^3.1.0",
"json-rpc-middleware-stream": "^1.0.0", "json-rpc-middleware-stream": "^1.0.0",
"loglevel": "^1.4.1", "loglevel": "^1.4.1",
"metamascara": "^1.1.1",
"metamask-logo": "^2.1.2", "metamask-logo": "^2.1.2",
"mississippi": "^1.2.0", "mississippi": "^1.2.0",
"mkdirp": "^0.5.1", "mkdirp": "^0.5.1",

Loading…
Cancel
Save