ethereum: remove admin key change feature
Allowing a guardian to change the admin key will enable them to cast multiple votes
This commit is contained in:
parent
7fad81dde0
commit
ec7f7565da
|
@ -58,33 +58,6 @@ contract Wormhole {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function changeGuardianAdmin(address newAddress) public {
|
|
||||||
require(guardians.contains(msg.sender), "sender is not a guardian");
|
|
||||||
|
|
||||||
pendingGuardianTransfers[msg.sender] = newAddress;
|
|
||||||
}
|
|
||||||
|
|
||||||
function confirmGuardianAdminChange(address oldAddress) public {
|
|
||||||
require(pendingGuardianTransfers[oldAddress] == msg.sender, "no pending key change to this account");
|
|
||||||
|
|
||||||
// Swap guardian
|
|
||||||
require(guardians.remove(oldAddress), "account oldAddress is not a guardian");
|
|
||||||
require(guardians.add(msg.sender), "sender is already a guardian");
|
|
||||||
|
|
||||||
// Migrate authorizedSigner
|
|
||||||
address oldAuthorizedSigner = guardianToAuthorizedSigner[oldAddress];
|
|
||||||
authorizedSignerToGuardian[oldAuthorizedSigner] = msg.sender;
|
|
||||||
guardianToAuthorizedSigner[msg.sender] = oldAuthorizedSigner;
|
|
||||||
|
|
||||||
// Remove pending transfer
|
|
||||||
pendingGuardianTransfers[oldAddress] = address(0);
|
|
||||||
|
|
||||||
emit LogGuardianKeyChanged(
|
|
||||||
oldAddress,
|
|
||||||
msg.sender
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
function changeAuthorizedSigner(address newSigner) public {
|
function changeAuthorizedSigner(address newSigner) public {
|
||||||
require(guardians.contains(msg.sender), "sender is not a guardian");
|
require(guardians.contains(msg.sender), "sender is not a guardian");
|
||||||
require(authorizedSignerToGuardian[msg.sender] == address(0), "new signer is already a signer");
|
require(authorizedSignerToGuardian[msg.sender] == address(0), "new signer is already a signer");
|
||||||
|
@ -136,16 +109,18 @@ contract Wormhole {
|
||||||
signatures[i].r,
|
signatures[i].r,
|
||||||
signatures[i].s
|
signatures[i].s
|
||||||
);
|
);
|
||||||
|
|
||||||
|
address guardian = authorizedSignerToGuardian[signer];
|
||||||
require(
|
require(
|
||||||
guardians.contains(authorizedSignerToGuardian[signer]),
|
guardians.contains(authorizedSignerToGuardian[signer]),
|
||||||
"signature of non-guardian included"
|
"signature of non-guardian included"
|
||||||
);
|
);
|
||||||
|
|
||||||
for (uint j = 0; j < alreadySigned.length; j++) {
|
for (uint j = 0; j < alreadySigned.length; j++) {
|
||||||
require(signer != alreadySigned[j], "multiple signatures of the same guardian included");
|
require(guardian != alreadySigned[j], "multiple signatures of the same guardian included");
|
||||||
}
|
}
|
||||||
|
|
||||||
alreadySigned[i] = signer;
|
alreadySigned[i] = guardian;
|
||||||
nSignatures++;
|
nSignatures++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue