diff --git a/app/js/components/Header.js b/app/js/components/Header.js index 765638b..4f3ab35 100644 --- a/app/js/components/Header.js +++ b/app/js/components/Header.js @@ -60,7 +60,7 @@ class Header extends Component { - + DReddit @@ -69,9 +69,9 @@ class Header extends Component { style={{ margin: '10px 10px', maxWidth: 280 - }} + }} onChange={(searchValue) => search(searchValue)} - /> + /> diff --git a/config/blockchain.js b/config/blockchain.js index af0808f..4b929d1 100644 --- a/config/blockchain.js +++ b/config/blockchain.js @@ -1,62 +1,97 @@ module.exports = { - development: { + // applies to all environments + default: { enabled: true, - networkType: "custom", // Can be: testnet, rinkeby, livenet or custom, in which case, it will use the specified networkId - networkId: "1337", // Network id used when networkType is custom - isDev: true, // Uses and ephemeral proof-of-authority network with a pre-funded developer account, mining enabled - genesisBlock: "config/development/genesis.json", // Genesis block to initiate on first creation of a development node - datadir: ".embark/development/datadir", // Data directory for the databases and keystore - mineWhenNeeded: true, // Uses our custom script (if isDev is false) to mine only when needed - nodiscover: true, // Disables the peer discovery mechanism (manual peer addition) - maxpeers: 0, // Maximum number of network peers (network disabled if set to 0) (default: 25) rpcHost: "localhost", // HTTP-RPC server listening interface (default: "localhost") rpcPort: 8545, // HTTP-RPC server listening port (default: 8545) rpcCorsDomain: "auto", // Comma separated list of domains from which to accept cross origin requests (browser enforced) // When set to "auto", Embark will automatically set the cors to the address of the webserver - proxy: true, // Proxy is used to present meaningful information about transactions - account: { - // "address": "", // When specified, uses that address instead of the default one for the network - password: "config/development/password" // Password to unlock the account - }, - targetGasLimit: 8000000, // Target gas limit sets the artificial target gas floor for the blocks to mine wsRPC: true, // Enable the WS-RPC server wsOrigins: "auto", // Origins from which to accept websockets requests // When set to "auto", Embark will automatically set the cors to the address of the webserver wsHost: "localhost", // WS-RPC server listening interface (default: "localhost") - wsPort: 8546, // WS-RPC server listening port (default: 8546) - simulatorMnemonic: "example exile argue silk regular smile grass bomb merge arm assist farm", // Mnemonic used by the simulator to generate a wallet - simulatorBlocktime: 0 // Specify blockTime in seconds for automatic mining. Default is 0 and no auto-mining. + wsPort: 8546 // WS-RPC server listening port (default: 8546) }, + + // default environment, merges with the settings in default + // assumed to be the intended environment by `embark run` and `embark blockchain` + development: { + networkType: "custom", // Can be: testnet, rinkeby, livenet or custom, in which case, it will use the specified networkId + networkId: "1337", // Network id used when networkType is custom + isDev: true, // Uses and ephemeral proof-of-authority network with a pre-funded developer account, mining enabled + datadir: ".embark/development/datadir", // Data directory for the databases and keystore + mineWhenNeeded: true, // Uses our custom script (if isDev is false) to mine only when needed + nodiscover: true, // Disables the peer discovery mechanism (manual peer addition) + maxpeers: 0, // Maximum number of network peers (network disabled if set to 0) (default: 25) + proxy: true, // Proxy is used to present meaningful information about transactions + targetGasLimit: 8000000, // Target gas limit sets the artificial target gas floor for the blocks to mine + simulatorMnemonic: "example exile argue silk regular smile grass bomb merge arm assist farm", // Mnemonic used by the simulator to generate a wallet + simulatorBlocktime: 0, // Specify blockTime in seconds for automatic mining. Default is 0 and no auto-mining. + account: { + // numAccounts: 3, // When specified, creates accounts for use in the dapp. This option only works in the development environment, and can be used as a quick start option that bypasses the need for MetaMask in development. These accounts are unlocked and funded with the below settings. + // password: "config/development/password", // Password for the created accounts (as specified in the `numAccounts` setting). If `mineWhenNeeded` is enabled (and isDev is not), this password is used to create a development account controlled by the node. + // balance: "5 ether" // Balance to be given to the created accounts (as specified in the `numAccounts` setting) + } + }, + + // merges with the settings in default + // used with "embark run privatenet" and/or "embark blockchain privatenet" + privatenet: { + networkType: "custom", + networkId: "1337", + isDev: false, + datadir: ".embark/privatenet/datadir", + // -- mineWhenNeeded -- + // This options is only valid when isDev is false. + // Enabling this option uses our custom script to mine only when needed. + // Embark creates a development account for you (using `geth account new`) and funds the account. This account can be used for + // development (and even imported in to MetaMask). To enable correct usage, a password for this account must be specified + // in the `account > password` setting below. + // NOTE: once `mineWhenNeeded` is enabled, you must run an `embark reset` on your dApp before running + // `embark blockchain` or `embark run` for the first time. + mineWhenNeeded: true, + // -- genesisBlock -- + // This option is only valid when mineWhenNeeded is true (which is only valid if isDev is false). + // When enabled, geth uses POW to mine transactions as it would normally, instead of using POA as it does in --dev mode. + // On the first `embark blockchain or embark run` after this option is enabled, geth will create a new chain with a + // genesis block, which can be configured using the `genesisBlock` configuration option below. + genesisBlock: "config/privatenet/genesis.json", // Genesis block to initiate on first creation of a development node + nodiscover: true, + maxpeers: 0, + proxy: true, + account: { + // "address": "", // When specified, uses that address instead of the default one for the network + password: "config/privatenet/password" // Password to unlock the account. If `mineWhenNeeded` is enabled (and isDev is not), this password is used to create a development account controlled by the node. + }, + targetGasLimit: 8000000, + simulatorMnemonic: "example exile argue silk regular smile grass bomb merge arm assist farm", + simulatorBlocktime: 0 + }, + + // merges with the settings in default + // used with "embark run testnet" and/or "embark blockchain testnet" testnet: { - enabled: true, networkType: "testnet", syncMode: "light", - rpcHost: "localhost", - rpcPort: 8545, - rpcCorsDomain: "http://localhost:8000", account: { password: "config/testnet/password" } }, + + // merges with the settings in default + // used with "embark run livenet" and/or "embark blockchain livenet" livenet: { - enabled: true, networkType: "livenet", syncMode: "light", - rpcHost: "localhost", - rpcPort: 8545, rpcCorsDomain: "http://localhost:8000", + wsOrigins: "http://localhost:8000", account: { password: "config/livenet/password" } - }, - privatenet: { - enabled: true, - networkType: "custom", - rpcHost: "localhost", - rpcPort: 8545, - rpcCorsDomain: "http://localhost:8000", - datadir: "yourdatadir", - networkId: "123", - bootnodes: "" } + + // you can name an environment with specific settings and then specify with + // "embark run custom_name" or "embark blockchain custom_name" + //custom_name: { + //} }; diff --git a/config/communication.js b/config/communication.js index 035d95d..641c0cd 100644 --- a/config/communication.js +++ b/config/communication.js @@ -1,13 +1,40 @@ module.exports = { + // default applies to all environments default: { enabled: true, provider: "whisper", // Communication provider. Currently, Embark only supports whisper available_providers: ["whisper"], // Array of available providers + }, + + // default environment, merges with the settings in default + // assumed to be the intended environment by `embark run` + development: { connection: { host: "localhost", // Host of the blockchain node port: 8546, // Port of the blockchain node type: "ws" // Type of connection (ws or rpc) } - } + }, + + // merges with the settings in default + // used with "embark run privatenet" + privatenet: { + }, + + + // merges with the settings in default + // used with "embark run testnet" + testnet: { + }, + + // merges with the settings in default + // used with "embark run livenet" + livenet: { + }, + + // you can name an environment with specific settings and then specify with + // "embark run custom_name" + //custom_name: { + //} }; diff --git a/config/contracts.js b/config/contracts.js index cb7583d..29828c2 100644 --- a/config/contracts.js +++ b/config/contracts.js @@ -14,7 +14,8 @@ module.exports = { // Balances are in Wei, but you can specify the unit with its name }, { - privateKeyFile: "path/to/file" // You can put more than one key, separated by , or ; + privateKeyFile: "path/to/file", // Either a keystore or a list of keys, separated by , or ; + password: "passwordForTheKeystore" // Needed to decrypt the keystore file }, { mnemonic: "12 word mnemonic", @@ -37,5 +38,35 @@ module.exports = { // args: [ 100 ] //} } - } + }, + + // default environment, merges with the settings in default + // assumed to be the intended environment by `embark run` + development: { + dappConnection: [ + "ws://localhost:8546", + "http://localhost:8545", + "$WEB3" // uses pre existing web3 object if available (e.g in Mist) + ] + }, + + // merges with the settings in default + // used with "embark run privatenet" + privatenet: { + }, + + // merges with the settings in default + // used with "embark run testnet" + testnet: { + }, + + // merges with the settings in default + // used with "embark run livenet" + livenet: { + }, + + // you can name an environment with specific settings and then specify with + // "embark run custom_name" or "embark blockchain custom_name" + //custom_name: { + //} }; diff --git a/config/namesystem.js b/config/namesystem.js index 10e20d6..f3d1446 100644 --- a/config/namesystem.js +++ b/config/namesystem.js @@ -1,6 +1,39 @@ module.exports = { + // default applies to all environments default: { + enabled: true, available_providers: ["ens"], provider: "ens" - } + }, + + // default environment, merges with the settings in default + // assumed to be the intended environment by `embark run` + development: { + register: { + rootDomain: "embark.eth", + subdomains: { + 'status': '0x1a2f3b98e434c02363f3dac3174af93c1d690914' + } + } + }, + + // merges with the settings in default + // used with "embark run privatenet" + privatenet: { + }, + + // merges with the settings in default + // used with "embark run testnet" + testnet: { + }, + + // merges with the settings in default + // used with "embark run livenet" + livenet: { + }, + + // you can name an environment with specific settings and then specify with + // "embark run custom_name" or "embark blockchain custom_name" + //custom_name: { + //} }; diff --git a/config/privatenet/genesis.json b/config/privatenet/genesis.json new file mode 100644 index 0000000..a67418b --- /dev/null +++ b/config/privatenet/genesis.json @@ -0,0 +1,18 @@ +{ + "config": { + "homesteadBlock": 0, + "byzantiumBlock": 0, + "daoForkSupport": true + }, + "nonce": "0x0000000000000042", + "difficulty": "0x0", + "alloc": { + "0x3333333333333333333333333333333333333333": {"balance": "15000000000000000000"} + }, + "mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "coinbase": "0x3333333333333333333333333333333333333333", + "timestamp": "0x00", + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "extraData": "0x", + "gasLimit": "0x7a1200" +} diff --git a/config/privatenet/password b/config/privatenet/password new file mode 100644 index 0000000..c747d67 --- /dev/null +++ b/config/privatenet/password @@ -0,0 +1 @@ +dev_password diff --git a/config/storage.js b/config/storage.js index da9dab0..de123e3 100644 --- a/config/storage.js +++ b/config/storage.js @@ -1,4 +1,5 @@ module.exports = { + // default applies to all environments default: { enabled: true, ipfs_bin: "ipfs", @@ -23,6 +24,9 @@ module.exports = { }, swarmPath: "PATH/TO/SWARM/EXECUTABLE" // Path to swarm executable (default: swarm)*/ }, + + // default environment, merges with the settings in default + // assumed to be the intended environment by `embark run` development: { enabled: true, provider: "ipfs", @@ -31,5 +35,25 @@ module.exports = { port: 5001, getUrl: "http://localhost:8080/ipfs/" } - } + }, + + // merges with the settings in default + // used with "embark run privatenet" + privatenet: { + }, + + // merges with the settings in default + // used with "embark run testnet" + testnet: { + }, + + // merges with the settings in default + // used with "embark run livenet" + livenet: { + }, + + // you can name an environment with specific settings and then specify with + // "embark run custom_name" + //custom_name: { + //} }; diff --git a/config/webserver.js b/config/webserver.js index 1814065..506490b 100644 --- a/config/webserver.js +++ b/config/webserver.js @@ -1,5 +1,6 @@ module.exports = { enabled: true, host: "localhost", + openBrowser: true, port: 8000 }; diff --git a/instructions/6 Coding: dApp.md b/instructions/6 Coding: dApp.md index f7b4049..c3c652e 100644 --- a/instructions/6 Coding: dApp.md +++ b/instructions/6 Coding: dApp.md @@ -7,6 +7,8 @@ Let's use our DReddit JS Object, and the `EmbarkJS` API to interact with our con ``` import EmbarkJS from 'Embark/EmbarkJS'; import web3 from 'Embark/web3'; +import DReddit from 'Embark/contracts/DReddit'; + ``` > Both EmbarkJS and web3 are normally imported whenever there's a need to interact with web3 technologies. You'll see these imports present in both `App.js` and `Post.js` diff --git a/test/contract_spec.js b/test/contract_spec.js index e4ccc55..3b39d82 100644 --- a/test/contract_spec.js +++ b/test/contract_spec.js @@ -30,11 +30,18 @@ contract("DReddit contract", function () { this.timeout(0); it("should be able to create a post and receive it via contract event", async function () { - // TODO: + let receipt = await create(web3.utils.fromAscii(ipfsHash)).send(); + + const event = receipt.events.NewPost; + + postId = event.returnValues.postId; + assert.equal(web3.utils.toAscii(event.returnValues.description), ipfsHash); }); it("post should have correct data", async function (){ - // TODO: + const post = await posts(postId).call(); + assert.equal(web3.utils.toAscii(post.description), ipfsHash); + assert.equal(post.owner, accounts[0]); }); it("one post should be registered", async function () { @@ -59,7 +66,12 @@ contract("DReddit contract", function () { }); it("should't be able to vote twice", async function () { - // TODO: + try { + const receipt = await vote(postId, 1).send(); + assert.fail('should have reverted before'); + } catch (error){ + assert(error.message.search('revert') > -1, 'Revert should happen'); + } }); }); \ No newline at end of file