embark/dapps/tests/app/config
Pascal Precht b4478a9c46 fix(@embark/ens): don't change shape of Smart Contract args in action hooks
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.
2019-11-11 14:01:48 -05:00
..
privatenet build: make DApp templates member packages of the monorepo 2019-03-05 10:20:57 -06:00
rinkeby build: make DApp templates member packages of the monorepo 2019-03-05 10:20:57 -06:00
ropsten build: make DApp templates member packages of the monorepo 2019-03-05 10:20:57 -06:00
blockchain.js refactor: initial steps toward 5.0.0-alpha.0 (#1856) 2019-08-30 16:50:20 -04:00
communication.json Fix/whisper communication (#1895) 2019-09-11 14:21:53 -04:00
contracts.js fix(@embark/ens): don't change shape of Smart Contract args in action hooks 2019-11-11 14:01:48 -05:00
namesystem.js refactor: initial steps toward 5.0.0-alpha.0 (#1856) 2019-08-30 16:50:20 -04:00
storage.json refactor: initial steps toward 5.0.0-alpha.0 (#1856) 2019-08-30 16:50:20 -04:00
webserver.json build: make DApp templates member packages of the monorepo 2019-03-05 10:20:57 -06:00