mirror of https://github.com/embarklabs/embark.git
Framework for serverless Decentralized Applications using Ethereum, IPFS and other platforms
https://framework.embarklabs.io/
b4478a9c46
This commit fixes the issue that it wasn't possible anymore to use named constructor arguments in Smart Contract configurations. For example, the following Smart Contract expects two constructor arguments: ```solidity contract SomeContract { constructor(address[] _addresses, int initialValue) public {} } ``` The first being a list of addresses, the second one a number. This can be configured as: ```js SomeContract: { args: [ ["$MyToken2", "$SimpleStorage"], 123 ] } ``` Notice how the order of arguments matters here. `_addresses` come first in the constructor, so they have to be defined first in the configuration as well. Another way to configure this is using named arguments, which is what's broken prior to this commit: ```js SomeContract: { args: { initialValue: 123, _addresses: ["$MyToken2", "$SimpleStorage"] } } ``` Using a notation like this ^ the order no longer matters as Embark will figure out the right values for the constructor arguments by their names. The reason this is broken is because there are several modules in Embark that register and run a `deployment:contract:beforeDeploy` action, which are allowed to mutate this configuration object. One of those modules is the `ens` module, which searches for ENS names in the arguments and figure out whether it has to replace it with a resolved address. One thing that particular module didn't take into account is that `args` could be either and array, or an object and will always return an array, changing the shape of `args` in case it was an object. This is a problem because another module, `ethereum-blockchain-client`, another action is registered that takes this mutated object in `determineArguments()` and ensure that, if `args` is actually an object, the values are put in the correct position matching the constructor of the Smart Contract in question. One way to solve this was to use the newly introduced [priority](https://github.com/embark-framework/embark/pull/2031) and ensure that `ens` action is executed after `ethereum-blockchain-client`'s. However, the actual bug here is that the ENS module changes the shape of `args` in the first place, so this commit ensures that it preserves it. |
||
---|---|---|
.github | ||
dapps | ||
packages | ||
scripts | ||
site | ||
.editorconfig | ||
.eslintrc.json | ||
.gitattributes | ||
.gitignore | ||
.npmrc | ||
.yarnrc | ||
CHANGELOG.md | ||
CODE_OF_CONDUCT.md | ||
CONTRIBUTING.md | ||
LICENSE | ||
README.md | ||
azure-pipelines.yml | ||
babel.config.js | ||
header.jpg | ||
lerna.json | ||
package.json | ||
tsconfig.json | ||
tslint.json | ||
yarn.lock |
README.md
What is Embark
Embark is a framework that allows you to easily develop and deploy Decentralized Applications (DApps).
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 Decentralized communication platforms (Whisper and Orbit). Swarm is supported for deployment.
With Embark you can:
Blockchain (Ethereum)
- 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.
- Manage different chains (e.g testnet, private net, livenet)
- Easily manage complex systems of interdependent contracts.
Decentralized Storage (IPFS, Swarm)
- Easily Store & Retrieve Data on the DApp through EmbarkJS. Including uploading and retrieving files.
- Deploy the full application to IPFS or Swarm.
- Import and deploy contracts hosted on Swarm.
Decentralized Communication (Whisper, Orbit)
- Easily send/receive messages through channels in P2P through Whisper or Orbit.
Web Technologies
- Integrate with any web technology including React, Foundation, etc..
- Use any build pipeline or tool you wish, including grunt, gulp and webpack.
$ npm -g install embark