UNPKG

@mantleio/core-utils

Version:
41 lines 2.17 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.encodeCrossDomainMessage = exports.encodeCrossDomainMessageV1 = exports.encodeCrossDomainMessageV0 = exports.decodeVersionedNonce = exports.encodeVersionedNonce = void 0; const bignumber_1 = require("@ethersproject/bignumber"); const abi_1 = require("@ethersproject/abi"); const iface = new abi_1.Interface([ 'function relayMessage(address,address,bytes,uint256)', 'function relayMessage(uint256,address,address,uint256,uint256,uint256,bytes)', ]); const nonceMask = bignumber_1.BigNumber.from('0x0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff'); const encodeVersionedNonce = (nonce, version) => { return version.or(nonce.shl(240)); }; exports.encodeVersionedNonce = encodeVersionedNonce; const decodeVersionedNonce = (nonce) => { return { version: nonce.shr(240), nonce: nonce.and(nonceMask), }; }; exports.decodeVersionedNonce = decodeVersionedNonce; const encodeCrossDomainMessageV0 = (target, sender, data, nonce) => { return iface.encodeFunctionData('relayMessage(address,address,bytes,uint256)', [target, sender, data, nonce]); }; exports.encodeCrossDomainMessageV0 = encodeCrossDomainMessageV0; const encodeCrossDomainMessageV1 = (nonce, sender, target, mntValue, ethValue, gasLimit, data) => { return iface.encodeFunctionData('relayMessage(uint256,address,address,uint256,uint256,uint256,bytes)', [nonce, sender, target, mntValue, ethValue, gasLimit, data]); }; exports.encodeCrossDomainMessageV1 = encodeCrossDomainMessageV1; const encodeCrossDomainMessage = (nonce, sender, target, mntValue, ethValue, gasLimit, data) => { const { version } = (0, exports.decodeVersionedNonce)(nonce); if (version.eq(0)) { return (0, exports.encodeCrossDomainMessageV0)(target, sender, data, nonce); } else if (version.eq(1)) { return (0, exports.encodeCrossDomainMessageV1)(nonce, sender, target, mntValue, ethValue, gasLimit, data); } throw new Error(`unknown version ${version.toString()}`); }; exports.encodeCrossDomainMessage = encodeCrossDomainMessage; //# sourceMappingURL=encoding.js.map