#!/usr/bin/env bash set -euo pipefail ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" WIRE_ETHEREUM_DIR="${WIRE_ETHEREUM_DIR:-$(pwd)}" WIRE_ETHEREUM_REPO_REL="${WIRE_ETHEREUM_REPO_REL:-$(realpath --relative-to "${ROOT_DIR}" "${WIRE_ETHEREUM_DIR}")}" LOCAL_DEPLOY_DIR="${WIRE_ETHEREUM_DIR}/.local/deployments" ARTIFACTS_DIR="${ROOT_DIR}/.local/e2e" HARDHAT_RPC_URL="${HARDHAT_RPC_URL:-http://127.0.0.1:8545}" WIRE_BATCH_ETH_RPC_URL="${WIRE_BATCH_ETH_RPC_URL:-http://hardhat:8545}" HARDHAT_DEPLOYER_KEY="${HARDHAT_DEPLOYER_KEY:-0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80}" ETH_CLIENT_ID="${ETH_CLIENT_ID:-eth-local-1}" ETH_PROVIDER_ID="${ETH_PROVIDER_ID:-eth-local-1}" ETH_ABI_FILE="${ETH_ABI_FILE:-}" wait_for_rpc() { for _ in $(seq 1 60); do if curl -fsS -H 'Content-Type: application/json' \ --data '{"jsonrpc":"2.0","method":"eth_chainId","params":[],"id":1}' \ "${HARDHAT_RPC_URL}" >/dev/null 2>&1; then return 0 fi sleep 1 done echo "Hardhat RPC did not become ready at ${HARDHAT_RPC_URL}" >&2 exit 1 } write_deploy_configs() { mkdir -p "${LOCAL_DEPLOY_DIR}" cat >"${LOCAL_DEPLOY_DIR}/liqeth.json" <"${LOCAL_DEPLOY_DIR}/outpost.json" <"${out_file}" const fs = require("fs"); const path = require("path"); const { ethers } = require("ethers"); const rootDir = process.env.ROOT_DIR; const repoDir = process.env.WIRE_ETHEREUM_DIR; const repoRel = process.env.WIRE_ETHEREUM_REPO_REL; const providerId = process.env.ETH_PROVIDER_ID; const clientId = process.env.ETH_CLIENT_ID; const privateKey = process.env.HARDHAT_DEPLOYER_KEY; const rpcUrl = process.env.WIRE_BATCH_ETH_RPC_URL; const abiFileOverride = process.env.ETH_ABI_FILE; const addrsPath = path.join(repoDir, ".local", "deployments", "outpost-addrs.json"); const addrs = JSON.parse(fs.readFileSync(addrsPath, "utf8")); const publicKey = new ethers.SigningKey(privateKey).publicKey; const abiOutputPath = path.join(rootDir, ".local", "e2e", "ethereum-outpost-abi.json"); let abiFile = abiFileOverride; if (!abiFile) { const artifactPaths = [ path.join(repoDir, "artifacts", "contracts", "outpost", "OPP.sol", "OPP.json"), path.join(repoDir, "artifacts", "contracts", "outpost", "OPPInbound.sol", "OPPInbound.json"), ]; const combinedAbi = artifactPaths.flatMap((artifactPath) => { const artifact = JSON.parse(fs.readFileSync(artifactPath, "utf8")); if (!Array.isArray(artifact.abi)) { throw new Error(`Artifact missing abi array: ${artifactPath}`); } return artifact.abi; }); fs.mkdirSync(path.dirname(abiOutputPath), { recursive: true }); fs.writeFileSync(abiOutputPath, `${JSON.stringify(combinedAbi, null, 2)}\n`); abiFile = "/wire/.local/e2e/ethereum-outpost-abi.json"; } console.log(`LOCAL_ETH_CLIENT_ID=${clientId}`); console.log(`LOCAL_ETH_PROVIDER_ID=${providerId}`); console.log(`LOCAL_ETH_PROVIDER_SPEC=${providerId},ethereum,ethereum,${publicKey},KEY:${privateKey}`); console.log(`LOCAL_ETH_RPC_URL=${rpcUrl}`); console.log(`LOCAL_ETH_OPP_ADDRESS=${addrs.OPP}`); console.log(`LOCAL_ETH_OPP_INBOUND_ADDRESS=${addrs.OPPInbound}`); console.log(`LOCAL_ETH_ABI_FILE=${abiFile}`); console.log(`LOCAL_ETH_REPO_DIR=${repoRel}`); console.log(`LOCAL_ETH_OUTPOST_ADDRS=${path.join(rootDir, repoRel, ".local", "deployments", "outpost-addrs.json")}`); EOF } main() { cd "${WIRE_ETHEREUM_DIR}" wait_for_rpc deploy_local_stack write_artifacts } main "$@"