aboutsummaryrefslogblamecommitdiffstats
path: root/packages/dev-tools-pages/ts/pages/compiler.tsx
blob: 93a667562e13a4486e6825d7515417df9805d495 (plain) (tree)
1
2
3
4
5
6
                               
                                            
                                           
 

                                              








                                                                       

                            
                                                                                                                  

                           

                                                                   

                             
   
 












                                                                                
 




                                                                     
 










                                                                                











                                                   










                                                                                                                      
 







                                                                                                                      






                            
   




                                                                      


                       
   










                                                                                                                  












                                                    
   

                           
 


                                                                      

















                                          
   





                           
 






                                            
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 { 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 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>cd /your_project_dir && sol-compiler</Code>
                </Breakout>
            </ContentBlock>

            <ContentBlock title="Configure">
                <p>
                    Configure via a <InlineCode>compiler.json</InlineCode> file.
                </p>
                <Breakout>
                    <Code>mkdir compiler.json</Code>
                </Breakout>
                <p>Example of settings:</p>
                <Breakout>
                    <Code language="json">
                        {`{
    "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 solidity standard JSON output format for the artifacts. This way, you can define
                    which parts of the artifact you need.
                </Lead>
            </ContentBlock>

            <ContentBlock title="Production">
                <p>
                    Sol compiler uses solidity standard JSON output format for the artifacts. This way, you can define
                    which parts of the artifact you need.
                </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>
                    Sometimes you need to use some debuggers or other dev tools and you’ll need more info in the
                    artifact.
                </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>
    </Base>
);

const root = document.getElementById('app');

if (root.hasChildNodes()) {
    hydrate(<Compiler />, root);
} else {
    render(<Compiler />, root);
}