From 138e09556a0c5b9eab7522c37043bd41d6968190 Mon Sep 17 00:00:00 2001 From: ZHANGYIHANG372 <13582071858@163.com> Date: Thu, 20 Aug 2026 20:12:17 +0800 Subject: [PATCH 1/6] fix-durability --- docker-compose.yml | 30 ++++-------- frontend/src/contracts/addresses.ts | 9 ++++ scripts/update-contract-addresses.sh | 70 ++++++++++++++++++++++++++++ 3 files changed, 87 insertions(+), 22 deletions(-) create mode 100644 frontend/src/contracts/addresses.ts create mode 100755 scripts/update-contract-addresses.sh diff --git a/docker-compose.yml b/docker-compose.yml index 326ece9..e8faaed 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -3,8 +3,10 @@ services: image: ghcr.io/foundry-rs/foundry:v1.7.1 container_name: ${ANVIL_CONTAINER_NAME} - command: + entrypoint: - anvil + + command: - --host - 0.0.0.0 - --port @@ -17,6 +19,10 @@ services: - ${ANVIL_BALANCE} - --mnemonic - ${ANVIL_MNEMONIC} + - --state + - /anvil-data/anvil-state + - --state-interval + - "10" ports: - "${ANVIL_PORT}:${ANVIL_PORT}" @@ -37,27 +43,7 @@ services: timeout: 3s retries: 10 - deployer: - build: - context: . - dockerfile: Dockerfile - - container_name: ${DEPLOYER_CONTAINER_NAME} - - depends_on: - anvil: - condition: service_healthy - - environment: - RPC_URL: ${RPC_URL} - PRIVATE_KEY: ${PRIVATE_KEY} - - command: - - script - - script/Deploy.s.sol - - --rpc-url - - ${RPC_URL} - - --broadcast + volumes: anvil-data: \ No newline at end of file diff --git a/frontend/src/contracts/addresses.ts b/frontend/src/contracts/addresses.ts new file mode 100644 index 0000000..4462a8a --- /dev/null +++ b/frontend/src/contracts/addresses.ts @@ -0,0 +1,9 @@ +// AUTO-GENERATED FILE - DO NOT EDIT + +export const CONTRACT_ADDRESSES = { + MockUSDC: "0x5fbdb2315678afecb367f032d93f642f64180aa3", + MockBond: "0xe7f1725e7734ce288f8367e1bb143e90bb3f0512", + Settlement: "0x9fe46736679d2d9a65f0992f2272de9f3c7fa6e0", + Netting: "0xcf7ed3acca5a467e9e704c703e8d87f634fb0fc9", + LiquidityPool: "0xdc64a140aa3e981100a9beca4e685f962f0cf6c9", +} as const; diff --git a/scripts/update-contract-addresses.sh b/scripts/update-contract-addresses.sh new file mode 100755 index 0000000..2eb24dd --- /dev/null +++ b/scripts/update-contract-addresses.sh @@ -0,0 +1,70 @@ +#!/bin/sh +set -e + +DEPLOY_FILE="broadcast/Deploy.s.sol/31337/run-latest.json" +OUTPUT_FILE="frontend/src/contracts/addresses.ts" + +if [ ! -f "$DEPLOY_FILE" ]; then + echo "❌ Deployment file not found: $DEPLOY_FILE" + exit 1 +fi + +mkdir -p "$(dirname "$OUTPUT_FILE")" + +python3 - "$DEPLOY_FILE" "$OUTPUT_FILE" <<'PY' +import json +import sys + +deploy_file = sys.argv[1] +output_file = sys.argv[2] + +with open(deploy_file) as f: + data = json.load(f) + +contracts = {} + +for tx in data.get("transactions", []): + contract_name = tx.get("contractName") + contract_address = tx.get("contractAddress") + + if contract_name and contract_address: + contracts[contract_name] = contract_address + +wanted = [ + "MockUSDC", + "MockBond", + "Settlement", + "Netting", + "LiquidityPool", +] + +lines = [ + "// AUTO-GENERATED FILE - DO NOT EDIT", + "", + "export const CONTRACT_ADDRESSES = {", +] + +for name in wanted: + address = contracts.get(name) + + if not address: + print(f"❌ Missing contract: {name}") + sys.exit(1) + + lines.append(f' {name}: "{address}",') + +lines += [ + "} as const;", + "", +] + +with open(output_file, "w") as f: + f.write("\n".join(lines)) + +print(f"✅ Generated {output_file}") +PY + +cat "$OUTPUT_FILE" + + + From 35b0a1c175dac292794678ccc52b7cca332fbc08 Mon Sep 17 00:00:00 2001 From: ZHANGYIHANG372 <13582071858@163.com> Date: Fri, 21 Aug 2026 14:19:53 +0800 Subject: [PATCH 2/6] feat: anvil data --- .gitignore | 3 +++ docker-compose.yml | 30 +++++++++++++++++++++++++++--- 2 files changed, 30 insertions(+), 3 deletions(-) diff --git a/.gitignore b/.gitignore index c8e4586..abd0eb9 100644 --- a/.gitignore +++ b/.gitignore @@ -18,3 +18,6 @@ docs/ .env .env.* !.env.example + +# anvil-data +anvil_state.json diff --git a/docker-compose.yml b/docker-compose.yml index e8faaed..a285ef6 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -19,8 +19,12 @@ services: - ${ANVIL_BALANCE} - --mnemonic - ${ANVIL_MNEMONIC} + + # 自动加载/保存区块链状态 - --state - - /anvil-data/anvil-state + - /var/data/anvil_state.json + + # 每 10 秒自动保存一次 - --state-interval - "10" @@ -28,7 +32,7 @@ services: - "${ANVIL_PORT}:${ANVIL_PORT}" volumes: - - anvil-data:/anvil-data + - anvil-data:/var/data healthcheck: test: @@ -42,8 +46,28 @@ services: interval: 2s timeout: 3s retries: 10 - + deployer: + build: + context: . + dockerfile: Dockerfile + + container_name: ${DEPLOYER_CONTAINER_NAME} + + depends_on: + anvil: + condition: service_healthy + + environment: + RPC_URL: ${RPC_URL} + PRIVATE_KEY: ${PRIVATE_KEY} + + command: + - script + - script/Deploy.s.sol + - --rpc-url + - ${RPC_URL} + - --broadcast volumes: anvil-data: \ No newline at end of file From 3b6eca438bf2948c55cbcb58aa417559d8128afa Mon Sep 17 00:00:00 2001 From: ZHANGYIHANG372 <13582071858@163.com> Date: Fri, 21 Aug 2026 14:22:02 +0800 Subject: [PATCH 3/6] feat: delete unused --- frontend/src/contracts/addresses.ts | 9 ---- scripts/update-contract-addresses.sh | 70 ---------------------------- 2 files changed, 79 deletions(-) delete mode 100644 frontend/src/contracts/addresses.ts delete mode 100755 scripts/update-contract-addresses.sh diff --git a/frontend/src/contracts/addresses.ts b/frontend/src/contracts/addresses.ts deleted file mode 100644 index 4462a8a..0000000 --- a/frontend/src/contracts/addresses.ts +++ /dev/null @@ -1,9 +0,0 @@ -// AUTO-GENERATED FILE - DO NOT EDIT - -export const CONTRACT_ADDRESSES = { - MockUSDC: "0x5fbdb2315678afecb367f032d93f642f64180aa3", - MockBond: "0xe7f1725e7734ce288f8367e1bb143e90bb3f0512", - Settlement: "0x9fe46736679d2d9a65f0992f2272de9f3c7fa6e0", - Netting: "0xcf7ed3acca5a467e9e704c703e8d87f634fb0fc9", - LiquidityPool: "0xdc64a140aa3e981100a9beca4e685f962f0cf6c9", -} as const; diff --git a/scripts/update-contract-addresses.sh b/scripts/update-contract-addresses.sh deleted file mode 100755 index 2eb24dd..0000000 --- a/scripts/update-contract-addresses.sh +++ /dev/null @@ -1,70 +0,0 @@ -#!/bin/sh -set -e - -DEPLOY_FILE="broadcast/Deploy.s.sol/31337/run-latest.json" -OUTPUT_FILE="frontend/src/contracts/addresses.ts" - -if [ ! -f "$DEPLOY_FILE" ]; then - echo "❌ Deployment file not found: $DEPLOY_FILE" - exit 1 -fi - -mkdir -p "$(dirname "$OUTPUT_FILE")" - -python3 - "$DEPLOY_FILE" "$OUTPUT_FILE" <<'PY' -import json -import sys - -deploy_file = sys.argv[1] -output_file = sys.argv[2] - -with open(deploy_file) as f: - data = json.load(f) - -contracts = {} - -for tx in data.get("transactions", []): - contract_name = tx.get("contractName") - contract_address = tx.get("contractAddress") - - if contract_name and contract_address: - contracts[contract_name] = contract_address - -wanted = [ - "MockUSDC", - "MockBond", - "Settlement", - "Netting", - "LiquidityPool", -] - -lines = [ - "// AUTO-GENERATED FILE - DO NOT EDIT", - "", - "export const CONTRACT_ADDRESSES = {", -] - -for name in wanted: - address = contracts.get(name) - - if not address: - print(f"❌ Missing contract: {name}") - sys.exit(1) - - lines.append(f' {name}: "{address}",') - -lines += [ - "} as const;", - "", -] - -with open(output_file, "w") as f: - f.write("\n".join(lines)) - -print(f"✅ Generated {output_file}") -PY - -cat "$OUTPUT_FILE" - - - From 6f29b935c4f9df12abfd7d5f784cb1f4cd298b53 Mon Sep 17 00:00:00 2001 From: ZHANGYIHANG372 <13582071858@163.com> Date: Fri, 21 Aug 2026 14:22:53 +0800 Subject: [PATCH 4/6] fix: remove entrypoint for anvil service in docker-compose --- docker-compose.yml | 3 --- 1 file changed, 3 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index a285ef6..3165857 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -3,9 +3,6 @@ services: image: ghcr.io/foundry-rs/foundry:v1.7.1 container_name: ${ANVIL_CONTAINER_NAME} - entrypoint: - - anvil - command: - --host - 0.0.0.0 From 134cfdb4013b61dbc4fd0f7ab00f8108ad5f36cb Mon Sep 17 00:00:00 2001 From: ZHANGYIHANG372 <13582071858@163.com> Date: Fri, 21 Aug 2026 14:24:00 +0800 Subject: [PATCH 5/6] fix: add missing anvil command in docker-compose --- docker-compose.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docker-compose.yml b/docker-compose.yml index 3165857..2cf9966 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -4,6 +4,7 @@ services: container_name: ${ANVIL_CONTAINER_NAME} command: + - anvil - --host - 0.0.0.0 - --port @@ -43,7 +44,7 @@ services: interval: 2s timeout: 3s retries: 10 - + deployer: build: context: . From fea8c60630641ec6b3eff82fd5f3b3e4e13b794b Mon Sep 17 00:00:00 2001 From: Nero978 Date: Fri, 21 Aug 2026 17:16:37 +0800 Subject: [PATCH 6/6] fix: update docker-compose files and .gitignore for anvil service configuration --- .gitignore | 4 +--- Dockerfile | 3 ++- docker-compose.prod.yml | 23 +++++++++++++++++++++-- docker-compose.yml | 7 ++++++- 4 files changed, 30 insertions(+), 7 deletions(-) diff --git a/.gitignore b/.gitignore index abd0eb9..0295cc0 100644 --- a/.gitignore +++ b/.gitignore @@ -7,9 +7,7 @@ out/ .ignore/ # Ignores development broadcast logs -!/broadcast -/broadcast/*/31337/ -/broadcast/**/dry-run/ +broadcast/ # Docs docs/ diff --git a/Dockerfile b/Dockerfile index 54fa3db..4ec9257 100644 --- a/Dockerfile +++ b/Dockerfile @@ -2,9 +2,10 @@ FROM ghcr.io/foundry-rs/foundry:v1.7.1 WORKDIR /app -COPY . . +COPY --chown=foundry:foundry . . RUN git config --global --add safe.directory /app RUN forge build + RUN forge test \ No newline at end of file diff --git a/docker-compose.prod.yml b/docker-compose.prod.yml index 8d8612d..10ce582 100644 --- a/docker-compose.prod.yml +++ b/docker-compose.prod.yml @@ -4,8 +4,10 @@ services: container_name: ${ANVIL_CONTAINER_NAME} - command: + entrypoint: - anvil + + command: - --host - 0.0.0.0 - --port @@ -19,9 +21,20 @@ services: - --mnemonic - ${ANVIL_MNEMONIC} + # 自动加载/保存区块链状态 + - --state + - /var/data/anvil_state.json + + # 每 10 秒自动保存一次 + - --state-interval + - "10" + ports: - "${ANVIL_PORT}:8545" + volumes: + - anvil-data:/var/data + healthcheck: test: [ @@ -48,9 +61,15 @@ services: RPC_URL: ${RPC_URL} PRIVATE_KEY: ${PRIVATE_KEY} + entrypoint: + - forge + command: - script - script/Deploy.s.sol - --rpc-url - ${RPC_URL} - - --broadcast \ No newline at end of file + - --broadcast + +volumes: + anvil-data: \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml index 2cf9966..e73a2eb 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -3,8 +3,10 @@ services: image: ghcr.io/foundry-rs/foundry:v1.7.1 container_name: ${ANVIL_CONTAINER_NAME} - command: + entrypoint: - anvil + + command: - --host - 0.0.0.0 - --port @@ -60,6 +62,9 @@ services: RPC_URL: ${RPC_URL} PRIVATE_KEY: ${PRIVATE_KEY} + entrypoint: + - forge + command: - script - script/Deploy.s.sol