Skip to content

Instantly share code, notes, and snippets.

@zengzengzenghuy
Last active July 24, 2026 09:39
Show Gist options
  • Select an option

  • Save zengzengzenghuy/3bcb87f1526b27d35f4aa3b0544f0582 to your computer and use it in GitHub Desktop.

Select an option

Save zengzengzenghuy/3bcb87f1526b27d35f4aa3b0544f0582 to your computer and use it in GitHub Desktop.
Manual tx to sign - Omnibridge, xDAI Bridge
// Sign Omnibridge (AMB) messages with a validator private key.
//
// Usage:
// node manual_sign_omni.js <private-key>
//
// Reads: omnibridge_tx_to_sign.csv (columns: Tx Hash, Message, Origin)
// Writes: omnibridge_tx_signed.csv (adds a Signature column)
//
// Each Message is a raw hex payload. Bridge validators sign it with the
// EIP-191 personal_sign scheme (\x19Ethereum Signed Message:\n<len> prefix
// over the raw message bytes), which is what viem's signMessage({ raw }) does.
import fs from "fs";
import path from "path";
import { fileURLToPath } from "url";
import { privateKeyToAccount } from "viem/accounts";
const __dirname = path.dirname(fileURLToPath(import.meta.url));
const INPUT_CSV = path.join(__dirname, "omnibridge_tx_to_sign.csv");
const OUTPUT_CSV = path.join(__dirname, "omnibridge_tx_signed.csv");
const main = async () => {
let pk = process.argv[2];
if (!pk) {
console.error("Usage: node manual_sign_omni.js <private-key>");
process.exit(1);
}
if (!pk.startsWith("0x")) pk = "0x" + pk;
const account = privateKeyToAccount(pk);
console.log("Signing as:", account.address);
const lines = fs.readFileSync(INPUT_CSV, "utf8").trim().split("\n");
const header = lines[0].split(",");
const out = [[...header, "Signature"].join(",")];
for (let i = 1; i < lines.length; i++) {
const cells = lines[i].split(",");
const [txHash, message, origin] = cells;
if (!message || !message.trim()) {
console.warn(`[skip] ${txHash} -> empty message`);
out.push([...cells, ""].join(","));
continue;
}
const raw = message.trim().startsWith("0x")
? message.trim()
: "0x" + message.trim();
try {
const signature = await account.signMessage({ message: { raw } });
out.push([...cells, signature].join(","));
console.log(`[ok] ${txHash} -> ${signature.slice(0, 20)}...`);
} catch (err) {
console.error(`[err] ${txHash} -> ${err.message}`);
out.push([...cells, ""].join(","));
}
}
fs.writeFileSync(OUTPUT_CSV, out.join("\n") + "\n");
console.log(`\nDone. Wrote ${OUTPUT_CSV}`);
};
main();
#!/usr/bin/env bash
# Sign Omnibridge (AMB) messages with a validator private key, using foundry's cast.
#
# Usage:
# ./manual_sign_omni.sh <private-key>
#
# Reads: omnibridge_tx_to_sign.csv (columns: Tx Hash, Message, Origin)
# Writes: omnibridge_tx_signed.csv (adds a Signature column)
#
# Each Message is a raw 0x hex payload. `cast wallet sign` interprets a 0x
# message as hex bytes and signs it with the EIP-191 personal_sign scheme,
# matching viem's signMessage({ raw }).
set -euo pipefail
DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
INPUT_CSV="$DIR/omnibridge_tx_to_sign.csv"
OUTPUT_CSV="$DIR/omnibridge_tx_signed.csv"
PK="${1:-}"
if [ -z "$PK" ]; then
echo "Usage: $0 <private-key>" >&2
exit 1
fi
case "$PK" in 0x*) ;; *) PK="0x$PK" ;; esac
echo "Signing as: $(cast wallet address --private-key "$PK")"
# Read the header, append the Signature column.
header="$(head -n 1 "$INPUT_CSV")"
printf '%s,Signature\n' "$header" > "$OUTPUT_CSV"
# Process each data row (skip the header line).
tail -n +2 "$INPUT_CSV" | while IFS=',' read -r txHash message origin _rest; do
[ -z "$txHash" ] && continue
if [ -z "$message" ]; then
echo "[skip] $txHash -> empty message" >&2
printf '%s,%s,%s,\n' "$txHash" "$message" "$origin" >> "$OUTPUT_CSV"
continue
fi
case "$message" in 0x*) msg="$message" ;; *) msg="0x$message" ;; esac
if signature="$(cast wallet sign --private-key "$PK" "$msg" 2>/dev/null)"; then
printf '%s,%s,%s,%s\n' "$txHash" "$message" "$origin" "$signature" >> "$OUTPUT_CSV"
echo "[ok] $txHash -> ${signature:0:20}..."
else
echo "[err] $txHash -> cast wallet sign failed" >&2
printf '%s,%s,%s,\n' "$txHash" "$message" "$origin" >> "$OUTPUT_CSV"
fi
done
echo ""
echo "Done. Wrote $OUTPUT_CSV"
// Sign xDAI bridge messages with a validator private key.
//
// Usage:
// node manual_sign_xdai.js <private-key>
//
// Reads: xdai_tx_to_sign.csv (columns: Tx Hash, Message, Origin)
// Writes: xdai_tx_signed.csv (adds a Signature column)
//
// Each Message is a raw hex payload. Bridge validators sign it with the
// EIP-191 personal_sign scheme (\x19Ethereum Signed Message:\n<len> prefix
// over the raw message bytes), which is what viem's signMessage({ raw }) does.
import fs from "fs";
import path from "path";
import { fileURLToPath } from "url";
import { privateKeyToAccount } from "viem/accounts";
const __dirname = path.dirname(fileURLToPath(import.meta.url));
const INPUT_CSV = path.join(__dirname, "xdai_tx_to_sign.csv");
const OUTPUT_CSV = path.join(__dirname, "xdai_tx_signed.csv");
const main = async () => {
let pk = process.argv[2];
if (!pk) {
console.error("Usage: node manual_sign_xdai.js <private-key>");
process.exit(1);
}
if (!pk.startsWith("0x")) pk = "0x" + pk;
const account = privateKeyToAccount(pk);
console.log("Signing as:", account.address);
const lines = fs.readFileSync(INPUT_CSV, "utf8").trim().split("\n");
const header = lines[0].split(",");
const out = [[...header, "Signature"].join(",")];
for (let i = 1; i < lines.length; i++) {
const cells = lines[i].split(",");
const [txHash, message, origin] = cells;
if (!message || !message.trim()) {
console.warn(`[skip] ${txHash} -> empty message`);
out.push([...cells, ""].join(","));
continue;
}
const raw = message.trim().startsWith("0x")
? message.trim()
: "0x" + message.trim();
try {
const signature = await account.signMessage({ message: { raw } });
out.push([...cells, signature].join(","));
console.log(`[ok] ${txHash} -> ${signature.slice(0, 20)}...`);
} catch (err) {
console.error(`[err] ${txHash} -> ${err.message}`);
out.push([...cells, ""].join(","));
}
}
fs.writeFileSync(OUTPUT_CSV, out.join("\n") + "\n");
console.log(`\nDone. Wrote ${OUTPUT_CSV}`);
};
main();
#!/usr/bin/env bash
# Sign xDAI bridge messages with a validator private key, using foundry's cast.
#
# Usage:
# ./manual_sign_xdai.sh <private-key>
#
# Reads: xdai_tx_to_sign.csv (columns: Tx Hash, Message, Origin)
# Writes: xdai_tx_signed.csv (adds a Signature column)
#
# Each Message is a raw 0x hex payload. `cast wallet sign` interprets a 0x
# message as hex bytes and signs it with the EIP-191 personal_sign scheme,
# matching viem's signMessage({ raw }).
set -euo pipefail
DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
INPUT_CSV="$DIR/xdai_tx_to_sign.csv"
OUTPUT_CSV="$DIR/xdai_tx_signed.csv"
PK="${1:-}"
if [ -z "$PK" ]; then
echo "Usage: $0 <private-key>" >&2
exit 1
fi
case "$PK" in 0x*) ;; *) PK="0x$PK" ;; esac
echo "Signing as: $(cast wallet address --private-key "$PK")"
# Read the header, append the Signature column.
header="$(head -n 1 "$INPUT_CSV")"
printf '%s,Signature\n' "$header" > "$OUTPUT_CSV"
# Process each data row (skip the header line).
tail -n +2 "$INPUT_CSV" | while IFS=',' read -r txHash message origin _rest; do
[ -z "$txHash" ] && continue
if [ -z "$message" ]; then
echo "[skip] $txHash -> empty message" >&2
printf '%s,%s,%s,\n' "$txHash" "$message" "$origin" >> "$OUTPUT_CSV"
continue
fi
case "$message" in 0x*) msg="$message" ;; *) msg="0x$message" ;; esac
if signature="$(cast wallet sign --private-key "$PK" "$msg" 2>/dev/null)"; then
printf '%s,%s,%s,%s\n' "$txHash" "$message" "$origin" "$signature" >> "$OUTPUT_CSV"
echo "[ok] $txHash -> ${signature:0:20}..."
else
echo "[err] $txHash -> cast wallet sign failed" >&2
printf '%s,%s,%s,\n' "$txHash" "$message" "$origin" >> "$OUTPUT_CSV"
fi
done
echo ""
echo "Done. Wrote $OUTPUT_CSV"
Tx Hash Message Origin
0x60d50e92ce5937c0480484e890f9ffcd2fd5087888b83208a864370cce1d79c2 0x00050000A7823D6F1E31569F51861E345B30C6BEBF70EBE70000000000008A6EF6A78083CA3E2A662D6DD1703C939C8ACE2E268D88AD09518695C6C3712AC10A214BE5109A655671000927C00101806401272255BB000000000000000000000000DAC17F958D2EE523A2206206994597C13D831EC7000000000000000000000000B24597F5A8BBD192BBFBD9E89C300028708F2F4E000000000000000000000000000000000000000000000000000000001CA94D9C GC
0x051d886caf4860f5920922a89ee9de4ba066dfda762d084bdec610163e53a531 0x00050000A7823D6F1E31569F51861E345B30C6BEBF70EBE7000000000001DB21F6A78083CA3E2A662D6DD1703C939C8ACE2E268D88AD09518695C6C3712AC10A214BE5109A655671000927C00101806401272255BB000000000000000000000000A0B86991C6218B36C1D19D4A2E9EB0CE3606EB48000000000000000000000000B0B58D8D083E9C19E2FB6DDB083310AD5D5294DC00000000000000000000000000000000000000000000000000000000033DC6A4 GC
0x388b8ceec7dec23b1fbf4b0d3695149b53ed0b576efb146e6f975679b5eb0f62 0x00050000A7823D6F1E31569F51861E345B30C6BEBF70EBE7000000000001DAC2F6A78083CA3E2A662D6DD1703C939C8ACE2E268D88AD09518695C6C3712AC10A214BE5109A655671000927C00101806401272255BB0000000000000000000000006810E776880C02933D47DB1B9FC05908E5386B9600000000000000000000000009B263F43111A818DD11AC347ECA697A4CEEFA56000000000000000000000000000000000000000000000000016345785D8A0000 GC
0x19fb071960f7a538eed1701c8f5d35c874fb21aab8b4bcaacff2c97297f3a7e6 0x00050000A7823D6F1E31569F51861E345B30C6BEBF70EBE7000000000001D997F6A78083CA3E2A662D6DD1703C939C8ACE2E268D88AD09518695C6C3712AC10A214BE5109A655671000927C00101806401272255BB000000000000000000000000A0B86991C6218B36C1D19D4A2E9EB0CE3606EB480000000000000000000000009A760AA1FE631FD9AC0AEE0965736121C7C132CC00000000000000000000000000000000000000000000000000000004A817C800 GC
0xa0393e78c20b4088e5ddf1c598a99c67701ffc4f11f4a452c4b5b034dc9096f0 0x00050000A7823D6F1E31569F51861E345B30C6BEBF70EBE7000000000001DD3AF6A78083CA3E2A662D6DD1703C939C8ACE2E268D88AD09518695C6C3712AC10A214BE5109A655671000927C00101806401272255BB0000000000000000000000000D8775F648430679A709E98D2B0CB6250D2887EF00000000000000000000000009A3F996A08D57A733EDF94D01ACFAB23C5B748E0000000000000000000000000000000000000000000000490F5C61811E4C8783 GC
0xc9a629c917ceb01bdb4045972f02ef241a2f215809b553a9c5180f7b753eb5cd 0x00050000A7823D6F1E31569F51861E345B30C6BEBF70EBE7000000000001DCEDF6A78083CA3E2A662D6DD1703C939C8ACE2E268D88AD09518695C6C3712AC10A214BE5109A655671000927C00101806401272255BB0000000000000000000000002260FAC5E5542A773AA44FBCFEDF7C193BC2C59900000000000000000000000065A8F07BD9A8598E1B5B6C0A88F4779DBC07767500000000000000000000000000000000000000000000000000000000004562F9 GC
0x64adee71f9cd1a32183a54dcf824642c7c9e437320b520dce7b2f56ffcbbd1dc 0x00050000A7823D6F1E31569F51861E345B30C6BEBF70EBE7000000000001DB9BF6A78083CA3E2A662D6DD1703C939C8ACE2E268D88AD09518695C6C3712AC10A214BE5109A655671000927C00101806401272255BB0000000000000000000000005AFE3855358E112B5647B952709E6165E1C1EEEE0000000000000000000000000D2B8DE60C634C4D80AE4A837411445BF364C01700000000000000000000000000000000000000000000000614C16B3C3DCBC800 GC
0x10c234af83d508d6fcd4b7ffd66b5ebcbf664921cfc85462c40c27130ad45fd1 0x00050000A7823D6F1E31569F51861E345B30C6BEBF70EBE7000000000001DBA5F6A78083CA3E2A662D6DD1703C939C8ACE2E268D88AD09518695C6C3712AC10A214BE5109A655671000927C00101806401272255BB0000000000000000000000005DD57DA40E6866C9FCC34F4B6DDC89F1BA740DFE000000000000000000000000D9FFAF2E880DF0CC7B7104E9E789D281A81824CF00000000000000000000000000000000000000000000043C33C1937564800000 GC
0x4d14a582e797350279e532cde3aca64e138a027598696976aadcc0f3c8f85240 0x00050000A7823D6F1E31569F51861E345B30C6BEBF70EBE7000000000001DB7BF6A78083CA3E2A662D6DD1703C939C8ACE2E268D88AD09518695C6C3712AC10A214BE5109A655671000927C00101806401272255BB0000000000000000000000005AFE3855358E112B5647B952709E6165E1C1EEEE00000000000000000000000075895099AF9257A12AA0D1C148C088BB907A90C600000000000000000000000000000000000000000000000578523334169BA800 GC
0x95356d9259bb1f5d9a095d9141db847ae337d4b8d9cc877100bda84ebb5b25aa 0x00050000A7823D6F1E31569F51861E345B30C6BEBF70EBE7000000000001E186F6A78083CA3E2A662D6DD1703C939C8ACE2E268D88AD09518695C6C3712AC10A214BE5109A655671000927C00101806401272255BB000000000000000000000000A0B86991C6218B36C1D19D4A2E9EB0CE3606EB48000000000000000000000000E524D6514F5C6C91796D223C3310CE211BC749C00000000000000000000000000000000000000000000000000000000001576E24 GC
0x724e88d74efcfe895c2e412f7ebac6b95f226ee5e67d8a466e716f08f651d652 0x00050000A7823D6F1E31569F51861E345B30C6BEBF70EBE7000000000001E198F6A78083CA3E2A662D6DD1703C939C8ACE2E268D88AD09518695C6C3712AC10A214BE5109A655671000927C00101806401272255BB0000000000000000000000006810E776880C02933D47DB1B9FC05908E5386B960000000000000000000000005C65A851DE69BA81BDB24B1241362A76941259DF000000000000000000000000000000000000000000000000001D7CCE57A2C000 GC
0x7c3faf1a01de705401edaf836bc7d6645b2de49cb1e8580fda87c76952ea2ab0 0x00050000A7823D6F1E31569F51861E345B30C6BEBF70EBE7000000000001E1C5F6A78083CA3E2A662D6DD1703C939C8ACE2E268D88AD09518695C6C3712AC10A214BE5109A655671000927C00101806401272255BB000000000000000000000000DEF1CA1FB7FBCDC777520AA7F396B4E015F497AB0000000000000000000000008CEA18CA2863B7CC034FE50E953DAF3E99F15C590000000000000000000000000000000000000000000000000E2545DC9C6477DD GC
0x52e45c52b4b52e0f44fb23f4513884531d531b14b94857cea0d4d62a34652a8c 0x00050000A7823D6F1E31569F51861E345B30C6BEBF70EBE7000000000001DE3EF6A78083CA3E2A662D6DD1703C939C8ACE2E268D88AD09518695C6C3712AC10A214BE5109A655671000927C00101806401272255BB0000000000000000000000000001A500A6B18995B03F44BB040A5FFC28E45CB000000000000000000000000065A8F07BD9A8598E1B5B6C0A88F4779DBC077675000000000000000000000000000000000000000000000531F9A6743B959E68D0 GC
0x621a6cdd7f82be59353bfabc798969977c9ed5e04e1e42d27a1d9e6141cb8341 0x00050000A7823D6F1E31569F51861E345B30C6BEBF70EBE7000000000001DE3DF6A78083CA3E2A662D6DD1703C939C8ACE2E268D88AD09518695C6C3712AC10A214BE5109A655671000927C00101806401272255BB0000000000000000000000002260FAC5E5542A773AA44FBCFEDF7C193BC2C59900000000000000000000000065A8F07BD9A8598E1B5B6C0A88F4779DBC07767500000000000000000000000000000000000000000000000000000000004CB315 GC
0x2c35c877b737a33d51519cf8e586c47dd329dada64571c5ab3d9a994ba112f38 0x00050000A7823D6F1E31569F51861E345B30C6BEBF70EBE7000000000001DDF0F6A78083CA3E2A662D6DD1703C939C8ACE2E268D88AD09518695C6C3712AC10A214BE5109A655671000927C001018064012AE87CDD00000000000000000000000036542D24C9288889FB4D4940A9509C7CECB3D8EB00000000000000000000000000000000000000000000000000000000000000C00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000600000000000000000000000035CAFF16D0834E67922FF2DA078BA9E3D6CE86EA00000000000000000000000000000000000000000000000000000001D6E06F000000000000000000000000000000000000000000000000000000000000000004455552430000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044555524300000000000000000000000000000000000000000000000000000000 GC
0x2bf13bbcaf0d4549bea0f8591719016a5b54275f0e133ae465860ba5e3b19813 0x00050000A7823D6F1E31569F51861E345B30C6BEBF70EBE7000000000001DDEFF6A78083CA3E2A662D6DD1703C939C8ACE2E268D88AD09518695C6C3712AC10A214BE5109A655671000927C001018064012AE87CDD00000000000000000000000036542D24C9288889FB4D4940A9509C7CECB3D8EB00000000000000000000000000000000000000000000000000000000000000C00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000600000000000000000000000035CAFF16D0834E67922FF2DA078BA9E3D6CE86EA0000000000000000000000000000000000000000000000000000000005F5E1000000000000000000000000000000000000000000000000000000000000000004455552430000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044555524300000000000000000000000000000000000000000000000000000000 GC
0x3926611f76513a6a268bd204de9d886b78725574f28fffc692b47de876dcee56 0x00050000A7823D6F1E31569F51861E345B30C6BEBF70EBE7000000000001DDF5F6A78083CA3E2A662D6DD1703C939C8ACE2E268D88AD09518695C6C3712AC10A214BE5109A655671000927C00101806401272255BB0000000000000000000000005AFE3855358E112B5647B952709E6165E1C1EEEE0000000000000000000000008678F58AC6C4748B5289D0DB70E627EEF395DEAD0000000000000000000000000000000000000000000004510D61A605F94F1AE7 GC
0x17322abe0e6ca9a7008c3702d3ed7137c304488cd59e90ed1ce67fd972a97340 0x00050000A7823D6F1E31569F51861E345B30C6BEBF70EBE7000000000001DDCFF6A78083CA3E2A662D6DD1703C939C8ACE2E268D88AD09518695C6C3712AC10A214BE5109A655671000927C00101806401272255BB000000000000000000000000F5581DFEFD8FB0E4AEC526BE659CFAB1F8C781DA00000000000000000000000065A8F07BD9A8598E1B5B6C0A88F4779DBC0776750000000000000000000000000000000000000000000006102367643C00400000 GC
0xbaa4d0176a9e3f8c666b35325fb72c8f62def8a84b5612d7ea1c428aef0e9f91 0x00050000A7823D6F1E31569F51861E345B30C6BEBF70EBE7000000000001DDC2F6A78083CA3E2A662D6DD1703C939C8ACE2E268D88AD09518695C6C3712AC10A214BE5109A655671000927C00101806401272255BB0000000000000000000000002260FAC5E5542A773AA44FBCFEDF7C193BC2C59900000000000000000000000065A8F07BD9A8598E1B5B6C0A88F4779DBC07767500000000000000000000000000000000000000000000000000000000004C32ED GC
0xde2c6eb1a10d196135b3527033f19c705ae7479b669dec3b04b26d6fa125effc 0x00050000A7823D6F1E31569F51861E345B30C6BEBF70EBE7000000000001DFDEF6A78083CA3E2A662D6DD1703C939C8ACE2E268D88AD09518695C6C3712AC10A214BE5109A655671000927C00101806401272255BB000000000000000000000000A0B86991C6218B36C1D19D4A2E9EB0CE3606EB48000000000000000000000000ADC35EB2D028D741B0A97147882B23D2D885089B000000000000000000000000000000000000000000000000000000094F618AEF GC
0xc3fccf55a46b3faaa6322064384ff94623e2aee8b6c1747e8ca0344b5e01935d 0x00050000A7823D6F1E31569F51861E345B30C6BEBF70EBE7000000000001DF89F6A78083CA3E2A662D6DD1703C939C8ACE2E268D88AD09518695C6C3712AC10A214BE5109A655671000927C00101806401272255BB000000000000000000000000A0B86991C6218B36C1D19D4A2E9EB0CE3606EB480000000000000000000000004D72CB34BB315DE0263C906BFDB750C948D59075000000000000000000000000000000000000000000000000000000001E8985D5 GC
0x78e3488ca600786fcacf4143e77bc3243a37ce8e2ae06140c83e7f726cbaf5e2 0x00050000A7823D6F1E31569F51861E345B30C6BEBF70EBE7000000000001DF5EF6A78083CA3E2A662D6DD1703C939C8ACE2E268D88AD09518695C6C3712AC10A214BE5109A655671000927C00101806401272255BB000000000000000000000000A0B86991C6218B36C1D19D4A2E9EB0CE3606EB4800000000000000000000000002D5B7882B19741DEE97F08B0C43E5E7EF6BE2520000000000000000000000000000000000000000000000000000000001CC9EE9 GC
0xf8ab2357097044f40bd26b4bb4f50144dc9d616e74dc918fb124f64cf4efb6ae 0x00050000A7823D6F1E31569F51861E345B30C6BEBF70EBE7000000000001DF54F6A78083CA3E2A662D6DD1703C939C8ACE2E268D88AD09518695C6C3712AC10A214BE5109A655671000927C00101806401272255BB0000000000000000000000002260FAC5E5542A773AA44FBCFEDF7C193BC2C599000000000000000000000000257134D1335A9A115E6B5F208DB8AB695A12CBB60000000000000000000000000000000000000000000000000000000000F28D1B GC
0xa3a0e57c97f693966d73b056ac46106ad77725d794954a5f72ac1efda58002bd 0x00050000A7823D6F1E31569F51861E345B30C6BEBF70EBE7000000000001DF4CF6A78083CA3E2A662D6DD1703C939C8ACE2E268D88AD09518695C6C3712AC10A214BE5109A655671000927C00101006401867F7A4D000000000000000000000000C02AAA39B223FE8D0A0E5C4F27EAD9083C756CC20000000000000000000000003F615BA21BC6CC5D4A6D798C5950CC5C42937FBD0000000000000000000000000000000000000000000000000041B9A6E8584000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000400000000000000000000000008904D20F32A2A438411FC10EB4B0E00F9483665E000000000000000000000000000000000000000000000000001E32B478974000 GC
0x2e2240794690e806371c19cf6dce6d420a43520e29287dad6c768306c1eec2b7 0x00050000A7823D6F1E31569F51861E345B30C6BEBF70EBE7000000000001DF4BF6A78083CA3E2A662D6DD1703C939C8ACE2E268D88AD09518695C6C3712AC10A214BE5109A655671000927C00101806401272255BB000000000000000000000000A0B86991C6218B36C1D19D4A2E9EB0CE3606EB48000000000000000000000000AA2C86CA4BE50DCC45770CF4C57A76E6336A6A2900000000000000000000000000000000000000000000000000000001DCBEED29 GC
0x218c5f09ca73e5725d5774684280822907e9cd672ada2150eee35d71de8f97d3 0x00050000A7823D6F1E31569F51861E345B30C6BEBF70EBE7000000000001DF3CF6A78083CA3E2A662D6DD1703C939C8ACE2E268D88AD09518695C6C3712AC10A214BE5109A655671000927C00101806401272255BB0000000000000000000000000CEC1A9154FF802E7934FC916ED7CA50BDE6844E000000000000000000000000FB0568E1341DE70238250419A35D067F424F6BA70000000000000000000000000000000000000000000000089EC8963DB36D420A GC
0x98a1e23b64150b9dcf5f252b54691cdf09132467ca2e36660da41cdf903b07bc 0x00050000A7823D6F1E31569F51861E345B30C6BEBF70EBE7000000000001DF26F6A78083CA3E2A662D6DD1703C939C8ACE2E268D88AD09518695C6C3712AC10A214BE5109A655671000927C00101806401272255BB000000000000000000000000AA7A9CA87D3694B5755F213B5D04094B8D0F0A6F000000000000000000000000E6B4ACCC6A58D5998CE7D0740E471E2CDE0D3CFA000000000000000000000000000000000000000000000002B5E3AF16B1880000 GC
0xc55a2a5ea902f062b23a8cea5ac72445f68c7dd78cebe1306aa2cf6da7a1ebc1 0x00050000A7823D6F1E31569F51861E345B30C6BEBF70EBE7000000000001DEB8F6A78083CA3E2A662D6DD1703C939C8ACE2E268D88AD09518695C6C3712AC10A214BE5109A655671000927C00101806401272255BB0000000000000000000000005AFE3855358E112B5647B952709E6165E1C1EEEE000000000000000000000000C442FC295CD0E8AFAC67906B44A869C14BB89790000000000000000000000000000000000000000000000006590AAED709770800 GC
0x557d64180920e374c3a19bc12954918b64a763d3f9cd3bbe5f9976aa06b01eb1 0x00050000A7823D6F1E31569F51861E345B30C6BEBF70EBE7000000000001DE32F6A78083CA3E2A662D6DD1703C939C8ACE2E268D88AD09518695C6C3712AC10A214BE5109A655671000927C00101806401125E4CFB00000000000000000000000036542D24C9288889FB4D4940A9509C7CECB3D8EB00000000000000000000000035CAFF16D0834E67922FF2DA078BA9E3D6CE86EA0000000000000000000000000000000000000000000000000007793E10FCD776 GC
0x93cb936317d344c62f44657d14d64081edb9fc1b51fff8760c4008fa796ea0e2 0x00050000A7823D6F1E31569F51861E345B30C6BEBF70EBE7000000000001E0E2F6A78083CA3E2A662D6DD1703C939C8ACE2E268D88AD09518695C6C3712AC10A214BE5109A655671000927C00101806401272255BB0000000000000000000000005AFE3855358E112B5647B952709E6165E1C1EEEE0000000000000000000000005A945741F5C367410678E1513B939F7ADAFBACF00000000000000000000000000000000000000000000000B59CC6EED78974D1E1 GC
0x9ba87a3484377c6d99a5e9954c98265c5594630618313c473756ed993ebcee38 0x00050000A7823D6F1E31569F51861E345B30C6BEBF70EBE7000000000001E076F6A78083CA3E2A662D6DD1703C939C8ACE2E268D88AD09518695C6C3712AC10A214BE5109A655671000927C00101806401272255BB000000000000000000000000A0B86991C6218B36C1D19D4A2E9EB0CE3606EB480000000000000000000000003C5C2F4BCEC51A36494682F91DBC6CA7C63B514C0000000000000000000000000000000000000000000000000000000000989680 GC
0x2f92b82def661328ac3140326243cd6b7d1fd8088ce89248af4d9bb85992fc7b 0x000500004AC82B41BD819DD871590B510316F2385CB196FB000000000002F78888AD09518695C6C3712AC10A214BE5109A655671F6A78083CA3E2A662D6DD1703C939C8ACE2E268D001E84800101000164125E4CFB0000000000000000000000006810E776880C02933D47DB1B9FC05908E5386B96000000000000000000000000FDFF0B569F14AF593D446E51B3E42F502124AC8500000000000000000000000000000000000000000000000077437D0AF6FDA000 ETH
Tx Hash Message Origin
0x32830d13d7666bb1049d5823f8276d2ef6c9ff8e88cb2b4417015e8dc9dc4aa5 0xAFCD4572408B322ADA9890253A7A42A9FA4C2E4000000000000000000000000000000000000000000000001043561A882930000000000000000000000000000000000000000000000000000000000000000011C54AA42145AA6EBF72E164C9BBC74FBD37880450166B175474E89094C44DA98B954EEDEAC495271D0F GC
0x5c5522aaacdb57652d72412bf38bace78e353be10bf447819e24567e984986f0 0xE791A513A55A9D8A7455A0C2C27F865BAD9EF878000000000000000000000000000000000000000000000000B2BEF3C24308000000000000000000000000000000000000000000000000000000000000000012904AA42145AA6EBF72E164C9BBC74FBD37880450166B175474E89094C44DA98B954EEDEAC495271D0F GC
0x8b5f1375a960d1365a6390f446aba957baad072f6dafb5047e286820e1c18b96 0xFE649BD467BD5F286381BB5DE5D6EC37508F557E000000000000000000000000000000000000000000000000D5B7CA684504000000000000000000000000000000000000000000000000000000000000000012894AA42145AA6EBF72E164C9BBC74FBD37880450166B175474E89094C44DA98B954EEDEAC495271D0F GC
0xf8dff2d5bb6b7e932102627a8c8aa94e53ee189169f034a83d7fa025c56f5b71 0xA2BCD1A4EFBD04B63CD03F5AFF2561106EBCCE0000000000000000000000000000000000000000000000004F404EF749331A96CA00000000000000000000000000000000000000000000000000000000000012794AA42145AA6EBF72E164C9BBC74FBD37880450166B175474E89094C44DA98B954EEDEAC495271D0F GC
0xe7a0191590bfa72aa3f965e3c9b8ded952fcb4e8f8a323fbb9c7392cd9bdf3cd 0x88928FF265A144AEF2C5E228D536D9E477A68CFC000000000000000000000000000000000000000000000001F44B53FFB8D5000000000000000000000000000000000000000000000000000000000000000011D44AA42145AA6EBF72E164C9BBC74FBD37880450166B175474E89094C44DA98B954EEDEAC495271D0F GC
0x94404a628278d36785c33ce27d6e94231760c50ec6f15fb25deeab309fe81550 0xA2E83E57502A89A3AF7CEACC195B320F9AD7D64D000000000000000000000000000000000000000000000004C370F371DD93000000000000000000000000000000000000000000000000000000000000000011AD4AA42145AA6EBF72E164C9BBC74FBD37880450166B175474E89094C44DA98B954EEDEAC495271D0F GC
0x29d812bb1af9f97d4ce83bc4d367f0453db468a5895a7a9510ce2fda04cb50a3 0xA2BCD1A4EFBD04B63CD03F5AFF2561106EBCCE000000000000000000000000000000000000000000000000ACD0B7E890AF14832500000000000000000000000000000000000000000000000000000000000011A74AA42145AA6EBF72E164C9BBC74FBD37880450166B175474E89094C44DA98B954EEDEAC495271D0F GC
@zengzengzenghuy

Copy link
Copy Markdown
Author

Instruction

  1. Download both .csv file as datasource
  2. You can either run bash script or nodejs script, private key is required as the script parameter.
  3. For nodejs script, make sure to npm install viem
    3.1 Run node manual_sign_omni.js <private-key>, output file omnibridge_tx_signed.csv
    3.2 Run node manual_sign_xdai.js <private-key>, output file xdai_tx_signed.csv.
  4. For bash script, make sure foundry is installed.
    4.1 Run ./manual_sign_omni.sh <private-key>, output file omnibridge_tx_signed.csv
    4.2 Run ./manual_sign_xdai.sh <private-key>, output file xdai_tx_signed.csv

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment