Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
B
baas-ide
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
JIRA
JIRA
Merge Requests
1
Merge Requests
1
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
guxukai
baas-ide
Commits
5c8c8255
Commit
5c8c8255
authored
Dec 27, 2019
by
Iuri Matias
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
move blockchain specific logic from settings to blockchain model
parent
e2074acb
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
137 additions
and
129 deletions
+137
-129
blockchain.js
src/app/tabs/runTab/model/blockchain.js
+97
-2
settings.js
src/app/tabs/runTab/model/settings.js
+19
-106
settings.js
src/app/tabs/runTab/settings.js
+18
-18
run-tab.js
src/app/udapp/run-tab.js
+3
-3
No files found.
src/app/tabs/runTab/model/blockchain.js
View file @
5c8c8255
...
...
@@ -3,6 +3,8 @@ const txFormat = remixLib.execution.txFormat
const
txExecution
=
remixLib
.
execution
.
txExecution
const
typeConversion
=
remixLib
.
execution
.
typeConversion
const
EventManager
=
remixLib
.
EventManager
const
ethJSUtil
=
require
(
'ethereumjs-util'
)
const
Personal
=
require
(
'web3-eth-personal'
)
const
Web3
=
require
(
'web3'
)
class
Blockchain
{
...
...
@@ -11,12 +13,22 @@ class Blockchain {
this
.
event
=
new
EventManager
()
this
.
executionContext
=
executionContext
this
.
udapp
=
udapp
this
.
networkcallid
=
0
this
.
setupEvents
()
}
setupEvents
()
{
this
.
executionContext
.
event
.
register
(
'contextChanged'
,
()
=>
{
this
.
event
.
trigger
(
'contextChanged'
,
[])
this
.
executionContext
.
event
.
register
(
'contextChanged'
,
(
context
,
silent
)
=>
{
this
.
event
.
trigger
(
'contextChanged'
,
[
context
,
silent
])
})
this
.
executionContext
.
event
.
register
(
'addProvider'
,
(
network
)
=>
{
this
.
event
.
trigger
(
'addProvider'
,
[
network
])
})
this
.
executionContext
.
event
.
register
(
'removeProvider'
,
(
name
)
=>
{
this
.
event
.
trigger
(
'removeProvider'
,
[
name
])
})
this
.
udapp
.
event
.
register
(
'initiatingTransaction'
,
(
timestamp
,
tx
,
payLoad
)
=>
{
...
...
@@ -141,10 +153,93 @@ class Blockchain {
return
this
.
executionContext
.
isVM
()
?
txResult
.
result
.
createdAddress
:
txResult
.
result
.
contractAddress
}
changeExecutionContext
(
context
,
confirmCb
,
infoCb
,
cb
)
{
return
this
.
executionContext
.
executionContextChange
(
context
,
null
,
confirmCb
,
infoCb
,
cb
)
}
setProviderFromEndpoint
(
target
,
context
,
cb
)
{
return
this
.
executionContext
.
setProviderFromEndpoint
(
target
,
context
,
cb
)
}
getProvider
()
{
return
this
.
executionContext
.
getProvider
()
}
getAccountBalanceForAddress
(
address
,
cb
)
{
return
this
.
udapp
.
getBalanceInEther
(
address
,
cb
)
}
updateNetwork
(
cb
)
{
this
.
networkcallid
++
((
callid
)
=>
{
this
.
executionContext
.
detectNetwork
((
err
,
{
id
,
name
}
=
{})
=>
{
if
(
this
.
networkcallid
>
callid
)
return
this
.
networkcallid
++
if
(
err
)
{
return
cb
(
err
)
}
cb
(
null
,
{
id
,
name
})
})
})(
this
.
networkcallid
)
}
newAccount
(
passphraseCb
,
cb
)
{
return
this
.
udapp
.
newAccount
(
''
,
passphraseCb
,
cb
)
}
getAccounts
(
cb
)
{
return
this
.
udapp
.
getAccounts
(
cb
)
}
isWeb3Provider
()
{
var
isVM
=
this
.
executionContext
.
isVM
()
var
isInjected
=
this
.
executionContext
.
getProvider
()
===
'injected'
return
(
!
isVM
&&
!
isInjected
)
}
isInjectedWeb3
()
{
return
this
.
executionContext
.
getProvider
()
===
'injected'
}
signMessage
(
message
,
account
,
passphrase
,
cb
)
{
var
isVM
=
this
.
executionContext
.
isVM
()
var
isInjected
=
this
.
executionContext
.
getProvider
()
===
'injected'
if
(
isVM
)
{
const
personalMsg
=
ethJSUtil
.
hashPersonalMessage
(
Buffer
.
from
(
message
))
var
privKey
=
this
.
udapp
.
accounts
[
account
].
privateKey
try
{
var
rsv
=
ethJSUtil
.
ecsign
(
personalMsg
,
privKey
)
var
signedData
=
ethJSUtil
.
toRpcSig
(
rsv
.
v
,
rsv
.
r
,
rsv
.
s
)
cb
(
null
,
'0x'
+
personalMsg
.
toString
(
'hex'
),
signedData
)
}
catch
(
e
)
{
cb
(
e
.
message
)
}
return
}
if
(
isInjected
)
{
const
hashedMsg
=
Web3
.
utils
.
sha3
(
message
)
try
{
this
.
executionContext
.
web3
().
eth
.
sign
(
account
,
hashedMsg
,
(
error
,
signedData
)
=>
{
cb
(
error
.
message
,
hashedMsg
,
signedData
)
})
}
catch
(
e
)
{
cb
(
e
.
message
)
}
return
}
const
hashedMsg
=
Web3
.
utils
.
sha3
(
message
)
try
{
var
personal
=
new
Personal
(
this
.
executionContext
.
web3
().
currentProvider
)
personal
.
sign
(
hashedMsg
,
account
,
passphrase
,
(
error
,
signedData
)
=>
{
cb
(
error
.
message
,
hashedMsg
,
signedData
)
})
}
catch
(
e
)
{
cb
(
e
.
message
)
}
}
}
module
.
exports
=
Blockchain
src/app/tabs/runTab/model/settings.js
View file @
5c8c8255
var
ethJSUtil
=
require
(
'ethereumjs-util'
)
var
Personal
=
require
(
'web3-eth-personal'
)
//
var ethJSUtil = require('ethereumjs-util')
//
var Personal = require('web3-eth-personal')
var
remixLib
=
require
(
'remix-lib'
)
var
Web3
=
require
(
'web3'
)
const
addTooltip
=
require
(
'../../../ui/tooltip'
)
//
var Web3 = require('web3')
//
const addTooltip = require('../../../ui/tooltip')
var
EventManager
=
remixLib
.
EventManager
class
Settings
{
constructor
(
executionContext
,
udapp
)
{
constructor
(
blockchain
,
executionContext
,
udapp
)
{
this
.
blockchain
=
blockchain
this
.
executionContext
=
executionContext
this
.
udapp
=
udapp
this
.
event
=
new
EventManager
()
this
.
udapp
.
event
.
register
(
'transactionExecuted'
,
(
error
,
from
,
to
,
data
,
lookupOnly
,
txResult
)
=>
{
this
.
event
.
trigger
(
'transactionExecuted'
,
[
error
,
from
,
to
,
data
,
lookupOnly
,
txResult
])
})
// this.blockchain
.event.register('transactionExecuted', (error, from, to, data, lookupOnly, txResult) => {
//
this.event.trigger('transactionExecuted', [error, from, to, data, lookupOnly, txResult])
//
})
this
.
executionContext
.
event
.
register
(
'contextChanged'
,
(
context
,
silent
)
=>
{
this
.
event
.
trigger
(
'contextChanged'
,
[
context
,
silent
])
})
// this.blockchain
.event.register('contextChanged', (context, silent) => {
//
this.event.trigger('contextChanged', [context, silent])
//
})
this
.
executionContext
.
event
.
register
(
'addProvider'
,
(
network
)
=>
{
this
.
event
.
trigger
(
'addProvider'
,
[
network
])
})
// this.blockchain
.event.register('addProvider', (network) => {
//
this.event.trigger('addProvider', [network])
//
})
this
.
executionContext
.
event
.
register
(
'removeProvider'
,
(
name
)
=>
{
this
.
event
.
trigger
(
'removeProvider'
,
[
name
])
})
// this.blockchain
.event.register('removeProvider', (name) => {
//
this.event.trigger('removeProvider', [name])
//
})
this
.
networkcallid
=
0
}
changeExecutionContext
(
context
,
confirmCb
,
infoCb
,
cb
)
{
return
this
.
executionContext
.
executionContextChange
(
context
,
null
,
confirmCb
,
infoCb
,
cb
)
}
setProviderFromEndpoint
(
target
,
context
,
cb
)
{
return
this
.
executionContext
.
setProviderFromEndpoint
(
target
,
context
,
cb
)
}
getProvider
()
{
return
this
.
executionContext
.
getProvider
()
}
getAccountBalanceForAddress
(
address
,
cb
)
{
return
this
.
udapp
.
getBalanceInEther
(
address
,
cb
)
}
updateNetwork
(
cb
)
{
this
.
networkcallid
++
((
callid
)
=>
{
this
.
executionContext
.
detectNetwork
((
err
,
{
id
,
name
}
=
{})
=>
{
if
(
this
.
networkcallid
>
callid
)
return
this
.
networkcallid
++
if
(
err
)
{
return
cb
(
err
)
}
cb
(
null
,
{
id
,
name
})
})
})(
this
.
networkcallid
)
}
newAccount
(
passphraseCb
,
cb
)
{
return
this
.
udapp
.
newAccount
(
''
,
passphraseCb
,
cb
)
}
getAccounts
(
cb
)
{
return
this
.
udapp
.
getAccounts
(
cb
)
}
isWeb3Provider
()
{
var
isVM
=
this
.
executionContext
.
isVM
()
var
isInjected
=
this
.
executionContext
.
getProvider
()
===
'injected'
return
(
!
isVM
&&
!
isInjected
)
}
isInjectedWeb3
()
{
return
this
.
executionContext
.
getProvider
()
===
'injected'
}
signMessage
(
message
,
account
,
passphrase
,
cb
)
{
var
isVM
=
this
.
executionContext
.
isVM
()
var
isInjected
=
this
.
executionContext
.
getProvider
()
===
'injected'
if
(
isVM
)
{
const
personalMsg
=
ethJSUtil
.
hashPersonalMessage
(
Buffer
.
from
(
message
))
var
privKey
=
this
.
udapp
.
accounts
[
account
].
privateKey
try
{
var
rsv
=
ethJSUtil
.
ecsign
(
personalMsg
,
privKey
)
var
signedData
=
ethJSUtil
.
toRpcSig
(
rsv
.
v
,
rsv
.
r
,
rsv
.
s
)
cb
(
null
,
'0x'
+
personalMsg
.
toString
(
'hex'
),
signedData
)
}
catch
(
e
)
{
cb
(
e
.
message
)
}
return
}
if
(
isInjected
)
{
const
hashedMsg
=
Web3
.
utils
.
sha3
(
message
)
try
{
addTooltip
(
'Please check your provider to approve'
)
this
.
executionContext
.
web3
().
eth
.
sign
(
account
,
hashedMsg
,
(
error
,
signedData
)
=>
{
cb
(
error
.
message
,
hashedMsg
,
signedData
)
})
}
catch
(
e
)
{
cb
(
e
.
message
)
}
return
}
const
hashedMsg
=
Web3
.
utils
.
sha3
(
message
)
try
{
var
personal
=
new
Personal
(
this
.
executionContext
.
web3
().
currentProvider
)
personal
.
sign
(
hashedMsg
,
account
,
passphrase
,
(
error
,
signedData
)
=>
{
cb
(
error
.
message
,
hashedMsg
,
signedData
)
})
}
catch
(
e
)
{
cb
(
e
.
message
)
}
// this.networkcallid = 0
}
}
...
...
src/app/tabs/runTab/settings.js
View file @
5c8c8255
...
...
@@ -11,12 +11,12 @@ const globalRegistry = require('../../../global/registry')
class
SettingsUI
{
constructor
(
settings
,
networkModule
)
{
this
.
settings
=
settings
constructor
(
blockchain
,
networkModule
)
{
this
.
blockchain
=
blockchain
this
.
event
=
new
EventManager
()
this
.
_components
=
{}
this
.
settings
.
event
.
register
(
'transactionExecuted'
,
(
error
,
from
,
to
,
data
,
lookupOnly
,
txResult
)
=>
{
this
.
blockchain
.
event
.
register
(
'transactionExecuted'
,
(
error
,
from
,
to
,
data
,
lookupOnly
,
txResult
)
=>
{
if
(
error
)
return
if
(
!
lookupOnly
)
this
.
el
.
querySelector
(
'#value'
).
value
=
'0'
this
.
updateAccountBalances
()
...
...
@@ -44,7 +44,7 @@ class SettingsUI {
if
(
!
this
.
el
)
return
var
accounts
=
$
(
this
.
el
.
querySelector
(
'#txorigin'
)).
children
(
'option'
)
accounts
.
each
((
index
,
account
)
=>
{
this
.
settings
.
getAccountBalanceForAddress
(
account
.
value
,
(
err
,
balance
)
=>
{
this
.
blockchain
.
getAccountBalanceForAddress
(
account
.
value
,
(
err
,
balance
)
=>
{
if
(
err
)
return
account
.
innerText
=
helper
.
shortenAddress
(
account
.
value
,
balance
)
})
...
...
@@ -139,7 +139,7 @@ class SettingsUI {
var
selectExEnv
=
environmentEl
.
querySelector
(
'#selectExEnvOptions'
)
this
.
setDropdown
(
selectExEnv
)
this
.
settings
.
event
.
register
(
'contextChanged'
,
(
context
,
silent
)
=>
{
this
.
blockchain
.
event
.
register
(
'contextChanged'
,
(
context
,
silent
)
=>
{
this
.
setFinalContext
()
})
...
...
@@ -156,7 +156,7 @@ class SettingsUI {
setDropdown
(
selectExEnv
)
{
this
.
selectExEnv
=
selectExEnv
this
.
settings
.
event
.
register
(
'addProvider'
,
(
network
)
=>
{
this
.
blockchain
.
event
.
register
(
'addProvider'
,
(
network
)
=>
{
selectExEnv
.
appendChild
(
yo
`<option
title="Manually added environment:
${
network
.
url
}
"
value="
${
network
.
name
}
"
...
...
@@ -167,7 +167,7 @@ class SettingsUI {
addTooltip
(
`
${
network
.
name
}
[
${
network
.
url
}
] added`
)
})
this
.
settings
.
event
.
register
(
'removeProvider'
,
(
name
)
=>
{
this
.
blockchain
.
event
.
register
(
'removeProvider'
,
(
name
)
=>
{
var
env
=
selectExEnv
.
querySelector
(
`option[value="
${
name
}
"]`
)
if
(
env
)
{
selectExEnv
.
removeChild
(
env
)
...
...
@@ -177,9 +177,9 @@ class SettingsUI {
selectExEnv
.
addEventListener
(
'change'
,
(
event
)
=>
{
let
context
=
selectExEnv
.
options
[
selectExEnv
.
selectedIndex
].
value
this
.
settings
.
changeExecutionContext
(
context
,
()
=>
{
this
.
blockchain
.
changeExecutionContext
(
context
,
()
=>
{
modalDialogCustom
.
prompt
(
'External node request'
,
this
.
web3ProviderDialogBody
(),
'http://localhost:8545'
,
(
target
)
=>
{
this
.
settings
.
setProviderFromEndpoint
(
target
,
context
,
(
alertMsg
)
=>
{
this
.
blockchain
.
setProviderFromEndpoint
(
target
,
context
,
(
alertMsg
)
=>
{
if
(
alertMsg
)
addTooltip
(
alertMsg
)
this
.
setFinalContext
()
})
...
...
@@ -189,7 +189,7 @@ class SettingsUI {
},
this
.
setFinalContext
.
bind
(
this
))
})
selectExEnv
.
value
=
this
.
settings
.
getProvider
()
selectExEnv
.
value
=
this
.
blockchain
.
getProvider
()
}
web3ProviderDialogBody
()
{
...
...
@@ -208,7 +208,7 @@ class SettingsUI {
setFinalContext
()
{
// set the final context. Cause it is possible that this is not the one we've originaly selected
this
.
selectExEnv
.
value
=
this
.
settings
.
getProvider
()
this
.
selectExEnv
.
value
=
this
.
blockchain
.
getProvider
()
this
.
event
.
trigger
(
'clearInstance'
,
[])
this
.
updateNetwork
()
this
.
updatePlusButton
()
...
...
@@ -250,7 +250,7 @@ class SettingsUI {
}
newAccount
()
{
this
.
settings
.
newAccount
(
this
.
blockchain
.
newAccount
(
(
cb
)
=>
{
modalDialogCustom
.
promptPassphraseCreation
((
error
,
passphrase
)
=>
{
if
(
error
)
{
...
...
@@ -269,14 +269,14 @@ class SettingsUI {
}
signMessage
()
{
this
.
settings
.
getAccounts
((
err
,
accounts
)
=>
{
this
.
blockchain
.
getAccounts
((
err
,
accounts
)
=>
{
if
(
err
)
{
return
addTooltip
(
`Cannot get account list:
${
err
}
`
)
}
var
signMessageDialog
=
{
'title'
:
'Sign a message'
,
'text'
:
'Enter a message to sign'
,
'inputvalue'
:
'Message to sign'
}
var
$txOrigin
=
this
.
el
.
querySelector
(
'#txorigin'
)
if
(
!
$txOrigin
.
selectedOptions
[
0
]
&&
(
this
.
settings
.
isInjectedWeb3
()
||
this
.
settings
.
isWeb3Provider
()))
{
if
(
!
$txOrigin
.
selectedOptions
[
0
]
&&
(
this
.
blockchain
.
isInjectedWeb3
()
||
this
.
blockchain
.
isWeb3Provider
()))
{
return
addTooltip
(
`Account list is empty, please make sure the current provider is properly connected to remix`
)
}
...
...
@@ -284,7 +284,7 @@ class SettingsUI {
var
promptCb
=
(
passphrase
)
=>
{
const
modal
=
modalDialogCustom
.
promptMulti
(
signMessageDialog
,
(
message
)
=>
{
this
.
settings
.
signMessage
(
message
,
account
,
passphrase
,
(
err
,
msgHash
,
signedData
)
=>
{
this
.
blockchain
.
signMessage
(
message
,
account
,
passphrase
,
(
err
,
msgHash
,
signedData
)
=>
{
if
(
err
)
{
return
addTooltip
(
err
)
}
...
...
@@ -301,7 +301,7 @@ class SettingsUI {
},
false
)
}
if
(
this
.
settings
.
isWeb3Provider
())
{
if
(
this
.
blockchain
.
isWeb3Provider
())
{
return
modalDialogCustom
.
promptPassphrase
(
'Passphrase to sign a message'
,
'Enter your passphrase for this account to sign the message'
,
...
...
@@ -315,7 +315,7 @@ class SettingsUI {
}
updateNetwork
()
{
this
.
settings
.
updateNetwork
((
err
,
{
id
,
name
}
=
{})
=>
{
this
.
blockchain
.
updateNetwork
((
err
,
{
id
,
name
}
=
{})
=>
{
if
(
err
)
{
this
.
netUI
.
innerHTML
=
'can
\'
t detect network '
return
...
...
@@ -331,7 +331,7 @@ class SettingsUI {
this
.
accountListCallId
++
var
callid
=
this
.
accountListCallId
var
txOrigin
=
this
.
el
.
querySelector
(
'#txorigin'
)
this
.
settings
.
getAccounts
((
err
,
accounts
)
=>
{
this
.
blockchain
.
getAccounts
((
err
,
accounts
)
=>
{
if
(
this
.
accountListCallId
>
callid
)
return
this
.
accountListCallId
++
if
(
err
)
{
addTooltip
(
`Cannot get account list:
${
err
}
`
)
}
...
...
src/app/udapp/run-tab.js
View file @
5c8c8255
...
...
@@ -9,7 +9,7 @@ const EventManager = require('../../lib/events')
const
Card
=
require
(
'../ui/card'
)
const
css
=
require
(
'../tabs/styles/run-tab-styles'
)
const
Settings
=
require
(
'../tabs/runTab/model/settings.js'
)
//
const Settings = require('../tabs/runTab/model/settings.js')
const
SettingsUI
=
require
(
'../tabs/runTab/settings.js'
)
const
Recorder
=
require
(
'../tabs/runTab/model/recorder.js'
)
const
RecorderUI
=
require
(
'../tabs/runTab/recorder.js'
)
...
...
@@ -124,8 +124,8 @@ export class RunTab extends LibraryPlugin {
}
renderSettings
(
udapp
)
{
var
settings
=
new
Settings
(
this
.
executionContext
,
udapp
)
this
.
settingsUI
=
new
SettingsUI
(
settings
,
this
.
networkModule
)
// var settings = new Settings(this.blockchain,
this.executionContext, udapp)
this
.
settingsUI
=
new
SettingsUI
(
this
.
blockchain
,
this
.
networkModule
)
this
.
settingsUI
.
event
.
register
(
'clearInstance'
,
()
=>
{
this
.
event
.
trigger
(
'clearInstance'
,
[])
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment