Skip to content

Commit dbd2874

Browse files
hardening(anchor): remove default Ergo API key and wallet password
Co-authored-by: liu971227-sys <248239659+liu971227-sys@users.noreply.github.com>
1 parent fdebe37 commit dbd2874

File tree

4 files changed

+46
-19
lines changed

4 files changed

+46
-19
lines changed

ergo-anchor/ergo_miner_anchor.py

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,21 +4,31 @@
44
from hashlib import blake2b
55

66
ERGO_NODE = os.environ.get("ERGO_NODE", "http://localhost:9053")
7-
ERGO_API_KEY = os.environ.get("ERGO_API_KEY", "BE7YM1fYWrMQ9tSmxAc9jzLNw42nEXTX")
7+
ERGO_API_KEY = os.environ.get("ERGO_API_KEY", "")
8+
ERGO_WALLET_PASSWORD = os.environ.get("ERGO_WALLET_PASSWORD", "")
89
DB_PATH = "/root/rustchain/rustchain_v2.db"
910
ANCHOR_VALUE = 1000000 # 0.001 ERG min box size
1011

1112
class ErgoMinerAnchor:
1213
def __init__(self):
1314
self.session = requests.Session()
14-
self.session.headers["api_key"] = ERGO_API_KEY
15+
if ERGO_API_KEY:
16+
self.session.headers["api_key"] = ERGO_API_KEY
1517
self.session.headers["Content-Type"] = "application/json"
1618

17-
def unlock_wallet(self, password="rustchain123"):
19+
def unlock_wallet(self, password=None):
1820
"""Unlock wallet if needed."""
19-
status = self.session.get(ERGO_NODE + "/wallet/status").json()
21+
status_resp = self.session.get(ERGO_NODE + "/wallet/status")
22+
if status_resp.status_code != 200:
23+
return False
24+
status = status_resp.json()
2025
if not status.get("isUnlocked"):
21-
self.session.post(ERGO_NODE + "/wallet/unlock", json={"pass": password})
26+
pwd = password if password is not None else ERGO_WALLET_PASSWORD
27+
if not pwd:
28+
return False
29+
unlock_resp = self.session.post(ERGO_NODE + "/wallet/unlock", json={"pass": pwd})
30+
return unlock_resp.status_code == 200
31+
return True
2232

2333
def get_recent_miners(self, limit=10):
2434
conn = sqlite3.connect(DB_PATH)
@@ -43,7 +53,10 @@ def get_rc_slot(self):
4353

4454
def create_anchor_tx(self, miners):
4555
"""Create zero-fee anchor TX with miner data in registers."""
46-
self.unlock_wallet()
56+
if not ERGO_API_KEY:
57+
return {"success": False, "error": "ERGO_API_KEY not configured"}
58+
if not self.unlock_wallet():
59+
return {"success": False, "error": "Wallet locked or unlock failed"}
4760

4861
commitment = self.compute_commitment(miners)
4962
rc_slot = self.get_rc_slot()

node/ergo_miner_anchor.py

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,21 +4,31 @@
44
from hashlib import blake2b
55

66
ERGO_NODE = os.environ.get("ERGO_NODE", "http://localhost:9053")
7-
ERGO_API_KEY = os.environ.get("ERGO_API_KEY", "BE7YM1fYWrMQ9tSmxAc9jzLNw42nEXTX")
7+
ERGO_API_KEY = os.environ.get("ERGO_API_KEY", "")
8+
ERGO_WALLET_PASSWORD = os.environ.get("ERGO_WALLET_PASSWORD", "")
89
DB_PATH = "/root/rustchain/rustchain_v2.db"
910
ANCHOR_VALUE = 1000000 # 0.001 ERG min box size
1011

1112
class ErgoMinerAnchor:
1213
def __init__(self):
1314
self.session = requests.Session()
14-
self.session.headers["api_key"] = ERGO_API_KEY
15+
if ERGO_API_KEY:
16+
self.session.headers["api_key"] = ERGO_API_KEY
1517
self.session.headers["Content-Type"] = "application/json"
1618

17-
def unlock_wallet(self, password="rustchain123"):
19+
def unlock_wallet(self, password=None):
1820
"""Unlock wallet if needed."""
19-
status = self.session.get(ERGO_NODE + "/wallet/status").json()
21+
status_resp = self.session.get(ERGO_NODE + "/wallet/status")
22+
if status_resp.status_code != 200:
23+
return False
24+
status = status_resp.json()
2025
if not status.get("isUnlocked"):
21-
self.session.post(ERGO_NODE + "/wallet/unlock", json={"pass": password})
26+
pwd = password if password is not None else ERGO_WALLET_PASSWORD
27+
if not pwd:
28+
return False
29+
unlock_resp = self.session.post(ERGO_NODE + "/wallet/unlock", json={"pass": pwd})
30+
return unlock_resp.status_code == 200
31+
return True
2232

2333
def get_recent_miners(self, limit=10):
2434
conn = sqlite3.connect(DB_PATH)
@@ -43,7 +53,10 @@ def get_rc_slot(self):
4353

4454
def create_anchor_tx(self, miners):
4555
"""Create zero-fee anchor TX with miner data in registers."""
46-
self.unlock_wallet()
56+
if not ERGO_API_KEY:
57+
return {"success": False, "error": "ERGO_API_KEY not configured"}
58+
if not self.unlock_wallet():
59+
return {"success": False, "error": "Wallet locked or unlock failed"}
4760

4861
commitment = self.compute_commitment(miners)
4962
rc_slot = self.get_rc_slot()

node/ergo_raw_tx.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
from hashlib import blake2b
55

66
ERGO_NODE = "http://localhost:9053"
7-
ERGO_API_KEY = os.environ.get("ERGO_API_KEY", "BE7YM1fYWrMQ9tSmxAc9jzLNw42nEXTX")
7+
ERGO_API_KEY = os.environ.get("ERGO_API_KEY", "")
88
DB_PATH = "/root/rustchain/rustchain_v2.db"
99

1010
def encode_coll_byte(hex_str):

node/run_anchor_service.py

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,11 @@
44
import sys
55
import time
66

7-
# Set env vars
8-
os.environ["ERGO_NODE_URL"] = "http://localhost:9053"
9-
os.environ["ERGO_API_KEY"] = "hello"
10-
117
from rustchain_ergo_anchor import AnchorService, ErgoClient
128

13-
DB_PATH = "/root/rustchain/rustchain_v2.db"
9+
DB_PATH = os.environ.get("DB_PATH", "/root/rustchain/rustchain_v2.db")
10+
ERGO_NODE_URL = os.environ.get("ERGO_NODE_URL", "http://localhost:9053")
11+
ERGO_API_KEY = os.environ.get("ERGO_API_KEY", "")
1412

1513
print("=" * 60)
1614
print("RustChain -> Ergo Anchor Service Starting")
@@ -20,11 +18,14 @@
2018
client = ErgoClient()
2119
info = client.get_info()
2220
if info:
23-
print(f"Ergo height: {info.get(\"fullHeight\", \"N/A\")}")
21+
print(f"Ergo height: {info.get('fullHeight', 'N/A')}")
2422
else:
2523
print("WARNING: Cannot connect to Ergo node")
2624
sys.exit(1)
2725

26+
if not ERGO_API_KEY:
27+
print("WARNING: ERGO_API_KEY is not set; wallet operations may fail.")
28+
2829
service = AnchorService(
2930
db_path=DB_PATH,
3031
ergo_client=client,

0 commit comments

Comments
 (0)