Skip to content

Commit

Permalink
ethereum: Added isFork() method
Browse files Browse the repository at this point in the history
  • Loading branch information
kev1n-peters committed Sep 9, 2022
1 parent b1081d7 commit b7535a8
Show file tree
Hide file tree
Showing 8 changed files with 27 additions and 23 deletions.
4 changes: 4 additions & 0 deletions ethereum/contracts/Getters.sol
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,10 @@ contract Getters is State {
return _state.evmChainId;
}

function isFork() public view returns (bool) {
return evmChainId() != block.chainid;
}

function governanceChainId() public view returns (uint16){
return _state.provider.governanceChainId;
}
Expand Down
10 changes: 5 additions & 5 deletions ethereum/contracts/Governance.sol
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ abstract contract Governance is GovernanceStructs, Messages, Setters, ERC1967Upg
* @dev Upgrades a contract via Governance VAA/VM
*/
function submitContractUpgrade(bytes memory _vm) public {
require(evmChainId() == block.chainid, "bad fork");
require(!isFork(), "bad fork");

Structs.VM memory vm = parseVM(_vm);

Expand Down Expand Up @@ -64,7 +64,7 @@ abstract contract Governance is GovernanceStructs, Messages, Setters, ERC1967Upg
require(upgrade.module == module, "Invalid Module");

// Verify the VAA is for this chain
require(upgrade.chain == chainId() && evmChainId() == block.chainid, "Invalid Chain");
require(upgrade.chain == chainId() && !isFork(), "Invalid Chain");

// Record the governance action as consumed to prevent reentry
setGovernanceActionConsumed(vm.hash);
Expand All @@ -89,7 +89,7 @@ abstract contract Governance is GovernanceStructs, Messages, Setters, ERC1967Upg
require(upgrade.module == module, "invalid Module");

// Verify the VAA is for this chain
require((upgrade.chain == chainId() && evmChainId() == block.chainid) || upgrade.chain == 0, "invalid Chain");
require((upgrade.chain == chainId() && !isFork()) || upgrade.chain == 0, "invalid Chain");

// Verify the Guardian Set keys are not empty, this guards
// against the accidential upgrade to an empty GuardianSet
Expand Down Expand Up @@ -128,7 +128,7 @@ abstract contract Governance is GovernanceStructs, Messages, Setters, ERC1967Upg
require(transfer.module == module, "invalid Module");

// Verify the VAA is for this chain
require((transfer.chain == chainId() && evmChainId() == block.chainid) || transfer.chain == 0, "invalid Chain");
require((transfer.chain == chainId() && !isFork()) || transfer.chain == 0, "invalid Chain");

// Record the governance action as consumed to prevent reentry
setGovernanceActionConsumed(vm.hash);
Expand All @@ -144,7 +144,7 @@ abstract contract Governance is GovernanceStructs, Messages, Setters, ERC1967Upg
* @dev Updates the `chainId` and `evmChainId` on a forked chain via Governance VAA/VM
*/
function submitRecoverChainId(bytes memory _vm) public {
require(evmChainId() != block.chainid, "not a fork");
require(isFork(), "not a fork");

Structs.VM memory vm = parseVM(_vm);

Expand Down
8 changes: 2 additions & 6 deletions ethereum/contracts/bridge/Bridge.sol
Original file line number Diff line number Diff line change
Expand Up @@ -20,11 +20,6 @@ import "./token/TokenImplementation.sol";
contract Bridge is BridgeGovernance, ReentrancyGuard {
using BytesLib for bytes;

modifier noFork() {
require(evmChainId() == block.chainid, "bad fork");
_;
}

/*
* @dev Produce a AssetMeta message for a given token
*/
Expand Down Expand Up @@ -581,7 +576,8 @@ contract Bridge is BridgeGovernance, ReentrancyGuard {
setOutstandingBridged(token, outstandingBridged(token) - normalizedAmount);
}

function verifyBridgeVM(IWormhole.VM memory vm) internal view noFork returns (bool){
function verifyBridgeVM(IWormhole.VM memory vm) internal view returns (bool){
require(!isFork(), "bad fork");
if (bridgeContracts(vm.emitterChainId) == vm.emitterAddress) {
return true;
}
Expand Down
4 changes: 4 additions & 0 deletions ethereum/contracts/bridge/BridgeGetters.sol
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,10 @@ contract BridgeGetters is BridgeState {
return _state.evmChainId;
}

function isFork() public view returns (bool) {
return evmChainId() != block.chainid;
}

function governanceChainId() public view returns (uint16){
return _state.provider.governanceChainId;
}
Expand Down
6 changes: 3 additions & 3 deletions ethereum/contracts/bridge/BridgeGovernance.sol
Original file line number Diff line number Diff line change
Expand Up @@ -33,15 +33,15 @@ contract BridgeGovernance is BridgeGetters, BridgeSetters, ERC1967Upgrade {

BridgeStructs.RegisterChain memory chain = parseRegisterChain(vm.payload);

require((chain.chainId == chainId() && evmChainId() == block.chainid) || chain.chainId == 0, "invalid chain id");
require((chain.chainId == chainId() && !isFork()) || chain.chainId == 0, "invalid chain id");
require(bridgeContracts(chain.emitterChainID) == bytes32(0), "chain already registered");

setBridgeImplementation(chain.emitterChainID, chain.emitterAddress);
}

// Execute a UpgradeContract governance message
function upgrade(bytes memory encodedVM) public {
require(evmChainId() == block.chainid, "bad fork");
require(!isFork(), "bad fork");

(IWormhole.VM memory vm, bool valid, string memory reason) = verifyGovernanceVM(encodedVM);
require(valid, reason);
Expand All @@ -59,7 +59,7 @@ contract BridgeGovernance is BridgeGetters, BridgeSetters, ERC1967Upgrade {
* @dev Updates the `chainId` and `evmChainId` on a forked chain via Governance VAA/VM
*/
function submitRecoverChainId(bytes memory encodedVM) public {
require(evmChainId() != block.chainid, "not a fork");
require(isFork(), "not a fork");

(IWormhole.VM memory vm, bool valid, string memory reason) = verifyGovernanceVM(encodedVM);
require(valid, reason);
Expand Down
8 changes: 2 additions & 6 deletions ethereum/contracts/nft/NFTBridge.sol
Original file line number Diff line number Diff line change
Expand Up @@ -19,11 +19,6 @@ import "./token/NFTImplementation.sol";
contract NFTBridge is NFTBridgeGovernance {
using BytesLib for bytes;

modifier noFork() {
require(evmChainId() == block.chainid, "bad fork");
_;
}

// Initiate a Transfer
function transferNFT(address token, uint256 tokenID, uint16 recipientChain, bytes32 recipient, uint32 nonce) public payable returns (uint64 sequence) {
// determine token parameters
Expand Down Expand Up @@ -197,7 +192,8 @@ contract NFTBridge is NFTBridgeGovernance {
setWrappedAsset(tokenChain, tokenAddress, token);
}

function verifyBridgeVM(IWormhole.VM memory vm) internal view noFork returns (bool){
function verifyBridgeVM(IWormhole.VM memory vm) internal view returns (bool){
require(!isFork(), "bad fork");
if (bridgeContracts(vm.emitterChainId) == vm.emitterAddress) {
return true;
}
Expand Down
4 changes: 4 additions & 0 deletions ethereum/contracts/nft/NFTBridgeGetters.sol
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,10 @@ contract NFTBridgeGetters is NFTBridgeState {
return _state.evmChainId;
}

function isFork() public view returns (bool) {
return evmChainId() != block.chainid;
}

function governanceChainId() public view returns (uint16){
return _state.provider.governanceChainId;
}
Expand Down
6 changes: 3 additions & 3 deletions ethereum/contracts/nft/NFTBridgeGovernance.sol
Original file line number Diff line number Diff line change
Expand Up @@ -32,14 +32,14 @@ contract NFTBridgeGovernance is NFTBridgeGetters, NFTBridgeSetters, ERC1967Upgra

NFTBridgeStructs.RegisterChain memory chain = parseRegisterChain(vm.payload);

require((chain.chainId == chainId() && evmChainId() == block.chainid) || chain.chainId == 0, "invalid chain id");
require((chain.chainId == chainId() && !isFork()) || chain.chainId == 0, "invalid chain id");

setBridgeImplementation(chain.emitterChainID, chain.emitterAddress);
}

// Execute a UpgradeContract governance message
function upgrade(bytes memory encodedVM) public {
require(evmChainId() == block.chainid, "bad fork");
require(!isFork(), "bad fork");

(IWormhole.VM memory vm, bool valid, string memory reason) = verifyGovernanceVM(encodedVM);
require(valid, reason);
Expand All @@ -57,7 +57,7 @@ contract NFTBridgeGovernance is NFTBridgeGetters, NFTBridgeSetters, ERC1967Upgra
* @dev Updates the `chainId` and `evmChainId` on a forked chain via Governance VAA/VM
*/
function submitRecoverChainId(bytes memory encodedVM) public {
require(evmChainId() != block.chainid, "not a fork");
require(isFork(), "not a fork");

(IWormhole.VM memory vm, bool valid, string memory reason) = verifyGovernanceVM(encodedVM);
require(valid, reason);
Expand Down

0 comments on commit b7535a8

Please sign in to comment.