Created
December 20, 2018 23:39
-
-
Save yidongw/3a082351a549104a02966a08017a0061 to your computer and use it in GitHub Desktop.
Perun14
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
function CheckSignature(address verifier, uint vid, address p1, uint cash1, uint subchan1, address Ingrid, | |
address p2, uint cash2, uint subchan2, uint validity, uint version, bytes sig) private view returns (bool) { | |
bytes32 msgHash = keccak256(vid, p1, cash1, subchan1, Ingrid, p2, cash2, subchan2, validity, version); | |
return libSignatures.verify(verifier, msgHash, sig); | |
} | |
function CheckVersion(address verifierA, address verifierB, uint vid, VirtualContract memory vc, uint version, bytes sigA, bytes sigB) private view returns (bool) { | |
if (!CheckSignature(verifierA, vid, vc.p1, vc.cash1, vc.subchan1, vc.Ingrid, vc.p2, vc.cash2, vc.subchan2, vc.validity, version, sigA)) | |
return false; | |
bytes32 msgHash = keccak256(vid, vc.p1, vc.cash1, vc.subchan1, vc.Ingrid, vc.p2, vc.cash2, vc.subchan2, vc.validity, version, sigA); | |
return libSignatures.verify(verifierB, msgHash, sigB); | |
} | |
function CheckVC(uint vid, address p1, uint cash1, uint subchan1, address Ingrid, | |
address p2, uint cash2, uint subchan2, uint validity, bytes sig) private view { | |
require(id == subchan1 || id == subchan2); | |
require(Ingrid == alice.id || Ingrid == bob.id); | |
require(Other(Ingrid, alice.id, bob.id) == p1 || Other(Ingrid, alice.id, bob.id) == p2); | |
// require(alice.id == p1 && bob.id == p2 || alice.id == p2 && bob.id == p1) | |
// it could be that Ingrid == alice.id, bob.id == p1 but p2 == a random address | |
require(CheckSignature(Other(msg.sender, alice.id, bob.id), vid, p1, cash1, subchan1, Ingrid, p2, cash2, subchan2, validity, 0, sig)); | |
} | |
function Other(address p, address p1, address p2) private pure returns (address) { | |
if (p == p1) return p2; | |
else return p1; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment