https://github.com/oasislabs/web3c.js
A js library for confidential web3 calls
https://github.com/oasislabs/web3c.js
npm-package web3 web3js
Last synced: 3 months ago
JSON representation
A js library for confidential web3 calls
- Host: GitHub
- URL: https://github.com/oasislabs/web3c.js
- Owner: oasislabs
- License: other
- Created: 2018-07-18T04:26:09.000Z (over 7 years ago)
- Default Branch: master
- Last Pushed: 2023-04-26T13:05:13.000Z (over 2 years ago)
- Last Synced: 2024-04-15T02:52:03.542Z (over 1 year ago)
- Topics: npm-package, web3, web3js
- Language: JavaScript
- Homepage: https://oasislabs.com
- Size: 2.36 MB
- Stars: 38
- Watchers: 22
- Forks: 10
- Open Issues: 45
-
Metadata Files:
- Readme: README.md
- Contributing: docs/CONTRIBUTING.md
- License: LICENSE
- Code of conduct: docs/CODE_OF_CONDUCT.md
Awesome Lists containing this project
README
# WARNING
web3c.js is deprecated. For the latest, please see https://github.com/oasislabs/oasis.js.
# web3c.js
[](https://circleci.com/gh/oasislabs/web3c.js)[](https://coveralls.io/github/oasislabs/web3c.js)
A Web3 extension for confidential transactions.
## Installation / Usage
Include `web3c.js` in your project, require web3c within your webpack project, or
attach the confidentiality extension onto your existing use of Web3.
```bash
$ npm install --save web3c
```
For convenience, we automatically build the latest version of the library here:
[https://cdn.oasiscloud.io/web3c-latest/web3c.js](https://cdn.oasiscloud.io/web3c-latest/web3c.js)
### Creating a new Web3c Project
You can either include a script tag linking the web3c library as you would a
dependency on [web3](http://github.com/ethereum/web3.js/), or use the library
with a `require` statement in either your Node or webpack project. Web3
will be automatically required by web3c in these cases and the wrapper can be
used in place of web3.
### Constructing a Web3c Object
Constructing a Web3c object can be done in the same way as a Web3 object, with
some additional options. For example,
```javascript
const Web3c = require('web3c');
let web3c = new Web3c(provider, Web3, {
keyManagerPublicKey
});
```
The first argument, `provider`, is a standard Web3 provider. The last two arguments
are optional and in most cases shouldn't be used at all unless you know what you're
doing and want to customize Web3c. Of the arguments, `Web3` is an override for
the underlying Web3 library to use, and the last object is a set of options to use.
Here one can specify the public key of the remote key manager to use.
### Extending an existing Web3 project
If your dapp / project already has a web3 library, you can include the web3c
library in addition, and it will wrap around the existing web3 instance.
Our build defines web3 as an optional dependency, and the web3c library will
not depend upon the vendored web3 unless no web3 context is present in the
environment into which it is included.
If you want to convert an existing contract to confidential, you will change
the call from `new web3.eth.Contract` to `new web3.oasis.Contract`. If your
project interacts with an already deployed contract, you should add the key
of the confidential contract as an additional option to this call to ensure
safety:
```javascript
let myContractInstance = new web3.oasis.Contract(abi, deployed_address, {
key: "0x59e35409ffdb0be6a74acc88d5e99e2b50782662fa5bf834b8b9d53bc59c7c4a"
});
```
If the contract is deployed as part of your project, web3c will retrieve the
longterm key when the contract is deployed, and will attempt to store it for
subsequent uses automatically.
## Building / Development
The web3c library build uses [webpack](https://webpack.js.org/),
and can be initiated by npm. Compile with `npm run-script build`, or
develop interactively with `npm run-script watch`.
Tests are run by CI, ensuring that the library is in a state the builds, that
all tests pass, and that the code passes a lint check. These tests can be
run locally with `npm test`. An additional set of browser integration tests
are run manually before releases to ensure functionality on the range of
expected environments. These can be run via the command
`npm run-script test:browser`.
### Webpack Integration
Web3c is structured with a ["soft"](https://webpack.js.org/guides/code-splitting/)
dependency on web3. This means that a default compilation of a project requiring
web3c with webpack will not have web3 loaded synchronously. This choice adds
a bit of complexity you should be aware of, but is useful because it allows your
project to load faster and never trigger the full download of web3 in cases where
the injected wallet in the user's browser already contains a copy.
There are two recommeded strategies for handling loading of web3c in a webpack
project:
* **Synchronous web3** You can make sure the web3 dependency ends up in the same
webpack code module by including it as a direct dependnecy:
```javascript
const web3c = require('web3c');
require('web3'); // eslint-disable-line no-unused-expressions
```
Note: You don't need to use web3, as all of its methods are accessible through the
web3c object. Adding a `require` call somewhere in your project is a simple way
to pull the dependent code into the same code module for synchronous use.
* **Asynchronous web3** You can defer usage of web3c until web3 is available:
```javascript
const web3c = require('web3c');
...
web3c.Promise.then(initialize);
```