A Nouns token delegation vulnerability
A Nouns token delegation vulnerabilityWe were recently approached by 0xkasper from hexens, a white hat security team, who found a new attack vector based on a vulnerability we were aware of in the Nouns token contract. Nouns tech grants pod has initiated a bounty payment of 30K USDC to the team.TLDRWho’s at risk? Noun owners delegating to EOA accounts (not smart contract accounts).What’s the damage? Noun NFTs can become non-transferrable with no voting power.How likely is it to happen? The pr...
Introducing Nouns Fork: A Last-Resort Minority Protection Mechanism
Forking is the crypto-native way for groups of token holders to exit together into a new instance of their protocol, resulting in maximal conservation of momentum in the ecosystem; famous examples include the Ethereum Classic fork and the Bitcoin Cash fork. We believe it's time to enable DAO forks as well, starting here at Nouns. To date, there has been no DAO version of forking, but it is needed. How can we protect a minority against a tyrannical majority? Or, in less extreme cases, how...
Nouns Governor: Design Alternatives
Welcome to the second post in the Nouns Governor series; Please check out the first post for more context. This time we’d like to share three different design directions we have in mind, with some high level details on how each direction might work. Our hope is the same as last time: to receive feedback from the community; do you have a preferred design direction? Do you think none of them are good enough? The current focus is on how delegation information is encoded and presented. The curren...
we build smart contracts for Nouns. we're on twitter @davidbrai and @eladmallel.
A Nouns token delegation vulnerability
A Nouns token delegation vulnerabilityWe were recently approached by 0xkasper from hexens, a white hat security team, who found a new attack vector based on a vulnerability we were aware of in the Nouns token contract. Nouns tech grants pod has initiated a bounty payment of 30K USDC to the team.TLDRWho’s at risk? Noun owners delegating to EOA accounts (not smart contract accounts).What’s the damage? Noun NFTs can become non-transferrable with no voting power.How likely is it to happen? The pr...
Introducing Nouns Fork: A Last-Resort Minority Protection Mechanism
Forking is the crypto-native way for groups of token holders to exit together into a new instance of their protocol, resulting in maximal conservation of momentum in the ecosystem; famous examples include the Ethereum Classic fork and the Bitcoin Cash fork. We believe it's time to enable DAO forks as well, starting here at Nouns. To date, there has been no DAO version of forking, but it is needed. How can we protect a minority against a tyrannical majority? Or, in less extreme cases, how...
Nouns Governor: Design Alternatives
Welcome to the second post in the Nouns Governor series; Please check out the first post for more context. This time we’d like to share three different design directions we have in mind, with some high level details on how each direction might work. Our hope is the same as last time: to receive feedback from the community; do you have a preferred design direction? Do you think none of them are good enough? The current focus is on how delegation information is encoded and presented. The curren...
we build smart contracts for Nouns. we're on twitter @davidbrai and @eladmallel.

Subscribe to verbs

Subscribe to verbs
Share Dialog
Share Dialog
>400 subscribers
>400 subscribers
Client Incentives is a new mechanism for Nouns to pay clients (frontends) for interactions they facilitate between users and the Nouns protocol.
For more details please read our blog post about it.
As of today, the rewards have no been activated yet. They will be once another DAO proposal goes through to configure and enable them.
Call the registerClient function of the Rewards contract.
This function expects these parameters:
name: what is the name of your client? e.g. camp
descriptor: a short description of your client, ideally a URL
After calling this function, a new Nouns Client Token NFT will be minted to you. The ID of that NFT is your clientId. You will need to send your clientId in order to get attribution and get rewards.
Currently you can use it in the following functions:
NounsAuctionHouse: createBid(nounId, clientId)
NounsDAO:
castRefundableVote(proposalId, support, clientId)
castRefundableVoteWithReason(proposalId, support, reason, clientId)
propose(targets, values, signatures, calldatas, description, clientId)
proposeBySigs(proposerSignatures, targets, values, signatures, calldatas, description, clientId)
The NFT also gives you permission to:
Call updateClientMetadata to update the name & description of your client.
Call withdrawClientBalance to withdraw your rewards.
If your clientId was used in any of the functions mentioned above, then you may be eligible for rewards.
In order to reduce gas costs on the DAO functions, rewards are only updated when someone calls the following functions on the Rewards contract:
updateRewardsForAuctions
updateRewardsForProposalWritingAndVoting
Gas is refunded for these calls as long as the contract is holding enough WETH.
You can check your balance to see if you have any rewards to withdraw by calling clientBalance with your clientId.
To withdraw your rewards, your clientId needs to be approved for withdrawals. We added this step to reduce the risk of bad actors trying to abuse the system.
Clients can be approved only via DAO proposals. To get your clientId approved, create a proposal in which the DAO invokes the Rewards contract with the following function:
setClientApproval(clientId, true)
Once your clientId has been approved for withdrawals, call the withdrawClientBalance(clientId, to, amount) function to withdraw your rewards.
If you have any questions, feel free to reach out to us on farcaster: @el4d & @davidbr
Client Incentives is a new mechanism for Nouns to pay clients (frontends) for interactions they facilitate between users and the Nouns protocol.
For more details please read our blog post about it.
As of today, the rewards have no been activated yet. They will be once another DAO proposal goes through to configure and enable them.
Call the registerClient function of the Rewards contract.
This function expects these parameters:
name: what is the name of your client? e.g. camp
descriptor: a short description of your client, ideally a URL
After calling this function, a new Nouns Client Token NFT will be minted to you. The ID of that NFT is your clientId. You will need to send your clientId in order to get attribution and get rewards.
Currently you can use it in the following functions:
NounsAuctionHouse: createBid(nounId, clientId)
NounsDAO:
castRefundableVote(proposalId, support, clientId)
castRefundableVoteWithReason(proposalId, support, reason, clientId)
propose(targets, values, signatures, calldatas, description, clientId)
proposeBySigs(proposerSignatures, targets, values, signatures, calldatas, description, clientId)
The NFT also gives you permission to:
Call updateClientMetadata to update the name & description of your client.
Call withdrawClientBalance to withdraw your rewards.
If your clientId was used in any of the functions mentioned above, then you may be eligible for rewards.
In order to reduce gas costs on the DAO functions, rewards are only updated when someone calls the following functions on the Rewards contract:
updateRewardsForAuctions
updateRewardsForProposalWritingAndVoting
Gas is refunded for these calls as long as the contract is holding enough WETH.
You can check your balance to see if you have any rewards to withdraw by calling clientBalance with your clientId.
To withdraw your rewards, your clientId needs to be approved for withdrawals. We added this step to reduce the risk of bad actors trying to abuse the system.
Clients can be approved only via DAO proposals. To get your clientId approved, create a proposal in which the DAO invokes the Rewards contract with the following function:
setClientApproval(clientId, true)
Once your clientId has been approved for withdrawals, call the withdrawClientBalance(clientId, to, amount) function to withdraw your rewards.
If you have any questions, feel free to reach out to us on farcaster: @el4d & @davidbr
No activity yet