Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
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
Agent: Merge with Fundraising's Pool #941
Agent: Merge with Fundraising's Pool #941
Changes from 1 commit
3facd3f
7b3d92f
1749731
c7fa7e9
87db2c5
365298e
26aa1c2
1c262dd
05784df
0aa07c6
6512c27
4e8f3ff
c069ff1
63a0f83
99c793f
2946020
a4a97b2
1f6c9f9
3ac568c
14576ae
22392f7
aa05a88
eb03d9c
9310cb6
1e77045
e47298f
File filter
Filter by extension
Conversations
Jump to
There are no files selected for viewing
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.
Maybe let's have a more clear description of what the function does.
Not super convinced about the suggestion, but I would go for something like this
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.
I would add the same parameters to the role as
EXECUTE_ROLE
has. For_value
it could either be always 0 or we could remove it as a parameter altogether.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.
Sounds good.
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.
We could cache
protectedTokens.length
into a stack variable so we don't read it from storage every time.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.
What's the rationale behind allowing to add
ETH
to the protected token list?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.
Well it was mostly a convenient thing for us regarding our use case: basically the
Controller
could then expose anaddCollateralToken
function which would forward the call toMarketMaker
,Tap
andPool
[no matter whether this is an ERC20 or ETH].You're right that it does not make a lot of sense into the
Agent
as such. I will update it and handle this specific use case in theController
contract.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.
Perhaps let's require that
_protectedTokens.length == protectedTokens.length
. I don't think this can be exploited, but we could fail with a nicer error than accessing an out of bounds item in the array.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. This could also allow us to make sure no protected tokens has been added [though i'm not sure this could be an attack vector].
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.
What do you think about allowing the token balance to increase when safe executing? It could be useful for use cases such as claiming rewards.
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.
I think it makes sense indeed ... Gonna update that.
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.
What if in addition to ensuring that
_token
is a contract, we perform abalance(_token)
to make sure that the balance check doesn't revert for the token. If a token is added andtoken.balanceOf()
reverts, it will blocksafeExecute
until the token is removed from the protected list.A malicious token could still be added that starts reverting after a state change or some period of time. To prevent this we could add a public function (without authentication) to remove a token that reverts, but this is a bit of an overkill IMO.
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.
Hmmmm. Yeah. I will add that too.
Yeah I think it will mostly make things harder to understand [regarding roles and all] for end users while the treat is really low ...
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.
Thinking about it: what exactly is the threat model here?
If we are trying to deal with malicious tokens : what about the situation where calling
balanceOf
would actually empty your balance ? It's unlikely cause if the token is malicious / not trustless it could directly move your tokens [which would be pointless cause they would enp be worth nothing in the end].We are just trying to prevent users to do a mistake while copy / pasting the address of the token ?
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.
For me the threat model is adding a contract to the list of protected tokens that can brick
safeExecute
until the token is removed. This could happen by mistake or maliciously and it could be specially bad if the permission to remove a token from the list is assigned to a long/complicated process or even burned.But as you point out, adding a malicious token could bypass any check that we add here, so we would really just be protecting from mistakes.
This shouldn't even be a problem since
balance(_token)
uses aSTATICCALL
.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.