@kleros/vea-contracts
Advanced tools
Comparing version 0.1.11 to 0.1.12
{ | ||
"address": "0x642B66C5D0F8c620C35264F2d2899A0E209D68d9", | ||
"address": "0xd599f19e8e2b5CE6ad94328be138B11bA97A7F21", | ||
"abi": [ | ||
@@ -231,15 +231,15 @@ { | ||
], | ||
"transactionHash": "0x649c065fcdbd82fa7cfb83eb22aceacf6c40b668aa308a902686bbfdd2ca7871", | ||
"transactionHash": "0x2413672701a2225a82bfd3bd9f5d5f69c085f93556cc406c1ec71018ebbc6732", | ||
"receipt": { | ||
"to": null, | ||
"from": "0xF50E77f2A2B6138D16c6c7511562E5C33c4B15A3", | ||
"contractAddress": "0x642B66C5D0F8c620C35264F2d2899A0E209D68d9", | ||
"contractAddress": "0xd599f19e8e2b5CE6ad94328be138B11bA97A7F21", | ||
"transactionIndex": 1, | ||
"gasUsed": "2279612", | ||
"gasUsed": "2325268", | ||
"logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", | ||
"blockHash": "0xf09ed7efe9b2f79f21b6468789d3929919b8b3f386fccc95ea0bf3741e0d97f0", | ||
"transactionHash": "0x649c065fcdbd82fa7cfb83eb22aceacf6c40b668aa308a902686bbfdd2ca7871", | ||
"blockHash": "0xd03d61410a1875fd28cbf5b9921936144800235262b4d278218d7933984463fb", | ||
"transactionHash": "0x2413672701a2225a82bfd3bd9f5d5f69c085f93556cc406c1ec71018ebbc6732", | ||
"logs": [], | ||
"blockNumber": 6543192, | ||
"cumulativeGasUsed": "2279612", | ||
"blockNumber": 7021567, | ||
"cumulativeGasUsed": "2325268", | ||
"status": 1, | ||
@@ -249,6 +249,6 @@ "byzantium": true | ||
"args": [ | ||
86400, | ||
120, | ||
"0x26858D60FE92b50b34e236B46874e02724344275" | ||
], | ||
"numDeployments": 1, | ||
"numDeployments": 2, | ||
"solcInputHash": "7ccd9051976de629fcf1f236b9f4ab27", | ||
@@ -255,0 +255,0 @@ "metadata": "{\"compiler\":{\"version\":\"0.8.9+commit.e5eed63a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_epochPeriod\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_safeBridgeReceiver\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"batchID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"batchSize\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"batchMerkleRoot\",\"type\":\"bytes32\"}],\"name\":\"BatchOutgoing\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"fastMessage\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"fastMessageHash\",\"type\":\"bytes32\"}],\"name\":\"MessageReceived\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"canonicalBridgeMessageID\",\"type\":\"bytes32\"}],\"name\":\"SentSafe\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ARB_SYS\",\"outputs\":[{\"internalType\":\"contract IArbSys\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"batch\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"batchSize\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"currentBatchID\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"epochPeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"fastOutbox\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"safeBridgeReceiver\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sendBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_calldata\",\"type\":\"bytes\"}],\"name\":\"sendFast\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_epoch\",\"type\":\"uint256\"}],\"name\":\"sendSafeFallback\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Constructor.\",\"params\":{\"_epochPeriod\":\"The duration between epochs.\",\"_safeBridgeReceiver\":\"The the Safe Bridge Router on Ethereum to the receiving chain.\"}},\"sendFast(address,bytes)\":{\"details\":\"Sends an arbitrary message to Ethereum using the Fast Bridge.\",\"params\":{\"_calldata\":\"The receiving domain encoded message data / function arguments.\",\"_receiver\":\"The address of the contract on Ethereum which receives the calldata.\"}},\"sendSafeFallback(uint256)\":{\"details\":\"Sends the merkle root state for _epoch to Ethereum using the Safe Bridge, which relies on Arbitrum's canonical bridge. It is unnecessary during normal operations but essential only in case of challenge.\",\"params\":{\"_epoch\":\"The blocknumber of the batch\"}}},\"version\":1},\"userdoc\":{\"events\":{\"BatchOutgoing(uint256,uint256,uint256,bytes32)\":{\"notice\":\"The bridgers need to watch for these events and relay the batchMerkleRoot on the FastBridgeReceiver.\"}},\"kind\":\"user\",\"methods\":{\"sendBatch()\":{\"notice\":\"Sends a batch of arbitrary message from one domain to another via the fast bridge mechanism.\"}},\"notice\":\"Fast Bridge Sender Counterpart of `FastBridgeReceiver`\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/FastBridgeSender.sol\":\"FastBridgeSender\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"src/FastBridgeSender.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n/**\\n * @authors: [@jaybuidl, @shotaronowhere]\\n * @reviewers: []\\n * @auditors: []\\n * @bounties: []\\n * @deployments: []\\n */\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./interfaces/IFastBridgeSender.sol\\\";\\nimport \\\"./interfaces/ISafeBridgeSender.sol\\\";\\nimport \\\"./interfaces/ISafeBridgeReceiver.sol\\\";\\nimport \\\"./canonical/arbitrum/IArbSys.sol\\\"; // Arbitrum sender specific\\n\\n/**\\n * Fast Bridge Sender\\n * Counterpart of `FastBridgeReceiver`\\n */\\ncontract FastBridgeSender is IFastBridgeSender, ISafeBridgeSender {\\n // **************************************** //\\n // * * //\\n // * Arbitrum Sender Specific * //\\n // * * //\\n // **************************************** //\\n\\n // ************************************* //\\n // * Storage * //\\n // ************************************* //\\n\\n IArbSys public constant ARB_SYS = IArbSys(address(100));\\n\\n /**\\n * @dev Sends the merkle root state for _epoch to Ethereum using the Safe Bridge, which relies on Arbitrum's canonical bridge. It is unnecessary during normal operations but essential only in case of challenge.\\n * @param _epoch The blocknumber of the batch\\n */\\n function sendSafeFallback(uint256 _epoch) external payable override {\\n require(_epoch <= currentBatchID, \\\"Invalid epoch.\\\");\\n bytes32 batchMerkleRoot = fastOutbox[_epoch];\\n\\n // Safe Bridge message envelope\\n bytes4 methodSelector = ISafeBridgeReceiver.verifySafeBatch.selector;\\n bytes memory safeMessageData = abi.encodeWithSelector(methodSelector, _epoch, batchMerkleRoot);\\n\\n bytes32 ticketID = _sendSafe(safeBridgeReceiver, safeMessageData);\\n emit SentSafe(_epoch, ticketID);\\n }\\n\\n function _sendSafe(address _receiver, bytes memory _calldata) internal virtual override returns (bytes32) {\\n uint256 ticketID = ARB_SYS.sendTxToL1(_receiver, _calldata);\\n return bytes32(ticketID);\\n }\\n\\n /**\\n * @dev Constructor.\\n * @param _epochPeriod The duration between epochs.\\n * @param _safeBridgeReceiver The the Safe Bridge Router on Ethereum to the receiving chain.\\n */\\n constructor(uint256 _epochPeriod, address _safeBridgeReceiver) {\\n epochPeriod = _epochPeriod;\\n safeBridgeReceiver = _safeBridgeReceiver;\\n unchecked {\\n currentBatchID = block.timestamp / _epochPeriod - 1;\\n }\\n }\\n\\n // ************************************** //\\n // * * //\\n // * General Sender * //\\n // * * //\\n // ************************************** //\\n\\n // ************************************* //\\n // * Storage * //\\n // ************************************* //\\n\\n uint256 public immutable epochPeriod; // Epochs mark the period between potential batches of messages.\\n uint256 public currentBatchID;\\n mapping(uint256 => bytes32) public fastOutbox; // epoch count => merkle root of batched messages\\n address public immutable safeBridgeReceiver;\\n\\n // merkle tree representation of a batch of messages\\n // supports 2^64 messages.\\n bytes32[64] public batch;\\n uint256 public batchSize;\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /**\\n * @dev Sends an arbitrary message to Ethereum using the Fast Bridge.\\n * @param _receiver The address of the contract on Ethereum which receives the calldata.\\n * @param _calldata The receiving domain encoded message data / function arguments.\\n */\\n function sendFast(address _receiver, bytes memory _calldata) external override {\\n (bytes32 fastMessageHash, bytes memory fastMessage) = _encode(_receiver, _calldata);\\n emit MessageReceived(fastMessage, fastMessageHash);\\n appendMessage(fastMessageHash); // add message to merkle tree\\n }\\n\\n /**\\n * Sends a batch of arbitrary message from one domain to another via the fast bridge mechanism.\\n */\\n function sendBatch() external override {\\n uint256 epoch = block.timestamp / epochPeriod;\\n require(fastOutbox[epoch] == 0, \\\"Batch already sent for the current epoch.\\\");\\n require(batchSize > 0, \\\"No messages to send.\\\");\\n\\n // set merkle root in outbox\\n bytes32 batchMerkleRoot = getMerkleRoot();\\n fastOutbox[epoch] = batchMerkleRoot;\\n emit BatchOutgoing(currentBatchID, batchSize, epoch, batchMerkleRoot);\\n\\n // reset\\n batchSize = 0;\\n currentBatchID = epoch;\\n }\\n\\n // ************************ //\\n // * Internal * //\\n // ************************ //\\n\\n function _encode(address _receiver, bytes memory _calldata)\\n internal\\n view\\n returns (bytes32 fastMessageHash, bytes memory fastMessage)\\n {\\n // Encode the receiver address with the function signature + arguments i.e calldata\\n bytes32 sender = bytes32(bytes20(msg.sender));\\n bytes32 receiver = bytes32(bytes20(_receiver));\\n uint256 nonce = batchSize;\\n // add sender and receiver with proper function selector formatting\\n // [length][nonce][receiver: 1 slot padded][offset][function selector: 4 bytes no padding][msg.sender: 1 slot padded][function arguments: 1 slot padded]\\n assembly {\\n fastMessage := mload(0x40) // free memory pointer\\n let lengthCalldata := mload(_calldata) // calldata length\\n let lengthFastMessageCalldata := add(lengthCalldata, 0x20) // add msg.sender\\n let lengthEncodedMessage := add(lengthFastMessageCalldata, 0x80) // 1 offsets, receiver, and lengthFastMessageCalldata\\n mstore(fastMessage, lengthEncodedMessage) // bytes length\\n mstore(add(fastMessage, 0x20), nonce) // nonce\\n mstore(add(fastMessage, 0x4c), receiver) // receiver\\n mstore(add(fastMessage, 0x60), 0x60) // offset\\n mstore(add(fastMessage, 0x80), lengthFastMessageCalldata) // fast message length\\n mstore(\\n add(fastMessage, 0xa0),\\n and(mload(add(_calldata, 0x20)), 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000)\\n ) // function selector\\n mstore(add(fastMessage, 0xb0), sender) // sender\\n\\n let _cursor := add(fastMessage, 0xc4) // begin copying arguments of function call\\n let _cursorCalldata := add(_calldata, 0x24) // beginning of arguments\\n\\n // copy all arguments\\n for {\\n let j := 0x00\\n } lt(j, lengthCalldata) {\\n j := add(j, 0x20)\\n } {\\n mstore(_cursor, mload(add(_cursorCalldata, j)))\\n _cursor := add(_cursor, 0x20)\\n }\\n // update free pointer\\n mstore(0x40, _cursor)\\n }\\n // Compute the hash over the message header (batchSize as nonce) and body (fastMessage).\\n fastMessageHash = sha256(fastMessage);\\n }\\n\\n // ********************************* //\\n // * Merkle Tree * //\\n // ********************************* //\\n\\n /**\\n * @dev Append data into merkle tree.\\n * `O(log(n))` where `n` is the number of leaves.\\n * Note: Although each insertion is O(log(n)), complexity of n insertions is O(n).\\n * Note: Inlined from `merkle/MerkleTree.sol` for performance.\\n * @param leaf The leaf (already hashed) to insert in the merkle tree.\\n */\\n function appendMessage(bytes32 leaf) internal {\\n unchecked {\\n // Differentiate leaves from interior nodes with different\\n // hash functions to prevent 2nd order pre-image attack.\\n // https://flawed.net.nz/2018/02/21/attacking-merkle-trees-with-a-second-preimage-attack/\\n uint256 size = batchSize + 1;\\n batchSize = size;\\n uint256 hashBitField = (size ^ (size - 1)) & size;\\n uint256 height;\\n while ((hashBitField & 1) == 0) {\\n bytes32 node = batch[height];\\n if (node > leaf)\\n assembly {\\n // efficient hash\\n mstore(0x00, leaf)\\n mstore(0x20, node)\\n leaf := keccak256(0x00, 0x40)\\n }\\n else\\n assembly {\\n // efficient hash\\n mstore(0x00, node)\\n mstore(0x20, leaf)\\n leaf := keccak256(0x00, 0x40)\\n }\\n hashBitField /= 2;\\n height++;\\n }\\n batch[height] = leaf;\\n }\\n }\\n\\n /**\\n * @dev Gets the current merkle root.\\n * `O(log(n))` where `n` is the number of leaves.\\n * Note: Inlined from `merkle/MerkleTree.sol` for performance.\\n */\\n function getMerkleRoot() internal view returns (bytes32) {\\n unchecked {\\n bytes32 node;\\n uint256 size = batchSize;\\n uint256 height = 0;\\n bool isFirstHash = true;\\n while (size > 0) {\\n if ((size & 1) == 1) {\\n // avoid redundant calculation\\n if (isFirstHash) {\\n node = batch[height];\\n isFirstHash = false;\\n } else {\\n bytes32 hash = batch[height];\\n // efficient hash\\n if (hash > node)\\n assembly {\\n mstore(0x00, node)\\n mstore(0x20, hash)\\n node := keccak256(0x00, 0x40)\\n }\\n else\\n assembly {\\n mstore(0x00, hash)\\n mstore(0x20, node)\\n node := keccak256(0x00, 0x40)\\n }\\n }\\n }\\n size /= 2;\\n height++;\\n }\\n return node;\\n }\\n }\\n}\\n\",\"keccak256\":\"0x16d3416e2e90e70b048e27ae5087fb486b8644e97532d076aed8fc9698ca48ac\",\"license\":\"MIT\"},\"src/canonical/arbitrum/IArbSys.sol\":{\"content\":\"// SPDX-License-Identifier: Apache-2.0\\n\\npragma solidity >=0.7.0;\\n\\n/**\\n * @title Precompiled contract that exists in every Arbitrum chain at address(100), 0x0000000000000000000000000000000000000064. Exposes a variety of system-level functionality.\\n */\\ninterface IArbSys {\\n /**\\n * @notice Get internal version number identifying an ArbOS build\\n * @return version number as int\\n */\\n function arbOSVersion() external pure returns (uint256);\\n\\n /**\\n * @notice Get Arbitrum block number (distinct from L1 block number; Arbitrum genesis block has block number 0)\\n * @return block number as int\\n */\\n function arbBlockNumber() external view returns (uint256);\\n\\n /**\\n * @notice Send given amount of Eth to dest from sender.\\n * This is a convenience function, which is equivalent to calling sendTxToL1 with empty calldataForL1.\\n * @param destination recipient address on L1\\n * @return unique identifier for this L2-to-L1 transaction.\\n */\\n function withdrawEth(address destination) external payable returns (uint256);\\n\\n /**\\n * @notice Send a transaction to L1\\n * @param destination recipient address on L1\\n * @param calldataForL1 (optional) calldata for L1 contract call\\n * @return a unique identifier for this L2-to-L1 transaction.\\n */\\n function sendTxToL1(address destination, bytes calldata calldataForL1) external payable returns (uint256);\\n\\n /**\\n * @notice get the number of transactions issued by the given external account or the account sequence number of the given contract\\n * @param account target account\\n * @return the number of transactions issued by the given external account or the account sequence number of the given contract\\n */\\n function getTransactionCount(address account) external view returns (uint256);\\n\\n /**\\n * @notice get the value of target L2 storage slot\\n * This function is only callable from address 0 to prevent contracts from being able to call it\\n * @param account target account\\n * @param index target index of storage slot\\n * @return stotage value for the given account at the given index\\n */\\n function getStorageAt(address account, uint256 index) external view returns (uint256);\\n\\n /**\\n * @notice check if current call is coming from l1\\n * @return true if the caller of this was called directly from L1\\n */\\n function isTopLevelCall() external view returns (bool);\\n\\n event EthWithdrawal(address indexed destAddr, uint256 amount);\\n\\n event L2ToL1Transaction(\\n address caller,\\n address indexed destination,\\n uint256 indexed uniqueId,\\n uint256 indexed batchNumber,\\n uint256 indexInBatch,\\n uint256 arbBlockNum,\\n uint256 ethBlockNum,\\n uint256 timestamp,\\n uint256 callvalue,\\n bytes data\\n );\\n}\\n\",\"keccak256\":\"0x2abbc6cf12d56c18cf4339b34747f6adea78f17a82e1813923a05d9aa7597ef3\",\"license\":\"Apache-2.0\"},\"src/interfaces/IFastBridgeSender.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n/**\\n * @authors: [@jaybuidl, @shotaronowhere]\\n * @reviewers: []\\n * @auditors: []\\n * @bounties: []\\n * @deployments: []\\n */\\n\\npragma solidity ^0.8.0;\\n\\ninterface IFastBridgeSender {\\n // ************************************* //\\n // * Events * //\\n // ************************************* //\\n\\n /**\\n * @dev The Fast Bridge participants need to watch for these events and relay the messageHash on the FastBridgeReceiverOnEthereum.\\n * @param fastMessage The fast message data.\\n * @param fastMessage The hash of the fast message data encoded with the nonce.\\n */\\n event MessageReceived(bytes fastMessage, bytes32 fastMessageHash);\\n\\n /**\\n * @dev The event is emitted when messages are sent through the canonical bridge.\\n * @param epoch The epoch of the batch requested to send.\\n * @param canonicalBridgeMessageID The unique identifier of the safe message returned by the canonical bridge.\\n */\\n event SentSafe(uint256 indexed epoch, bytes32 canonicalBridgeMessageID);\\n\\n /**\\n * The bridgers need to watch for these events and relay the\\n * batchMerkleRoot on the FastBridgeReceiver.\\n */\\n event BatchOutgoing(uint256 indexed batchID, uint256 batchSize, uint256 epoch, bytes32 batchMerkleRoot);\\n\\n // ************************************* //\\n // * Function Modifiers * //\\n // ************************************* //\\n\\n /**\\n * Note: Access must be restricted by the receiving gateway by checking the sender argument.\\n * @dev Sends an arbitrary message across domain using the Fast Bridge.\\n * @param _receiver The cross-domain contract address which receives the calldata.\\n * @param _calldata The receiving domain encoded message data.\\n */\\n function sendFast(address _receiver, bytes memory _calldata) external;\\n\\n /**\\n * Sends a batch of arbitrary message from one domain to another\\n * via the fast bridge mechanism.\\n */\\n function sendBatch() external;\\n\\n /**\\n * @dev Sends a markle root representing an arbitrary batch of messages across domain using the Safe Bridge, which relies on the chain's canonical bridge. It is unnecessary during normal operations but essential only in case of challenge.\\n * @param _epoch block number of batch\\n */\\n function sendSafeFallback(uint256 _epoch) external payable;\\n}\\n\",\"keccak256\":\"0xa5cb5243fff3d0eb309c88c3d93bc69a084b5ff46b5ab31967cfb6f41a2fa145\",\"license\":\"MIT\"},\"src/interfaces/ISafeBridgeReceiver.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n/**\\n * @authors: [@jaybuidl, @shotaronowhere]\\n * @reviewers: []\\n * @auditors: []\\n * @bounties: []\\n * @deployments: []\\n */\\n\\npragma solidity ^0.8.0;\\n\\nabstract contract ISafeBridgeReceiver {\\n /**\\n * Note: Access restricted to the Safe Bridge.\\n * @dev Resolves any challenge of the optimistic claim for '_epoch'.\\n * @param _epoch The epoch associated with the _batchmerkleRoot.\\n * @param _batchMerkleRoot The true batch merkle root for the epoch sent by the safe bridge.\\n */\\n function verifySafeBatch(uint256 _epoch, bytes32 _batchMerkleRoot) external virtual;\\n\\n function isSentBySafeBridge() internal view virtual returns (bool);\\n\\n modifier onlyFromSafeBridge() {\\n require(isSentBySafeBridge(), \\\"Safe Bridge only.\\\");\\n _;\\n }\\n}\\n\",\"keccak256\":\"0xc4bee04423c73bf37e7d975fccab05767ba0e738cc753d293438c2d1ace9f804\",\"license\":\"MIT\"},\"src/interfaces/ISafeBridgeSender.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n/**\\n * @authors: [@jaybuidl, @shotaronowhere]\\n * @reviewers: []\\n * @auditors: []\\n * @bounties: []\\n * @deployments: []\\n */\\n\\npragma solidity ^0.8.0;\\n\\nabstract contract ISafeBridgeSender {\\n /**\\n * Sends an arbitrary message from one domain to another.\\n *\\n * @param _receiver The contract address which will receive the calldata on the receiving chain.\\n * @param _calldata The encoded message data to send.\\n * @return Unique id to track the message request/transaction.\\n */\\n function _sendSafe(address _receiver, bytes memory _calldata) internal virtual returns (bytes32);\\n}\\n\",\"keccak256\":\"0xe17476e515afdd9496b00ab122162c5700d3c6fdda947f70027d5bf6f4645c93\",\"license\":\"MIT\"}},\"version\":1}", |
{ | ||
"name": "@kleros/vea-contracts", | ||
"version": "0.1.11", | ||
"version": "0.1.12", | ||
"description": "Smart contracts for Vea", | ||
@@ -5,0 +5,0 @@ "repository": { |
@@ -11,14 +11,9 @@ # @kleros/vea-contracts | ||
#### Goerli | ||
- [FastBridgeReceiverOnEthereum](https://goerli.etherscan.io/address/0x87142b7E9C7D026776499120D902AF8896C07894) | ||
#### Arbitrum Goerli | ||
- [FastBridgeSenderToGnosis](https://goerli.arbiscan.io/address/0x642B66C5D0F8c620C35264F2d2899A0E209D68d9) | ||
- [FastBridgeSenderToGnosis](https://goerli.arbiscan.io/address/0xd599f19e8e2b5CE6ad94328be138B11bA97A7F21) | ||
#### Chiado | ||
- [FastBridgeReceiverOnEthereum](https://blockscout.chiadochain.net/address/0xa1711e979d7F9ae5f4c5Fe57D5fF7d6F5Ae3d418) | ||
- [FastBridgeReceiverOnGnosis](https://blockscout.chiadochain.net/address/0x26858D60FE92b50b34e236B46874e02724344275) | ||
- [FastBridgeReceiverOnGnosis](https://blockscout.com/gnosis/chiado/address/0x26858D60FE92b50b34e236B46874e02724344275) | ||
@@ -25,0 +20,0 @@ ## Getting Started |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
963555
57
6061
137