-
Notifications
You must be signed in to change notification settings - Fork 19
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
NONEVM-298: timelock contract #528
base: develop
Are you sure you want to change the base?
Conversation
Quality Gate passedIssues Measures |
data: Span<felt252>, | ||
} | ||
|
||
fn _hash_operation_batch(calls: Span<Call>, predecessor: u256, salt: u256) -> u256 { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
im not across the latest Cairo standards, why does this need to be split out into its own fn outside of the module?
} | ||
|
||
fn _execute(ref self: ContractState, call: Call) { | ||
let _response = call_contract_syscall(call.target, call.selector, call.data) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
does the response contain any useful information? if not, is there any point in assigning it to a variable (or is this a linter thing?)
fn update_delay(ref self: ContractState, new_delay: u256) { | ||
self.access_control.assert_only_role(ADMIN_ROLE); | ||
|
||
self | ||
.emit( | ||
Event::MinDelayChange( | ||
MinDelayChange { | ||
old_duration: self._min_delay.read(), new_duration: new_delay, | ||
} | ||
) | ||
); | ||
self._min_delay.write(new_delay); | ||
} | ||
|
||
// | ||
// ONLY ADMIN | ||
// |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
update_delay should be under ONLY ADMIN as well right
assert(!mock.contains(MOCK_SET_ID, 300), 'does not contain 300'); | ||
assert(mock.contains(MOCK_SET_ID, 200), 'contains 200'); | ||
assert(mock.at(MOCK_SET_ID, 1) == 200, 'indexes match'); | ||
assert(mock.at(MOCK_SET_ID, 2) == 0, 'no entry at 2nd index'); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
an interesting behaviour of this enumerable set implementation - you wouldn't be able to tell if the entry at an index is actually zero or if there is no entry?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
yeah, you can't store the 0 value in this implementation. I guess I could solve for this by introducing a special map that only stores 0? EVM doesn't have this problem because storage values can be arrays (not the case in Starknet).
assert(actual_toggle, 'toggle true'); | ||
|
||
assert(timelock.is_operation_done(id), 'operation is done'); | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
could also add another schedule/execute batch with predecessor = first batch to this test to demonstrate that works as intended too
} | ||
} | ||
|
||
// snforge does not treat contract invocation failures as a panic (yet) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
so executing this on a real environment would result in a panic? is the timelock contract able to tell which op failed?
This is the last set of contract changes necessary for the upcoming audit. There are some optional contract changes as well we can add further down the road.