Skip to content

Commit

Permalink
feat: retry contract (#259)
Browse files Browse the repository at this point in the history
  • Loading branch information
mpetrun5 authored Jul 31, 2024
1 parent fed14fa commit a72c1f9
Show file tree
Hide file tree
Showing 2 changed files with 67 additions and 0 deletions.
24 changes: 24 additions & 0 deletions contracts/Retry.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
// The Licensed Work is (c) 2022 Sygma
// SPDX-License-Identifier: LGPL-3.0-only

pragma solidity 0.8.11;

import "@openzeppelin/contracts/access/Ownable.sol";

contract Retry is Ownable {

event Retry(uint8 sourceDomainID, uint8 destinationDomainID, uint256 blockHeight, bytes32 resourceID);

/**
@notice This method is used to trigger the process for retrying failed deposits on the MPC side.
@notice Only callable by admin.
@param sourceDomainID ID of the retry source.
@param destinationDomainID ID of the transfer destination.
@param blockHeight Block height on origin chain which contains failed deposits.
@param resourceID Resource ID of transfers that are to be retried.
*/
function retry(uint8 sourceDomainID, uint8 destinationDomainID, uint256 blockHeight, bytes32 resourceID) external onlyOwner {
emit Retry(sourceDomainID, destinationDomainID, blockHeight, resourceID);
}

}
43 changes: 43 additions & 0 deletions test/retry/retry.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
// The Licensed Work is (c) 2022 Sygma
// SPDX-License-Identifier: LGPL-3.0-only

const TruffleAssert = require("truffle-assertions");
const Retry = artifacts.require("Retry")

contract("Retry", (accounts) => {
let RetryInstance;

const sourceDomainID = 1;
const destinationDomainID = 2;
const blockHeight = 15;
const resourceID = "0x0000000000000000000000000000000000000000000000000000000000000300";

beforeEach(async () => {
RetryInstance = await Retry.new(accounts[0]);
});

it("should emit Retry event when retry is called by the owner", async () => {
const tx = await RetryInstance.retry(
sourceDomainID,
destinationDomainID,
blockHeight,
resourceID,
{from: accounts[0]})

TruffleAssert.eventEmitted(tx, "Retry", (event) => {
return (
event.sourceDomainID.toNumber() === sourceDomainID &&
event.destinationDomainID.toNumber() === destinationDomainID &&
event.blockHeight.toNumber() === blockHeight &&
event.resourceID === resourceID
);
});
});

it("should revert when retry is not called by the owner", async () => {
await TruffleAssert.reverts(
RetryInstance.retry(sourceDomainID, destinationDomainID, blockHeight, resourceID, {from: accounts[1]}),
"Ownable: caller is not the owner."
)
});
})

0 comments on commit a72c1f9

Please sign in to comment.