update docs and readme

This commit is contained in:
Iuri Matias 2017-01-14 18:11:43 -05:00
parent c554e90b57
commit 17a64d9559
21 changed files with 524 additions and 11 deletions

View File

@ -480,16 +480,13 @@ Embark is quite flexible and you can configure you're own directory structure us
}
```
Deploying to IPFS
Deploying to IPFS and Swarm
======
To deploy a dapp to IPFS, all you need to do is run a local IPFS node and then run ```embark ipfs```.
To deploy a dapp to IPFS, all you need to do is run a local IPFS node and then run ```embark upload ipfs```.
If you want to deploy to the livenet then after configuring you account on ```config/blockchain.json``` on the ```production``` environment then you can deploy to that chain by specifying the environment ```embark ipfs production```.
LiveReload Plugin
======
Embark works quite well with the LiveReload Plugin
To deploy a dapp to SWARM, all you need to do is run a local SWARM node and then run ```embark upload swarm```.
Donations
======

0
dapp-structure.md Normal file
View File

View File

@ -50,8 +50,8 @@ master_doc = 'index'
# General information about the project.
project = u'Embark'
copyright = u'2017, Iuri Matias <iuri.matias@gmail.com>'
author = u'Iuri Matias <iuri.matiasl@gmail.com>'
copyright = u'2017, Iuri Matias'
author = u'Iuri Matias'
# The version info for the project you're documenting, acts as replacement for
# |version| and |release|, also used in various other places throughout the
@ -131,7 +131,7 @@ latex_elements = {
# author, documentclass [howto, manual, or own class]).
latex_documents = [
(master_doc, 'Embark.tex', u'Embark Documentation',
u'Iuri Matias \\textless{}iuri.matias@gmail.com\\textgreater{}', 'manual'),
u'Iuri Matias \\textless{}\\textgreater{}', 'manual'),
]

View File

@ -0,0 +1,30 @@
Creating a new DApp
===================
If you want to create a blank new app.
.. code:: bash
$ embark new AppName
$ cd AppName
DApp Structure
==============
.. code:: bash
app/
|___ contracts/ #solidity or serpent contracts
|___ html/
|___ css/
|___ js/
config/
|___ blockchain.json #environments configuration
|___ contracts.json #contracts 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

24
docs/dashboard.rst Normal file
View File

@ -0,0 +1,24 @@
Dashboard
=========
Embark 2 comes with a terminal dashboard.
.. figure:: http://i.imgur.com/s4OQZpu.jpg
:alt: Dashboard
Dashboard
The dashboard will tell you the state of your contracts, the enviroment
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.
**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.

View File

@ -0,0 +1,8 @@
Deploying to IPFS
=================
To deploy a dapp to IPFS, all you need to do is run a local IPFS node
and then run ``embark upload ipfs``. If you want to deploy to the livenet then
after configuring you account on ``config/blockchain.json`` on the
``production`` environment then you can deploy to that chain by
specifying the environment ``embark ipfs production``.

View File

@ -0,0 +1,4 @@
Deploying to SWARM
=================
To deploy a dapp to SWARM, all you need to do is run a local SWARM node and then run ``embark upload swarm``.

4
docs/donations.md Normal file
View File

@ -0,0 +1,4 @@
Donations
======
If you like Embark please consider donating to 0x8811FdF0F988f0CD1B7E9DE252ABfA5b18c1cDb1

5
docs/donations.rst Normal file
View File

@ -0,0 +1,5 @@
Donations
=========
If you like Embark please consider donating to
0x8811FdF0F988f0CD1B7E9DE252ABfA5b18c1cDb1

View File

@ -0,0 +1,46 @@
EmbarkJS - Communication
========================
**initialization**
For Whisper:
.. code:: javascript
EmbarkJS.Messages.setProvider('whisper')
For Orbit:
You'll need to use IPFS from master and run it as:
``ipfs daemon --enable-pubsub-experiment``
then set the provider:
.. code:: javascript
EmbarkJS.Messages.setProvider('orbit', {server: 'localhost', port: 5001})
**listening to messages**
.. code:: javascript
EmbarkJS.Messages.listenTo({topic: ["topic1", "topic2"]}).then(function(message) { console.log("received: " + message); })
**sending messages**
you can send plain text
.. code:: javascript
EmbarkJS.Messages.sendMessage({topic: "sometopic", data: 'hello world'})
or an object
.. code:: javascript
EmbarkJS.Messages.sendMessage({topic: "sometopic", data: {msg: 'hello world'}})
note: array of topics are considered an AND. In Whisper you can use
another array for OR combinations of several topics e.g
``["topic1", ["topic2", "topic3"]]`` =>
``topic1 AND (topic2 OR topic 3)``

39
docs/embarkjs-storage.rst Normal file
View File

@ -0,0 +1,39 @@
EmbarkJS - Storage
==================
**initialization**
The current available storage is IPFS. it can be initialized as
.. code:: javascript
EmbarkJS.Storage.setProvider('ipfs',{server: 'localhost', port: '5001'})
**Saving Text**
.. code:: javascript
EmbarkJS.Storage.saveText("hello world").then(function(hash) {});
**Retrieving Data/Text**
.. code:: javascript
EmbarkJS.Storage.get(hash).then(function(content) {});
**Uploading a file**
.. code:: html
<input type="file">
.. code:: javascript
var input = $("input[type=file"]);
EmbarkJS.Storage.uploadFile(input).then(function(hash) {});
**Generate URL to file**
.. code:: javascript
EmbarkJS.Storage.getUrl(hash);

30
docs/embarkjs.rst Normal file
View File

@ -0,0 +1,30 @@
EmbarkJS
========
EmbarkJS is a javascript library meant to abstract and facilitate the
development of DApps.
**promises**
methods in EmbarkJS contracts will be converted to promises.
.. code:: javascript
var myContract = new EmbarkJS.Contract({abi: abiObject, address: "0x123"});
myContract.get().then(function(value) { console.log("value is " + value.toNumber) });
**deployment**
Client side deployment will be automatically available in Embark for
existing contracts:
.. code:: javascript
SimpleStorage.deploy().then(function(anotherSimpleStorage) {});
or it can be manually definied as
.. code:: javascript
var myContract = new EmbarkJS.Contract({abi: abiObject, code: code});
myContract.deploy().then(function(anotherMyContractObject) {});

View File

@ -8,9 +8,22 @@ Welcome to embark's documentation!
.. toctree::
:maxdepth: 2
:caption: Contents:
installation.rst
usage.rst
dashboard.rst
creating-a-new-dapp.rst
libraries-and-languages-available.rst
using-contracts.rst
embarkjs.rst
embarkjs-storage.rst
embarkjs-communication.rst
tests.rst
working-with-different-chains.rst
structuring-application.rst
deploying-to-ipfs.rst
deploying-to-swarm.rst
donations.rst
Indices and tables
==================

24
docs/installation.rst Normal file
View File

@ -0,0 +1,24 @@
Installation
============
Requirements: geth (1.5.5 or higher), node (5.0.0) and npm Optional:
serpent (develop) if using contracts with Serpent, testrpc or ethersim
if using the simulator or the test functionality. Further: depending on
the dapp stack you choose: `IPFS <https://ipfs.io/>`__
.. code:: bash
$ npm -g install embark
# If you plan to use the simulator instead of a real ethereum node.
$ npm -g install ethereumjs-testrpc
See `Complete Installation
Instructions <https://github.com/iurimatias/embark-framework/wiki/Installation>`__.
**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``

View File

@ -0,0 +1,14 @@
Libraries and languages available
=================================
Embark can build and deploy contracts coded in Solidity or Serpent. It
will make them available on the client side using EmbarkJS and Web3.js.
Further documentation for these can be found below:
- Smart Contracts:
`Solidity <https://solidity.readthedocs.io/en/develop/>`__ and
`Serpent <https://github.com/ethereum/wiki/wiki/Serpent>`__
- Client Side:
`Web3.js <https://github.com/ethereum/wiki/wiki/JavaScript-API>`__
and `EmbarkJS <#embarkjs>`__

View File

@ -0,0 +1,19 @@
Structuring Application
=======================
Embark is quite flexible and you can configure you're own directory
structure using ``embark.json``
.. code:: json
# embark.json
{
"contracts": ["app/contracts/**"],
"app": {
"css/app.css": ["app/css/**"],
"js/app.js": ["embark.js", "app/js/**"],
"index.html": "app/index.html"
},
"buildDir": "dist/",
"config": "config/"
}

48
docs/tests.rst Normal file
View File

@ -0,0 +1,48 @@
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.
.. code:: javascript
# test/simple_storage_spec.js
var assert = require('assert');
var Embark = require('embark');
var EmbarkSpec = Embark.initTests();
var web3 = EmbarkSpec.web3;
describe("SimpleStorage", function() {
before(function(done) {
var contractsConfig = {
"SimpleStorage": {
args: [100]
}
};
EmbarkSpec.deployAll(contractsConfig, done);
});
it("should set constructor value", function(done) {
SimpleStorage.storedData(function(err, result) {
assert.equal(result.toNumber(), 100);
done();
});
});
it("set storage value", function(done) {
SimpleStorage.set(150, function() {
SimpleStorage.get(function(err, result) {
assert.equal(result.toNumber(), 150);
done();
});
});
});
});
Embark uses `Mocha <http://mochajs.org/>`__ by default, but you can use
any testing framework you want.

44
docs/usage.rst Normal file
View File

@ -0,0 +1,44 @@
Usage
=====
Usage - Demo
============
You can easily create a sample working DApp with the following:
.. code:: bash
$ embark demo
$ cd embark_demo
You can run a REAL ethereum node for development purposes:
.. code:: bash
$ embark blockchain
Alternatively, to use an ethereum rpc simulator simply run:
.. code:: bash
$ 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.
Then, in another command line:
.. code:: bash
$ 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.

138
docs/using-contracts.rst Normal file
View File

@ -0,0 +1,138 @@
Using Contracts
===============
Embark will automatically take care of deployment for you and set all
needed JS bindings. For example, the contract below:
.. code:: javascript
# app/contracts/simple_storage.sol
contract SimpleStorage {
uint public storedData;
function SimpleStorage(uint initialValue) {
storedData = initialValue;
}
function set(uint x) {
storedData = x;
}
function get() constant returns (uint retVal) {
return storedData;
}
}
Will automatically be available in Javascript as:
.. code:: javascript
# app/js/index.js
SimpleStorage.set(100);
SimpleStorage.get().then(function(value) { console.log(value.toNumber()) });
SimpleStorage.storedData().then(function(value) { console.log(value.toNumber()) });
You can specify for each contract and environment its gas costs and
arguments:
.. code:: json
# config/contracts.json
{
"development": {
"gas": "auto",
"contracts": {
"SimpleStorage": {
"args": [
100
]
}
}
}
}
If you are using multiple contracts, you can pass a reference to another
contract as ``$ContractName``, Embark will automatically replace this
with the correct address for the contract.
.. code:: json
# config/contracts.json
{
...
"development": {
"contracts": {
"SimpleStorage": {
"args": [
100,
$MyStorage
]
},
"MyStorage": {
"args": [
"initial string"
]
},
"MyMainContract": {
"args": [
$SimpleStorage
]
}
}
}
...
}
You can now deploy many instances of the same contract. e.g
.. code:: json
# config/contracts.json
{
"development": {
"contracts": {
"Currency": {
"deploy": false,
"args": [
100
]
},
"Usd": {
"instanceOf": "Currency",
"args": [
200
]
},
"MyCoin": {
"instanceOf": "Currency",
"args": [
200
]
}
}
}
}
...
Contracts addresses can be defined, If an address is defined the
contract wouldn't be deployed but its defined address will be used
instead.
.. code:: json
# config/contracts.json
{
...
"development": {
"contracts": {
"UserStorage": {
"address": "0x123456"
},
"UserManagement": {
"args": [
"$UserStorage"
]
}
}
}
...
}

View File

@ -0,0 +1,26 @@
Working with different chains
=============================
You can specify which environment to deploy to:
``$ embark blockchain production``
``$ embark run production``
The environment is a specific blockchain configuration that can be
managed at config/blockchain.json
.. code:: json
# config/blockchain.json
...
"livenet": {
"networkType": "livenet",
"rpcHost": "localhost",
"rpcPort": 8545,
"rpcCorsDomain": "http://localhost:8000",
"account": {
"password": "config/production/password"
}
},
...

View File