commit
fe34674348
@ -0,0 +1,4 @@ |
||||
{ |
||||
"presets": ["@nrwl/react/babel"], |
||||
"plugins": [] |
||||
} |
@ -0,0 +1,16 @@ |
||||
# This file is used by: |
||||
# 1. autoprefixer to adjust CSS to support the below specified browsers |
||||
# 2. babel preset-env to adjust included polyfills |
||||
# |
||||
# For additional information regarding the format and rule options, please see: |
||||
# https://github.com/browserslist/browserslist#queries |
||||
# |
||||
# If you need to support different browsers in production, you may tweak the list below. |
||||
|
||||
last 1 Chrome version |
||||
last 1 Firefox version |
||||
last 2 Edge major versions |
||||
last 2 Safari major version |
||||
last 2 iOS major versions |
||||
Firefox ESR |
||||
not IE 9-11 # For IE 9-11 support, remove 'not'. |
@ -0,0 +1,248 @@ |
||||
{ |
||||
"rules": { |
||||
"array-callback-return": "warn", |
||||
"dot-location": ["warn", "property"], |
||||
"eqeqeq": ["warn", "smart"], |
||||
"new-parens": "warn", |
||||
"no-caller": "warn", |
||||
"no-cond-assign": ["warn", "except-parens"], |
||||
"no-const-assign": "warn", |
||||
"no-control-regex": "warn", |
||||
"no-delete-var": "warn", |
||||
"no-dupe-args": "warn", |
||||
"no-dupe-keys": "warn", |
||||
"no-duplicate-case": "warn", |
||||
"no-empty-character-class": "warn", |
||||
"no-empty-pattern": "warn", |
||||
"no-eval": "warn", |
||||
"no-ex-assign": "warn", |
||||
"no-extend-native": "warn", |
||||
"no-extra-bind": "warn", |
||||
"no-extra-label": "warn", |
||||
"no-fallthrough": "warn", |
||||
"no-func-assign": "warn", |
||||
"no-implied-eval": "warn", |
||||
"no-invalid-regexp": "warn", |
||||
"no-iterator": "warn", |
||||
"no-label-var": "warn", |
||||
"no-labels": ["warn", { "allowLoop": true, "allowSwitch": false }], |
||||
"no-lone-blocks": "warn", |
||||
"no-loop-func": "warn", |
||||
"no-mixed-operators": [ |
||||
"warn", |
||||
{ |
||||
"groups": [ |
||||
["&", "|", "^", "~", "<<", ">>", ">>>"], |
||||
["==", "!=", "===", "!==", ">", ">=", "<", "<="], |
||||
["&&", "||"], |
||||
["in", "instanceof"] |
||||
], |
||||
"allowSamePrecedence": false |
||||
} |
||||
], |
||||
"no-multi-str": "warn", |
||||
"no-native-reassign": "warn", |
||||
"no-negated-in-lhs": "warn", |
||||
"no-new-func": "warn", |
||||
"no-new-object": "warn", |
||||
"no-new-symbol": "warn", |
||||
"no-new-wrappers": "warn", |
||||
"no-obj-calls": "warn", |
||||
"no-octal": "warn", |
||||
"no-octal-escape": "warn", |
||||
"no-redeclare": "warn", |
||||
"no-regex-spaces": "warn", |
||||
"no-restricted-syntax": ["warn", "WithStatement"], |
||||
"no-script-url": "warn", |
||||
"no-self-assign": "warn", |
||||
"no-self-compare": "warn", |
||||
"no-sequences": "warn", |
||||
"no-shadow-restricted-names": "warn", |
||||
"no-sparse-arrays": "warn", |
||||
"no-template-curly-in-string": "warn", |
||||
"no-this-before-super": "warn", |
||||
"no-throw-literal": "warn", |
||||
"no-restricted-globals": [ |
||||
"error", |
||||
"addEventListener", |
||||
"blur", |
||||
"close", |
||||
"closed", |
||||
"confirm", |
||||
"defaultStatus", |
||||
"defaultstatus", |
||||
"event", |
||||
"external", |
||||
"find", |
||||
"focus", |
||||
"frameElement", |
||||
"frames", |
||||
"history", |
||||
"innerHeight", |
||||
"innerWidth", |
||||
"length", |
||||
"location", |
||||
"locationbar", |
||||
"menubar", |
||||
"moveBy", |
||||
"moveTo", |
||||
"name", |
||||
"onblur", |
||||
"onerror", |
||||
"onfocus", |
||||
"onload", |
||||
"onresize", |
||||
"onunload", |
||||
"open", |
||||
"opener", |
||||
"opera", |
||||
"outerHeight", |
||||
"outerWidth", |
||||
"pageXOffset", |
||||
"pageYOffset", |
||||
"parent", |
||||
"print", |
||||
"removeEventListener", |
||||
"resizeBy", |
||||
"resizeTo", |
||||
"screen", |
||||
"screenLeft", |
||||
"screenTop", |
||||
"screenX", |
||||
"screenY", |
||||
"scroll", |
||||
"scrollbars", |
||||
"scrollBy", |
||||
"scrollTo", |
||||
"scrollX", |
||||
"scrollY", |
||||
"self", |
||||
"status", |
||||
"statusbar", |
||||
"stop", |
||||
"toolbar", |
||||
"top" |
||||
], |
||||
"no-unexpected-multiline": "warn", |
||||
"no-unreachable": "warn", |
||||
"no-unused-expressions": [ |
||||
"error", |
||||
{ |
||||
"allowShortCircuit": true, |
||||
"allowTernary": true, |
||||
"allowTaggedTemplates": true |
||||
} |
||||
], |
||||
"no-unused-labels": "warn", |
||||
"no-useless-computed-key": "warn", |
||||
"no-useless-concat": "warn", |
||||
"no-useless-escape": "warn", |
||||
"no-useless-rename": [ |
||||
"warn", |
||||
{ |
||||
"ignoreDestructuring": false, |
||||
"ignoreImport": false, |
||||
"ignoreExport": false |
||||
} |
||||
], |
||||
"no-with": "warn", |
||||
"no-whitespace-before-property": "warn", |
||||
"react-hooks/exhaustive-deps": "warn", |
||||
"require-yield": "warn", |
||||
"rest-spread-spacing": ["warn", "never"], |
||||
"strict": ["warn", "never"], |
||||
"unicode-bom": ["warn", "never"], |
||||
"use-isnan": "warn", |
||||
"valid-typeof": "warn", |
||||
"no-restricted-properties": [ |
||||
"error", |
||||
{ |
||||
"object": "require", |
||||
"property": "ensure", |
||||
"message": "Please use import() instead. More info: https://facebook.github.io/create-react-app/docs/code-splitting" |
||||
}, |
||||
{ |
||||
"object": "System", |
||||
"property": "import", |
||||
"message": "Please use import() instead. More info: https://facebook.github.io/create-react-app/docs/code-splitting" |
||||
} |
||||
], |
||||
"getter-return": "warn", |
||||
"import/first": "error", |
||||
"import/no-amd": "error", |
||||
"import/no-webpack-loader-syntax": "error", |
||||
"react/forbid-foreign-prop-types": ["warn", { "allowInPropTypes": true }], |
||||
"react/jsx-no-comment-textnodes": "warn", |
||||
"react/jsx-no-duplicate-props": "warn", |
||||
"react/jsx-no-target-blank": "warn", |
||||
"react/jsx-no-undef": "error", |
||||
"react/jsx-pascal-case": ["warn", { "allowAllCaps": true, "ignore": [] }], |
||||
"react/jsx-uses-react": "warn", |
||||
"react/jsx-uses-vars": "warn", |
||||
"react/no-danger-with-children": "warn", |
||||
"react/no-direct-mutation-state": "warn", |
||||
"react/no-is-mounted": "warn", |
||||
"react/no-typos": "error", |
||||
"react/react-in-jsx-scope": "error", |
||||
"react/require-render-return": "error", |
||||
"react/style-prop-object": "warn", |
||||
"react/jsx-no-useless-fragment": "warn", |
||||
"jsx-a11y/accessible-emoji": "warn", |
||||
"jsx-a11y/alt-text": "warn", |
||||
"jsx-a11y/anchor-has-content": "warn", |
||||
"jsx-a11y/anchor-is-valid": [ |
||||
"warn", |
||||
{ "aspects": ["noHref", "invalidHref"] } |
||||
], |
||||
"jsx-a11y/aria-activedescendant-has-tabindex": "warn", |
||||
"jsx-a11y/aria-props": "warn", |
||||
"jsx-a11y/aria-proptypes": "warn", |
||||
"jsx-a11y/aria-role": "warn", |
||||
"jsx-a11y/aria-unsupported-elements": "warn", |
||||
"jsx-a11y/heading-has-content": "warn", |
||||
"jsx-a11y/iframe-has-title": "warn", |
||||
"jsx-a11y/img-redundant-alt": "warn", |
||||
"jsx-a11y/no-access-key": "warn", |
||||
"jsx-a11y/no-distracting-elements": "warn", |
||||
"jsx-a11y/no-redundant-roles": "warn", |
||||
"jsx-a11y/role-has-required-aria-props": "warn", |
||||
"jsx-a11y/role-supports-aria-props": "warn", |
||||
"jsx-a11y/scope": "warn", |
||||
"react-hooks/rules-of-hooks": "error", |
||||
"default-case": "off", |
||||
"no-dupe-class-members": "off", |
||||
"no-undef": "off", |
||||
"@typescript-eslint/consistent-type-assertions": "warn", |
||||
"no-array-constructor": "off", |
||||
"@typescript-eslint/no-array-constructor": "warn", |
||||
"@typescript-eslint/no-namespace": "error", |
||||
"no-use-before-define": "off", |
||||
"@typescript-eslint/no-use-before-define": [ |
||||
"warn", |
||||
{ |
||||
"functions": false, |
||||
"classes": false, |
||||
"variables": false, |
||||
"typedefs": false |
||||
} |
||||
], |
||||
"no-unused-vars": "off", |
||||
"@typescript-eslint/no-unused-vars": [ |
||||
"warn", |
||||
{ "args": "none", "ignoreRestSiblings": true } |
||||
], |
||||
"no-useless-constructor": "off", |
||||
"@typescript-eslint/no-useless-constructor": "warn" |
||||
}, |
||||
"env": { |
||||
"browser": true, |
||||
"commonjs": true, |
||||
"es6": true, |
||||
"jest": true, |
||||
"node": true |
||||
}, |
||||
"settings": { "react": { "version": "detect" } }, |
||||
"plugins": ["import", "jsx-a11y", "react", "react-hooks"], |
||||
"extends": ["../../../../.eslintrc"], |
||||
"ignorePatterns": ["!**/*"] |
||||
} |
@ -0,0 +1,128 @@ |
||||
.app { |
||||
font-family: sans-serif; |
||||
min-width: 300px; |
||||
max-width: 600px; |
||||
margin: 50px auto; |
||||
} |
||||
|
||||
.app .gutter-left { |
||||
margin-left: 9px; |
||||
} |
||||
|
||||
.app .col-span-2 { |
||||
grid-column: span 2; |
||||
} |
||||
|
||||
.app .flex { |
||||
display: flex; |
||||
align-items: center; |
||||
justify-content: center; |
||||
} |
||||
|
||||
.app header { |
||||
background-color: #143055; |
||||
color: white; |
||||
padding: 5px; |
||||
border-radius: 3px; |
||||
} |
||||
|
||||
.app main { |
||||
padding: 0 36px; |
||||
} |
||||
|
||||
.app p { |
||||
text-align: center; |
||||
} |
||||
|
||||
.app h1 { |
||||
text-align: center; |
||||
margin-left: 18px; |
||||
font-size: 24px; |
||||
} |
||||
|
||||
.app h2 { |
||||
text-align: center; |
||||
font-size: 20px; |
||||
margin: 40px 0 10px 0; |
||||
} |
||||
|
||||
.app .resources { |
||||
text-align: center; |
||||
list-style: none; |
||||
padding: 0; |
||||
display: grid; |
||||
grid-gap: 9px; |
||||
grid-template-columns: 1fr 1fr; |
||||
} |
||||
|
||||
.app .resource { |
||||
color: #0094ba; |
||||
height: 36px; |
||||
background-color: rgba(0, 0, 0, 0); |
||||
border: 1px solid rgba(0, 0, 0, 0.12); |
||||
border-radius: 4px; |
||||
padding: 3px 9px; |
||||
text-decoration: none; |
||||
} |
||||
|
||||
.app .resource:hover { |
||||
background-color: rgba(68, 138, 255, 0.04); |
||||
} |
||||
|
||||
.app pre { |
||||
padding: 9px; |
||||
border-radius: 4px; |
||||
background-color: black; |
||||
color: #eee; |
||||
} |
||||
|
||||
.app details { |
||||
border-radius: 4px; |
||||
color: #333; |
||||
background-color: rgba(0, 0, 0, 0); |
||||
border: 1px solid rgba(0, 0, 0, 0.12); |
||||
padding: 3px 9px; |
||||
margin-bottom: 9px; |
||||
} |
||||
|
||||
.app summary { |
||||
outline: none; |
||||
height: 36px; |
||||
line-height: 36px; |
||||
} |
||||
|
||||
.app .github-star-container { |
||||
margin-top: 12px; |
||||
line-height: 20px; |
||||
} |
||||
|
||||
.app .github-star-container a { |
||||
display: flex; |
||||
align-items: center; |
||||
text-decoration: none; |
||||
color: #333; |
||||
} |
||||
|
||||
.app .github-star-badge { |
||||
color: #24292e; |
||||
display: flex; |
||||
align-items: center; |
||||
font-size: 12px; |
||||
padding: 3px 10px; |
||||
border: 1px solid rgba(27, 31, 35, 0.2); |
||||
border-radius: 3px; |
||||
background-image: linear-gradient(-180deg, #fafbfc, #eff3f6 90%); |
||||
margin-left: 4px; |
||||
font-weight: 600; |
||||
} |
||||
|
||||
.app .github-star-badge:hover { |
||||
background-image: linear-gradient(-180deg, #f0f3f6, #e6ebf1 90%); |
||||
border-color: rgba(27, 31, 35, 0.35); |
||||
background-position: -0.5em; |
||||
} |
||||
.app .github-star-badge .material-icons { |
||||
height: 16px; |
||||
width: 16px; |
||||
margin-right: 4px; |
||||
} |
@ -0,0 +1,39 @@ |
||||
import React, { useEffect, useState } from 'react' |
||||
import { PluginClient } from '@remixproject/plugin' |
||||
import { createClient } from '@remixproject/plugin-webview' |
||||
|
||||
import './app.css' |
||||
|
||||
import { ReactComponent as Logo } from './logo.svg' |
||||
|
||||
export const App = () => { |
||||
const [remixClient, setRemixClient] = useState(null) |
||||
|
||||
useEffect(() => { |
||||
(async () => { |
||||
const client = createClient(new PluginClient()) |
||||
|
||||
await client.onload() |
||||
console.log('Local plugin loaded') |
||||
setRemixClient(client) |
||||
})() |
||||
}, []) |
||||
|
||||
const handleClick = () => { |
||||
remixClient.call('manager', 'activatePlugin', 'LearnEth') |
||||
} |
||||
|
||||
return ( |
||||
<div className="app"> |
||||
<header className="flex"> |
||||
<Logo width="75" height="75" /> |
||||
<h1>Welcome to local-plugin!</h1> |
||||
</header> |
||||
<main> |
||||
<button data-id="btnActivateRemixd" onClick={handleClick}>Activate Learneth</button> |
||||
</main> |
||||
</div> |
||||
) |
||||
} |
||||
|
||||
export default App |
After Width: | Height: | Size: 2.9 KiB |
After Width: | Height: | Size: 347 B |
@ -0,0 +1,3 @@ |
||||
export const environment = { |
||||
production: true |
||||
} |
@ -0,0 +1,6 @@ |
||||
// This file can be replaced during build by using the `fileReplacements` array.
|
||||
// When building for production, this file is replaced with `environment.prod.ts`.
|
||||
|
||||
export const environment = { |
||||
production: false |
||||
} |
After Width: | Height: | Size: 15 KiB |
@ -0,0 +1,14 @@ |
||||
<!DOCTYPE html> |
||||
<html lang="en"> |
||||
<head> |
||||
<meta charset="utf-8" /> |
||||
<title>LocalPlugin</title> |
||||
<base href="/" /> |
||||
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" /> |
||||
<link rel="icon" type="image/x-icon" href="favicon.ico" /> |
||||
</head> |
||||
<body> |
||||
<div id="root"></div> |
||||
</body> |
||||
</html> |
@ -0,0 +1,11 @@ |
||||
import React from 'react' |
||||
import ReactDOM from 'react-dom' |
||||
|
||||
import App from './app/app' |
||||
|
||||
ReactDOM.render( |
||||
<React.StrictMode> |
||||
<App /> |
||||
</React.StrictMode>, |
||||
document.getElementById('root') |
||||
) |
@ -0,0 +1,7 @@ |
||||
/** |
||||
* Polyfill stable language features. These imports will be optimized by `@babel/preset-env`. |
||||
* |
||||
* See: https://github.com/zloirock/core-js#babel
|
||||
*/ |
||||
import 'core-js/stable' |
||||
import 'regenerator-runtime/runtime' |
@ -0,0 +1 @@ |
||||
/* You can add global styles to this file, and also import other style files */ |
@ -0,0 +1,13 @@ |
||||
{ |
||||
"extends": "./tsconfig.json", |
||||
"compilerOptions": { |
||||
"outDir": "../../../../dist/out-tsc", |
||||
"types": ["node"] |
||||
}, |
||||
"files": [ |
||||
"../../../../node_modules/@nrwl/react/typings/cssmodule.d.ts", |
||||
"../../../../node_modules/@nrwl/react/typings/image.d.ts" |
||||
], |
||||
"exclude": ["**/*.spec.ts", "**/*.spec.tsx"], |
||||
"include": ["**/*.js", "**/*.jsx", "**/*.ts", "**/*.tsx"] |
||||
} |
@ -0,0 +1,16 @@ |
||||
{ |
||||
"extends": "../../../../tsconfig.base.json", |
||||
"compilerOptions": { |
||||
"jsx": "react", |
||||
"allowJs": true, |
||||
"esModuleInterop": true, |
||||
"allowSyntheticDefaultImports": true |
||||
}, |
||||
"files": [], |
||||
"include": [], |
||||
"references": [ |
||||
{ |
||||
"path": "./tsconfig.app.json" |
||||
} |
||||
] |
||||
} |
@ -0,0 +1,21 @@ |
||||
#!/usr/bin/env bash |
||||
|
||||
set -e |
||||
|
||||
BUILD_ID=${CIRCLE_BUILD_NUM:-${TRAVIS_JOB_NUMBER}} |
||||
echo "$BUILD_ID" |
||||
TEST_EXITCODE=0 |
||||
|
||||
npm run serve & |
||||
npx nx serve remix-ide-e2e-src-local-plugin & |
||||
|
||||
sleep 5 |
||||
|
||||
npm run build:e2e |
||||
npm run nightwatch_local_pluginManager || TEST_EXITCODE=1 |
||||
|
||||
echo "$TEST_EXITCODE" |
||||
if [ "$TEST_EXITCODE" -eq 1 ] |
||||
then |
||||
exit 1 |
||||
fi |
@ -1,76 +0,0 @@ |
||||
'use strict' |
||||
import { Transaction as Tx } from '@ethereumjs/tx' |
||||
import { Block } from '@ethereumjs/block' |
||||
import { BN, bufferToHex, Address } from 'ethereumjs-util' |
||||
import { vm as remixlibVM } from '@remix-project/remix-lib' |
||||
import VM from '@ethereumjs/vm' |
||||
import Common from '@ethereumjs/common' |
||||
|
||||
export function sendTx (vm, from, to, value, data, cb?) { |
||||
cb = cb || (() => {}) |
||||
return new Promise ((resolve, reject) => { |
||||
var tx = new Tx({ |
||||
nonce: new BN(from.nonce++), |
||||
// gasPrice: new BN(1),
|
||||
gasLimit: new BN(3000000, 10), |
||||
to: to, |
||||
value: new BN(value, 10), |
||||
data: Buffer.from(data, 'hex') |
||||
}) |
||||
tx = tx.sign(from.privateKey) |
||||
|
||||
var block = Block.fromBlockData({ |
||||
header: { |
||||
timestamp: new Date().getTime() / 1000 | 0, |
||||
number: 0 |
||||
} |
||||
}) // still using default common
|
||||
|
||||
try { |
||||
vm.runTx({block: block, tx: tx, skipBalance: true, skipNonce: true}).then(function (result) { |
||||
setTimeout(() => { |
||||
const hash = bufferToHex(tx.hash()) |
||||
cb(null, { hash, result }) |
||||
resolve({ hash, result }) |
||||
}, 500) |
||||
}).catch((error) => { |
||||
console.error(error) |
||||
cb(error) |
||||
reject(error) |
||||
}) |
||||
} catch (e) { |
||||
console.error(e) |
||||
} |
||||
}) |
||||
} |
||||
|
||||
async function createVm (hardfork) { |
||||
const common = new Common({ chain: 'mainnet', hardfork }) |
||||
const vm = new VM({ common })
|
||||
await vm.init() |
||||
return { vm, stateManager: vm.stateManager } |
||||
} |
||||
|
||||
/* |
||||
Init VM / Send Transaction |
||||
*/ |
||||
export async function initVM (st, privateKey) { |
||||
var VM = await createVm('berlin') |
||||
const vm = VM.vm |
||||
|
||||
var address = Address.fromPrivateKey(privateKey) |
||||
|
||||
try { |
||||
let account = await vm.stateManager.getAccount(address) |
||||
account.balance = new BN('f00000000000000001', 16) |
||||
await vm.stateManager.putAccount(address, account) |
||||
} catch (error) { |
||||
console.log(error) |
||||
} |
||||
|
||||
var web3Provider = new remixlibVM.Web3VMProvider() |
||||
web3Provider.setVM(vm) |
||||
vm.web3 = web3Provider |
||||
return vm |
||||
} |
||||
|
@ -1,63 +1,44 @@ |
||||
'use strict' |
||||
import { Block } from '@ethereumjs/block' |
||||
import { Transaction } from '@ethereumjs/tx' |
||||
import VM from '@ethereumjs/vm' |
||||
import { rlp, keccak, bufferToHex } from 'ethereumjs-util' |
||||
import { extendWeb3 } from '../src/init'
|
||||
var utileth = require('ethereumjs-util') |
||||
var Tx = require('@ethereumjs/tx').Transaction |
||||
var BN = require('ethereumjs-util').BN |
||||
var remixLib = require('@remix-project/remix-lib') |
||||
const { Provider, extend } = require('@remix-project/remix-simulator') |
||||
const Web3 = require('web3') |
||||
|
||||
function sendTx (vm, from, to, value, data, cb) { |
||||
var tx = new Tx({ |
||||
nonce: new BN(from.nonce++), |
||||
// gasPrice: new BN(1),
|
||||
gasLimit: new BN(3000000, 10), |
||||
to: to, |
||||
value: new BN(value, 10), |
||||
data: Buffer.from(data, 'hex') |
||||
}) |
||||
tx = tx.sign(from.privateKey) |
||||
|
||||
var block = Block.fromBlockData({ |
||||
header: { |
||||
timestamp: new Date().getTime() / 1000 | 0, |
||||
number: 0 |
||||
} |
||||
}) // still using default common
|
||||
vm.runTx({block: block, tx: tx, skipBalance: true, skipNonce: true}).then(function (result) { |
||||
setTimeout(() => { |
||||
cb(null, utileth.bufferToHex(tx.hash())) |
||||
}, 500) |
||||
}).catch((error) => { |
||||
console.error(error) |
||||
cb(error) |
||||
}) |
||||
async function getWeb3 () { |
||||
const remixSimulatorProvider = new Provider({ fork: 'berlin' }) |
||||
await remixSimulatorProvider.init() |
||||
await remixSimulatorProvider.Accounts.resetAccounts() |
||||
const web3 = new Web3(remixSimulatorProvider) |
||||
extendWeb3(web3) |
||||
return web3 |
||||
} |
||||
|
||||
/* |
||||
Init VM / Send Transaction |
||||
*/ |
||||
async function initVM (privateKey) { |
||||
var address = utileth.Address.fromPrivateKey(privateKey) |
||||
var vm = new VM({ |
||||
activatePrecompiles: true |
||||
}) |
||||
await vm.init() |
||||
|
||||
async function sendTx (web3, from, to, value, data, cb) { |
||||
try { |
||||
let account = await vm.stateManager.getAccount(address) |
||||
account.balance = new BN('f00000000000000001', 16) |
||||
await vm.stateManager.putAccount(address, account) |
||||
} catch (error) { |
||||
console.log(error) |
||||
cb = cb || (() => {}) |
||||
const receipt = await web3.eth.sendTransaction({ |
||||
from: utileth.Address.fromPrivateKey(from.privateKey).toString('hex'), |
||||
to, |
||||
value, |
||||
data, |
||||
gas: 7000000 |
||||
}) |
||||
cb(null, receipt.transactionHash) |
||||
return receipt.transactionHash |
||||
} catch (e) { |
||||
cb(e) |
||||
} |
||||
|
||||
var web3Provider = new remixLib.vm.Web3VMProvider() |
||||
web3Provider.setVM(vm) |
||||
vm.web3 = web3Provider |
||||
return vm |
||||
} |
||||
|
||||
module.exports = { |
||||
sendTx: sendTx, |
||||
initVM: initVM |
||||
sendTx, |
||||
getWeb3 |
||||
} |
||||
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in new issue