Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 12 additions & 1 deletion contracts/SBCDepositContract.sol
Original file line number Diff line number Diff line change
Expand Up @@ -265,6 +265,8 @@ contract SBCDepositContract is
* NOTE: This function signature is hardcoded in the Gnosis execution layer clients. Changing this signature without updating the
* clients will cause block verification of any post-shangai block to fail. The function signature cannonical spec is here
* https://github.com/gnosischain/specs/blob/master/execution/withdrawals.md
* Note: chiado network requires this signature to sync post-shapella blocks. This function signature can only be deprecated after
* deprecating chiado network of full sync up to a pre-specified block.
* @custom:deprecatedparam _deprecatedUnused Previously `maxFailedWithdrawalsToProcess` currently deprecated and ignored
* @param _amounts Array of amounts to be withdrawn.
* @param _addresses Array of addresses that should receive the corresponding amount of tokens.
Expand All @@ -273,7 +275,7 @@ contract SBCDepositContract is
uint256 /* _deprecatedUnused */,
uint64[] calldata _amounts,
address[] calldata _addresses
) external {
) public {
require(
_msgSender() == SYSTEM_WITHDRAWAL_EXECUTOR || _msgSender() == _admin(),
"This function should be called only by SYSTEM_WITHDRAWAL_EXECUTOR or _admin()"
Expand All @@ -287,6 +289,15 @@ contract SBCDepositContract is
}
}

/**
* @dev Forwards compatible signature for `executeSystemWithdrawals` to support its future deprecation
* Clients must support and use the signature specified in the spec at:
* https://github.com/gnosischain/specs/blob/master/execution/withdrawals.md
*/
function executeSystemWithdrawals(uint64[] calldata _amounts, address[] calldata _addresses) external {
executeSystemWithdrawals(0, _amounts, _addresses);
}

/**
* @dev Allows to unwrap the mGNO in this contract to GNO
* Only admin can call this method.
Expand Down
14 changes: 7 additions & 7 deletions test/deposit.js
Original file line number Diff line number Diff line change
Expand Up @@ -205,9 +205,9 @@ contract('SBCDepositContractProxy', (accounts) => {
const amounts = ['0x0000000000000000', '0x0000000000000000']
const elongatedAmounts = ['0x0000000000000000', '0x0000000000000000', '0x0000000000000000']
const addresses = [accounts[0], accounts[0]]
await contract.executeSystemWithdrawals(10, amounts, addresses, { from: accounts[1] }).should.be.rejected
await contract.executeSystemWithdrawals(10, elongatedAmounts, addresses, { from: accounts[0] }).should.be.rejected
await contract.executeSystemWithdrawals(10, amounts, addresses, { from: accounts[0] })
await contract.executeSystemWithdrawals(amounts, addresses, { from: accounts[1] }).should.be.rejected
await contract.executeSystemWithdrawals(elongatedAmounts, addresses, { from: accounts[0] }).should.be.rejected
await contract.executeSystemWithdrawals(amounts, addresses, { from: accounts[0] })
})

it('should correctly withdraw GNO for one address', async () => {
Expand All @@ -217,7 +217,7 @@ contract('SBCDepositContractProxy', (accounts) => {
// simple withdrawal
await stake.transfer(contract.address, depositAmount)

await contract.executeSystemWithdrawals(0, amounts, addresses)
await contract.executeSystemWithdrawals(amounts, addresses)
const claimableGNO = (await contract.withdrawableAmount(accounts[1])).toString()
expect(claimableGNO).to.be.equal(depositAmount)

Expand All @@ -234,7 +234,7 @@ contract('SBCDepositContractProxy', (accounts) => {
// simple withdrawal
await stake.transfer(contract.address, web3.utils.toWei(String(addressCount)))

await contract.executeSystemWithdrawals(0, amounts, addresses)
await contract.executeSystemWithdrawals(amounts, addresses)
for (let i = 0; i < addressCount; i++) {
const claimableGNO = (await contract.withdrawableAmount(addresses[i])).toString()
expect(claimableGNO).to.be.equal(depositAmount)
Expand All @@ -254,7 +254,7 @@ contract('SBCDepositContractProxy', (accounts) => {
// simple withdrawal
await token.transfer(contract.address, thirtyTwoEther)

await contract.executeSystemWithdrawals(0, amounts, addresses)
await contract.executeSystemWithdrawals(amounts, addresses)
const mGNOBalanceAfterWithdrawal = (await token.balanceOf(accounts[1])).toString()
expect(mGNOBalanceAfterWithdrawal).to.be.equal(web3.utils.toWei('0'))
})
Expand All @@ -266,7 +266,7 @@ contract('SBCDepositContractProxy', (accounts) => {
// simple withdrawal
await token.transfer(contract.address, thirtyTwoEther)

await contract.executeSystemWithdrawals(0, amounts, addresses)
await contract.executeSystemWithdrawals(amounts, addresses)
const mGNOBalanceAfterFirstWithdrawal = (await token.balanceOf(zeroAddress)).toString()
expect(mGNOBalanceAfterFirstWithdrawal).to.be.equal(zeroEther)
})
Expand Down