[SIP5.7] Raft Contract Upgrade to Support Auctions of ERC20 tokens reverting on selftransfers

SIP5.7: Raft Contract Upgrade to Support Auctions of ERC20 tokens reverting on selftransfers

Summary

We have successfully deployed new versions of the Raft contract across all operational chains: Base, Arbitrum, Mainnet, and Sonic. This upgrade addresses a critical issue preventing the finalization of failed xSilo auctions due to the token’s restriction on self-transfers.

This proposal seeks the authority to call the setRaft() function within the Configuration Manager on each chain, pointing the protocol to these new, corrected Raft contract addresses. This will re-enable the full functionality of the auction system for all assets.


Motivation

An investigation into failing xSilo auctions revealed a conflict between our auction finalization logic and the xSilo token contract. The DutchAuctionLibrary, which is used to manage auctions, sends unsold tokens back to a designated refundAddress. For our purposes, this address is the Raft contract itself, as we reuse these tokens in subsequent auctions.

However, the xSilo token contract includes a specific check that prevents transfers where the sender and receiver are the same (require(_from != _to)). This restriction caused transactions to finalize failed auctions to revert, effectively trapping unsold tokens and halting any new auctions for the affected assets.

The newly deployed Raft contracts incorporate an updated DutchAuctionLibrary. This library now includes a check to skip the refund transfer if the recipient is the Raft contract itself, resolving the conflict without requiring a fundamental change to the auction mechanism.


Specifications

The following actions are required on each chain to implement the fix. This involves calling the setRaft() function in the respective Configuration Manager to register the new Raft contract address.

Base

  • Action: Update the Raft contract address.
  • Configuration Manager: 0x8ae7fbAeCfBDb21c28b1854272BB7A3a813e2A66
  • New Raft Address: 0x95107E3C932865733e8feCF971e9051DA62FE59A
  • Old Raft Address: 0xD1Bccfd8B32A5052a6873259c204CBA85510BC6E

Arbitrum

  • Action: Update the Raft contract address.
  • Configuration Manager: 0x8ae7fbAeCfBDb21c28b1854272BB7A3a813e2A66
  • New Raft Address: 0x2E6FBcefA0480cF9f7920d98804A9BD72e1eFEc9
  • Old Raft Address: 0xD1Bccfd8B32A5052a6873259c204CBA85510BC6E

Mainnet

  • Action: Update the Raft contract address.
  • Configuration Manager: 0x8ae7fbAeCfBDb21c28b1854272BB7A3a813e2A66
  • New Raft Address: 0xB8BBC85cEE0ea08Cf35B63c23bfE95fA444C5F07
  • Old Raft Address: 0xD1Bccfd8B32A5052a6873259c204CBA85510BC6E

Sonic

  • Action: Update the Raft contract address.
  • Configuration Manager: 0xDff0fc7bFa32Fb536807820FB3Be6C9828463e32
  • New Raft Address: 0xd03414b3E3463DDC471555850F6BdD5322b97d60
  • Old Raft Address: 0x6E6b9CB3BA753337ab91BC5A1dbAD83b8F05e204

to show the diff, you can use the etherscan - only difference is in the DutchAuctionLibrary.sol
ie:
https://basescan.org/contractdiffchecker?a2=0x95107E3C932865733e8feCF971e9051DA62FE59A&a1=0xD1Bccfd8B32A5052a6873259c204CBA85510BC6E

@Recognized_Delegates

7 Likes

thank you for quick response and action @halaprix!

VOTE:

1 Like

We voted For since its a simple but necessary fix, to keep things running smoothly on all chains!

2 Likes