Skip to content

Commit

Permalink
Rename
Browse files Browse the repository at this point in the history
  • Loading branch information
cristovaoth committed Jul 2, 2023
1 parent f2ad9dd commit 3b5fda6
Showing 1 changed file with 76 additions and 63 deletions.
139 changes: 76 additions & 63 deletions packages/evm/contracts/PermissionChecker.sol
Original file line number Diff line number Diff line change
Expand Up @@ -210,76 +210,76 @@ abstract contract PermissionChecker is Core, Periphery {
Role storage role,
bytes32 key,
bytes calldata data,
Context memory ctx
Context memory context
) private view returns (Status, Result memory) {
(Condition memory condition, Consumption[] memory consumptions) = _load(
role,
key
);
ParameterPayload memory payload = Decoder.inspect(data, condition);

ctx.consumptions = ctx.consumptions.length > 0
? Consumptions.merge(ctx.consumptions, consumptions)
context.consumptions = context.consumptions.length > 0
? Consumptions.merge(context.consumptions, consumptions)
: consumptions;

return _walk(data, condition, payload, ctx);
return _walk(data, condition, payload, context);
}

function _walk(
bytes calldata data,
Condition memory condition,
ParameterPayload memory payload,
Context memory ctx
Context memory context
) private pure returns (Status, Result memory) {
Operator operator = condition.operator;

if (operator < Operator.EqualTo) {
if (operator == Operator.Pass) {
return (
Status.Ok,
Result({consumptions: ctx.consumptions, info: 0})
Result({consumptions: context.consumptions, info: 0})
);
} else if (operator == Operator.Matches) {
return _matches(data, condition, payload, ctx);
return _matches(data, condition, payload, context);
} else if (operator == Operator.And) {
return _and(data, condition, payload, ctx);
return _and(data, condition, payload, context);
} else if (operator == Operator.Or) {
return _or(data, condition, payload, ctx);
return _or(data, condition, payload, context);
} else if (operator == Operator.Nor) {
return _nor(data, condition, payload, ctx);
return _nor(data, condition, payload, context);
} else if (operator == Operator.ArraySome) {
return _arraySome(data, condition, payload, ctx);
return _arraySome(data, condition, payload, context);
} else if (operator == Operator.ArrayEvery) {
return _arrayEvery(data, condition, payload, ctx);
return _arrayEvery(data, condition, payload, context);
} else {
assert(operator == Operator.ArraySubset);
return _arraySubset(data, condition, payload, ctx);
return _arraySubset(data, condition, payload, context);
}
} else {
if (operator <= Operator.LessThan) {
return (
_compare(data, condition, payload),
Result({consumptions: ctx.consumptions, info: 0})
Result({consumptions: context.consumptions, info: 0})
);
} else if (operator <= Operator.SignedIntLessThan) {
return (
_compareSignedInt(data, condition, payload),
Result({consumptions: ctx.consumptions, info: 0})
Result({consumptions: context.consumptions, info: 0})
);
} else if (operator == Operator.Bitmask) {
return (
_bitmask(data, condition, payload),
Result({consumptions: ctx.consumptions, info: 0})
Result({consumptions: context.consumptions, info: 0})
);
} else if (operator == Operator.Custom) {
return _custom(data, condition, payload, ctx);
return _custom(data, condition, payload, context);
} else if (operator == Operator.WithinAllowance) {
return _withinAllowance(data, condition, payload, ctx);
return _withinAllowance(data, condition, payload, context);
} else if (operator == Operator.EtherWithinAllowance) {
return _etherWithinAllowance(condition, ctx);
return _etherWithinAllowance(condition, context);
} else {
assert(operator == Operator.CallWithinAllowance);
return _callWithinAllowance(condition, ctx);
return _callWithinAllowance(condition, context);
}
}
}
Expand All @@ -288,9 +288,9 @@ abstract contract PermissionChecker is Core, Periphery {
bytes calldata data,
Condition memory condition,
ParameterPayload memory payload,
Context memory ctx
Context memory context
) private pure returns (Status status, Result memory result) {
result.consumptions = ctx.consumptions;
result.consumptions = context.consumptions;

if (condition.children.length != payload.children.length) {
return (Status.ParameterNotAMatch, result);
Expand All @@ -302,15 +302,18 @@ abstract contract PermissionChecker is Core, Periphery {
condition.children[i],
payload.children[i],
Context({
to: ctx.to,
value: ctx.value,
to: context.to,
value: context.value,
consumptions: result.consumptions
})
);
if (status != Status.Ok) {
return (
status,
Result({consumptions: ctx.consumptions, info: result.info})
Result({
consumptions: context.consumptions,
info: result.info
})
);
}
unchecked {
Expand All @@ -325,25 +328,28 @@ abstract contract PermissionChecker is Core, Periphery {
bytes calldata data,
Condition memory condition,
ParameterPayload memory payload,
Context memory ctx
Context memory context
) private pure returns (Status status, Result memory result) {
result.consumptions = ctx.consumptions;
result.consumptions = context.consumptions;

for (uint256 i; i < condition.children.length; ) {
(status, result) = _walk(
data,
condition.children[i],
payload,
Context({
to: ctx.to,
value: ctx.value,
to: context.to,
value: context.value,
consumptions: result.consumptions
})
);
if (status != Status.Ok) {
return (
status,
Result({consumptions: ctx.consumptions, info: result.info})
Result({
consumptions: context.consumptions,
info: result.info
})
);
}
unchecked {
Expand All @@ -357,18 +363,18 @@ abstract contract PermissionChecker is Core, Periphery {
bytes calldata data,
Condition memory condition,
ParameterPayload memory payload,
Context memory ctx
Context memory context
) private pure returns (Status status, Result memory result) {
result.consumptions = ctx.consumptions;
result.consumptions = context.consumptions;

for (uint256 i; i < condition.children.length; ) {
(status, result) = _walk(
data,
condition.children[i],
payload,
Context({
to: ctx.to,
value: ctx.value,
to: context.to,
value: context.value,
consumptions: result.consumptions
})
);
Expand All @@ -382,38 +388,41 @@ abstract contract PermissionChecker is Core, Periphery {

return (
Status.OrViolation,
Result({consumptions: ctx.consumptions, info: 0})
Result({consumptions: context.consumptions, info: 0})
);
}

function _nor(
bytes calldata data,
Condition memory condition,
ParameterPayload memory payload,
Context memory ctx
Context memory context
) private pure returns (Status status, Result memory) {
for (uint256 i; i < condition.children.length; ) {
(status, ) = _walk(data, condition.children[i], payload, ctx);
(status, ) = _walk(data, condition.children[i], payload, context);
if (status == Status.Ok) {
return (
Status.NorViolation,
Result({consumptions: ctx.consumptions, info: 0})
Result({consumptions: context.consumptions, info: 0})
);
}
unchecked {
++i;
}
}
return (Status.Ok, Result({consumptions: ctx.consumptions, info: 0}));
return (
Status.Ok,
Result({consumptions: context.consumptions, info: 0})
);
}

function _arraySome(
bytes calldata data,
Condition memory condition,
ParameterPayload memory payload,
Context memory ctx
Context memory context
) private pure returns (Status status, Result memory result) {
result.consumptions = ctx.consumptions;
result.consumptions = context.consumptions;

uint256 length = condition.children.length;
for (uint256 i; i < length; ) {
Expand All @@ -422,8 +431,8 @@ abstract contract PermissionChecker is Core, Periphery {
condition.children[0],
payload.children[i],
Context({
to: ctx.to,
value: ctx.value,
to: context.to,
value: context.value,
consumptions: result.consumptions
})
);
Expand All @@ -436,33 +445,33 @@ abstract contract PermissionChecker is Core, Periphery {
}
return (
Status.NoArrayElementPasses,
Result({consumptions: ctx.consumptions, info: 0})
Result({consumptions: context.consumptions, info: 0})
);
}

function _arrayEvery(
bytes calldata data,
Condition memory condition,
ParameterPayload memory payload,
Context memory ctx
Context memory context
) private pure returns (Status status, Result memory result) {
result.consumptions = ctx.consumptions;
result.consumptions = context.consumptions;

for (uint256 i; i < payload.children.length; ) {
(status, result) = _walk(
data,
condition.children[0],
payload.children[i],
Context({
to: ctx.to,
value: ctx.value,
to: context.to,
value: context.value,
consumptions: result.consumptions
})
);
if (status != Status.Ok) {
return (
Status.NotEveryArrayElementPasses,
Result({consumptions: ctx.consumptions, info: 0})
Result({consumptions: context.consumptions, info: 0})
);
}
unchecked {
Expand All @@ -476,9 +485,9 @@ abstract contract PermissionChecker is Core, Periphery {
bytes calldata data,
Condition memory condition,
ParameterPayload memory payload,
Context memory ctx
Context memory context
) private pure returns (Status, Result memory result) {
result.consumptions = ctx.consumptions;
result.consumptions = context.consumptions;

if (
payload.children.length == 0 ||
Expand All @@ -498,8 +507,8 @@ abstract contract PermissionChecker is Core, Periphery {
condition.children[j],
payload.children[i],
Context({
to: ctx.to,
value: ctx.value,
to: context.to,
value: context.value,
consumptions: result.consumptions
})
);
Expand All @@ -513,7 +522,7 @@ abstract contract PermissionChecker is Core, Periphery {
if (!found) {
return (
Status.ParameterNotSubsetOfAllowed,
Result({consumptions: ctx.consumptions, info: 0})
Result({consumptions: context.consumptions, info: 0})
);
}
}
Expand Down Expand Up @@ -604,7 +613,7 @@ abstract contract PermissionChecker is Core, Periphery {
bytes calldata data,
Condition memory condition,
ParameterPayload memory payload,
Context memory ctx
Context memory context
) private pure returns (Status, Result memory) {
// 20 bytes on the left
ICustomCondition adapter = ICustomCondition(
Expand All @@ -614,33 +623,37 @@ abstract contract PermissionChecker is Core, Periphery {
bytes12 extra = bytes12(uint96(uint256(condition.compValue)));

(bool success, bytes32 info) = adapter.check(
ctx.value,
context.value,
data,
payload.location,
payload.size,
extra
);
return (
success ? Status.Ok : Status.CustomConditionViolation,
Result({consumptions: ctx.consumptions, info: info})
Result({consumptions: context.consumptions, info: info})
);
}

function _withinAllowance(
bytes calldata data,
Condition memory condition,
ParameterPayload memory payload,
Context memory ctx
Context memory context
) private pure returns (Status, Result memory) {
uint256 value = uint256(Decoder.word(data, payload.location));
return __consume(value, condition, ctx.consumptions);
return __consume(value, condition, context.consumptions);
}

function _etherWithinAllowance(
Condition memory condition,
Context memory ctx
Context memory context
) private pure returns (Status status, Result memory result) {
(status, result) = __consume(ctx.value, condition, ctx.consumptions);
(status, result) = __consume(
context.value,
condition,
context.consumptions
);
return (
status == Status.Ok ? Status.Ok : Status.EtherAllowanceExceeded,
result
Expand All @@ -649,9 +662,9 @@ abstract contract PermissionChecker is Core, Periphery {

function _callWithinAllowance(
Condition memory condition,
Context memory ctx
Context memory context
) private pure returns (Status status, Result memory result) {
(status, result) = __consume(1, condition, ctx.consumptions);
(status, result) = __consume(1, condition, context.consumptions);
return (
status == Status.Ok ? Status.Ok : Status.CallAllowanceExceeded,
result
Expand Down

0 comments on commit 3b5fda6

Please sign in to comment.