Skip to content

Commit

Permalink
fix: fix predicate tests, some more gas opts
Browse files Browse the repository at this point in the history
  • Loading branch information
QEDK committed Mar 31, 2023
1 parent 610e40b commit a263cf3
Show file tree
Hide file tree
Showing 25 changed files with 162 additions and 134 deletions.
2 changes: 1 addition & 1 deletion artifacts/ChildChainManager.json
Original file line number Diff line number Diff line change
@@ -1 +1 @@
{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"rootToken","type":"address"},{"indexed":true,"internalType":"address","name":"childToken","type":"address"}],"name":"TokenMapped","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"rootToken","type":"address"},{"indexed":true,"internalType":"address","name":"childToken","type":"address"}],"name":"TokenUnmapped","type":"event"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DEPOSIT","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAPPER_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAP_TOKEN","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"STATE_SYNCER_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"childToRootToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"getRoleMember","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleMemberCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"rootToChildToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"rootToken","type":"address"},{"internalType":"address","name":"childToken","type":"address"}],"name":"mapToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"onStateReceive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"rootToken","type":"address"},{"internalType":"address","name":"childToken","type":"address"}],"name":"cleanMapToken","outputs":[],"stateMutability":"nonpayable","type":"function"}]}
{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"rootToken","type":"address"},{"indexed":true,"internalType":"address","name":"childToken","type":"address"}],"name":"TokenMapped","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"rootToken","type":"address"},{"indexed":true,"internalType":"address","name":"childToken","type":"address"}],"name":"TokenUnmapped","type":"event"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function","constant":true},{"inputs":[],"name":"DEPOSIT","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function","constant":true},{"inputs":[],"name":"MAPPER_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function","constant":true},{"inputs":[],"name":"MAP_TOKEN","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function","constant":true},{"inputs":[],"name":"STATE_SYNCER_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function","constant":true},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"childToRootToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function","constant":true},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function","constant":true},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"getRoleMember","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function","constant":true},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleMemberCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function","constant":true},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function","constant":true},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"rootToChildToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function","constant":true},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"rootToken","type":"address"},{"internalType":"address","name":"childToken","type":"address"}],"name":"mapToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"onStateReceive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"rootToken","type":"address"},{"internalType":"address","name":"childToken","type":"address"}],"name":"cleanMapToken","outputs":[],"stateMutability":"nonpayable","type":"function"}]}
7 changes: 3 additions & 4 deletions contracts/common/Proxy/UpgradableProxy.sol
Original file line number Diff line number Diff line change
Expand Up @@ -67,15 +67,14 @@ contract UpgradableProxy is Proxy {
}

function updateImplementation(address _newProxyTo) public onlyProxyOwner {
require(_newProxyTo != address(0x0), "INVALID_PROXY_ADDRESS");
require(isContract(_newProxyTo), "DESTINATION_ADDRESS_IS_NOT_A_CONTRACT");

emit ProxyUpdated(_newProxyTo, loadImplementation());

setImplementation(_newProxyTo);
}

function updateAndCall(address _newProxyTo, bytes memory data) payable public onlyProxyOwner {
function updateAndCall(address _newProxyTo, bytes calldata data) payable external onlyProxyOwner {
updateImplementation(_newProxyTo);

(bool success, bytes memory returnData) = address(this).call{value: msg.value}(data);
Expand All @@ -88,7 +87,7 @@ contract UpgradableProxy is Proxy {
sstore(position, _newProxyTo)
}
}

function isContract(address _target) internal view returns (bool) {
if (_target == address(0)) {
return false;
Expand Down
7 changes: 3 additions & 4 deletions flat/ChainExitERC1155PredicateProxy.sol
Original file line number Diff line number Diff line change
Expand Up @@ -121,15 +121,14 @@ contract UpgradableProxy is Proxy {
}

function updateImplementation(address _newProxyTo) public onlyProxyOwner {
require(_newProxyTo != address(0x0), "INVALID_PROXY_ADDRESS");
require(isContract(_newProxyTo), "DESTINATION_ADDRESS_IS_NOT_A_CONTRACT");

emit ProxyUpdated(_newProxyTo, loadImplementation());

setImplementation(_newProxyTo);
}

function updateAndCall(address _newProxyTo, bytes memory data) payable public onlyProxyOwner {
function updateAndCall(address _newProxyTo, bytes calldata data) payable external onlyProxyOwner {
updateImplementation(_newProxyTo);

(bool success, bytes memory returnData) = address(this).call{value: msg.value}(data);
Expand All @@ -142,7 +141,7 @@ contract UpgradableProxy is Proxy {
sstore(position, _newProxyTo)
}
}

function isContract(address _target) internal view returns (bool) {
if (_target == address(0)) {
return false;
Expand Down
7 changes: 3 additions & 4 deletions flat/ChildChainManagerProxy.sol
Original file line number Diff line number Diff line change
Expand Up @@ -121,15 +121,14 @@ contract UpgradableProxy is Proxy {
}

function updateImplementation(address _newProxyTo) public onlyProxyOwner {
require(_newProxyTo != address(0x0), "INVALID_PROXY_ADDRESS");
require(isContract(_newProxyTo), "DESTINATION_ADDRESS_IS_NOT_A_CONTRACT");

emit ProxyUpdated(_newProxyTo, loadImplementation());

setImplementation(_newProxyTo);
}

function updateAndCall(address _newProxyTo, bytes memory data) payable public onlyProxyOwner {
function updateAndCall(address _newProxyTo, bytes calldata data) payable external onlyProxyOwner {
updateImplementation(_newProxyTo);

(bool success, bytes memory returnData) = address(this).call{value: msg.value}(data);
Expand All @@ -142,7 +141,7 @@ contract UpgradableProxy is Proxy {
sstore(position, _newProxyTo)
}
}

function isContract(address _target) internal view returns (bool) {
if (_target == address(0)) {
return false;
Expand Down
11 changes: 11 additions & 0 deletions flat/ChildERC721.sol
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@

// File: @openzeppelin/contracts/GSN/Context.sol

// SPDX-License-Identifier: MIT
Expand Down Expand Up @@ -58,6 +59,7 @@ interface IERC165 {

pragma solidity ^0.6.2;


/**
* @dev Required interface of an ERC721 compliant contract.
*/
Expand Down Expand Up @@ -188,6 +190,7 @@ interface IERC721 is IERC165 {

pragma solidity ^0.6.2;


/**
* @title ERC-721 Non-Fungible Token Standard, optional metadata extension
* @dev See https://eips.ethereum.org/EIPS/eip-721
Expand Down Expand Up @@ -216,6 +219,7 @@ interface IERC721Metadata is IERC721 {

pragma solidity ^0.6.2;


/**
* @title ERC-721 Non-Fungible Token Standard, optional enumeration extension
* @dev See https://eips.ethereum.org/EIPS/eip-721
Expand Down Expand Up @@ -271,6 +275,7 @@ interface IERC721Receiver {

pragma solidity ^0.6.0;


/**
* @dev Implementation of the {IERC165} interface.
*
Expand Down Expand Up @@ -1165,6 +1170,7 @@ pragma solidity ^0.6.0;




/**
* @title ERC721 Non-Fungible Token Standard basic implementation
* @dev see https://eips.ethereum.org/EIPS/eip-721
Expand Down Expand Up @@ -1631,6 +1637,7 @@ pragma solidity ^0.6.0;




/**
* @dev Contract module that allows children to implement role-based access
* control mechanisms.
Expand Down Expand Up @@ -1845,6 +1852,7 @@ abstract contract AccessControl is Context {

pragma solidity 0.6.6;


contract AccessControlMixin is AccessControl {
string private _revertMsg;
function _setupContractId(string memory contractId) internal {
Expand Down Expand Up @@ -1886,6 +1894,7 @@ contract Initializable {

pragma solidity 0.6.6;


contract EIP712Base is Initializable {
struct EIP712Domain {
string name;
Expand Down Expand Up @@ -1963,6 +1972,7 @@ contract EIP712Base is Initializable {
pragma solidity 0.6.6;



contract NativeMetaTransaction is EIP712Base {
using SafeMath for uint256;
bytes32 private constant META_TRANSACTION_TYPEHASH = keccak256(
Expand Down Expand Up @@ -2098,6 +2108,7 @@ pragma solidity 0.6.6;




contract ChildERC721 is
ERC721,
IChildToken,
Expand Down
11 changes: 11 additions & 0 deletions flat/DummyERC721.sol
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@

// File: @openzeppelin/contracts/GSN/Context.sol

// SPDX-License-Identifier: MIT
Expand Down Expand Up @@ -58,6 +59,7 @@ interface IERC165 {

pragma solidity ^0.6.2;


/**
* @dev Required interface of an ERC721 compliant contract.
*/
Expand Down Expand Up @@ -188,6 +190,7 @@ interface IERC721 is IERC165 {

pragma solidity ^0.6.2;


/**
* @title ERC-721 Non-Fungible Token Standard, optional metadata extension
* @dev See https://eips.ethereum.org/EIPS/eip-721
Expand Down Expand Up @@ -216,6 +219,7 @@ interface IERC721Metadata is IERC721 {

pragma solidity ^0.6.2;


/**
* @title ERC-721 Non-Fungible Token Standard, optional enumeration extension
* @dev See https://eips.ethereum.org/EIPS/eip-721
Expand Down Expand Up @@ -271,6 +275,7 @@ interface IERC721Receiver {

pragma solidity ^0.6.0;


/**
* @dev Implementation of the {IERC165} interface.
*
Expand Down Expand Up @@ -1165,6 +1170,7 @@ pragma solidity ^0.6.0;




/**
* @title ERC721 Non-Fungible Token Standard basic implementation
* @dev see https://eips.ethereum.org/EIPS/eip-721
Expand Down Expand Up @@ -1631,6 +1637,7 @@ pragma solidity ^0.6.0;




/**
* @dev Contract module that allows children to implement role-based access
* control mechanisms.
Expand Down Expand Up @@ -1845,6 +1852,7 @@ abstract contract AccessControl is Context {

pragma solidity 0.6.6;


contract AccessControlMixin is AccessControl {
string private _revertMsg;
function _setupContractId(string memory contractId) internal {
Expand Down Expand Up @@ -1878,6 +1886,7 @@ contract Initializable {

pragma solidity 0.6.6;


contract EIP712Base is Initializable {
struct EIP712Domain {
string name;
Expand Down Expand Up @@ -1955,6 +1964,7 @@ contract EIP712Base is Initializable {
pragma solidity 0.6.6;



contract NativeMetaTransaction is EIP712Base {
using SafeMath for uint256;
bytes32 private constant META_TRANSACTION_TYPEHASH = keccak256(
Expand Down Expand Up @@ -2092,6 +2102,7 @@ pragma solidity 0.6.6;




contract DummyERC721 is
ERC721,
AccessControlMixin,
Expand Down
7 changes: 3 additions & 4 deletions flat/ERC1155PredicateProxy.sol
Original file line number Diff line number Diff line change
Expand Up @@ -121,15 +121,14 @@ contract UpgradableProxy is Proxy {
}

function updateImplementation(address _newProxyTo) public onlyProxyOwner {
require(_newProxyTo != address(0x0), "INVALID_PROXY_ADDRESS");
require(isContract(_newProxyTo), "DESTINATION_ADDRESS_IS_NOT_A_CONTRACT");

emit ProxyUpdated(_newProxyTo, loadImplementation());

setImplementation(_newProxyTo);
}

function updateAndCall(address _newProxyTo, bytes memory data) payable public onlyProxyOwner {
function updateAndCall(address _newProxyTo, bytes calldata data) payable external onlyProxyOwner {
updateImplementation(_newProxyTo);

(bool success, bytes memory returnData) = address(this).call{value: msg.value}(data);
Expand All @@ -142,7 +141,7 @@ contract UpgradableProxy is Proxy {
sstore(position, _newProxyTo)
}
}

function isContract(address _target) internal view returns (bool) {
if (_target == address(0)) {
return false;
Expand Down
7 changes: 3 additions & 4 deletions flat/ERC20PredicateProxy.sol
Original file line number Diff line number Diff line change
Expand Up @@ -121,15 +121,14 @@ contract UpgradableProxy is Proxy {
}

function updateImplementation(address _newProxyTo) public onlyProxyOwner {
require(_newProxyTo != address(0x0), "INVALID_PROXY_ADDRESS");
require(isContract(_newProxyTo), "DESTINATION_ADDRESS_IS_NOT_A_CONTRACT");

emit ProxyUpdated(_newProxyTo, loadImplementation());

setImplementation(_newProxyTo);
}

function updateAndCall(address _newProxyTo, bytes memory data) payable public onlyProxyOwner {
function updateAndCall(address _newProxyTo, bytes calldata data) payable external onlyProxyOwner {
updateImplementation(_newProxyTo);

(bool success, bytes memory returnData) = address(this).call{value: msg.value}(data);
Expand All @@ -142,7 +141,7 @@ contract UpgradableProxy is Proxy {
sstore(position, _newProxyTo)
}
}

function isContract(address _target) internal view returns (bool) {
if (_target == address(0)) {
return false;
Expand Down
6 changes: 6 additions & 0 deletions flat/ERC721Predicate.sol
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@

// File: @openzeppelin/contracts/introspection/IERC165.sol

// SPDX-License-Identifier: MIT
Expand Down Expand Up @@ -31,6 +32,7 @@ interface IERC165 {

pragma solidity ^0.6.2;


/**
* @dev Required interface of an ERC721 compliant contract.
*/
Expand Down Expand Up @@ -545,6 +547,7 @@ library RLPReader {

pragma solidity 0.6.6;


/// @title Token predicate interface for all pos portal predicates
/// @notice Abstract interface that defines methods for custom predicates
interface ITokenPredicate {
Expand Down Expand Up @@ -1016,6 +1019,7 @@ pragma solidity ^0.6.0;




/**
* @dev Contract module that allows children to implement role-based access
* control mechanisms.
Expand Down Expand Up @@ -1230,6 +1234,7 @@ abstract contract AccessControl is Context {

pragma solidity 0.6.6;


contract AccessControlMixin is AccessControl {
string private _revertMsg;
function _setupContractId(string memory contractId) internal {
Expand All @@ -1254,6 +1259,7 @@ pragma solidity 0.6.6;




contract ERC721Predicate is ITokenPredicate, AccessControlMixin, Initializable, IERC721Receiver {
using RLPReader for bytes;
using RLPReader for RLPReader.RLPItem;
Expand Down
Loading

0 comments on commit a263cf3

Please sign in to comment.