Skip to content
Draft
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
4 changes: 3 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -30,4 +30,6 @@ rustc-ice-*
/index.html

# Fixtures
/test-fixtures
/test-fixtures

node_modules
107 changes: 107 additions & 0 deletions solidity/supra_contracts/deploy_automation_registry.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,107 @@
#!/bin/bash
set -e

# --------------------------
# CONFIGURATION
# --------------------------
RPC_URL="http://127.0.0.1:8545"
DEPLOY_LOG="deploy.log"
ENV_FILE="deployed.env"
PRIVATE_KEY=""

# Helper for cleaner + safer extraction
extract() {
local result
result=$(grep -m1 "$1" "$DEPLOY_LOG" | grep -o "0x[a-fA-F0-9]\{40\}")
echo "${result:-NOT_FOUND}"
}

# ------------------------------------------------------------
# 1. START ANVIL
# ------------------------------------------------------------
echo "=== Starting Anvil with DEFAULT settings ==="

echo "Checking if port 8545 is in use..."
EXISTING_PID=$(lsof -ti:8545 || true)

if [ ! -z "$EXISTING_PID" ]; then
echo "Port is busy. Killing $EXISTING_PID ..."
kill -9 "$EXISTING_PID"
sleep 1
fi

echo "Starting Anvil..."
anvil > anvil.log 2>&1 &
ANVIL_PID=$!
sleep 2

echo "Anvil launched (PID $ANVIL_PID)"
echo "RPC URL: $RPC_URL"

# ------------------------------------------------------------
# 2. RUN DEPLOY SCRIPT
# ------------------------------------------------------------
echo ""
echo "=== Deploying contracts ==="

forge script script/DeployAutomationRegistry.s.sol:DeployAutomationRegistry \
--rpc-url "$RPC_URL" \
--private-key "$PRIVATE_KEY" \
--broadcast \
--skip-simulation \
-vvvv > "$DEPLOY_LOG" 2>&1

echo "Deployment logs saved to $DEPLOY_LOG"

# ------------------------------------------------------------
# 3. PARSE DEPLOYED ADDRESSES
# ------------------------------------------------------------
echo ""
echo "=== Extracting deployed addresses ==="

ERC20_SUPRA=$(extract "ERC20Supra deployed at:")
AUTOMATION_REGISTRY_IMPL=$(extract "AutomationRegistry implementation deployed at:")
AUTOMATION_REGISTRY_PROXY=$(extract "AutomationRegistry proxy deployed at:")
BLOCKMETA_IMPL=$(extract "BlockMeta implementation deployed at:")
BLOCKMETA_PROXY=$(extract "BlockMeta proxy deployed at:")
AUTOMATION_CONTROLLER_IMPL=$(extract "AutomationController implementation deployed at:")
AUTOMATION_CONTROLLER_PROXY=$(extract "AutomationController proxy deployed at:")

# ------------------------------------------------------------
# 4. WRITE TO .env
# ------------------------------------------------------------
echo ""
echo "=== Saving contract addresses to $ENV_FILE ==="
echo ""

cat <<EOF > "$ENV_FILE"
# Auto-generated deployment output

ERC20_SUPRA=$ERC20_SUPRA

AUTOMATION_REGISTRY_IMPL=$AUTOMATION_REGISTRY_IMPL
AUTOMATION_REGISTRY_PROXY=$AUTOMATION_REGISTRY_PROXY

BLOCKMETA_IMPL=$BLOCKMETA_IMPL
BLOCKMETA_PROXY=$BLOCKMETA_PROXY

AUTOMATION_CONTROLLER_IMPL=$AUTOMATION_CONTROLLER_IMPL
AUTOMATION_CONTROLLER_PROXY=$AUTOMATION_CONTROLLER_PROXY
EOF

cat "$ENV_FILE"

echo ""
echo "=== Deployment Complete ==="

# ------------------------------------------------------------
# 5. STOP ANVIL
# ------------------------------------------------------------
# echo "Stopping Anvil (PID $ANVIL_PID)"

# if kill -0 "$ANVIL_PID" 2>/dev/null; then
# kill "$ANVIL_PID"
# echo "Anvil stopped successfully."
# else
# echo "Anvil already exited."
# fi
37 changes: 37 additions & 0 deletions solidity/supra_contracts/getTaskDetails.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
#!/usr/bin/env node
import { ethers } from "ethers";

const [registryAddress, taskIndex, rpcUrl] = process.argv.slice(2);

if (!registryAddress || !taskIndex || !rpcUrl) {
console.error("Usage: node getTaskDetails.js <registryAddress> <taskIndex> <rpcUrl>");
process.exit(1);
}

// Replace with your contract ABI (minimal, only getTaskDetails)
const registryAbi = [
"function getTaskDetails(uint64 _taskIndex) view returns (tuple(uint128 maxGasAmount,uint128 gasPriceCap,uint128 automationFeeCapForCycle,uint128 lockedFeeForNextCycle,bytes32 txHash,uint64 taskIndex,uint64 registrationTime,uint64 expiryTime,address owner,uint8 state,bytes payloadTx,bytes[] auxData))"
];

const provider = new ethers.JsonRpcProvider(rpcUrl);
const registry = new ethers.Contract(registryAddress, registryAbi, provider);

async function main() {
try {
const task = await registry.getTaskDetails(taskIndex);
console.log(`taskIndex: ${task.taskIndex}`);
console.log(`owner: ${task.owner}`);
console.log(`state: ${["PENDING","ACTIVE","CANCELLED"][task.state]}`);
console.log(`expiryTime: ${task.expiryTime}`);
console.log(`payloadTx: ${task.payloadTx}`);
console.log(`auxData: ${task.auxData}`);
console.log(`maxGasAmount: ${task.maxGasAmount}`);
console.log(`gasPriceCap: ${task.gasPriceCap}`);
console.log(`automationFeeCapForCycle: ${task.automationFeeCapForCycle}`);
console.log(`lockedFeeForNextCycle: ${task.lockedFeeForNextCycle}`);
} catch (e) {
console.error("Error fetching task:", e.message);
}
}

main();
131 changes: 131 additions & 0 deletions solidity/supra_contracts/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

7 changes: 7 additions & 0 deletions solidity/supra_contracts/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"dependencies": {
"dotenv": "^17.2.3",
"ethers": "^6.16.0"
},
"type": "module"
}
Loading