diff --git a/.gitignore b/.gitignore index 75be4c5f7..162b9c4d7 100644 --- a/.gitignore +++ b/.gitignore @@ -12,3 +12,4 @@ test_app/.embark/development/ test_app/config/production/password test_app/node_modules/ test_app/chains.json +.idea \ No newline at end of file diff --git a/.travis.yml b/.travis.yml index af4c1c194..793855d31 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,8 +1,7 @@ language: node_js node_js: + - "7" - "6" - - "5" - - "4" addons: code_climate: repo_token: 7454b1a666015e244c384d19f48c34e35d1ae58c3aa428ec542f10bbcb848358 diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 000000000..0af795717 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,92 @@ +# Contributing + +When contributing to this repository, please first discuss the change you wish to make via issue, +email, or any other method with the owners of this repository before making a change. + +Please note we have a code of conduct, please follow it in all your interactions with the project. + +## Pull Request Process + +1. Ensure any install or build dependencies are removed before the end of the layer when doing a + build. +2. Update the README.md with details of changes to the interface, this includes new environment + variables, exposed ports, useful file locations and container parameters. +3. Increase the version numbers in any examples files and the README.md to the new version that this + Pull Request would represent. The versioning scheme we use is [SemVer](http://semver.org/). +4. You may merge the Pull Request in once you have the sign-off of two other developers, or if you + do not have permission to do that, you may request the second reviewer to merge it for you. + +## Code of Conduct + +### Our Pledge + +In the interest of fostering an open and welcoming environment, we as +contributors and maintainers pledge to making participation in our project and +our community a harassment-free experience for everyone, regardless of age, body +size, disability, ethnicity, gender identity and expression, level of experience, +nationality, personal appearance, race, religion, or sexual identity and +orientation. + +### Our Standards + +Examples of behavior that contributes to creating a positive environment +include: + +* Using welcoming and inclusive language +* Being respectful of differing viewpoints and experiences +* Gracefully accepting constructive criticism +* Focusing on what is best for the community +* Showing empathy towards other community members + +Examples of unacceptable behavior by participants include: + +* The use of sexualized language or imagery and unwelcome sexual attention or +advances +* Trolling, insulting/derogatory comments, and personal or political attacks +* Public or private harassment +* Publishing others' private information, such as a physical or electronic + address, without explicit permission +* Other conduct which could reasonably be considered inappropriate in a + professional setting + +### Our Responsibilities + +Project maintainers are responsible for clarifying the standards of acceptable +behavior and are expected to take appropriate and fair corrective action in +response to any instances of unacceptable behavior. + +Project maintainers have the right and responsibility to remove, edit, or +reject comments, commits, code, wiki edits, issues, and other contributions +that are not aligned to this Code of Conduct, or to ban temporarily or +permanently any contributor for other behaviors that they deem inappropriate, +threatening, offensive, or harmful. + +### Scope + +This Code of Conduct applies both within project spaces and in public spaces +when an individual is representing the project or its community. Examples of +representing a project or community include using an official project e-mail +address, posting via an official social media account, or acting as an appointed +representative at an online or offline event. Representation of a project may be +further defined and clarified by project maintainers. + +### Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be +reported by contacting the project team at [INSERT EMAIL ADDRESS]. All +complaints will be reviewed and investigated and will result in a response that +is deemed necessary and appropriate to the circumstances. The project team is +obligated to maintain confidentiality with regard to the reporter of an incident. +Further details of specific enforcement policies may be posted separately. + +Project maintainers who do not follow or enforce the Code of Conduct in good +faith may face temporary or permanent repercussions as determined by other +members of the project's leadership. + +### Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, +available at [http://contributor-covenant.org/version/1/4][version] + +[homepage]: http://contributor-covenant.org +[version]: http://contributor-covenant.org/version/1/4/ \ No newline at end of file diff --git a/Class Hierarchy.mmd b/Class Hierarchy.mmd new file mode 100644 index 000000000..d8b2c8424 --- /dev/null +++ b/Class Hierarchy.mmd @@ -0,0 +1,29 @@ +Mind Map generated by NB MindMap plugin +> __version__=`1.1`,showJumps=`true` +--- + +# Embark + +## Config + +## CLI + +## Engine +> leftSide=`true` + + +### Plugins + +#### DefaultLogger + +#### DefaultPipeline + +### Services + +## DefaultLogger + +## Utils +> leftSide=`true` + + +## DeployManager diff --git a/Gruntfile.coffee b/Gruntfile.coffee index 24f23def8..5eb7ad351 100644 --- a/Gruntfile.coffee +++ b/Gruntfile.coffee @@ -21,8 +21,16 @@ module.exports = (grunt) -> mochaTest: test: src: ['test/**/*.js'] + jshint: - all: ['bin/embark', 'lib/**/*.js', 'js/mine.js', 'js/embark.js'] + all: ['bin/embark', 'lib/**/*.js'] + options: grunt.file.readJSON('package.json').jshintConfig + with_overrides: + options: + undef: false + esversion: 5 + files: + src: ['js/mine.js', 'js/embark.js'] grunt.loadTasks "tasks" require('matchdep').filterAll(['grunt-*','!grunt-cli']).forEach(grunt.loadNpmTasks) diff --git a/README.md b/README.md index ac3cab766..c834c161b 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,5 @@ -[![Join the chat at https://gitter.im/iurimatias/embark-framework](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/iurimatias/embark-framework?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) +[![npm](https://img.shields.io/npm/dm/embark.svg)]() +[![Gitter](https://img.shields.io/gitter/room/iurimatias/embark-framework.svg)]() [![Build Status](https://travis-ci.org/iurimatias/embark-framework.svg?branch=develop)](https://travis-ci.org/iurimatias/embark-framework) [![Code Climate](https://codeclimate.com/github/iurimatias/embark-framework/badges/gpa.svg)](https://codeclimate.com/github/iurimatias/embark-framework) @@ -8,9 +9,9 @@ What is Embark Embark is a framework that allows you to easily develop and deploy Decentralized Applications (DApps). -A Decentralized Application is serverless html5 application that uses one or more decentralized technologies. +A Decentralized Application is a serverless html5 application that uses one or more decentralized technologies. -Embark currently integrates with EVM blockchains (Ethereum), Decentralized Storages (IPFS), and Decentralizaed communication platforms (Whisper and Orbit). Swarm is supported for deployment. +Embark currently integrates with EVM blockchains (Ethereum), Decentralized Storages (IPFS), and Decentralized communication platforms (Whisper and Orbit). Swarm is supported for deployment. With Embark you can: @@ -18,12 +19,12 @@ With Embark you can: * Automatically deploy contracts and make them available in your JS code. Embark watches for changes, and if you update a contract, Embark will automatically redeploy the contracts (if needed) and the dapp. * Contracts are available in JS with Promises. * Do Test Driven Development with Contracts using Javascript. -* Keep track of deployed contracts, deploy only when truly needed. +* Keep track of deployed contracts; deploy only when truly needed. * Manage different chains (e.g testnet, private net, livenet) * Easily manage complex systems of interdependent contracts. **Decentralized Storage (IPFS)** -* Easily Store & Retrieve Data on the DApp through EmbarkJS. Includin uploading and retrieving files. +* Easily Store & Retrieve Data on the DApp through EmbarkJS. Including uploading and retrieving files. * Deploy the full application to IPFS or Swarm. @@ -41,20 +42,20 @@ Table of Contents * [Dashboard](#dashboard) * [Creating a new DApp](#creating-a-new-dapp) * [Libraries and APIs available](#libraries-and-languages-available) -* [Using and Configuring Contracts](#dapp-structure) +* [Using and Configuring Contracts](#using-contracts) * [EmbarkJS](#embarkjs) * [EmbarkJS - Storage (IPFS)](#embarkjs---storage) * [EmbarkJS - Communication (Whisper/Orbit)](#embarkjs---communication) * [Testing Contracts](#tests) * [Working with different chains](#working-with-different-chains) * [Custom Application Structure](#structuring-application) -* [Deploying to IPFS](#deploying-to-ipfs) +* [Deploying to IPFS](#deploying-to-ipfs-and-swarm) * [Extending Functionality with Plugins](#plugins) * [Donations](#donations) Installation ====== -Requirements: geth (1.5.8 or higher), node (6.9.1 or higher is recommended) and npm +Requirements: geth (1.6.5 or higher), node (6.9.1 or higher is recommended) and npm Optional: testrpc (3.0 or higher) if using the simulator or the test functionality. Further: depending on the dapp stack you choose: [IPFS](https://ipfs.io/) @@ -68,7 +69,7 @@ $ npm -g install ethereumjs-testrpc See [Complete Installation Instructions](https://github.com/iurimatias/embark-framework/wiki/Installation). -**updating from embark 1** +**updating from Embark 1** Embark's npm package has changed from ```embark-framework``` to ```embark```, this sometimes can create conflicts. To update first uninstall embark-framework 1 to avoid any conflicts. ```npm uninstall -g embark-framework``` then ```npm install -g embark``` @@ -96,7 +97,7 @@ Alternatively, to use an ethereum rpc simulator simply run: $ embark simulator ``` -By default embark blockchain will mine a minimum amount of ether and will only mine when new transactions come in. This is quite usefull to keep a low CPU. The option can be configured at ```config/blockchain.json```. Note that running a real node requires at least 2GB of free ram, please take this into account if running it in a VM. +By default Embark blockchain will mine a minimum amount of ether and will only mine when new transactions come in. This is quite useful to keep a low CPU. The option can be configured at ```config/blockchain.json```. Note that running a real node requires at least 2GB of free ram, please take this into account if running it in a VM. Then, in another command line: @@ -105,7 +106,7 @@ $ embark run ``` This will automatically deploy the contracts, update their JS bindings and deploy your DApp to a local server at http://localhost:8000 -Note that if you update your code it will automatically be re-deployed, contracts included. There is no need to restart embark, refreshing the page on the browser will do. +Note that if you update your code, it will automatically be re-deployed, contracts included. There is no need to restart embark, refreshing the page on the browser will do. Dashboard ===== @@ -114,20 +115,20 @@ Embark 2 comes with a terminal dashboard. ![Dashboard](http://i.imgur.com/s4OQZpu.jpg) -The dashboard will tell you the state of your contracts, the enviroment you are using, and what embark is doing at the moment. +The dashboard will tell you the state of your contracts, the environment you are using, and what Embark is doing at the moment. **available services** -Available Services will display the services available to your dapp in green, if one of these is down then it will be displayed in red. +Available Services will display the services available to your dapp in green. If a service is down, then it will be displayed in red. **logs and console** -There is a console at the bottom which can be used to interact with contracts or with embark itself. type ```help``` to see a list of available commands, more commands will be added with each version of Embark. +There is a console at the bottom which can be used to interact with contracts or with Embark itself. Type ```help``` to see a list of available commands. More commands will be added with each version of Embark. Creating a new DApp ====== -If you want to create a blank new app. +If you want to create a blank new app: ```Bash $ embark new AppName @@ -144,13 +145,16 @@ DApp Structure |___ css/ |___ js/ config/ - |___ blockchain.json #environments configuration - |___ contracts.json #contracts configuration + |___ blockchain.json #rpc and blockchain configuration + |___ contracts.json #ethereum contracts configuration + |___ storage.json #ipfs configuration + |___ communication.json #whisper/orbit configuration + |___ webserver.json #dev webserver configuration test/ |___ #contracts tests ``` -Solidity/Serpent files in the contracts directory will automatically be deployed with embark run. Changes in any files will automatically be reflected in app, changes to contracts will result in a redeployment and update of their JS Bindings +Solidity/Serpent files in the contracts directory will automatically be deployed with Embark run. Changes in any files will automatically be reflected in app, changes to contracts will result in a redeployment and update of their JS Bindings Libraries and languages available ====== @@ -223,7 +227,7 @@ If you are using multiple contracts, you can pass a reference to another contrac "SimpleStorage": { "args": [ 100, - $MyStorage + "$MyStorage" ] }, "MyStorage": { @@ -233,7 +237,7 @@ If you are using multiple contracts, you can pass a reference to another contrac }, "MyMainContract": { "args": [ - $SimpleStorage + "$SimpleStorage" ] } } @@ -274,7 +278,7 @@ You can now deploy many instances of the same contract. e.g ... ``` -Contracts addresses can be defined, If an address is defined the contract wouldn't be deployed but its defined address will be used instead. +Contracts addresses can be defined. If an address is defined, Embark uses the defined address instead of deploying the contract. ```Json @@ -322,14 +326,20 @@ events: Client side deployment will be automatically available in Embark for existing contracts: ```Javascript - SimpleStorage.deploy().then(function(anotherSimpleStorage) {}); + SimpleStorage.deploy([args], {options}).then(function(anotherSimpleStorage) {}); ``` or it can be manually definied as ```Javascript var myContract = new EmbarkJS.Contract({abi: abiObject, code: code}); - myContract.deploy().then(function(anotherMyContractObject) {}); + myContract.deploy([args], {options}).then(function(anotherMyContractObject) {}); +``` + +so you can define your gas as + +```Javascript + myContract.deploy([100, "seconde argument"], {gas: 800000}).then(function(anotherMyContractObject) {}); ``` EmbarkJS - Storage @@ -337,7 +347,7 @@ EmbarkJS - Storage **initialization** -The current available storage is IPFS. it can be initialized as +The current available storage is IPFS. It can be initialized as ```Javascript EmbarkJS.Storage.setProvider('ipfs',{server: 'localhost', port: '5001'}) @@ -422,7 +432,7 @@ Tests You can run specs with ```embark test```, it will run any test files under ```test/```. -Embark includes a testing lib to fastly run & test your contracts in a EVM. +Embark includes a testing lib to rapidly run & test your contracts in a EVM. ```Javascript # test/simple_storage_spec.js @@ -434,6 +444,7 @@ var web3 = EmbarkSpec.web3; describe("SimpleStorage", function() { before(function(done) { + this.timeout(0); var contractsConfig = { "SimpleStorage": { args: [100] @@ -459,6 +470,7 @@ describe("SimpleStorage", function() { }); }); + ``` Embark uses [Mocha](http://mochajs.org/) by default, but you can use any testing framework you want. @@ -521,20 +533,20 @@ To deploy a dapp to SWARM, all you need to do is run a local SWARM node and then Plugins ====== -It's possible to extend Embarks functionality with plugins. For example the following is possible: +It's possible to extend Embark's functionality with plugins. For example, the following is possible: * plugin to add support for es6, jsx, coffescript, etc (``embark.registerPipeline``) * plugin to add standard contracts or a contract framework (``embark.registerContractConfiguration`` and ``embark.addContractFile``) * plugin to make some contracts available in all environments for use by other contracts or the dapp itself e.g a Token, a DAO, ENS, etc.. (``embark.registerContractConfiguration`` and ``embark.addContractFile``) -* plugin to add a libraries such as react or boostrap (``embark.addFileToPipeline``) +* plugin to add a libraries such as react or bootstrap (``embark.addFileToPipeline``) * plugin to specify a particular web3 initialization for special provider uses (``embark.registerClientWeb3Provider``) * plugin to create a different contract wrapper (``embark.registerContractsGeneration``) * plugin to add new console commands (``embark.registerConsoleCommand``) * plugin to add support for another contract language such as viper, LLL, etc (``embark.registerCompiler``) -For more information on how to develop your own plugin please see the [plugin documentation](http://embark.readthedocs.io/en/latest/plugins.html) +For more information on how to develop your own plugin, please see the [plugin documentation](http://embark.readthedocs.io/en/latest/plugins.html) Donations ====== -If you like Embark please consider donating to 0x8811FdF0F988f0CD1B7E9DE252ABfA5b18c1cDb1 +If you like Embark, please consider donating to 0x8811FdF0F988f0CD1B7E9DE252ABfA5b18c1cDb1 diff --git a/bin/embark b/bin/embark index eb0b4d558..c9173a48c 100755 --- a/bin/embark +++ b/bin/embark @@ -1,4 +1,4 @@ #!/usr/bin/env node - -var Embark = require('..'); -Embark.process(process.argv); +var Cmd = require('../lib/cmd'); +var cli = new Cmd(); +cli.process(process.argv); diff --git a/boilerplate/app/index.html b/boilerplate/app/index.html index 3585f0803..8068e7c7b 100644 --- a/boilerplate/app/index.html +++ b/boilerplate/app/index.html @@ -6,6 +6,6 @@
See the Wiki to see what you can do with Embark!
+See the Embark's documentation to see what you can do with Embark!