All Projects → bokkypoobah → Solidityflattener

bokkypoobah / Solidityflattener

Licence: mit
A Simple-To-Install Solidity Flattener

Programming Languages

solidity
1140 projects

Labels

Projects that are alternatives of or similar to Solidityflattener

Blockchain
区块链、交易所、币种、自媒体、高频交易策略
Stars: ✭ 37 (-21.28%)
Mutual labels:  ethereum
Eth Alarm Clock Dapp
Chronos - Ethereum Alarm Clock DApp
Stars: ✭ 42 (-10.64%)
Mutual labels:  ethereum
Transmute Framework
TypeScript dApp Framework
Stars: ✭ 45 (-4.26%)
Mutual labels:  ethereum
Maker Otc
Simple on-chain market for ERC20 tokens
Stars: ✭ 37 (-21.28%)
Mutual labels:  ethereum
Ether sql
A python library to push ethereum blockchain data into an sql database.
Stars: ✭ 41 (-12.77%)
Mutual labels:  ethereum
Vyper.fun
Cryptozombies for Vyper: Learn Vyper by building games!
Stars: ✭ 42 (-10.64%)
Mutual labels:  ethereum
Wallet
🚀 基于Flutter开发的跨终端数字货币交易所✨
Stars: ✭ 36 (-23.4%)
Mutual labels:  ethereum
Solidity
🔐 Ethereum smart contracts developed for the Hanzo Platform.
Stars: ✭ 46 (-2.13%)
Mutual labels:  ethereum
Sol2proto
Ethereum contract ABI to gRPC protobuf IDL transpiler
Stars: ✭ 41 (-12.77%)
Mutual labels:  ethereum
Xplain
🌎 Complex Topics Explained For Your Level And Background. ✏️
Stars: ✭ 44 (-6.38%)
Mutual labels:  ethereum
Miner Monitor
Miner, balance, wallet and pool monitoring software
Stars: ✭ 38 (-19.15%)
Mutual labels:  ethereum
Hifi Protocol
The Hifi fixed-rate, fixed-term lending protocol
Stars: ✭ 41 (-12.77%)
Mutual labels:  ethereum
Blockchain Learning
Learn and promote blockchain together by writing
Stars: ✭ 44 (-6.38%)
Mutual labels:  ethereum
Smart Contracts Example
Simple example of token market. Based on blockchain technology using Ethereum platform.
Stars: ✭ 37 (-21.28%)
Mutual labels:  ethereum
Nuxt Box
Truffle, Nuxt and Vue boilerplate
Stars: ✭ 46 (-2.13%)
Mutual labels:  ethereum
Eth Scan
An efficient Ether and token balance scanner library
Stars: ✭ 35 (-25.53%)
Mutual labels:  ethereum
Zerodollarhomepage
A decentralized ad server running on the blockchain
Stars: ✭ 43 (-8.51%)
Mutual labels:  ethereum
Solpp
A solidity preprocessor and flattener CLI and library
Stars: ✭ 44 (-6.38%)
Mutual labels:  ethereum
Bds
Blockchain data parsing and persisting results
Stars: ✭ 1,032 (+2095.74%)
Mutual labels:  ethereum
Learn Solidity
Code base for "Learn Solidity: Programming Language for Ethereum Smart Contracts" course in Tosh Academy & Blockchain Council
Stars: ✭ 44 (-6.38%)
Mutual labels:  ethereum



Solidity Flattener

Flatten multiple Solidity files into a single Solidity file so you can:

This Solidity Flattener was created for easy inclusion into your Solidity project, and to incorporate it into your build scripts.



History

Version Date Notes
v1.0.0 Sep 24 2018 First version
v1.0.1 Sep 24 2018 Ability to remap directory to handle OpenZeppelin npm installation
v1.0.2 Sep 25 2018 Tidy remapdir verbose message, handle comments after import statement
v1.0.3 Oct 16 2018 Handle single quotes as well as double quotes around the imported file


Installation

  • Download solidityFlattener.pl into /usr/local/bin, or into your Solidity project scripts folder
  • chmod 755 /usr/local/bin/solidityFlattener.pl or adjust for your download location


Usage

Solidity Flattener v1.0.3

Usage: solidityFlattener.pl {options}

Where options are:
  --contractsdir  Source directory for original contracts. Default './contracts'
  --remapdir      Remap import directories. Optional. Example "contracts/openzeppelin-solidity=node_modules/openzeppelin-solidity"
  --mainsol       Main source Solidity file. Mandatory
  --outputsol     Output flattened Solidity file. Default is mainsol with `_flattened` appended to the file name
  --verbose       Show details. Optional
  --help          Display help. Optional

Example usage:
  solidityFlattener.pl --contractsdir=contracts --mainsol=MyContract.sol --outputsol=flattened/MyContracts_flattened.sol --verbose

Installation:
  Download solidityFlattener.pl from https://github.com/bokkypoobah/SolidityFlattener into /usr/local/bin
  chmod 755 /usr/local/bin/solidityFlattener.pl

Works on OS/X, Linux and Linux on Windows.

Enjoy. (c) BokkyPooBah / Bok Consulting Pty Ltd 2018. The MIT Licence.


Sample Usage

See the examples in the test subdirectory, one of which is shown below.

Example 1 - Contracts In Subdirectories

Main Solidity file test/subdir_contracts/SubdirExample.sol:

pragma solidity ^0.4.24;

import "dir01/Dir01file.sol";
import "dir01/Dir02file.sol";

contract Main is Dir01file {
    function returnSomething() public pure returns (uint) {
        return super.returnSomething();
    }
}

First import file test/subdir_contracts/dir01/Dir01file.sol:

pragma solidity ^0.4.24;

import "../dir02/Dir02file.sol";

contract Dir01file is Dir02file {
    function returnSomething() public pure returns (uint) {
        return super.returnSomething();
    }
}

Second import file test/subdir_contracts/dir02/Dir02file.sol:

pragma solidity ^0.4.24;

contract Dir02file {
    function returnSomething() public pure returns (uint) {
        return 123;
    }
}

From the test subdirectory, run the following command:

test $ solidityFlattener.pl --contractsdir=subdir_contracts --mainsol=SubdirExample.sol --outputsol=SubdirExample_flattened.sol --verbose
contractsdir: subdir_contracts
remapdir    : (no remapping)
mainsol     : SubdirExample.sol
outputsol   : SubdirExample_flattened.sol
Processing subdir_contracts/SubdirExample.sol
    Importing subdir_contracts/dir01/Dir01file.sol
    Processing subdir_contracts/dir01/Dir01file.sol
        Importing subdir_contracts/dir01/../dir02/Dir02file.sol
        Processing subdir_contracts/dir01/../dir02/Dir02file.sol
    Already Imported subdir_contracts/dir01/Dir02file.sol

to produce the flattened file test/SubdirExample_flattened.sol:

pragma solidity ^0.4.24;



contract Dir02file {
    function returnSomething() public pure returns (uint) {
        return 123;
    }
}

contract Dir01file is Dir02file {
    function returnSomething() public pure returns (uint) {
        return super.returnSomething();
    }
}

contract Main is Dir01file {
    function returnSomething() public pure returns (uint) {
        return super.returnSomething();
    }
}

The contents of the output can be loaded directly into Remix or used for code verification on the Ethereum block explorers.



Example 2 - Simple MintableToken

Main Solidity file test/mintabletoken_contracts/MintableToken.sol.

From the test subdirectory, run the following command:

test $ solidityFlattener.pl --contractsdir=mintabletoken_contracts --mainsol=MintableToken.sol --outputsol=MintableToken_flattened.sol --verbose
contractsdir: mintabletoken_contracts
remapdir    : (no remapping)
mainsol     : MintableToken.sol
outputsol   : MintableToken_flattened.sol
Processing mintabletoken_contracts/MintableToken.sol
    Importing mintabletoken_contracts/SafeMath.sol
    Processing mintabletoken_contracts/SafeMath.sol
    Importing mintabletoken_contracts/MintableTokenInterface.sol
    Processing mintabletoken_contracts/MintableTokenInterface.sol
        Importing mintabletoken_contracts/ERC20Interface.sol
        Processing mintabletoken_contracts/ERC20Interface.sol
    Importing mintabletoken_contracts/Owned.sol
    Processing mintabletoken_contracts/Owned.sol

To produce the flattened file test/MintableToken_flattened.sol.



Example 3 - MintableToken With OpenZeppelin Npm Mapping

Main Solidity file test/oz_contracts/MyOzToken.sol, with OpenZeppelin installed in ../private/node_modules/openzeppelin-solidity.

From the test subdirectory, run the following command:

test $ solidityFlattener.pl --contractsdir=oz_contracts --remapdir "oz_contracts/openzeppelin-solidity=../private/node_modules/openzeppelin-solidity" --mainsol=MyOzToken.sol --verbose
contractsdir: oz_contracts
remapdir    : oz_contracts/openzeppelin-solidity=../private/node_modules/openzeppelin-solidity
mainsol     : MyOzToken.sol
outputsol   : MyOzToken_flattened.sol
Processing oz_contracts/MyOzToken.sol
    Importing oz_contracts/openzeppelin-solidity/contracts/math/SafeMath.sol
    Remapping oz_contracts/openzeppelin-solidity/contracts/math/SafeMath.sol
           to ../private/node_modules/openzeppelin-solidity/contracts/math/SafeMath.sol
    Processing ../private/node_modules/openzeppelin-solidity/contracts/math/SafeMath.sol
    Importing oz_contracts/openzeppelin-solidity/contracts/token/ERC20/MintableToken.sol
    Remapping oz_contracts/openzeppelin-solidity/contracts/token/ERC20/MintableToken.sol
           to ../private/node_modules/openzeppelin-solidity/contracts/token/ERC20/MintableToken.sol
    Processing ../private/node_modules/openzeppelin-solidity/contracts/token/ERC20/MintableToken.sol
        Importing ../private/node_modules/openzeppelin-solidity/contracts/token/ERC20/StandardToken.sol
        Processing ../private/node_modules/openzeppelin-solidity/contracts/token/ERC20/StandardToken.sol
            Importing ../private/node_modules/openzeppelin-solidity/contracts/token/ERC20/BasicToken.sol
            Processing ../private/node_modules/openzeppelin-solidity/contracts/token/ERC20/BasicToken.sol
                Importing ../private/node_modules/openzeppelin-solidity/contracts/token/ERC20/ERC20Basic.sol
                Processing ../private/node_modules/openzeppelin-solidity/contracts/token/ERC20/ERC20Basic.sol
                Already Imported ../private/node_modules/openzeppelin-solidity/contracts/token/ERC20/../../math/SafeMath.sol
            Importing ../private/node_modules/openzeppelin-solidity/contracts/token/ERC20/ERC20.sol
            Processing ../private/node_modules/openzeppelin-solidity/contracts/token/ERC20/ERC20.sol
                Already Imported ../private/node_modules/openzeppelin-solidity/contracts/token/ERC20/ERC20Basic.sol
        Importing ../private/node_modules/openzeppelin-solidity/contracts/token/ERC20/../../ownership/Ownable.sol
        Processing ../private/node_modules/openzeppelin-solidity/contracts/token/ERC20/../../ownership/Ownable.sol

To produce the flattened file test/MyOzToken_flattened.sol.



(c) BokkyPooBah / Bok Consulting Pty Ltd - Sep 25 2018. The MIT Licence.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].