mirror of
https://github.com/kremalicious/metamask-extension.git
synced 2024-11-29 23:58:06 +01:00
require metamascara
This commit is contained in:
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')
|
||||||
|
})
|
||||||
|
}
|
@ -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…
Reference in New Issue
Block a user