diff --git a/contracts/FROSTKeygen.sol b/contracts/FROSTKeygen.sol new file mode 100644 index 00000000..19abd71e --- /dev/null +++ b/contracts/FROSTKeygen.sol @@ -0,0 +1,19 @@ +// 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 FROSTKeygen is Ownable { + + event StartedFROSTKeygen(bytes32 resourceID); + + /** + @param resourceID ResourceID for which the keygen is initiated. + */ + function startFROSTKeygen(bytes32 resourceID) public onlyOwner { + emit StartedFROSTKeygen(resourceID); + } + +} \ No newline at end of file diff --git a/migrations/9_deploy_frostKeygen.js b/migrations/9_deploy_frostKeygen.js new file mode 100644 index 00000000..651069c4 --- /dev/null +++ b/migrations/9_deploy_frostKeygen.js @@ -0,0 +1,17 @@ +const parseArgs = require("minimist"); + +const FROSTKeygenContract = artifacts.require("FROSTKeygen"); + +module.exports = async function (deployer) { + + const deployFrostKeygen = parseArgs(process.argv.slice(2))["deploy-frost-keygen"]; + + if (deployFrostKeygen){ + await deployer.deploy(FROSTKeygenContract); + const frostKeygenInstance = await FROSTKeygenContract.deployed(); + + console.table({ + "FROSTKeygen Address": frostKeygenInstance.address, + }); + } +} diff --git a/test/frostKeygen/frostKeygen.js b/test/frostKeygen/frostKeygen.js new file mode 100644 index 00000000..aacfa4db --- /dev/null +++ b/test/frostKeygen/frostKeygen.js @@ -0,0 +1,35 @@ +// The Licensed Work is (c) 2022 Sygma +// SPDX-License-Identifier: LGPL-3.0-only + +const TruffleAssert = require("truffle-assertions"); +const FROSTKeygen = artifacts.require("FROSTKeygen") +const Helpers = require("../helpers"); + +contract("FROSTKeygen", (accounts) => { + let FROSTKeygenInstance; + let resourceID; + + beforeEach(async () => { + FROSTKeygenInstance = await FROSTKeygen.new(accounts[0]); + resourceID = Helpers.createResourceID( + "0x", + 1 + ); + }); + + it("should emit StartedFROSTKeygen event when startKeygen is called by the owner", async () => { + + const tx = await FROSTKeygenInstance.startFROSTKeygen(resourceID, {from: accounts[0]}) + + TruffleAssert.eventEmitted(tx, "StartedFROSTKeygen", (event) => { + return event.resourceID === resourceID + }, "StartedFROSTKeygen event should be emitted with correct resourceID"); + + }); + + it("should revert when it's not called by the owner", async () => { + await TruffleAssert.reverts( + FROSTKeygenInstance.startFROSTKeygen(resourceID, {from: accounts[1]}), + ) + }); +})