Commit 4f6954f8 by Johan

Initial commit

parents
node_modules
package-lock.json
*.swp
*.swo
# .prettierrc
printWidth: 140
useTabs: true
tabWidth: 4
trailingComma: none
arrowParens: always
bracketSpacing: true
MIT License
Copyright (c) 2018 Paramation
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
This diff is collapsed. Click to expand it.
<!DOCTYPE html>
<html>
<head>
<title>Ingress | The Gateway to the Blockchain</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link rel="shortcut icon" href="img/favicon.ico" />
<link href="css/bootstrap.min.css" rel="stylesheet" type="text/css" media="all" />
<link href="css/font.css" rel="stylesheet" type="text/css" media="all" />
<link href="css/index.css" rel="stylesheet" type="text/css" media="all" />
</head>
<body>
<div id="particles-js">
<div id="header" class="big about">
<a href="/">
<div class="logo-wrapper">
<img src="img/ingress-logo.svg" class="ingress-logo" />
</div>
<div class="title">
Ingress
</div>
</a>
</div>
<div id="tagline" class="big about">
A gateway to the <span id="bright">bright</span> web
</div>
</div>
<div class="white">
<div class="section">
<div class="title">
For Dapp Creators
</div>
<div class="hr"></div>
<div class="row">
<div class="col-xs-12 col-sm-4 col-md-4">
<div class="icon-wrapper">
<img src="img/developer.svg" />
</div>
<div class="subheader">
Create a Dapp
</div>
<div class="description">
and host in on three P2P protocols (DAT, IPFS and Swarm) with one upload.
</div>
</div>
<div class="col-xs-12 col-sm-4 col-md-4">
<div class="icon-wrapper">
<img src="img/memory.svg" />
</div>
<div class="subheader">
Checksum it
</div>
<div class="description">
and mark it with metadata.
</div>
</div>
<div class="col-xs-12 col-sm-4 col-md-4">
<div class="icon-wrapper">
<img src="img/key.svg" />
</div>
<div class="subheader">
Register it to Ingress' <a href="https://etherscan.io/address/0x9dc5ae542328b85fc979a7000ae8ceca62a3c00a#code" target="_blank">Ethereum Registrar</a>
</div>
<div class="description">
to automate validation of your Dapp's front end for your users.
</div>
</div>
</div>
</div>
</div>
<div class="gray">
<div class="section">
<div class="title">
For Dapp Users
</div>
<div class="hr"></div>
<div class="row">
<div class="col-xs-12 col-sm-4 col-md-4">
<div class="icon-wrapper">
<img src="img/sync.svg" />
</div>
<div class="subheader">
Load a Dapp
</div>
<div class="description">
securely from P2P protocols.
</div>
</div>
<div class="col-xs-12 col-sm-4 col-md-4">
<div class="icon-wrapper">
<img src="img/notification.svg" />
</div>
<div class="subheader">
Receive Warnings
</div>
<div class="description">
if code has changed or new versions are available.
</div>
</div>
<div class="col-xs-12 col-sm-4 col-md-4">
<div class="icon-wrapper">
<img src="img/cast.svg" />
</div>
<div class="subheader">
Support &amp; Secure Dapps
</div>
<div class="description">
by pinning them to your own nodes and keeping them available.
</div>
</div>
</div>
</div>
</div>
<div class="white">
<div class="section">
<div class="title">
Why Ingress?
</div>
<div class="hr"></div>
<div class="row">
<div class="col-xs-12 col-sm-4 col-md-4">
We created Ingress to help solve security vulnerabilities in decentralized applications ("Dapps"). Ingress is still just a prototype and we have a ways to go, but we are offering it up as one possible model for securing the user experience when using Dapps.
</div>
<div class="col-xs-12 col-sm-4 col-md-4">
Blockchains can act like giant shared computers than run the same application code on every machine. This allows them act like global computer that can execute programs with trust in their end results.
</div>
<div class="col-xs-12 col-sm-4 col-md-4">
P2P file storage protocols can act like a giant shared hard drive for blockchain global computers by storing files on decentralized networks at relatively lower cost than on a blockchain.
</div>
</div>
</div>
</div>
<div class="gray">
<div class="section">
<div class="title">
Global Shared Computers Enable Dapps
</div>
<div class="hr"></div>
<div class="row">
<div class="col-xs-12 col-sm-6">
When blockchains and P2P file storage work together, they are capable of producing unstoppable applications with their resources ran and served on decentralized networks.
</div>
<div class="col-xs-12 col-sm-6">
However, blockchains and P2P file storage protocols enable Dapps that work on a global computer. But for many Dapps, their user experiences often have a requirement to go through centralized architecture. Their front ends can be served from an owned server that is access through an owned domain name.
</div>
</div>
</div>
</div>
<div class="white">
<div class="section">
<div class="title">
Ingress Helps Secure Their "Front Ends"
</div>
<div class="hr"></div>
<div class="row">
<div class="col-xs-12 col-sm-4 col-md-4">
Blockchains and P2P file storage create decentralized "Back Ends" for Dapps, but not the "Front Ends." When a Dapp front end is susceptible to DNS attacks, certificate spoofing, or having their centralized web servers compromised, they become a target.
</div>
<div class="col-xs-12 col-sm-4 col-md-4">
To help reduce those risks, Ingress' concept is to store and serve Dapp Front End code on P2P file storage, and then secure the state of that code by registering checksums to an immutable blockchain registry.
</div>
<div class="col-xs-12 col-sm-4 col-md-4">
When a Dapp living on P2P file storage is accessed through Ingress, Ingress will consult its blockchain registrar and validate that the file loaded from P2P is the file registered to the blockchain. This offers another small step in protection for Dapp users.
</div>
</div>
</div>
</div>
<footer class="about">
<p>Ingress.one's service provided by <a href="https://paramation.com" target="_blank">Paramation</a> | <a href="https://gitlab.paramation.com/paramation-public/ingress-node" target="_blank">Ingress' code</a> is FOSS, licensed <a href="https://gitlab.paramation.com/paramation-public/ingress-node" target="_blank">MIT</a> | <a href="/about">About</a> | <a href="/terms">Terms &amp; Conditions</a></p>
</footer>
<script src="js/particles.js"></script>
<script type="text/javascript">
window.onload = () => {
particlesJS.load("particles-js", "js/particles-polygon-config.json", () => {});
document.body.style.display = 'block';
};
</script>
</body>
</html>
## Core Concepts
#### Secure the code, not just the domain.
<details>
<summary> Migrate application security to the actual code instead of relying on domain names and certs.
</summary>
<br>
<UL>
<li> Dapps tend to interface with cryptocurrencies—so they are similar to online banks. <b>Buuut...</b> without insurance, and thefts that can’t be reversed. This makes them an attractive target for bad guys.</li>
<li><a href="https://globalcoinreport.com/ethereum-eth-users-funds-stolen-as-myetherwallet-gets-hacked/">MyEtherWallet</a> and <a href="https://mashable.com/2017/12/21/etherdelta-hacked/">EtherDelta</a> were both victims of domain name hijacking, where the attackers swapped out payment addresses and replaced their legitimate applications with fake ones.
</li>
<li>
The crypto ecosystem is filled with <a href="https://www.hackread.com/fake-bittrex-cryptocurrency-exchange-site-stealing-user-funds/">phishing domains</> that have similar domain names as trusted sites, but go to malicious content.
</li></ul>
That’s why we want to help solve by <b>locking down Dapp interfaces</b> to immutable smart contracts, which brings the security of blockchains into the front end code that talks to them.
<br>
</details>
#### Store and serve Dapps on P2P file systems but make them accessible over HTTP.
<details>
<summary> Utilizing distributed filesystems to the Dapp code can be safer and make Dapps more unstoppable.
</summary>
<br>
<ul>
<li>The blockchain use case creates immutability and “unstoppable-ness” through decentralization. There is no single server to compromise, fail, or take down.
</li>
<li>But many Dapps still serve their front end code from a central servers with rented domain names, which creates single-points of failure.
</li>
<li>We think that a good litmus test for a truly “<b>Decentralized Application</a>” is the question: <b>"Will this thing still be operating and be useful if the owners disappear, a server goes offline, or someone forgets to renew the domain name?"</b>
</li>
<br>
<b>We think housing the entire Dapp on distributed filesystems, in addition to blockchains, is a good step in passing that test. </b>
<br>
</details>
#### Replace central and for-profit certificate registrars with decentralized smart contract registrars.
<details>
<summary>On web, most apps are secured via “trusted certificate” authorities. Those certs have to be renewed and paid for, and the certificate “authorities” <a href="http://bravatek.com/comodo-certificate-hack-it-gets-worse/">don’t always do the best job</a>.
</summary>
<br>
<ul>
<li>
If you install an application on your personal computer, most of the time that application is checked against a <b>registry</b> and <b>verified for integrity</b> to protect you from installing something with malware. </li>
<li>
<b>Ingress brings a similar security layer to Dapp application code</b> by using a Smart Contract (on Ethereum) to store the registrations and checksums. It then consults the contract again to verify the integrity of the application code on every load for users.</li>
<li>
It does not protect against bad code or intentionally malicious Dapps, but it can protect against unwanted changes. And it allows you to prove or validate the authenticity of a Dapp once its live.</li>
</ul>
</details>
#### Make it easy for the community to help keep Dapps and their content alive and decentralized.
<details><summary> We want to bring users in to help solve decentralized storage for applications.
</summary>
<br>
<ul>
<li>
Ingress' last goal is to make it easier for Dapps to store and serve content over a range of P2P filesystems, and eventually utilize their own users to keep their files available and distributed.</li>
<li>
We also wanted to make it easier for new developers or casual users to create, host, serve, and secure sever-less Dapps without having to deal with the architecture and some security aspects.</li>
</ul>
</details>
\ No newline at end of file
# ignore all files in this dir...
*
# ... except for this one.
!.gitignore
### Ingress' Database
Ingress uses [hyperdb](https://github.com/mafintosh/hyperdb) for storage, which is a distributed database built on top of the [dat protocol](https://datproject.org/), and is used to connect Ingress nodes and keep all of the Dapp data decentralized and publicly verifiable.
You can download, sync, and act as a node for the DB without running a full ingress application by using the dat protocol.
__Install dat__
```bash
npm install -g dat
```
__Install Hyperdb CLI__
```bash
npm install -g hyperdb-cli
```
__Get the discovery key__ for the current hyperdb on Ingress.one (note, the key is likely to change as we continue upgrading Ingress.one).
```bash
curl https://www.ingress.one/api/gethyperdbkey
```
```json
{"publicKey":"a400a8fd69973642a7cff99574dd516599ee8a59215b00c3f85319ff255b8177","discoveryKey":"6156591516d008d84061b0e4c2095772a53283180e015fe98e600814cfca7281","error":null}
```
__Access the db__
```bash
hyperdb <discoveryKey>
```
### Ingress' API (storing to the DB)
Dapps and Users can store and retrieve their own keys and values via Ingress' API. Ingress' DB is a key-value store, with key spaces assigned to each public Ethereum address that governs Dapps owned and individual data for Dapps not-owned.
The key spaces that can be written to by the API are:
```
/dapp/DAPP_OWNER_ADDRESS/DAPP_NAME/userStorage/USER_ADDRESS
```
This space consolidates Dapp data by Dapp using the Dapp owner's address and Dapp name.
and
```
/address/USER_ADDRESS/dappStorage/DAPP_OWNER_ADDRESS/DAPP_NAME
```
This space store individual Dapp data per user in its own storage space.
>A single API call write to both spaces
#### Storing User Data
Storing user data:
```
POST https://www.ingress.one/api/user/storedappdata
```
Required JSON object
```
{
dappOwnerAddress: DAPP_OWNER_ADDRESS,
dappName: DAPP_NAME,
userAddress: USER_ADDRESS,
payload: {
key1: value1,
key2: value2,
...
},
signature: {
data: SIGNED_DATA,
sig: WEB3_SIGNATURE
}
}
```
>`payload` is the JSON object you want to store. You can define new keys and values in JSON objects in `payload` that will be added to the DB.
__Auth:__ To write to a users' key space in the DB, a signature from their public key on the data is required.
You can then retrieve Dapp storage with a `GET` call.
Retrieving user data:
```
GET https://www.ingress.one/api/user/getdappdata?dappOwnerAddress=DAPP_OWNER_ADDRESS&dappName=DAPP_NAME&userAddress=USER_ADDRESS
```
Will return the `payload`
>Using Ingress' hyperdb allows Dapp developers and users to persist information for use in Dapps on a distributed key-value store, without having to use centralized storage or incur the expense of writing to a blockchain.
<!DOCTYPE html>
<html>
<head>
<title>Ingress | The Gateway to the Blockchain</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link rel="shortcut icon" href="img/favicon.ico" />
<link href="css/bootstrap.min.css" rel="stylesheet" type="text/css" media="all" />
<link href="css/font.css" rel="stylesheet" type="text/css" media="all" />
<link href="css/dataTables.bootstrap4.min.css" rel="stylesheet" type="text/css" media="all" />
<link href="css/index.css" rel="stylesheet" type="text/css" media="all" />
</head>
<body>
<div id="particles-js">
<div id="header" class="big about">
<a href="/">
<div class="logo-wrapper">
<img src="img/ingress-logo.svg" class="ingress-logo" />
</div>
<div class="title">
Ingress
</div>
</a>
</div>
<div id="tagline" class="big about">
A gateway to the <span id="bright">bright</span> web
</div>
</div>
<div class="white">
<div class="section">
<div class="title">
DB History Stream
</div>
<div class="hr"></div>
<div id="db-history-table-wrapper">
<table id="db-history-table" class="table">
<thead>
<tr>
<th scope="col">Key</th>
<th scope="col">Value</th>
<th scope="col">Seq</th>
<th scope="col">Feed</th>
</tr>
</thead>
<tbody></tbody>
</table>
</div>
</div>
</div>
<footer class="about">
<p>Ingress.one's service provided by <a href="https://paramation.com" target="_blank">Paramation</a> | <a href="https://gitlab.paramation.com/paramation-public/ingress-node" target="_blank">Ingress' code</a> is FOSS, licensed <a href="https://gitlab.paramation.com/paramation-public/ingress-node" target="_blank">MIT</a> | <a href="/about">About</a> | <a href="/terms">Terms &amp; Conditions</a></p>
</footer>
<div id="overlay">
<div class="lds-facebook">
<div></div>
<div></div>
<div></div>
</div>
<div id="loader-text">Loading ...</div>
</div>
<script src="js/jquery-2.2.3.min.js"></script>
<script src="js/jquery.dataTables.min.js"></script>
<script src="js/dataTables.bootstrap4.min.js"></script>
<script src="js/particles.js"></script>
<script src="js/dbhistory.js"></script>
</body>
</html>
{
"domainName": "ingress.one",
"maxDappSize": 21495808,
"port": 8087,
"sslPort": 443,
"swarmPort": 8500,
"datPath": "./dat/",
"uploadPath": "./upload/",
"downloadPath": "/tmp/",
"logPath": "./log/",
"supportedProtocols": ["ipfs", "dat", "swarm"],
"ethNetworkProvider": "https://rinkeby.infura.io/",
"registrarContractAddress": "0x6f4199338df7116d1690da779ae10a17a6072cb7",
"sslKeyFile": "./keys/ingress.key",
"sslCertFile": "./keys/ingress.crt",
"sslCaFile": "./keys/fullchain.crt",
"hashCharLimit": 50,
"hyperDbPath": "./hyperdb/dev",
"hyperDbKeyFile": "./keys/dev.hyperdb.key",
"hyperDbKeyPrefix": "/DBSpace/ingress.one"
}
## Using Ingress
#### Distributed Filesystem / Peer-to-Peer Protocol Support
Ingress’ is primarily a gateway/passthrough for content stored on P2P storage systems, tailored for Dapps. It currently supports:
* DAT - https://datproject.org/
* IPFS - https://ipfs.io/
* Swarm - https://github.com/ethersphere/swarm
#### Tag, checksum, and register:
If you create a single-file Dapp, you can upload it and have Ingress inject a meta tag. It looks like this:
```html
<ingress version="1" registrant="" name="MyAwsomeDapp" hash="", DBenabled=”1”></ingress>
```
After it injects the tag, Ingress will take the __tagged version__ and run it through a __hashing function__ to produce a checksum.
>You can then optionally register your Dapp with its checksum to Ingress' Smart Contract Registrar on Ethereum’s Main net. This process “locks” the front end of your Dapp to its backend (e.g. whatever Smart Contracts you are using, along with your code). This can also be useful if you want to prove content creation by point in time.
>When you or your users access the Dapp over Ingress, Ingress will run the same hashing function and validate the checksum to ensure the intended code hasn't been modified from its original intent.
#### Cross-pollinate files between P2P filesystems and have Ingress pin them for you
__Uploading__
You can upload a Dapp (or any file) and have Ingress add it to DAT, IPFS, and/or Swarm in one submission. This saves times, and let's you add your Dapp to three distributed filesystems without having to install them yourself.
__Keys__
Please note that Ingress does not hand back the private keys (for now). We envisioned Ingress to mostly lockdown Dapp code at the time of ingestion, so controlling the keys matters less depending on the protocol (e.g. verification is done by the Registrar smart contract and the checksum, but is agnostic to where the Dapp is served from).
__Adding Dapps directly from IPFS, Swarm, or DAT__
If you want to generate and maintain your own keys, you can do so and still use Ingress to pin it for you and validate your code for your users. If you add your file to one of the above protocols on your own, but add an Ingress tag with the "DBenabled" attribute marked, Ingress will sync it, pin it, and add it to the DB if it can find it.
>__Note:__ if you add or view a Dapp that is previously unknown to Ingress that does not have a tag tag set to "DBenabled," Ingress will act as a gateway for it, but nothing more. This is out of respect for user privacy and to prevent unwanted or unintentional additions to the DB.
#### Viewing and interacting with Dapps
__The meta tag Ingress optionally inject serves a couple different purposes.__
```html
<ingress version="1" registrant="" name="MyAwsomeDapp" hash="", DBenabled=”1”></ingress>
```
1. First, when Ingress is acting as an HTTP gateway for a Dapp stored on P2P, it tells Ingress how to handle it regardless of whether or not Ingress has seen it before.
2. When a Dapp is loaded over Ingress, Ingress consults the Smart Contract Registrar to determine version and its checksum.
3. Ingress runs the Dapp loaded through the same hashing function on every load and will throw a warning if the hash deviates from the checksum stored on Ethereum (the P2P protocols each have their own file integrity mechanisms, but this adds another layer to protect against fringe cases).
4. The “version” attribute tells Ingress which Dapp version is being served. If Ingress finds a __new version__ in the Registrar, it will __notify users__ viewing your old version that you have released a new one, and then direct them to it.
>The version attribute allows you to update your Dapp without worrying about URLs or switching P2P hashes, and your users can get some confidence that the new version came from the same developer as the Dapp they were using before that they know and trust.
#### Ingress’ Distributed Database (hyperdb):
The __“DBenabled”__ attribute in the Ingress tag tells Ingress whether or not to include the Dapp in its decentralized database, and whether or not to pin the file for you or ignore it and retrieve it on load.
Ingress uses [hyperdb](https://github.com/mafintosh/hyperdb) to store information on Dapps, which stores it on a distributed database that other Ingress nodes or the general public can subscribe to and share.
>Hyperdb is a distributed scalable database built on top of hypercore, which is a distributed append-only log. Hypercore logs are combined together to form a DAG (_directed acyclic graph_), which organizes the database while making it public and verifiable.
>Anyone can verify the integrity and history of the DB by using DAT and syncing Ingress’ DB in full, or exporting a log.
*use discovery key: [ ], or its public key: [ ]).
>Again, credit and much appreciation to mafintosh, pfrazee, and everyone with the DAT project for building and open sourcing the technology behind it.
#### Hyberdb and Ingress Nodes
<details>
<summary> How nodes treat data and sync.
</summary>
<br>
<ul>
<li>Ingress' application adopts the <b>"decentralization paradigm"</b> as much as possible while still operating on a centralized sever and DNS. </li>
<li>Ingress does not use accounts or logins, prefering blockchain mechanisms and message signing over taking custody of data.</li>
<li>It does not use cookies, trackers, advertising, or even ask for or store personal information other than what is being voluntary put into or pulled from distributed applications voluntarily by users.</li>
<li>The application does processing internally, but pretty much everything else is done on either blockchains or distributed file storage systems, which are publicly available and verifiable.</li>
<li>Because Ingress' persistence layer is already running on decentralized protocols, additional Ingress nodes are able to connect to it and participate with each other.</li>
</ul>
</details>
>if a Dapp is registered on Ingress.one, an additional node is able to sync that registration, pin it, act as a gateway, etc. without worrying about an integration or migrating a closed DB.
# ignore all files in this dir...
*
# ... except for this one.
!.gitignore
This diff is collapsed. Click to expand it.
# ignore all files in this dir...
*
# ... except for this one.
!.gitignore
# ignore all files in this dir...
*
# ... except for this one.
!.gitignore
{
"name": "ingress",
"version": "1.0.0",
"description": "",
"main": "server.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"precommit": "pretty-quick --staged",
"ipfs": "ipfs daemon --unrestricted-api=true --enable-gc=true",
"hypercored": "hypercored --cwd ./dat",
"dev":
"node server.js dev | tee -a log/dev-server.log 2>>log/dev-server-error.log & npm run ipfs>>log/dev-ipfs.log 2>>log/dev-ipfs-error.log & npm run hypercored>>log/dev-hypercored.log 2>>log/dev-hypercored-error.log",
"prod":
"node server.js prod | tee -a log/prod-server.log 2>>log/prod-server-error.log & npm run ipfs>>log/prod-ipfs.log 2>>log/prod-ipfs-error.log & npm run hypercored>>log/prod-hypercored.log 2>>log/prod-hypercored-error.log"
},
"repository": {
"type": "git",
"url": "githost:/usr/local/git/ingress.git"
},
"author": "",
"license": "MIT",
"dependencies": {
"cheerio": "^1.0.0-rc.2",
"dat-swarm-defaults": "^1.0.1",
"discovery-swarm": "^5.1.1",
"eth-sig-util": "^1.4.2",
"express": "^4.16.3",
"express-force-ssl": "^0.3.2",
"hyperdb": "^3.1.2",
"js-sha256": "^0.9.0",
"md5": "^2.2.1",
"mkdir-recursive": "^0.4.0",
"morgan": "^1.9.0",
"multer": "^1.3.0",
"parse-domain": "^2.0.0",
"particles.js": "^2.0.0",
"rotating-file-stream": "^1.3.6",
"sha1": "^1.1.1",
"socket.io": "^2.1.0",
"toastr": "^2.1.4",
"util.promisify": "^1.0.0",
"web3": "^0.20.6"
},
"devDependencies": {
"dat": "^13.10.0",
"husky": "^0.14.3",
"hypercored": "^1.4.1",
"ipfs": "^0.28.2",
"prettier": "1.12.1",
"pretty-quick": "^1.4.1"
}
}
{
"domainName": "ingress.one",
"maxDappSize": 21495808,
"port": 80,
"sslPort": 443,
"swarmPort": 8500,
"datPath": "./dat/",
"uploadPath": "./upload/",
"downloadPath": "/tmp/",
"logPath": "./log/",
"supportedProtocols": ["ipfs", "dat", "swarm"],
"ethNetworkProvider": "https://mainnet.infura.io/",
"registrarContractAddress": "0x9dc5ae542328b85fc979a7000ae8ceca62a3c00a",
"sslKeyFile": "./keys/ingress.key",
"sslCertFile": "./keys/ingress.crt",
"sslCaFile": "./keys/fullchain.crt",
"hashCharLimit": 50,
"hyperDbPath": "./hyperdb/prod",
"hyperDbKeyFile": "./keys/prod.hyperdb.key",
"hyperDbKeyPrefix": "/DBSpace/ingress.one"
}
This source diff could not be displayed because it is too large. You can view the blob instead.
table.dataTable {
clear: both;
margin-top: 6px !important;
margin-bottom: 6px !important;
max-width: none !important;
border-collapse: separate !important;
}
table.dataTable td,
table.dataTable th {
-webkit-box-sizing: content-box;
box-sizing: content-box;
}