Skip to content

Browser

This article provides a guide to deploy a browser with a tailored configuration to work better within a Confidential Computing deployment.

The Browser is a component that indexes the blockchain and provides a graphical user interface for inspecting smart contracts, blockchain accounts, and transactions. It is an optional tool any participating organization can use to explore the blockchain.

The browser requires a PostgreSQL database used for storage. The database instructions in the data provider article can be used to create a database. The initialization script should additionally include the following:

CREATE
DATABASE cc_browser;
GRANT ALL PRIVILEGES ON DATABASE
cc_browser TO postgres;

Create the following folder structure on the host file-system:

├──browser/
│ ├──browser-frontend/
│ │ ├── conf/
│ │ │ ├──config.js
│ ├──browser-backend/
│ │ ├── conf/
│ │ │ ├──cache/
│ │ │ │ ├──contracts.json
│ │ │ ├──server.json
│ │ ├──logs/

The server.json file should contain the following configuration:

{
"port": 8000, // (1)!
"database": {
// (2)!
"persistenceUnitName": "model",
"driver": "org.postgresql.Driver",
"url": "jdbc:postgresql://cc-postgres:5432/cc_browser", // (3)!
"user": "postgres",
"password": "postgres"
},
"shards": [],
"nodes": ["BLOCKCHAIN_NODE_REST_URL"], // (4)!
"disableBlockProducerOrchestration": true,
"disableAccountPluginTraversal": true,
"addresses": {}
}
  1. REST endpoint port to access the browser backend service.
  2. Configures a hibernate database connection for the database.
  3. URL to access the database. Defaults are based on the example database configuration.
  4. List of blockchain node REST endpoints urls. Used to communicate with the blockchain.
    • We recommend including the closest deployed node, e.g., if you are deploying a node yourself, add the url of the node you deployed to the list.

The contracts.json file, should contain the following:

[
{
"name": "Root Deploy",
"address": "04e13687dfc56c78302df5785d40bed80f52c188d0",
"blockTime": 0
}
]

The config.js frontend configuration file should contain the following:

var CONFIG = {
serverUrl: 'cc-browser-backend:8000', // (1)
blockchainUrl: 'BLOCKCHAIN_NODE_REST_URL', // (2)
blockchainShards: [],
blockTimeWarningThreshold: 20,
features: ['transactionPage', 'blockPage', 'accountPage', 'contractPage'],
addresses: {},
addressNames: {
'04e13687dfc56c78302df5785d40bed80f52c188d0': 'Root Deploy Contract',
'00c5dcb3bcf6f048b0a765184b55b3f8d89dea7377': 'Root Deployment User',
},
palette: {
primary: {
main: '#000000',
contrastText: '#FFFFFF',
},
secondary: {
main: '#1D70EA',
contrastText: '#FFFFFF',
},
tertiary: {
main: '#30A552',
contrastText: '#000000',
},
error: {
main: '#EB351C',
contrastText: '#000000',
},
warning: {
main: '#EB891C',
contrastText: '#000000',
},
info: {
main: '#1D70EA',
contrastText: '#FFFFFF',
},
success: {
main: '#30A552',
contrastText: '#000000',
},
text: {
primary: '#000000',
},
background: {
default: '#FFFFFF',
},
},
};
  1. The local url to communicate with the browser backend.
  2. Url to a blockchain node rest endpoint. Used to communicate with the blockchain. We recommend setting this to the closest deployed node, e.g., if you are deploying a node yourself, set the url to the url of the node you deployed.

Configure the authentication service docker image by adding the following to your docker-compose.yml file:

Click here to view: Browser - Example Docker Configuration
services:
confidential-computing-browser-frontend:
container_name: cc-browser-frontend
image: registry.gitlab.com/secata/pbc/browser/browser-frontend:latest
restart: unless-stopped
ports:
- "80:80"
volumes:
- /path/to/browser-frontend/conf:/conf
confidential-computing-browser-backend:
container_name: cc-browser-backend
image: registry.gitlab.com/secata/pbc/browser/browser-backend:latest
restart: unless-stopped
expose:
- 8000
environment:
JAVA_TOOL_OPTIONS: "-Xmx1536m"
volumes:
- /path/to/browser-backend/conf:/conf
- /path/to/browser-backend/logs:/logs
depends_on:
confidential-computing-postgres:
condition: service_healthy

The port mapping of the frontend is the port where to access the webpage on the local host network. The exposed port of the backend is where the frontend communicates with the backend service. This port should match the port specified in the server.json backend configuration file.

The mapped volumes of the two images should correspond to the folders created in the storage section.

  1. Open your terminal and navigate to the directory containing your docker-compose.yml file.

  2. Execute the following Docker Compose command to start the browser frontend and backend containers:

    Terminal window
    docker-compose up -d confidential-computing-browser-frontend confidential-computing-browser-backend
  3. Check the logs of the authentication container to ensure they are running without errors:

    Terminal window
    docker logs -f confidential-computing-browser-frontend
    Terminal window
    docker logs -f confidential-computing-browser-backend