@unruggable/gateways
Version:
Trustless Ethereum Multichain CCIP-Read Gateway
58 lines (57 loc) • 2.22 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.AbstractOPRollup = void 0;
exports.hashOutputRootProof = hashOutputRootProof;
const rollup_js_1 = require("../rollup.cjs");
const EthProver_js_1 = require("../eth/EthProver.cjs");
const constants_1 = require("ethers/constants");
const crypto_1 = require("ethers/crypto");
const utils_js_1 = require("../utils.cjs");
const OutputRootProofType = `(
bytes32 version,
bytes32 stateRoot,
bytes32 messagePasserStorageRoot,
bytes32 latestBlockhash
)`;
function outputRootProofTuple(commit) {
return [constants_1.ZeroHash, commit.stateRoot, commit.passerRoot, commit.blockHash];
}
// same as lib/optimism/packages/contract-bedrock/src/libraries/Hashing.sol
function hashOutputRootProof(commit) {
return (0, crypto_1.keccak256)(utils_js_1.ABI_CODER.encode([OutputRootProofType], [outputRootProofTuple(commit)]));
}
const L2ToL1MessagePasser = '0x4200000000000000000000000000000000000016';
class AbstractOPRollup extends rollup_js_1.AbstractRollup {
L2ToL1MessagePasser = L2ToL1MessagePasser;
async createCommit(index, block) {
const prover = new EthProver_js_1.EthProver(this.provider2, block);
const [{ storageHash: passerRoot }, blockInfo] = await Promise.all([
prover.fetchProofs(this.L2ToL1MessagePasser),
prover.fetchBlock(),
]);
return {
index,
blockHash: blockInfo.hash,
stateRoot: blockInfo.stateRoot,
passerRoot,
prover,
};
}
encodeWitness(commit, proofSeq) {
return utils_js_1.ABI_CODER.encode([`(uint256, ${OutputRootProofType}, bytes[], bytes)`], [
[
commit.index,
outputRootProofTuple(commit),
proofSeq.proofs,
proofSeq.order,
],
]);
}
encodeWitnessV1(commit, proofSeq) {
return utils_js_1.ABI_CODER.encode([`(uint256, ${OutputRootProofType})`, '(bytes, bytes[])'], [
[commit.index, outputRootProofTuple(commit)],
[proofSeq.accountProof, proofSeq.storageProofs],
]);
}
}
exports.AbstractOPRollup = AbstractOPRollup;