Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: Add support for smart contract verification #570

Open
wants to merge 3 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 11 additions & 4 deletions .env
Original file line number Diff line number Diff line change
Expand Up @@ -91,14 +91,21 @@ ENVOY_IMAGE_TAG=v1.22.0
MIRROR_NODE_EXPLORER_IMAGE_PREFIX=gcr.io/hedera-registry/
MIRROR_NODE_EXPLORER_IMAGE_TAG=24.3.0

### Mirror Node Explorer ###
DOCKER_LOCAL_MIRROR_NODE_MENU_NAME=LOCALNET
DOCKER_LOCAL_MIRROR_NODE_URL=http://127.0.0.1:5551/

### Prometheus ####
PROMETHEUS_IMAGE_NAME=prom/prometheus
PROMETHEUS_IMAGE_TAG=v2.41.0

### Grafana ####
GRAFANA_IMAGE_NAME=grafana/grafana
GRAFANA_IMAGE_TAG=8.5.16

### Sourcify ####
SOURCIFY_TAG=main
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should we pin to a specific version, e.g., 0.3.0?


#Sourcify Server
SOURCIFY_SERVER_PORT=5555
SOURCIFY_NODE_ENV=development

#Sourcify ui
SOURCIFY_UI_PORT=1234
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is it possible to use the same external port that hedera-sourcify uses for ui, i.e., 3001?

https://github.com/hashgraph/hedera-sourcify/blob/e313ed01504026ad6e0884b786da2a20c3305593/.env#L7

It's better if we provide a consistent DX across repos.

SOURCIFY_REPOSITORY_PORT=10000
54 changes: 54 additions & 0 deletions compose-network/explorer/networks-config.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
[
{
"name": "mainnet",
"displayName": "MAINNET",
"url": "https://mainnet-public.mirrornode.hedera.com/",
"ledgerID": "00",
"sourcifySetup": {
"activate": true,
"repoURL": "http://localhost:10000/contracts/",
"serverURL": "http://localhost:5002/",
"verifierURL": "http://localhost:3000/#/",
"chainID": 295
}
},
{
"name": "testnet",
"displayName": "TESTNET",
"url": "https://testnet.mirrornode.hedera.com/",
"ledgerID": "01",
"sourcifySetup": {
"activate": true,
"repoURL": "http://localhost:10000/contracts/",
"serverURL": "http://localhost:5002/",
"verifierURL": "http://localhost:3000/#/",
"chainID": 296
}
},
{
"name": "previewnet",
"displayName": "PREVIEWNET",
"url": "https://previewnet.mirrornode.hedera.com/",
"ledgerID": "02",
"sourcifySetup": {
"activate": true,
"repoURL": "http://localhost:10000/contracts/",
"serverURL": "http://localhost:5002/",
"verifierURL": "http://localhost:3000/#/",
"chainID": 297
}
},
{
"name": "localnode",
"displayName": "LOCAL NODE",
"url": "http://127.0.0.1:5551",
"ledgerID": "FF",
"sourcifySetup": {
"activate": true,
"repoURL": "http://localhost:10000/contracts/",
"serverURL": "http://localhost:5555/",
"verifierURL": "http://localhost:5555/#/",
"chainID": 298
}
}
]
49 changes: 49 additions & 0 deletions compose-network/sourcify/local.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
//diff sourcify/services/server/src/config/default.js ./local.js
module.exports = {
server: {
port: 5555,
maxFileSize: 30 * 1024 * 1024, // 30 MB
},
// Deprecated repository
repositoryV1: {
path: "/tmp/sourcify/repository",
serverUrl: "http://localhost:10000", // Need to keep this as it's used in IpfsRepositoryService.ts fetchAllFileUrls.
},
// Disable repositoryV2 by default for now, we will enable it once we start the synchronization script
// repositoryV2: {
// path: "/tmp/sourcify/repositoryV2",
// },
solcRepo: "/tmp/solc-bin/linux-amd64",
solJsonRepo: "/tmp/solc-bin/soljson",
session: {
secret: process.env.SESSION_SECRET || "CHANGE_ME",
maxAge: 12 * 60 * 60 * 1000, // 12 hrs in millis
secure: false, // Set Secure in the Set-Cookie header i.e. require https
storeType: "memory", // Where to save the session info. "memory" is only good for testing and local development. Don't use it in production!
},
// It is possible to outsource the compilation to a lambda function instead of running locally. Turned on in production.
// Requires env vars AWS_REGION, AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY
lambdaCompiler: {
enabled: false,
// functionName: "compile",
},
corsAllowedOrigins: [
/^https?:\/\/(?:.+\.)?sourcify.dev$/, // sourcify.dev and subdomains
/^https?:\/\/(?:.+\.)?sourcify.eth$/, // sourcify.eth and subdomains
/^https?:\/\/(?:.+\.)?sourcify.eth.link$/, // sourcify.eth.link and subdomains
/^https?:\/\/(?:.+\.)?ipfs.dweb.link$/, // dweb links used by Brave browser etc.
process.env.NODE_ENV !== "production" && /^https?:\/\/localhost(?::\d+)?$/, // localhost on any port
],
rateLimit: {
enabled: false,
// Check done with "startsWith"
whitelist: [
"10.", // internal IP range
"::ffff:10.",
"127.0.0.1",
"::ffff:127.0.0.1",
"::1",
],
},
};

8 changes: 8 additions & 0 deletions compose-network/sourcify/servers.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
- description: The current REST API server
url: ""
- description: The production REST API server
url: "https://server-verify.hashscan.io"
- description: The staging REST API server
url: "https://server-sourcify.hedera-devops.com"
- description: Local development server address on default port 5555
url: "http://localhost:5555"
22 changes: 22 additions & 0 deletions compose-network/sourcify/sourcify-chains.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
{
"295": {
"sourcifyName": "Hedera Mainnet",
"supported": true
},
"296": {
"sourcifyName": "Hedera Testnet",
"supported": true
},
"297": {
"sourcifyName": "Hedera Previewnet",
"supported": true
},
"298": {
"sourcifyName": "Hedera Localnet",
"supported": true,
"rpc": [
"http://host.docker.internal:7546"
]
}
}

13 changes: 13 additions & 0 deletions compose-network/sourcify/ui-config.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
{
"SERVER_URL": "http://localhost:5555",
"REPOSITORY_SERVER_URL": "http://localhost:10000",
"EXPLORER_URL": "http://localhost:8080",
"BRAND_PRODUCT_LOGO_URL": "",
"TERMS_OF_SERVICE_URL": "",
"REMOTE_IMPORT": false,
"GITHUB_IMPORT": false,
"CONTRACT_IMPORT": false,
"JSON_IMPORT": false,
"OPEN_IN_REMIX": false,
"CREATE2_VERIFICATION": false
}
65 changes: 62 additions & 3 deletions docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -285,9 +285,8 @@ services:
restart: "unless-stopped"
ports:
- "8080:8080"
environment:
DOCKER_LOCAL_MIRROR_NODE_MENU_NAME: ${DOCKER_LOCAL_MIRROR_NODE_MENU_NAME}
DOCKER_LOCAL_MIRROR_NODE_URL: ${DOCKER_LOCAL_MIRROR_NODE_URL}
volumes:
- ./compose-network/explorer/networks-config.json:/app/networks-config.json

web3:
image: "${MIRROR_IMAGE_PREFIX}hedera-mirror-web3:${MIRROR_IMAGE_TAG}"
Expand Down Expand Up @@ -495,6 +494,64 @@ services:
network-node-bridge:
ipv4_address: 172.27.0.50

sourcify-server:
image: ghcr.io/hashgraph/hedera-sourcify/server:${SOURCIFY_TAG}
restart: unless-stopped
container_name: sourcify-server-${SOURCIFY_TAG}
environment:
NODE_ENV: ${SOURCIFY_NODE_ENV}
ports:
- "${SOURCIFY_SERVER_PORT}:5555"
volumes:
- type: bind
source: ./compose-network/sourcify/servers.yaml
target: /home/app/services/server/dist/servers.yaml
- type: bind
source: ./compose-network/sourcify/sourcify-chains.json
target: /home/app/services/server/dist/sourcify-chains.json
- type: bind
source: ./compose-network/sourcify/local.js
target: /home/app/services/server/dist/config/local.js
- type: volume
source: sourcify-data
target: /data
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:${SOURCIFY_SERVER_PORT}/health"]
interval: 30s
timeout: 10s
retries: 10

sourcify-sourcify-ui:
Copy link

@acuarica acuarica Jul 9, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just to be consistent with the other names we could use

Suggested change
sourcify-sourcify-ui:
sourcify-ui:

image: ghcr.io/hashgraph/hedera-sourcify/ui:${SOURCIFY_TAG}
restart: unless-stopped
container_name: sourcify-ui-${SOURCIFY_TAG}
ports:
- "${SOURCIFY_UI_PORT}:80"
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost"]
interval: 30s
timeout: 10s
retries: 10
volumes:
- type: bind
source: ./compose-network/sourcify/ui-config.json
target: /usr/share/nginx/html/config.json

sourcify-repository:
image: ghcr.io/hashgraph/hedera-sourcify/repository:${SOURCIFY_TAG}
restart: unless-stopped
container_name: sourcify-repository-${SOURCIFY_TAG}
environment:
SOURCIFY_SERVER: "http://host.docker.internal:${SOURCIFY_SERVER_PORT}"
SERVER_URL: "http://localhost:${SOURCIFY_SERVER_PORT}"
volumes:
- type: volume
source: sourcify-data
target: /data
read_only: true
ports:
- "${SOURCIFY_REPOSITORY_PORT}:80"

networks:
network-node-bridge:
name: network-node-bridge
Expand All @@ -521,3 +578,5 @@ volumes:
name: prometheus-data
grafana-data:
name: grafana-data
sourcify:
name: sourcify-data
Loading