| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- // contracts/GovernanceStructs.sol
- // SPDX-License-Identifier: Apache 2
- pragma solidity ^0.8.0;
- import "../libraries/external/BytesLib.sol";
- import "./ReceiverStructs.sol";
- contract ReceiverGovernanceStructs {
- using BytesLib for bytes;
- enum GovernanceAction {
- UpgradeContract,
- UpgradeGuardianset
- }
- struct GuardianSetUpgrade {
- bytes32 module;
- uint8 action;
- uint16 chain;
- ReceiverStructs.GuardianSet newGuardianSet;
- uint32 newGuardianSetIndex;
- }
- function parseGuardianSetUpgrade(bytes memory encodedUpgrade) public pure returns (GuardianSetUpgrade memory gsu) {
- uint index = 0;
- gsu.module = encodedUpgrade.toBytes32(index);
- index += 32;
- gsu.action = encodedUpgrade.toUint8(index);
- index += 1;
- require(gsu.action == 2, "invalid GuardianSetUpgrade");
- gsu.chain = encodedUpgrade.toUint16(index);
- index += 2;
- gsu.newGuardianSetIndex = encodedUpgrade.toUint32(index);
- index += 4;
- uint8 guardianLength = encodedUpgrade.toUint8(index);
- index += 1;
- gsu.newGuardianSet = ReceiverStructs.GuardianSet({
- keys : new address[](guardianLength),
- expirationTime : 0
- });
- for(uint i = 0; i < guardianLength; i++) {
- gsu.newGuardianSet.keys[i] = encodedUpgrade.toAddress(index);
- index += 20;
- }
- require(encodedUpgrade.length == index, "invalid GuardianSetUpgrade");
- }
- }
|