mirror of
https://github.com/kremalicious/metamask-extension.git
synced 2024-12-23 09:52:26 +01:00
migrate to new ui + provider
This commit is contained in:
parent
709d93b5a1
commit
3eaf027e30
@ -148,7 +148,7 @@ module.exports = function (grunt) {
|
||||
dest: '<%= config.dist %>',
|
||||
src: [
|
||||
'*.{ico,png,txt}',
|
||||
'images/{,*/}*.{webp,gif}',
|
||||
'images/{,*/}*.*',
|
||||
'{,*/}*.html',
|
||||
'styles/{,*/}*.css',
|
||||
'styles/fonts/{,*/}*.*',
|
||||
@ -164,7 +164,6 @@ module.exports = function (grunt) {
|
||||
cwd: '<%= config.app %>',
|
||||
dest: '<%= config.dist %>',
|
||||
src: [
|
||||
'images/{,*/}*.*',
|
||||
'scripts/chromereload.js',
|
||||
]
|
||||
}]
|
||||
@ -278,7 +277,7 @@ module.exports = function (grunt) {
|
||||
'clean',
|
||||
'concurrent:dist',
|
||||
'uglify',
|
||||
'copy:dist',
|
||||
'copy:basic',
|
||||
'chromeManifest:dist',
|
||||
'compress',
|
||||
]);
|
||||
|
49
TODO
Normal file
49
TODO
Normal file
@ -0,0 +1,49 @@
|
||||
TODO
|
||||
|
||||
### plugin
|
||||
|
||||
- [ ] ui
|
||||
- [ ] designer
|
||||
- [ ] design
|
||||
- [ ] stack
|
||||
- [x] frontend
|
||||
- [ ] build tools
|
||||
|
||||
- [ ] data source
|
||||
- [x] geth node
|
||||
- [ ] rpc proxy
|
||||
- [x] geth node
|
||||
- [ ] whitelist
|
||||
- [ ] (perf) proxy-level caching
|
||||
- [ ] (perf) block listener websocket
|
||||
- [ ] provider engine
|
||||
- [x] top-level cache
|
||||
- [x] top-level current block
|
||||
- [x] subproviders should act like normal providers
|
||||
- [x] return in payload wrapper
|
||||
- [ ] subprovider implementations
|
||||
- [x] static
|
||||
- [ ] filters
|
||||
- [x] block
|
||||
- [x] log
|
||||
- [ ] pendingTx
|
||||
- [x] rpc
|
||||
- [x] vm
|
||||
- [x] tx signing
|
||||
|
||||
- [ ] dev ops
|
||||
- [ ] test api load
|
||||
- [ ] publish plugin to store
|
||||
|
||||
- [ ] external info
|
||||
- [ ] soft launch email
|
||||
- [ ] consensys blog post?
|
||||
|
||||
(2) dapp fallback lib
|
||||
iframe wrapper api
|
||||
data source
|
||||
?
|
||||
|
||||
(3) browser-browser
|
||||
|
||||
(4) mobile extension / app
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "__MSG_appName__",
|
||||
"version": "0.0.49",
|
||||
"version": "0.1.0",
|
||||
"manifest_version": 2,
|
||||
"description": "__MSG_appDescription__",
|
||||
"icons": {
|
||||
|
@ -2,23 +2,10 @@
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Typo Blaster</title>
|
||||
<style>
|
||||
body {
|
||||
min-width: 357px;
|
||||
overflow-x: hidden;
|
||||
}
|
||||
|
||||
img {
|
||||
margin: 5px;
|
||||
border: 2px solid black;
|
||||
vertical-align: middle;
|
||||
width: 75px;
|
||||
height: 75px;
|
||||
}
|
||||
</style>
|
||||
<title>MetaMask Plugin</title>
|
||||
</head>
|
||||
<body>
|
||||
<div id="app-content"></div>
|
||||
<script src="./scripts/popup.js" type="text/javascript" charset="utf-8"></script>
|
||||
</body>
|
||||
</html>
|
@ -1,34 +1,10 @@
|
||||
const ZeroClientProvider = require('web3-provider-engine')
|
||||
const MetaMaskProvider = require('./lib/metamask-provider')
|
||||
// const PortStream = require('./lib/port-stream.js')
|
||||
const identitiesUrl = 'https://alpha.metamask.io/identities/'
|
||||
|
||||
// var unsignedTxs = {}
|
||||
|
||||
var zeroClient = new ZeroClientProvider({
|
||||
rpcUrl: 'https://rawrpc.metamask.io/',
|
||||
})
|
||||
|
||||
// // setup badge click handler
|
||||
// chrome.browserAction.onClicked.addListener(function(activeTab) {
|
||||
// // chrome.tabs.create({ url: identitiesUrl })
|
||||
// tabbernackle()
|
||||
// })
|
||||
|
||||
|
||||
// function tabbernackle(){
|
||||
// chrome.tabs.create({
|
||||
// url: 'about:blank',//chrome.extension.getURL('dialog.html'),
|
||||
// active: false
|
||||
// }, function(tab) {
|
||||
// // After the tab has been created, open a window to inject the tab
|
||||
// chrome.windows.create({
|
||||
// tabId: tab.id,
|
||||
// type: 'panel',
|
||||
// focused: true
|
||||
// // incognito, top, left, ...
|
||||
// });
|
||||
// });
|
||||
// }
|
||||
var zeroClient = MetaMaskProvider()
|
||||
|
||||
// setup messaging
|
||||
chrome.runtime.onConnect.addListener(connectRemote)
|
||||
|
@ -1,122 +1,55 @@
|
||||
var HttpProvider = require('web3/lib/web3/httpprovider.js')
|
||||
var ethUtils = require('ethereumjs-util')
|
||||
var async = require('async')
|
||||
const ProviderEngine = require('web3-provider-engine')
|
||||
const CacheSubprovider = require('web3-provider-engine/subproviders/cache.js')
|
||||
const StaticSubprovider = require('web3-provider-engine/subproviders/static.js')
|
||||
const FilterSubprovider = require('web3-provider-engine/subproviders/filters.js')
|
||||
const VmSubprovider = require('web3-provider-engine/subproviders/vm.js')
|
||||
const LightWalletSubprovider = require('web3-provider-engine/subproviders/lightwallet.js')
|
||||
const RpcSubprovider = require('web3-provider-engine/subproviders/rpc.js')
|
||||
|
||||
module.exports = MetamaskProvider
|
||||
module.exports = metamaskProvider
|
||||
|
||||
function metamaskProvider(opts){
|
||||
|
||||
function MetamaskProvider(forwardPayload, host) {
|
||||
this.handlers = []
|
||||
this.forwardPayload = forwardPayload
|
||||
this.http = new HttpProvider(host)
|
||||
}
|
||||
var engine = new ProviderEngine()
|
||||
|
||||
MetamaskProvider.prototype.send = function (payload) {
|
||||
if (Array.isArray(payload)) {
|
||||
return payload.map( this.handlePayload.bind(this) )
|
||||
} else {
|
||||
return this.handlePayload( payload )
|
||||
}
|
||||
}
|
||||
// cache layer
|
||||
engine.addProvider(new CacheSubprovider())
|
||||
|
||||
MetamaskProvider.prototype.sendAsync = function (payload, cb) {
|
||||
if (Array.isArray(payload)) {
|
||||
async.map( payload, this.handlePayload.bind(this), cb )
|
||||
} else {
|
||||
this.handlePayload( payload, cb )
|
||||
}
|
||||
}
|
||||
// static results
|
||||
engine.addProvider(new StaticSubprovider({
|
||||
web3_clientVersion: 'MetaMask-ProviderEngine/v0.0.0/javascript',
|
||||
net_listening: true,
|
||||
eth_hashrate: '0x0',
|
||||
eth_mining: false,
|
||||
eth_syncing: true,
|
||||
})
|
||||
|
||||
MetamaskProvider.prototype.handlePayload = function (payload, cb) {
|
||||
var _this = this
|
||||
var isSync = !cb
|
||||
var resolvedSync = true
|
||||
var result = undefined
|
||||
// filters
|
||||
engine.addProvider(new FilterSubprovider())
|
||||
|
||||
// TODO - this should be injected from Vapor dapp starts
|
||||
var exposedAccounts = ['0xa06ef3ed1ce41ade87f764de6ce8095c569d6d57']
|
||||
// vm
|
||||
engine.addProvider(new VmSubprovider())
|
||||
|
||||
switch (payload.method) {
|
||||
|
||||
case 'web3_sha3':
|
||||
var inputHex = stripHexStringPrefix(payload.params[0])
|
||||
var hash = '0x'+ethUtils.sha3(new Buffer(inputHex, 'hex')).toString('hex')
|
||||
return handleResult(null, wrapResponse(payload, hash))
|
||||
|
||||
case 'eth_sendTransaction':
|
||||
this.forwardPayload(payload)
|
||||
return handleResult(null, wrapResponse(payload, ''))
|
||||
// id mgmt
|
||||
engine.addProvider(new LightWalletSubprovider())
|
||||
|
||||
case 'eth_coinbase':
|
||||
var currentAddress = exposedAccounts[0]
|
||||
return handleResult(null, wrapResponse(payload, currentAddress))
|
||||
// data source
|
||||
engine.addProvider(new RpcSubprovider({
|
||||
rpcUrl: 'https://testrpc.metamask.io/',
|
||||
}))
|
||||
|
||||
case 'eth_accounts':
|
||||
return handleResult(null, wrapResponse(payload, exposedAccounts))
|
||||
// log new blocks
|
||||
engine.on('block', function(block){
|
||||
// lazy hack - move caching and current block to engine
|
||||
engine.currentBlock = block
|
||||
console.log('================================')
|
||||
console.log('BLOCK CHANGED:', '#'+block.number.toString('hex'), '0x'+block.hash.toString('hex'))
|
||||
console.log('================================')
|
||||
})
|
||||
|
||||
case 'eth_gasPrice':
|
||||
// TODO - this should be dynamically set somehow
|
||||
var gasPrice = '0x01'
|
||||
return handleResult(null, wrapResponse(payload, [gasPrice]))
|
||||
// start polling for blocks
|
||||
engine.start()
|
||||
|
||||
case 'eth_call':
|
||||
var params = payload.params
|
||||
// default 'from' to default account
|
||||
var args = params[0]
|
||||
if (!args.from) {
|
||||
var currentAddress = exposedAccounts[0]
|
||||
args.from = currentAddress
|
||||
}
|
||||
// default block to latest
|
||||
params[1] = params[1] || 'latest'
|
||||
// turn on debug trace
|
||||
params[2] = global.DEBUG_RPC
|
||||
return handleNormally()
|
||||
|
||||
default:
|
||||
return handleNormally()
|
||||
}
|
||||
return engine
|
||||
|
||||
resolvedSync = false
|
||||
|
||||
function handleNormally(){
|
||||
if (isSync) {
|
||||
return handleResult(null, _this.http.send(payload))
|
||||
} else {
|
||||
_this.http.sendAsync(payload, handleResult)
|
||||
}
|
||||
}
|
||||
|
||||
// helper for normalizing handling of sync+async responses
|
||||
function handleResult(err, resp) {
|
||||
if (isSync) {
|
||||
return resp
|
||||
} else {
|
||||
if (resolvedSync) {
|
||||
process.nextTick(cb.bind(null, err, resp))
|
||||
} else {
|
||||
cb(err, resp)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function wrapResponse(payload, result){
|
||||
return {
|
||||
jsonrpc: payload.jsonrpc,
|
||||
id: payload.id,
|
||||
result: result,
|
||||
}
|
||||
}
|
||||
|
||||
function stripHexStringPrefix(hex) {
|
||||
if (!hex) {
|
||||
return hex
|
||||
}
|
||||
|
||||
if (hex.slice(0, 2) === '0x') {
|
||||
return hex.slice(2);
|
||||
} else {
|
||||
return hex;
|
||||
}
|
||||
}
|
@ -1 +1,13 @@
|
||||
document.body.innerHTML = "real talk"
|
||||
const MetaMaskUi = require('metamask-ui')
|
||||
const MetaMaskUiCss = require('metamask-ui/css')
|
||||
const injectCss = require('inject-css')
|
||||
|
||||
|
||||
var container = document.getElementById('app-content')
|
||||
|
||||
var css = MetaMaskUiCss()
|
||||
injectCss(css)
|
||||
|
||||
var app = MetaMaskUi({
|
||||
container: container,
|
||||
})
|
||||
|
@ -2,13 +2,15 @@
|
||||
"name": "metamask-crx",
|
||||
"version": "0.0.0",
|
||||
"public": false,
|
||||
"scripts": {
|
||||
"start": "grunt dev",
|
||||
"build": "grunt build"
|
||||
},
|
||||
"dependencies": {
|
||||
"async": "^1.4.0",
|
||||
"blockapps-web3": "git://github.com/kumavis/blockapps-web3.git#9c1ee8e99efe277804fc47d8b11142abbc46180c",
|
||||
"ethereumjs-tx": "^0.6.7",
|
||||
"ethereumjs-util": "^1.3.5",
|
||||
"object.entries": "^1.0.2",
|
||||
"readable-stream": "^2.0.5",
|
||||
"inject-css": "^0.1.1",
|
||||
"web3": "^0.15.1",
|
||||
"web3-provider-engine": "^1.2.0"
|
||||
},
|
||||
|
Loading…
Reference in New Issue
Block a user