Skip to content

Commit

Permalink
temp: make BridgeManager is Proxy
Browse files Browse the repository at this point in the history
  • Loading branch information
nxqbao committed Jan 24, 2024
1 parent 3d56a22 commit 1d0e9ab
Show file tree
Hide file tree
Showing 25 changed files with 161 additions and 2,046 deletions.
32 changes: 16 additions & 16 deletions script/contracts/MainchainBridgeManagerDeploy.s.sol
Original file line number Diff line number Diff line change
Expand Up @@ -9,24 +9,24 @@ import { Migration } from "../Migration.s.sol";
import { MainchainGatewayV3Deploy } from "./MainchainGatewayV3Deploy.s.sol";

contract MainchainBridgeManagerDeploy is Migration {
function _defaultArguments() internal virtual override returns (bytes memory args) {
ISharedArgument.BridgeManagerParam memory param = config.sharedArguments().mainchainBridgeManager;
// function _defaultArguments() internal virtual override returns (bytes memory args) {
// ISharedArgument.BridgeManagerParam memory param = config.sharedArguments().mainchainBridgeManager;

args = abi.encode(
param.num,
param.denom,
param.roninChainId,
param.bridgeContract,
param.callbackRegisters,
param.bridgeOperators,
param.governors,
param.voteWeights,
param.targetOptions,
param.targets
);
}
// args = abi.encode(
// param.num,
// param.denom,
// param.roninChainId,
// param.bridgeContract,
// param.callbackRegisters,
// param.bridgeOperators,
// param.governors,
// param.voteWeights,
// param.targetOptions,
// param.targets
// );
// }

function run() public virtual returns (MainchainBridgeManager) {
return MainchainBridgeManager(_deployImmutable(Contract.MainchainBridgeManager.key()));
return MainchainBridgeManager(_deployProxy(Contract.MainchainBridgeManager.key(), EMPTY_ARGS));
}
}
33 changes: 30 additions & 3 deletions src/extensions/bridge-operator-governance/BridgeManager.sol
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ abstract contract BridgeManager is IBridgeManager, HasContracts, BridgeManagerQu
/**
* @inheritdoc IBridgeManager
*/
bytes32 public immutable DOMAIN_SEPARATOR;
bytes32 public DOMAIN_SEPARATOR;

function _getBridgeManagerStorage() private pure returns (BridgeManagerStorage storage $) {
assembly {
Expand All @@ -49,7 +49,31 @@ abstract contract BridgeManager is IBridgeManager, HasContracts, BridgeManagerQu
_;
}

constructor(
// constructor(
// uint256 num,
// uint256 denom,
// uint256 roninChainId,
// address bridgeContract,
// address[] memory callbackRegisters,
// address[] memory bridgeOperators,
// address[] memory governors,
// uint96[] memory voteWeights
// ) payable BridgeManagerQuorum(num, denom) BridgeManagerCallbackRegister(callbackRegisters) {
// // _setContract(ContractType.BRIDGE, bridgeContract);

// // DOMAIN_SEPARATOR = keccak256(
// // abi.encode(
// // keccak256("EIP712Domain(string name,string version,bytes32 salt)"),
// // keccak256("BridgeAdmin"), // name hash
// // keccak256("2"), // version hash
// // keccak256(abi.encode("BRIDGE_ADMIN", roninChainId)) // salt
// // )
// // );

// // _addBridgeOperators(voteWeights, governors, bridgeOperators);
// }

function __init(
uint256 num,
uint256 denom,
uint256 roninChainId,
Expand All @@ -58,7 +82,10 @@ abstract contract BridgeManager is IBridgeManager, HasContracts, BridgeManagerQu
address[] memory bridgeOperators,
address[] memory governors,
uint96[] memory voteWeights
) payable BridgeManagerQuorum(num, denom) BridgeManagerCallbackRegister(callbackRegisters) {
) internal {
BridgeManagerQuorum.__init(num, denom);
BridgeManagerCallbackRegister.__init(callbackRegisters);

_setContract(ContractType.BRIDGE, bridgeContract);

DOMAIN_SEPARATOR = keccak256(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,11 @@ abstract contract BridgeManagerCallbackRegister is IdentityGuard, IBridgeManager
*/
bytes32 private constant CALLBACK_REGISTERS_SLOT = 0x5da136eb38f8d8e354915fc8a767c0dc81d49de5fb65d5477122a82ddd976240;

constructor(address[] memory callbackRegisters) payable {
// constructor(address[] memory callbackRegisters) payable {
// // _registerCallbacks(callbackRegisters);
// }

function __init(address[] memory callbackRegisters) internal {
_registerCallbacks(callbackRegisters);
}

Expand All @@ -33,9 +37,7 @@ abstract contract BridgeManagerCallbackRegister is IdentityGuard, IBridgeManager
/**
* @inheritdoc IBridgeManagerCallbackRegister
*/
function unregisterCallbacks(
address[] calldata registers
) external onlySelfCall returns (bool[] memory unregistereds) {
function unregisterCallbacks(address[] calldata registers) external onlySelfCall returns (bool[] memory unregistereds) {
unregistereds = _unregisterCallbacks(registers);
}

Expand All @@ -51,9 +53,7 @@ abstract contract BridgeManagerCallbackRegister is IdentityGuard, IBridgeManager
* @param registers The array of callback addresses to register.
* @return registereds An array indicating the success status of each registration.
*/
function _registerCallbacks(
address[] memory registers
) internal nonDuplicate(registers) returns (bool[] memory registereds) {
function _registerCallbacks(address[] memory registers) internal nonDuplicate(registers) returns (bool[] memory registereds) {
uint256 length = registers.length;
registereds = new bool[](length);
if (length == 0) return registereds;
Expand Down Expand Up @@ -81,9 +81,7 @@ abstract contract BridgeManagerCallbackRegister is IdentityGuard, IBridgeManager
* @param registers The array of callback addresses to unregister.
* @return unregistereds An array indicating the success status of each unregistration.
*/
function _unregisterCallbacks(
address[] memory registers
) internal nonDuplicate(registers) returns (bool[] memory unregistereds) {
function _unregisterCallbacks(address[] memory registers) internal nonDuplicate(registers) returns (bool[] memory unregistereds) {
uint256 length = registers.length;
unregistereds = new bool[](length);
EnumerableSet.AddressSet storage _callbackRegisters = _getCallbackRegisters();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,13 @@ abstract contract BridgeManagerQuorum is IQuorum, IdentityGuard {
}
}

constructor(uint256 num, uint256 denom) {
// constructor(uint256 num, uint256 denom) {
// // BridgeManagerQuorumStorage storage $ = _getBridgeManagerQuorumStorage();
// // $._nonce = 1;
// // _setThreshold(num, denom);
// }

function __init(uint256 num, uint256 denom) internal {
BridgeManagerQuorumStorage storage $ = _getBridgeManagerQuorumStorage();
$._nonce = 1;

Expand Down
7 changes: 6 additions & 1 deletion src/extensions/sequential-governance/CoreGovernance.sol
Original file line number Diff line number Diff line change
Expand Up @@ -63,10 +63,15 @@ abstract contract CoreGovernance is SignatureConsumer, VoteStatusConsumer, Chain

uint256 internal _proposalExpiryDuration;

constructor(uint256 _expiryDuration) {
// constructor(uint256 _expiryDuration) {
// // _setProposalExpiryDuration(_expiryDuration);
// }

function __init(uint256 _expiryDuration) internal {
_setProposalExpiryDuration(_expiryDuration);
}


/**
* @dev Creates new voting round by calculating the `_round` number of chain `_chainId`.
* Increases the `_round` number if the previous one is not expired. Delete the previous proposal
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,12 @@ abstract contract GlobalCoreGovernance is CoreGovernance {
/// @dev Emitted when the target options are updated
event TargetOptionUpdated(GlobalProposal.TargetOption indexed targetOption, address indexed addr);

constructor(GlobalProposal.TargetOption[] memory targetOptions, address[] memory addrs) {
// constructor(GlobalProposal.TargetOption[] memory targetOptions, address[] memory addrs) {
// // _updateTargetOption(GlobalProposal.TargetOption.BridgeManager, address(this));
// // _updateManyTargetOption(targetOptions, addrs);
// }

function __init(GlobalProposal.TargetOption[] memory targetOptions, address[] memory addrs) internal {
_updateTargetOption(GlobalProposal.TargetOption.BridgeManager, address(this));
_updateManyTargetOption(targetOptions, addrs);
}
Expand Down
36 changes: 28 additions & 8 deletions src/mainchain/MainchainBridgeManager.sol
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import "@openzeppelin/contracts/proxy/utils/Initializable.sol";
import { CoreGovernance } from "../extensions/sequential-governance/CoreGovernance.sol";
import { GlobalCoreGovernance, GlobalGovernanceRelay } from "../extensions/sequential-governance/governance-relay/GlobalGovernanceRelay.sol";
import { GovernanceRelay } from "../extensions/sequential-governance/governance-relay/GovernanceRelay.sol";
Expand All @@ -10,10 +11,30 @@ import { Proposal } from "../libraries/Proposal.sol";
import { GlobalProposal } from "../libraries/GlobalProposal.sol";
import "../utils/CommonErrors.sol";

contract MainchainBridgeManager is BridgeManager, GovernanceRelay, GlobalGovernanceRelay {
contract MainchainBridgeManager is Initializable, BridgeManager, GovernanceRelay, GlobalGovernanceRelay {
uint256 private constant DEFAULT_EXPIRY_DURATION = 1 << 255;

constructor(
constructor()
// uint256 num,
// uint256 denom,
// uint256 roninChainId,
// address bridgeContract,
// address[] memory callbackRegisters,
// address[] memory bridgeOperators,
// address[] memory governors,
// uint96[] memory voteWeights,
// GlobalProposal.TargetOption[] memory targetOptions,
// address[] memory targets
// )
// payable
// CoreGovernance(DEFAULT_EXPIRY_DURATION)
// GlobalCoreGovernance(targetOptions, targets)
// BridgeManager(num, denom, roninChainId, bridgeContract, callbackRegisters, bridgeOperators, governors, voteWeights)
{
_disableInitializers();
}

function initialize(
uint256 num,
uint256 denom,
uint256 roninChainId,
Expand All @@ -24,12 +45,11 @@ contract MainchainBridgeManager is BridgeManager, GovernanceRelay, GlobalGoverna
uint96[] memory voteWeights,
GlobalProposal.TargetOption[] memory targetOptions,
address[] memory targets
)
payable
CoreGovernance(DEFAULT_EXPIRY_DURATION)
GlobalCoreGovernance(targetOptions, targets)
BridgeManager(num, denom, roninChainId, bridgeContract, callbackRegisters, bridgeOperators, governors, voteWeights)
{}
) external initializer {
CoreGovernance.__init(DEFAULT_EXPIRY_DURATION);
GlobalCoreGovernance.__init(targetOptions, targets);
BridgeManager.__init(num, denom, roninChainId, bridgeContract, callbackRegisters, bridgeOperators, governors, voteWeights);
}

/**
* @dev See `GovernanceRelay-_relayProposal`.
Expand Down
10 changes: 5 additions & 5 deletions src/mocks/ronin/MockBridgeManager.sol
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,11 @@ pragma solidity ^0.8.0;
import { RoleAccess, ContractType, AddressArrayUtils, IBridgeManager, BridgeManager } from "../../extensions/bridge-operator-governance/BridgeManager.sol";

contract MockBridgeManager is BridgeManager {
constructor(
address[] memory bridgeOperators,
address[] memory governors,
uint96[] memory voteWeights
) payable BridgeManager(0, 0, 0, address(0), _getEmptyAddressArray(), bridgeOperators, governors, voteWeights) {}
// constructor(
// address[] memory bridgeOperators,
// address[] memory governors,
// uint96[] memory voteWeights
// ) payable BridgeManager(0, 0, 0, address(0), _getEmptyAddressArray(), bridgeOperators, governors, voteWeights) {}

function _getEmptyAddressArray() internal pure returns (address[] memory arr) {}
}
54 changes: 27 additions & 27 deletions src/mocks/ronin/MockRoninBridgeManager.sol
Original file line number Diff line number Diff line change
Expand Up @@ -5,31 +5,31 @@ import { RoninBridgeManager } from "../../ronin/gateway/RoninBridgeManager.sol";
import { GlobalProposal } from "../../extensions/sequential-governance/governance-proposal/GovernanceProposal.sol";

contract MockRoninBridgeManager is RoninBridgeManager {
constructor(
uint256 num,
uint256 denom,
uint256 roninChainId,
uint256 expiryDuration,
address bridgeContract,
address[] memory callbackRegisters,
address[] memory bridgeOperators,
address[] memory governors,
uint96[] memory voteWeights,
GlobalProposal.TargetOption[] memory targetOptions,
address[] memory targets
)
RoninBridgeManager(
num,
denom,
roninChainId,
expiryDuration,
bridgeContract,
callbackRegisters,
bridgeOperators,
governors,
voteWeights,
targetOptions,
targets
)
{}
// constructor(
// uint256 num,
// uint256 denom,
// uint256 roninChainId,
// uint256 expiryDuration,
// address bridgeContract,
// address[] memory callbackRegisters,
// address[] memory bridgeOperators,
// address[] memory governors,
// uint96[] memory voteWeights,
// GlobalProposal.TargetOption[] memory targetOptions,
// address[] memory targets
// )
// RoninBridgeManager(
// num,
// denom,
// roninChainId,
// expiryDuration,
// bridgeContract,
// callbackRegisters,
// bridgeOperators,
// governors,
// voteWeights,
// targetOptions,
// targets
// )
// {}
}
21 changes: 9 additions & 12 deletions src/ronin/gateway/RoninBridgeManager.sol
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,8 @@ import { VoteStatusConsumer } from "../../interfaces/consumers/VoteStatusConsume
import { ErrQueryForEmptyVote } from "../../utils/CommonErrors.sol";

contract RoninBridgeManager is BridgeManager, GovernanceProposal, GlobalGovernanceProposal {
constructor(

function initialize(
uint256 num,
uint256 denom,
uint256 roninChainId,
Expand All @@ -19,13 +20,12 @@ contract RoninBridgeManager is BridgeManager, GovernanceProposal, GlobalGovernan
address[] memory governors,
uint96[] memory voteWeights,
GlobalProposal.TargetOption[] memory targetOptions,
address[] memory targets
)
payable
CoreGovernance(expiryDuration)
GlobalCoreGovernance(targetOptions, targets)
BridgeManager(num, denom, roninChainId, bridgeContract, callbackRegisters, bridgeOperators, governors, voteWeights)
{}
address[] memory targets) external
{
CoreGovernance.__init(expiryDuration);
GlobalCoreGovernance.__init(targetOptions, targets);
BridgeManager.__init(num, denom, roninChainId, bridgeContract, callbackRegisters, bridgeOperators, governors, voteWeights);
}

/**
* CURRENT NETWORK
Expand Down Expand Up @@ -101,10 +101,7 @@ contract RoninBridgeManager is BridgeManager, GovernanceProposal, GlobalGovernan
* - The method caller is governor.
*
*/
function castProposalVoteForCurrentNetwork(
Proposal.ProposalDetail calldata proposal,
Ballot.VoteType support
) external onlyGovernor {
function castProposalVoteForCurrentNetwork(Proposal.ProposalDetail calldata proposal, Ballot.VoteType support) external onlyGovernor {
_castProposalVoteForCurrentNetwork(msg.sender, proposal, support);
}

Expand Down
Loading

0 comments on commit 1d0e9ab

Please sign in to comment.