37 lines
2 KiB
Solidity
37 lines
2 KiB
Solidity
// SPDX-License-Identifier: MIT
|
|
pragma solidity ^0.8.24;
|
|
|
|
import {Vm, VM_ADDRESS} from "../test/Vm.sol";
|
|
import {IgneumCertificateVerifier} from "../src/IgneumCertificateVerifier.sol";
|
|
|
|
/// Installs (or replaces) the voter table on an already deployed verifier (BRIDGE_VERIFIER) from the vectors file in
|
|
/// BRIDGE_TABLE_JSON (a gen.mjs table or chain output: keys, weights, index) and, when the file carries a certificate
|
|
/// (bitmap, signature), submits it. The deployer key comes from BRIDGE_DEPLOYER_KEY in the environment, never printed.
|
|
/// Used for a chain whose table is read at its first lock, after the contract itself was deployed (8 October 2026,
|
|
/// igneum-devnet-4: the contract first, the table when the weight window filled).
|
|
///
|
|
/// BRIDGE_VERIFIER=0x.. BRIDGE_TABLE_JSON=test/vectors/dn4-table.json forge script script/Install.s.sol:Install --rpc-url sepolia --broadcast --sig "run()"
|
|
contract Install {
|
|
Vm constant vm = Vm(VM_ADDRESS);
|
|
|
|
function run() external {
|
|
uint256 key = vm.envUint("BRIDGE_DEPLOYER_KEY");
|
|
IgneumCertificateVerifier v = IgneumCertificateVerifier(vm.envAddress("BRIDGE_VERIFIER"));
|
|
string memory j = vm.readFile(vm.envOr("BRIDGE_TABLE_JSON", "test/vectors/dn4-table.json"));
|
|
bytes[] memory keys = vm.parseJsonBytesArray(j, ".keys");
|
|
uint256[] memory w = vm.parseJsonUintArray(j, ".weights");
|
|
bytes memory packed;
|
|
uint64[] memory weights = new uint64[](w.length);
|
|
for (uint256 i = 0; i < keys.length; i++) {
|
|
packed = abi.encodePacked(packed, keys[i]);
|
|
weights[i] = uint64(w[i]);
|
|
}
|
|
uint64 index = uint64(vm.parseJsonUint(j, ".index"));
|
|
vm.startBroadcast(key);
|
|
v.installTable(index, packed, weights);
|
|
if (vm.keyExistsJson(j, ".bitmap")) {
|
|
v.submitCertificate(index, vm.parseJsonBytes32(j, ".checkpoint"), vm.parseJsonBytes(j, ".bitmap"), vm.parseJsonBytes(j, ".signature"));
|
|
}
|
|
vm.stopBroadcast();
|
|
}
|
|
}
|