Skip to content

Commit

Permalink
add remaining split batch methods (still need to sort some tests out)
Browse files Browse the repository at this point in the history
  • Loading branch information
0age committed Oct 19, 2024
1 parent 6fb7a27 commit 661a715
Show file tree
Hide file tree
Showing 3 changed files with 550 additions and 2 deletions.
66 changes: 66 additions & 0 deletions src/TheCompact.sol
Original file line number Diff line number Diff line change
Expand Up @@ -691,6 +691,38 @@ contract TheCompact is ITheCompact, ERC6909, Extsload {
return _processExogenousSplitBatchMultichainClaim(claimPayload, _withdraw);
}

function claim(QualifiedSplitBatchMultichainClaim calldata claimPayload) external returns (bool) {
return _processQualifiedSplitBatchMultichainClaim(claimPayload, _release);
}

function claimAndWithdraw(QualifiedSplitBatchMultichainClaim calldata claimPayload) external returns (bool) {
return _processQualifiedSplitBatchMultichainClaim(claimPayload, _withdraw);
}

function claim(ExogenousQualifiedSplitBatchMultichainClaim calldata claimPayload) external returns (bool) {
return _processExogenousQualifiedSplitBatchMultichainClaim(claimPayload, _release);
}

function claimAndWithdraw(ExogenousQualifiedSplitBatchMultichainClaim calldata claimPayload) external returns (bool) {
return _processExogenousQualifiedSplitBatchMultichainClaim(claimPayload, _withdraw);
}

function claim(SplitBatchMultichainClaimWithWitness calldata claimPayload) external returns (bool) {
return _processSplitBatchMultichainClaimWithWitness(claimPayload, _release);
}

function claimAndWithdraw(SplitBatchMultichainClaimWithWitness calldata claimPayload) external returns (bool) {
return _processSplitBatchMultichainClaimWithWitness(claimPayload, _withdraw);
}

function claim(ExogenousSplitBatchMultichainClaimWithWitness calldata claimPayload) external returns (bool) {
return _processExogenousSplitBatchMultichainClaimWithWitness(claimPayload, _release);
}

function claimAndWithdraw(ExogenousSplitBatchMultichainClaimWithWitness calldata claimPayload) external returns (bool) {
return _processExogenousSplitBatchMultichainClaimWithWitness(claimPayload, _withdraw);
}

function claim(QualifiedSplitBatchMultichainClaimWithWitness calldata claimPayload) external returns (bool) {
return _processQualifiedSplitBatchMultichainClaimWithWitness(claimPayload, _release);
}
Expand Down Expand Up @@ -1255,6 +1287,21 @@ contract TheCompact is ITheCompact, ERC6909, Extsload {
return _processClaimWithQualification.usingQualifiedMultichainClaimWithWitness()(messageHash, qualificationMessageHash, claimPayload, 0x140, operation);
}

function _processQualifiedSplitBatchMultichainClaim(QualifiedSplitBatchMultichainClaim calldata claimPayload, function(address, address, uint256, uint256) internal returns (bool) operation)
internal
returns (bool)
{
(bytes32 messageHash, bytes32 qualificationMessageHash) = claimPayload.toMessageHash();
return _processSplitBatchClaimWithQualification.usingQualifiedSplitBatchMultichainClaim()(messageHash, qualificationMessageHash, claimPayload, 0x100, operation);
}

function _processSplitBatchMultichainClaimWithWitness(SplitBatchMultichainClaimWithWitness calldata claimPayload, function(address, address, uint256, uint256) internal returns (bool) operation)
internal
returns (bool)
{
return _processSimpleSplitBatchClaim.usingSplitBatchMultichainClaimWithWitness()(claimPayload.toMessageHash(), claimPayload, 0x100, operation);
}

function _processQualifiedSplitBatchMultichainClaimWithWitness(
QualifiedSplitBatchMultichainClaimWithWitness calldata claimPayload,
function(address, address, uint256, uint256) internal returns (bool) operation
Expand Down Expand Up @@ -1390,6 +1437,25 @@ contract TheCompact is ITheCompact, ERC6909, Extsload {
);
}

function _processExogenousQualifiedSplitBatchMultichainClaim(
ExogenousQualifiedSplitBatchMultichainClaim calldata claimPayload,
function(address, address, uint256, uint256) internal returns (bool) operation
) internal returns (bool) {
(bytes32 messageHash, bytes32 qualificationMessageHash) = claimPayload.toMessageHash();
return _processSplitBatchClaimWithQualificationAndSponsorDomain.usingExogenousQualifiedSplitBatchMultichainClaim()(
messageHash, qualificationMessageHash, claimPayload, 0x140, claimPayload.notarizedChainId.toNotarizedDomainSeparator(), operation
);
}

function _processExogenousSplitBatchMultichainClaimWithWitness(
ExogenousSplitBatchMultichainClaimWithWitness calldata claimPayload,
function(address, address, uint256, uint256) internal returns (bool) operation
) internal returns (bool) {
return _processSplitBatchClaimWithSponsorDomain.usingExogenousSplitBatchMultichainClaimWithWitness()(
claimPayload.toMessageHash(), claimPayload, 0x140, claimPayload.notarizedChainId.toNotarizedDomainSeparator(), operation
);
}

function _processExogenousQualifiedSplitBatchMultichainClaimWithWitness(
ExogenousQualifiedSplitBatchMultichainClaimWithWitness calldata claimPayload,
function(address, address, uint256, uint256) internal returns (bool) operation
Expand Down
110 changes: 108 additions & 2 deletions src/lib/HashLib.sol
Original file line number Diff line number Diff line change
Expand Up @@ -543,6 +543,17 @@ library HashLib {
messageHash = usingSplitBatchMultichainClaim(toMultichainClaimMessageHash)(claim, 0, ALLOCATION_TYPEHASH, MULTICHAIN_COMPACT_TYPEHASH, toSplitIdsAndAmountsHash(claim.claims));
}

function toMessageHash(QualifiedSplitBatchMultichainClaim calldata claim) internal view returns (bytes32 messageHash, bytes32 qualificationMessageHash) {
messageHash = usingQualifiedSplitBatchMultichainClaim(toMultichainClaimMessageHash)(claim, 0x40, ALLOCATION_TYPEHASH, MULTICHAIN_COMPACT_TYPEHASH, toSplitIdsAndAmountsHash(claim.claims));
qualificationMessageHash = usingQualifiedSplitBatchMultichainClaim(toQualificationMessageHash)(claim, messageHash, 0);
}

function toMessageHash(SplitBatchMultichainClaimWithWitness calldata claim) internal view returns (bytes32 messageHash) {
(bytes32 allocationTypehash, bytes32 multichainCompactTypehash) = usingSplitBatchMultichainClaimWithWitness(getMultichainTypehashes)(claim);

messageHash = usingSplitBatchMultichainClaimWithWitness(toMultichainClaimMessageHash)(claim, 0x40, allocationTypehash, multichainCompactTypehash, toSplitIdsAndAmountsHash(claim.claims));
}

function toMessageHash(QualifiedSplitBatchMultichainClaimWithWitness calldata claim) internal view returns (bytes32 messageHash, bytes32 qualificationMessageHash) {
(bytes32 allocationTypehash, bytes32 multichainCompactTypehash) = usingQualifiedSplitBatchMultichainClaimWithWitness(getMultichainTypehashes)(claim);

Expand Down Expand Up @@ -691,6 +702,16 @@ library HashLib {
}
}

function usingQualifiedSplitBatchMultichainClaim(function (QualifiedClaim calldata, bytes32, uint256) internal pure returns (bytes32) fnIn)
internal
pure
returns (function (QualifiedSplitBatchMultichainClaim calldata, bytes32, uint256) internal pure returns (bytes32) fnOut)
{
assembly ("memory-safe") {
fnOut := fnIn
}
}

function usingExogenousQualifiedSplitBatchMultichainClaimWithWitness(function (QualifiedClaim calldata, bytes32, uint256) internal pure returns (bytes32) fnIn)
internal
pure
Expand All @@ -701,6 +722,16 @@ library HashLib {
}
}

function usingExogenousQualifiedSplitBatchMultichainClaim(function (QualifiedClaim calldata, bytes32, uint256) internal pure returns (bytes32) fnIn)
internal
pure
returns (function (ExogenousQualifiedSplitBatchMultichainClaim calldata, bytes32, uint256) internal pure returns (bytes32) fnOut)
{
assembly ("memory-safe") {
fnOut := fnIn
}
}

function usingQualifiedMultichainClaim(function (QualifiedClaim calldata, bytes32, uint256) internal pure returns (bytes32) fnIn)
internal
pure
Expand Down Expand Up @@ -771,7 +802,27 @@ library HashLib {
}
}

function usingExogenousQualifiedSplitBatchMultichainClaimWithWitness(function (MultichainClaim calldata, uint256, bytes32, bytes32, bytes32) internal view returns (bytes32) fnIn)
function usingQualifiedSplitBatchMultichainClaim(function (MultichainClaim calldata, uint256, bytes32, bytes32, bytes32) internal view returns (bytes32) fnIn)
internal
pure
returns (function (QualifiedSplitBatchMultichainClaim calldata, uint256, bytes32, bytes32, bytes32) internal view returns (bytes32) fnOut)
{
assembly ("memory-safe") {
fnOut := fnIn
}
}

function usingSplitBatchMultichainClaimWithWitness(function (MultichainClaim calldata, uint256, bytes32, bytes32, bytes32) internal view returns (bytes32) fnIn)
internal
pure
returns (function (SplitBatchMultichainClaimWithWitness calldata, uint256, bytes32, bytes32, bytes32) internal view returns (bytes32) fnOut)
{
assembly ("memory-safe") {
fnOut := fnIn
}
}

function usingExogenousQualifiedSplitBatchMultichainClaimWithWitness(function (ExogenousMultichainClaim calldata, uint256, bytes32, bytes32, bytes32) internal view returns (bytes32) fnIn)
internal
pure
returns (function (ExogenousQualifiedSplitBatchMultichainClaimWithWitness calldata, uint256, bytes32, bytes32, bytes32) internal view returns (bytes32) fnOut)
Expand All @@ -781,6 +832,26 @@ library HashLib {
}
}

function usingExogenousQualifiedSplitBatchMultichainClaim(function (ExogenousMultichainClaim calldata, uint256, bytes32, bytes32, bytes32) internal view returns (bytes32) fnIn)
internal
pure
returns (function (ExogenousQualifiedSplitBatchMultichainClaim calldata, uint256, bytes32, bytes32, bytes32) internal view returns (bytes32) fnOut)
{
assembly ("memory-safe") {
fnOut := fnIn
}
}

function usingExogenousSplitBatchMultichainClaimWithWitness(function (ExogenousMultichainClaim calldata, uint256, bytes32, bytes32, bytes32) internal view returns (bytes32) fnIn)
internal
pure
returns (function (ExogenousSplitBatchMultichainClaimWithWitness calldata, uint256, bytes32, bytes32, bytes32) internal view returns (bytes32) fnOut)
{
assembly ("memory-safe") {
fnOut := fnIn
}
}

function usingSplitMultichainClaim(function (MultichainClaim calldata, uint256) internal pure returns (bytes32) fnIn)
internal
pure
Expand Down Expand Up @@ -1175,6 +1246,16 @@ library HashLib {
}
}

function usingSplitBatchMultichainClaimWithWitness(function (MultichainClaimWithWitness calldata) internal pure returns (bytes32, bytes32) fnIn)
internal
pure
returns (function (SplitBatchMultichainClaimWithWitness calldata) internal pure returns (bytes32, bytes32) fnOut)
{
assembly ("memory-safe") {
fnOut := fnIn
}
}

function usingExogenousQualifiedSplitBatchMultichainClaimWithWitness(function (MultichainClaimWithWitness calldata) internal pure returns (bytes32, bytes32) fnIn)
internal
pure
Expand All @@ -1185,6 +1266,16 @@ library HashLib {
}
}

function usingExogenousSplitBatchMultichainClaimWithWitness(function (MultichainClaimWithWitness calldata) internal pure returns (bytes32, bytes32) fnIn)
internal
pure
returns (function (ExogenousSplitBatchMultichainClaimWithWitness calldata) internal pure returns (bytes32, bytes32) fnOut)
{
assembly ("memory-safe") {
fnOut := fnIn
}
}

function getMultichainTypehashes(MultichainClaimWithWitness calldata claim) internal pure returns (bytes32 allocationTypehash, bytes32 multichainCompactTypehash) {
assembly ("memory-safe") {
let m := mload(0x40) // Grab the free memory pointer; memory will be left dirtied.
Expand Down Expand Up @@ -1306,10 +1397,25 @@ library HashLib {
qualificationMessageHash = usingExogenousQualifiedSplitMultichainClaimWithWitness(toQualificationMessageHash)(claim, messageHash, 0x40);
}

function toMessageHash(ExogenousQualifiedSplitBatchMultichainClaim calldata claim) internal view returns (bytes32 messageHash, bytes32 qualificationMessageHash) {
messageHash = usingExogenousQualifiedSplitBatchMultichainClaim(toExogenousMultichainClaimMessageHash)(
claim, 0x40, ALLOCATION_TYPEHASH, MULTICHAIN_COMPACT_TYPEHASH, toSplitIdsAndAmountsHash(claim.claims)
);
qualificationMessageHash = usingExogenousQualifiedSplitBatchMultichainClaim(toQualificationMessageHash)(claim, messageHash, 0);
}

function toMessageHash(ExogenousSplitBatchMultichainClaimWithWitness calldata claim) internal view returns (bytes32 messageHash) {
(bytes32 allocationTypehash, bytes32 multichainCompactTypehash) = usingExogenousSplitBatchMultichainClaimWithWitness(getMultichainTypehashes)(claim);

messageHash = usingExogenousSplitBatchMultichainClaimWithWitness(toExogenousMultichainClaimMessageHash)(
claim, 0x40, allocationTypehash, multichainCompactTypehash, toSplitIdsAndAmountsHash(claim.claims)
);
}

function toMessageHash(ExogenousQualifiedSplitBatchMultichainClaimWithWitness calldata claim) internal view returns (bytes32 messageHash, bytes32 qualificationMessageHash) {
(bytes32 allocationTypehash, bytes32 multichainCompactTypehash) = usingExogenousQualifiedSplitBatchMultichainClaimWithWitness(getMultichainTypehashes)(claim);

messageHash = usingExogenousQualifiedSplitBatchMultichainClaimWithWitness(toMultichainClaimMessageHash)(
messageHash = usingExogenousQualifiedSplitBatchMultichainClaimWithWitness(toExogenousMultichainClaimMessageHash)(
claim, 0x80, allocationTypehash, multichainCompactTypehash, toSplitIdsAndAmountsHash(claim.claims)
);
qualificationMessageHash = usingExogenousQualifiedSplitBatchMultichainClaimWithWitness(toQualificationMessageHash)(claim, messageHash, 0x40);
Expand Down
Loading

0 comments on commit 661a715

Please sign in to comment.