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' |
'use strict' |
||||||
import { Block } from '@ethereumjs/block' |
import { Block } from '@ethereumjs/block' |
||||||
|
import { Transaction } from '@ethereumjs/tx' |
||||||
import VM from '@ethereumjs/vm' |
import VM from '@ethereumjs/vm' |
||||||
|
import { rlp, keccak, bufferToHex } from 'ethereumjs-util' |
||||||
|
import { extendWeb3 } from '../src/init'
|
||||||
var utileth = require('ethereumjs-util') |
var utileth = require('ethereumjs-util') |
||||||
var Tx = require('@ethereumjs/tx').Transaction |
var Tx = require('@ethereumjs/tx').Transaction |
||||||
var BN = require('ethereumjs-util').BN |
var BN = require('ethereumjs-util').BN |
||||||
var remixLib = require('@remix-project/remix-lib') |
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({ |
async function getWeb3 () { |
||||||
header: { |
const remixSimulatorProvider = new Provider({ fork: 'berlin' }) |
||||||
timestamp: new Date().getTime() / 1000 | 0, |
await remixSimulatorProvider.init() |
||||||
number: 0 |
await remixSimulatorProvider.Accounts.resetAccounts() |
||||||
} |
const web3 = new Web3(remixSimulatorProvider) |
||||||
}) // still using default common
|
extendWeb3(web3) |
||||||
vm.runTx({block: block, tx: tx, skipBalance: true, skipNonce: true}).then(function (result) { |
return web3 |
||||||
setTimeout(() => { |
|
||||||
cb(null, utileth.bufferToHex(tx.hash())) |
|
||||||
}, 500) |
|
||||||
}).catch((error) => { |
|
||||||
console.error(error) |
|
||||||
cb(error) |
|
||||||
}) |
|
||||||
} |
} |
||||||
|
|
||||||
/* |
async function sendTx (web3, from, to, value, data, cb) { |
||||||
Init VM / Send Transaction |
|
||||||
*/ |
|
||||||
async function initVM (privateKey) { |
|
||||||
var address = utileth.Address.fromPrivateKey(privateKey) |
|
||||||
var vm = new VM({ |
|
||||||
activatePrecompiles: true |
|
||||||
}) |
|
||||||
await vm.init() |
|
||||||
|
|
||||||
try { |
try { |
||||||
let account = await vm.stateManager.getAccount(address) |
cb = cb || (() => {}) |
||||||
account.balance = new BN('f00000000000000001', 16) |
const receipt = await web3.eth.sendTransaction({ |
||||||
await vm.stateManager.putAccount(address, account) |
from: utileth.Address.fromPrivateKey(from.privateKey).toString('hex'), |
||||||
} catch (error) { |
to, |
||||||
console.log(error) |
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 = { |
module.exports = { |
||||||
sendTx: sendTx, |
sendTx, |
||||||
initVM: initVM |
getWeb3 |
||||||
} |
} |
||||||
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in new issue