embark/packages/plugins/ens
emizzle 095bd0b971 feat(@embark/quorum): Add support for Quorum blockchains
Add support for *connecting to* Quorum blockchains. This plugin will not start a Quorum node or nodes automatically as Embark does with other chains.

This plugins supports deploying contracts publically and privately using the Tessera private transaction manager.

This plugin supports sending of public and private transactions using the Tessera private transaction manager.

Add ability to skip bytecode checking as part of the contract deployment process. Instruct the deployer to skip checking if the contract bytecode exists on-chain before deploying the contract. This is important in the case of having many private nodes in a network because if a contract is deployed privately to node 1 and 7, running Embark on node 2 should skip the bytecode check as the contract *is not* deployed on node 2, nor do we want it deployed on node 2. If the bytecode check was in place, Embark would have deployed it to node 2 and therefore not adhered to the privacy needs.

Add Ethereum contract deployer for Quorum, allowing for deploying of public and private contracts using `privateFor` and `privateFrom` (see Contract config updates below).

Add web3 extensions enabling specific functionality for Quorum. Extensions includes those provided by [`quorum-js`](https://github.com/jpmorganchase/quorum.js), as well as some custom monkeypatches that override web3 method output formatting, including:
 - web3.eth.getBlock
 - web3.eth.getTransaction
 - web3.eth.getTransactionReceipt
 - web3.eth.decodeParameters
DApps wishing to take advantage of these overrides will need to patch web3 as follows:
```
import {patchWeb3} from "embark-quorum";
import Web3 from "web3";

let web3 = new Web3(...);
web3 = patchWeb3(web3);
```

Add support for sending a raw private transaction in the Quorum network. This includes running actions from the proxy after an `eth_sendTransaction` RPC request has been transformed in to `eth_sendRawTransaction` after being signed.

fix(@embark/transaction-logger): Fix bug when sending a 0-value transaction.

Add `originalRequest` to the proxy when modifying `eth_sendTransaction` to `eth_sendRawTransaction`, so that the original transaction parameters (including `privateFor` and `privateFrom`) can be used to sign a raw private transaction in the `eth_sendRawTransaction` action.

Added the following properties on to blockchain config:
 - *`client`* `{boolean}` - Allows `quorum` to be specified as the blockchain client
 - *`clientConfig/tesseraPrivateUrl`* `{string}` - URL of the Tessera private transaction manager
```
client: "quorum",
clientConfig: {
  tesseraPrivateUrl: "http://localhost:9081" // URL of the Tessera private transaction manager
}
```
Added the following properties to the contracts config:
 - *`skipBytecodeCheck`* `{boolean}` - Instructs the deployer to skip checking if the bytecode of the contract exists on the chain before deploying the contract. This is important in the case of having many private nodes in a network because if a contract is deployed privately to node 1 and 7, running Embark on node 2 should skip the bytecode check as the contract *is not* deployed on node 2, nor do we want it deployed on node 2. If the bytecode check was in place, Embark would have deployed it to node 2 and therefore not adhered to the privacy needs.
  - *`privateFor`* `{string[]}` - When sending a private transaction, an array of the recipient nodes' base64-encoded public keys.
  - *`privateFrom`* `{string}` - When sending a private transaction, the sending party's base64-encoded public key to use
```
environment: {
  deploy: {
    SimpleStorage: {
      skipBytecodeCheck: true,
      privateFor: ["ROAZBWtSacxXQrOe3FGAqJDyJjFePR5ce4TSIzmJ0Bc"],
      privateFrom: "BULeR8JyUWhiuuCMU/HLA0Q5pzkYT+cHII3ZKBey3Bo="
    }
  }
},
```

 - *`proxy:endpoint:http:get`* - get the HTTP endpoint of the proxy regardless of blockchain settings
 - *`proxy:endpoint:ws:get`* - get the WS endpoint of the proxy regardless of blockchain settings

 - *`runcode:register:<variable>`* - when variables are registered in the console using `runcode:register`, actions with the name of the variable (ie `runcode:register:web3`) will be run *before* the variable is actually registered in the console. This allows a variable to be modified by plugins before being registered in the console.
2020-03-23 20:19:04 +01:00
..
src feat(@embark/quorum): Add support for Quorum blockchains 2020-03-23 20:19:04 +01:00
test build(deps-dev): bump eslint-plugin-jest from 22.5.1 to 23.8.1 2020-03-05 11:25:18 -06:00
.npmrc move embarkjs packages & remove embark- prefix from some folders (#1879) 2019-09-06 18:26:08 -04:00
CHANGELOG.md chore(prerelease): 5.3.0-nightly.12 2020-03-21 00:15:48 +00:00
README.md build: tidy up the monorepo in prep for v5.0.0-alpha.0 2019-10-01 13:29:53 -05:00
index.js fix: ensure that packages properly specify their dependencies 2020-02-25 14:52:10 -06:00
package.json chore(prerelease): 5.3.0-nightly.12 2020-03-21 00:15:48 +00:00
tsconfig.json build: implement collective typecheck 2019-12-13 13:59:47 -05:00

README.md

embark-ens

Implements ENS support in Embark

This module:

  • registers console commands to interact with ENS
  • deploys & setups ENS contracts depending on the network
  • implements ENS support in EmbarkJS
  • setups generated code acording to the config

API

command: ens:resolve - returns the address of an ens name

arguments:

  • name - ens name to resolve

response:

  • error - if an error occurs, null otherwise
  • address - address associated to the ens name given

command: ens:isENSName - checks is it's a (valid) ENS name

arguments:

  • name - ens name to validate

response:

  • error - if an error occurs, null otherwise
  • result - true/false depending if name given is a valid ens name

command: storage:ens:associate - associates an hash to an ENS domain

arguments:

  • options
    • name - ens name
    • storageHash - hash to associate

response:

  • error - if an error occurs, null otherwise

Web API

endpoint: GET /embark-api/ens/resolve - returns the address of an ens name

arguments:

  • name - ens name to resolve

response:

{
  address: <address of ens name>
}

endpoint: GET /embark-api/ens/lookup - returns the ens name of an address

arguments:

  • address - address to query

response:

{
  name: <ens name of address>
}

endpoint: POST /embark-api/ens/register registers a domain or subdomain

arguments:

  • subdomain - ens domain
  • address - address to associate

response:

{
  name: <ens name>
  address: <address>
}

Dependencies

  • async
  • eth-ens-namehash
  • embarkjs.utils
    • secureSend
  • embark utils
    • AddressUtils
    • hashTo32ByteHexString
    • recursiveMerge