diff options
Diffstat (limited to 'packages/dev-tools-pages/ts/pages')
-rw-r--r-- | packages/dev-tools-pages/ts/pages/compiler.tsx | 182 | ||||
-rw-r--r-- | packages/dev-tools-pages/ts/pages/coverage.tsx | 179 | ||||
-rw-r--r-- | packages/dev-tools-pages/ts/pages/profiler.tsx | 176 | ||||
-rw-r--r-- | packages/dev-tools-pages/ts/pages/trace.tsx | 147 |
4 files changed, 0 insertions, 684 deletions
diff --git a/packages/dev-tools-pages/ts/pages/compiler.tsx b/packages/dev-tools-pages/ts/pages/compiler.tsx deleted file mode 100644 index 407646add..000000000 --- a/packages/dev-tools-pages/ts/pages/compiler.tsx +++ /dev/null @@ -1,182 +0,0 @@ -import * as React from 'react'; -import { hydrate, render } from 'react-dom'; -import * as Loadable from 'react-loadable'; - -import { context } from 'ts/context/compiler'; - -import { Base } from 'ts/components/base'; -import { Breakout } from 'ts/components/breakout'; -import { CallToAction } from 'ts/components/call_to_action'; -import { Code } from 'ts/components/code'; -import { Compiler as CompilerComponent } from 'ts/components/compiler'; -import { Content } from 'ts/components/content'; -import { ContentBlock } from 'ts/components/content-block'; -import { Hero } from 'ts/components/hero'; -import { InlineCode } from 'ts/components/inline-code'; -import { Lead } from 'ts/components/typography'; - -const Animation = Loadable({ - loader: () => System.import(/* webpackChunkName: 'compiler-animation' */ 'ts/components/animations/compiler'), - loading: () => <div />, - delay: 1000, - render(loadable: { CompilerAnimation: any }): React.ReactNode { - const Component = loadable.CompilerAnimation; - return <Component />; - }, -}); - -const SOLIDITY_INPUT_FORMAT_DOCS = - 'https://solidity.readthedocs.io/en/v0.4.24/using-the-compiler.html#compiler-input-and-output-json-description'; - -const Compiler: React.StatelessComponent<{}> = () => ( - <Base context={context}> - <Hero> - <Animation /> - </Hero> - <CompilerComponent /> - <Content> - <ContentBlock main={true} title="Get started" /> - <ContentBlock title="Install"> - <Breakout> - <Code canCopy={true}>npm install @0x/sol-compiler --g</Code> - </Breakout> - </ContentBlock> - - <ContentBlock title="Run"> - <Breakout> - <Code canCopy={true}>cd /your_project_dir && sol-compiler</Code> - </Breakout> - </ContentBlock> - - <ContentBlock title="Configure"> - <p> - Configure via a <InlineCode>compiler.json</InlineCode> file. - </p> - <Breakout> - <Code canCopy={true}>mkdir compiler.json</Code> - </Breakout> - <p>Example of settings:</p> - <Breakout> - <Code language="json" canCopy={true}> - {`{ - "contractsDir": "contracts", - "artifactsDir": "artifacts", - "contracts": "*", - "compilerSettings": { - "optimizer": { "enabled": false }, - "outputSelection": { - "*": { - "*": ["abi", "evm.bytecode.object"] - } - } - } -}`} - </Code> - </Breakout> - </ContentBlock> - </Content> - <Content dark={true}> - <ContentBlock main={true} title="Artifacts"> - <Lead> - Sol compiler uses{' '} - <a href={SOLIDITY_INPUT_FORMAT_DOCS} target="_blank"> - Solidity standard JSON input format - </a>{' '} - to specify what to include in the generated artifacts. This way, you have complete flexibility on - what is included. - </Lead> - </ContentBlock> - - <ContentBlock title="Production"> - <p> - In production, you want to optimize for a small bundle size, so your compiler.json config would - instruct sol-compiler to only output the contract ABI. - </p> - <Breakout> - <Code isLight={true} language="json" isEtc={true}> - {`{ - "compilerSettings": { - "outputSelection": { - "*": { - "*": ["abi"] - } - } - } -}`} - </Code> - </Breakout> - <Breakout> - <Code isLight={true} language="json" isEtc={true}> - {`{ - "compilerOutput": { - "abi": [...], - }, -}`} - </Code> - </Breakout> - </ContentBlock> - <ContentBlock title="Development"> - <p> - In development, you need to use profiler and other dev tools that require more information from the - artifact. To do this, you can specify that the artifact also contain the bytecode, deployed bytecode - and source maps. - </p> - <Breakout> - <Code isLight={true} language="json" isEtc={true}> - {`{ - "compilerSettings": { - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode.object", - "evm.bytecode.sourceMap", - "evm.deployedBytecode.object", - "evm.deployedBytecode.sourceMap" - ] - } - } - } -}`} - </Code> - </Breakout> - - <Breakout> - <Code isLight={true} language="json" isEtc={true}> - {`{ - "compilerOutput": { - "abi": [...], - "evm": { - "bytecode": { - "object": "0xdeadbeef", - "sourceMap": "26:480:..." - }, - "deployedBytecode": { - "object": "0xdeadbeef", - "sourceMap": "26:480:0..." - } - } - } - "sources": { - "Migrations.sol": { - "id": 0 - } - }, -}`} - </Code> - </Breakout> - </ContentBlock> - </Content> - <div style={{ paddingTop: '5rem' }}> - <CallToAction /> - </div> - </Base> -); - -const root = document.getElementById('app'); - -if (root.hasChildNodes()) { - hydrate(<Compiler />, root); -} else { - render(<Compiler />, root); -} diff --git a/packages/dev-tools-pages/ts/pages/coverage.tsx b/packages/dev-tools-pages/ts/pages/coverage.tsx deleted file mode 100644 index 575891f3b..000000000 --- a/packages/dev-tools-pages/ts/pages/coverage.tsx +++ /dev/null @@ -1,179 +0,0 @@ -import * as React from 'react'; -import { hydrate, render } from 'react-dom'; -import * as Loadable from 'react-loadable'; - -import { context } from 'ts/context/coverage'; - -import { Base } from 'ts/components/base'; -import { Breakout } from 'ts/components/breakout'; -import { CallToAction } from 'ts/components/call_to_action'; -import { Code } from 'ts/components/code'; -import { Content } from 'ts/components/content'; -import { ContentBlock } from 'ts/components/content-block'; -import { Hero } from 'ts/components/hero'; -import { InlineCode } from 'ts/components/inline-code'; -import { Intro, IntroAside, IntroLead } from 'ts/components/intro'; -import { List, ListItem } from 'ts/components/list'; -import { TabBlock, Tabs } from 'ts/components/tabs'; - -const Animation = Loadable({ - loader: () => System.import(/* webpackChunkName: 'cov-animation' */ 'ts/components/animations/cov'), - loading: () => <div />, - delay: 1000, - render(loadable: { CovAnimation: any }): React.ReactNode { - const Component = loadable.CovAnimation; - return <Component />; - }, -}); - -const Coverage: React.StatelessComponent<{}> = () => ( - <Base context={context}> - <Hero> - <Animation /> - </Hero> - <Intro> - <IntroLead title="Measure your tests"> - <p> - When it comes to writing secure smart contracts, testing is one of the most important steps in the - process. In order to quantify the robustness of your Solidity testing suite, you need to measure its - code coverage. - </p> - </IntroLead> - <IntroAside> - <Code - language="javascript" - isDiff={true} - gutterLength={2} - gutter={[4, undefined, 4, 4, 4, undefined, 4, 2, 2, 2]} - > - {`+function executeTransaction(uint transactionId) - public -+ notExecuted(transactionId) -+ fullyConfirmed(transactionId) -+ pastTimeLock(transactionId) -{ -+ Transaction storage tx = transactions[transactionId] -+ tx.executed = true -+ if (tx.destination.call.value(tx.value)(tx.data)) -+ Execution(transactionId) - else { -- ExecutionFailure(transactionId) -- tx.executed = false - } -}`} - </Code> - </IntroAside> - </Intro> - - <Content> - <ContentBlock main={true} title="Get started" /> - <ContentBlock title="Prerequisites"> - <List> - <ListItem> - Use{' '} - <a href="https://github.com/ethereum/go-ethereum" target="_blank"> - Geth - </a>{' '} - as a backing node. We recommend using our{' '} - <a href="https://hub.docker.com/r/0xorg/devnet" target="_blank"> - Devnet Docker container - </a>{' '} - which sets up a Geth node for testing purposes.{' '} - <a href="https://github.com/0xProject/0x-monorepo/issues/1520" target="_blank"> - Ganache support is a work in progress. - </a> - </ListItem> - <ListItem> - Understand and use{' '} - <a href="https://github.com/MetaMask/provider-engine" target="_blank"> - web3-provider-engine - </a> - . - </ListItem> - </List> - </ContentBlock> - <ContentBlock title="Installation"> - <Breakout> - <Code canCopy={true}>npm install @0x/sol-coverage --save</Code> - </Breakout> - - <p> - Sol-coverage is a subprovider that needs to be prepended to your{' '} - <a href="https://github.com/MetaMask/provider-engine" target="_blank"> - provider engine - </a> - . Depending on your project setup, you will need to use a specific ArtifactAdapter. Sol-coverage - ships with the <InlineCode>SolCompilerArtifactAdapter</InlineCode> for use with{' '} - <a href="https://sol-compiler.com" target="_blank"> - Sol-compiler - </a>{' '} - and <InlineCode>TruffleArtifactAdapter</InlineCode> for use with the{' '} - <a href="https://truffleframework.com/truffle" target="_blank"> - Truffle framework - </a>{' '} - (Also see our{' '} - <a href="https://github.com/0xProject/dev-tools-truffle-example" target="_blank"> - Truffle example project - </a>{' '} - for a complete walk-through). You can also write your own and support any artifact format. - </p> - - <Tabs> - <TabBlock title="Sol-compiler"> - <Code language="javascript" canCopy={true}> - {`import { SolCompilerArtifactAdapter } from '@0x/sol-trace'; - -// Both artifactsDir and contractsDir are optional and will be fetched from compiler.json if not passed in -const artifactAdapter = new SolCompilerArtifactAdapter(artifactsDir, contractsDir);`} - </Code> - </TabBlock> - <TabBlock title="Truffle"> - <Code language="javascript" canCopy={true}> - {`import { TruffleArtifactAdapter } from '@0x/sol-trace'; - -const projectRoot = '.'; -const solcVersion = '0.5.0'; -const artifactAdapter = new TruffleArtifactAdapter(projectRoot, solcVersion);`} - </Code> - </TabBlock> - <TabBlock title="Custom"> - <Code language="javascript" canCopy={true}> - {`import { AbstractArtifactAdapter } from '@0x/sol-trace'; - -class YourCustomArtifactsAdapter extends AbstractArtifactAdapter {...}; -const artifactAdapter = new YourCustomArtifactsAdapter(...);`} - </Code> - </TabBlock> - </Tabs> - <p> - Now that we have an <InlineCode>artifactAdapter</InlineCode>, we can create a{' '} - <InlineCode>CoverageSubprovider</InlineCode> and append it to our provider engine. - </p> - - <Breakout> - <Code language="javascript" canCopy={true}> - {`import { ProviderEngine, RpcSubprovider } from 'web3-provider-engine'; -import { CoverageSubprovider } from '@0x/sol-coverage'; - -const defaultFromAddress = "..."; // Some ethereum address with test funds -const coverageSubprovider = new CoverageSubprovider(artifactAdapter, defaultFromAddress); - -const providerEngine = new ProviderEngine(); -providerEngine.addProvider(coverageSubprovider); -providerEngine.addProvider(new RpcSubprovider({rpcUrl: 'http://localhost:8545'})); -providerEngine.start();`} - </Code> - </Breakout> - </ContentBlock> - </Content> - <CallToAction /> - </Base> -); - -const root = document.getElementById('app'); - -if (root.hasChildNodes()) { - hydrate(<Coverage />, root); -} else { - render(<Coverage />, root); -} diff --git a/packages/dev-tools-pages/ts/pages/profiler.tsx b/packages/dev-tools-pages/ts/pages/profiler.tsx deleted file mode 100644 index 0bc4efa45..000000000 --- a/packages/dev-tools-pages/ts/pages/profiler.tsx +++ /dev/null @@ -1,176 +0,0 @@ -import * as React from 'react'; -import { hydrate, render } from 'react-dom'; -import * as Loadable from 'react-loadable'; - -import { context } from 'ts/context/profiler'; - -import { Base } from 'ts/components/base'; -import { Breakout } from 'ts/components/breakout'; -import { CallToAction } from 'ts/components/call_to_action'; -import { Code } from 'ts/components/code'; -import { Content } from 'ts/components/content'; -import { ContentBlock } from 'ts/components/content-block'; -import { Hero } from 'ts/components/hero'; -import { InlineCode } from 'ts/components/inline-code'; -import { Intro, IntroAside, IntroLead } from 'ts/components/intro'; -import { List, ListItem } from 'ts/components/list'; -import { TabBlock, Tabs } from 'ts/components/tabs'; - -const Animation = Loadable({ - loader: () => System.import(/* webpackChunkName: 'profiler-animation' */ 'ts/components/animations/profiler'), - loading: () => <div />, - delay: 1000, - render(loadable: { ProfilerAnimation: any }): React.ReactNode { - const Component = loadable.ProfilerAnimation; - return <Component />; - }, -}); - -const Profiler: React.StatelessComponent<{}> = () => ( - <Base context={context}> - <Hero> - <Animation /> - </Hero> - <Intro> - <IntroLead title="Outline gas usage"> - <p> - Sol-profiler gathers line-by-line gas usage for any transaction submitted through your provider. - This will help you find unexpected inefficiencies in parts of your smart contract, and take a - data-driven approach to optimizing it. - </p> - </IntroLead> - <IntroAside> - <Code - language="javascript" - isDiff={true} - gutterLength={6} - gutter={[15, 15, undefined, 21747, 20303, 1435]} - > - {`+function() public payable { -+ deposit(); -} -+function deposit() public payabble { -+ balanceOf[msg.sender] += msg.value; -+ Deposit(msg.sender, msg.value); -} --function withdraw(uint wad) public { -- require(balanceOf[msg.sender] >= wad); -- balanceOf[msg.sender] -= wad; -- msg.sender.transfer(wad); -- Withdrawal(msg.sender, wad); -}`} - </Code> - </IntroAside> - </Intro> - <Content> - <ContentBlock main={true} title="Get started" /> - <ContentBlock title="Prerequisites"> - <List> - <ListItem> - Use{' '} - <a href="https://github.com/ethereum/go-ethereum" target="_blank"> - Geth - </a>{' '} - as a backing node. We recommend using our{' '} - <a href="https://hub.docker.com/r/0xorg/devnet" target="_blank"> - Devnet Docker container - </a>{' '} - which sets up a Geth node for testing purposes.{' '} - <a href="https://github.com/0xProject/0x-monorepo/issues/1520" target="_blank"> - Ganache support is a work in progress. - </a> - </ListItem> - <ListItem> - Understand and use{' '} - <a href="https://github.com/MetaMask/provider-engine" target="_blank"> - web3-provider-engine - </a> - . - </ListItem> - </List> - </ContentBlock> - <ContentBlock title="Installation"> - <Breakout> - <Code canCopy={true}>npm install @0x/sol-trace --save</Code> - </Breakout> - - <p> - Sol-trace is a subprovider that needs to be prepended to your{' '} - <a href="https://github.com/MetaMask/provider-engine" target="_blank"> - provider engine - </a> - . Depending on your project setup, you will need to use a specific ArtifactAdapter. Sol-trace ships - with the <InlineCode>SolCompilerArtifactAdapter</InlineCode> for use with{' '} - <a href="https://sol-compiler.com" target="_blank"> - Sol-compiler - </a>{' '} - and <InlineCode>TruffleArtifactAdapter</InlineCode> for use with the{' '} - <a href="https://truffleframework.com/truffle" target="_blank"> - Truffle framework - </a>{' '} - (Also see our{' '} - <a href="https://github.com/0xProject/dev-tools-truffle-example" target="_blank"> - Truffle example project - </a>{' '} - for a complete walk-through). You can also write your own and support any artifact format. - </p> - - <Tabs> - <TabBlock title="Sol-compiler"> - <Code language="javascript" canCopy={true}> - {`import { SolCompilerArtifactAdapter } from '@0x/sol-trace'; - -// Both artifactsDir and contractsDir are optional and will be fetched from compiler.json if not passed in -const artifactAdapter = new SolCompilerArtifactAdapter(artifactsDir, contractsDir);`} - </Code> - </TabBlock> - <TabBlock title="Truffle"> - <Code language="javascript" canCopy={true}> - {`import { TruffleArtifactAdapter } from '@0x/sol-trace'; - -const projectRoot = '.'; -const solcVersion = '0.5.0'; -const artifactAdapter = new TruffleArtifactAdapter(projectRoot, solcVersion);`} - </Code> - </TabBlock> - <TabBlock title="Custom"> - <Code language="javascript" canCopy={true}> - {`import { AbstractArtifactAdapter } from '@0x/sol-trace'; - -class YourCustomArtifactsAdapter extends AbstractArtifactAdapter {...}; -const artifactAdapter = new YourCustomArtifactsAdapter(...);`} - </Code> - </TabBlock> - </Tabs> - <p> - Now that we have an <InlineCode>artifactAdapter</InlineCode>, we can create a{' '} - <InlineCode>ProfilerSubprovider</InlineCode> and append it to our provider engine. - </p> - - <Breakout> - <Code language="javascript" canCopy={true}> - {`import { ProviderEngine, RpcSubprovider } from 'web3-provider-engine'; -import { ProfilerSubprovider } from '@0x/sol-profiler'; - -const defaultFromAddress = "..."; // Some ethereum address with test funds -const profilerSubprovider = new ProfilerSubprovider(artifactAdapter, defaultFromAddress); - -const providerEngine = new ProviderEngine(); -providerEngine.addProvider(profilerSubprovider); -providerEngine.addProvider(new RpcSubprovider({rpcUrl: 'http://localhost:8545'})); -providerEngine.start();`} - </Code> - </Breakout> - </ContentBlock> - </Content> - <CallToAction /> - </Base> -); - -const root = document.getElementById('app'); - -if (root.hasChildNodes()) { - hydrate(<Profiler />, root); -} else { - render(<Profiler />, root); -} diff --git a/packages/dev-tools-pages/ts/pages/trace.tsx b/packages/dev-tools-pages/ts/pages/trace.tsx deleted file mode 100644 index cd6180fb9..000000000 --- a/packages/dev-tools-pages/ts/pages/trace.tsx +++ /dev/null @@ -1,147 +0,0 @@ -import * as React from 'react'; -import { hydrate, render } from 'react-dom'; -import * as Loadable from 'react-loadable'; - -import { context } from 'ts/context/trace'; - -import { Base } from 'ts/components/base'; -import { Breakout } from 'ts/components/breakout'; -import { CallToAction } from 'ts/components/call_to_action'; -import { Code } from 'ts/components/code'; -import { Content } from 'ts/components/content'; -import { ContentBlock } from 'ts/components/content-block'; -import { Hero } from 'ts/components/hero'; -import { InlineCode } from 'ts/components/inline-code'; -import { List, ListItem } from 'ts/components/list'; -import { TabBlock, Tabs } from 'ts/components/tabs'; -import { Trace as TraceComponent } from 'ts/components/trace'; - -const Animation = Loadable({ - loader: () => System.import(/* webpackChunkName: 'trace-animation' */ 'ts/components/animations/trace'), - loading: () => <div />, - delay: 1000, - render(loadable: { TraceAnimation: any }): React.ReactNode { - const Component = loadable.TraceAnimation; - return <Component />; - }, -}); - -const Trace: React.StatelessComponent<{}> = () => ( - <Base context={context}> - <Hero> - <Animation /> - </Hero> - <TraceComponent /> - <Content> - <ContentBlock main={true} title="Get started" /> - <ContentBlock title="Prerequisites"> - <List> - <ListItem> - Use{' '} - <a href="https://github.com/ethereum/go-ethereum" target="_blank"> - Geth - </a>{' '} - as a backing node. We recommend using our{' '} - <a href="https://hub.docker.com/r/0xorg/devnet" target="_blank"> - Devnet Docker container - </a>{' '} - which sets up a Geth node for testing purposes.{' '} - <a href="https://github.com/0xProject/0x-monorepo/issues/1520" target="_blank"> - Ganache support is a work in progress. - </a> - </ListItem> - <ListItem> - Understand and use{' '} - <a href="https://github.com/MetaMask/provider-engine" target="_blank"> - web3-provider-engine - </a> - . - </ListItem> - </List> - </ContentBlock> - <ContentBlock title="Installation"> - <Breakout> - <Code canCopy={true}>npm install @0x/sol-trace --save</Code> - </Breakout> - - <p> - Sol-trace is a subprovider that needs to be prepended to your{' '} - <a href="https://github.com/MetaMask/provider-engine" target="_blank"> - provider engine - </a> - . Depending on your project setup, you will need to use a specific ArtifactAdapter. Sol-trace ships - with the <InlineCode>SolCompilerArtifactAdapter</InlineCode> for use with{' '} - <a href="https://sol-compiler.com" target="_blank"> - Sol-compiler - </a>{' '} - and <InlineCode>TruffleArtifactAdapter</InlineCode> for use with the{' '} - <a href="https://truffleframework.com/truffle" target="_blank"> - Truffle framework - </a>{' '} - (Also see our{' '} - <a href="https://github.com/0xProject/dev-tools-truffle-example" target="_blank"> - Truffle example project - </a>{' '} - for a complete walk-through). You can also write your own and support any artifact format. - </p> - - <Tabs> - <TabBlock title="Sol-compiler"> - <Code language="javascript" canCopy={true}> - {`import { SolCompilerArtifactAdapter } from '@0x/sol-trace'; - -// Both artifactsDir and contractsDir are optional and will be fetched from compiler.json if not passed in -const artifactAdapter = new SolCompilerArtifactAdapter(artifactsDir, contractsDir);`} - </Code> - </TabBlock> - <TabBlock title="Truffle"> - <Code language="javascript" canCopy={true}> - {`import { TruffleArtifactAdapter } from '@0x/sol-trace'; - -const projectRoot = '.'; -const solcVersion = '0.5.0'; -const artifactAdapter = new TruffleArtifactAdapter(projectRoot, solcVersion);`} - </Code> - </TabBlock> - <TabBlock title="Custom"> - <Code language="javascript" canCopy={true}> - {`import { AbstractArtifactAdapter } from '@0x/sol-trace'; - -class YourCustomArtifactsAdapter extends AbstractArtifactAdapter {...}; -const artifactAdapter = new YourCustomArtifactsAdapter(...);`} - </Code> - </TabBlock> - </Tabs> - <p> - Now that we have an <InlineCode>artifactAdapter</InlineCode>, we can create a{' '} - <InlineCode>revertTraceSubprovider</InlineCode> and append it to our provider engine. - </p> - - <Breakout> - <Code language="javascript" canCopy={true}> - {`import { ProviderEngine, RpcSubprovider } from 'web3-provider-engine'; -import { RevertTraceSubprovider } from '@0x/sol-trace'; - -const defaultFromAddress = "..."; // Some ethereum address with test funds -const revertTraceSubprovider = new RevertTraceSubprovider(artifactAdapter, defaultFromAddress); - -const providerEngine = new ProviderEngine(); -providerEngine.addProvider(revertTraceSubprovider); -providerEngine.addProvider(new RpcSubprovider({rpcUrl: 'http://localhost:8545'})); -providerEngine.start();`} - </Code> - </Breakout> - <p>Stack traces will now be printed whenever your contracts revert!</p> - </ContentBlock> - </Content> - <CallToAction /> - </Base> -); - -const root = document.getElementById('app'); - -if (root.hasChildNodes()) { - hydrate(<Trace />, root); -} else { - render(<Trace />, root); -} |