From 7d2a492fc98895c12e727faec50551d0b25737ba Mon Sep 17 00:00:00 2001 From: Michael Bumann Date: Wed, 16 Aug 2023 17:20:16 +0200 Subject: [PATCH] Update reimbursement to support migration --- contracts/Reimbursement.sol | 37 +++++++++++++++++++++++++++++++------ 1 file changed, 31 insertions(+), 6 deletions(-) diff --git a/contracts/Reimbursement.sol b/contracts/Reimbursement.sol index 743c2e8..f261057 100644 --- a/contracts/Reimbursement.sol +++ b/contracts/Reimbursement.sol @@ -31,18 +31,35 @@ contract Reimbursement is Initializable { uint32 public blocksToWait; + // The address that deployed the contract + address public deployer; + + // Data migration flag + bool public migrationDone; + event ReimbursementAdded(uint32 id, address indexed addedByAccount, uint256 amount); event ReimbursementVetoed(uint32 id, address vetoedByAccount); - function initialize() public initializer { - blocksToWait = 40320; // 7 days; 15 seconds block time - } - modifier onlyCore { require(contributorContract.addressIsCore(tx.origin), "Core only"); _; } + modifier onlyDeployer { + require(msg.sender == deployer, "Deployer only"); + _; + } + + function initialize() public initializer { + deployer = msg.sender; + migrationDone = false; + blocksToWait = 40320; // 7 days; 15 seconds block time + } + + function finishMigration() public onlyDeployer { + migrationDone = true; + } + function setContributorContract(address contributor) public { require(address(contributorContract) == address(0) || contributorContract.addressIsCore(msg.sender), "Core only"); contributorContract = ContributorInterface(contributor); @@ -82,7 +99,8 @@ contract Reimbursement is Initializable { ); } - function add(uint256 amount, address token, uint32 recipientId, bytes32 hashDigest, uint8 hashFunction, uint8 hashSize) public onlyCore { + function add(uint256 amount, address token, uint32 recipientId, bytes32 hashDigest, uint8 hashFunction, uint8 hashSize, uint256 confirmedAtBlock, bool vetoed) public onlyCore { + require((confirmedAtBlock == 0 && vetoed == false) || migrationDone == false, "Extra arguments not allowed"); uint32 reimbursementId = reimbursementsCount + 1; ReimbursementData storage r = reimbursements[reimbursementId]; r.exists = true; @@ -92,7 +110,14 @@ contract Reimbursement is Initializable { r.hashDigest = hashDigest; r.hashFunction = hashFunction; r.hashSize = hashSize; - r.confirmedAtBlock = block.number + blocksToWait; + + if (confirmedAtBlock > 0) { + r.confirmedAtBlock = confirmedAtBlock; + } else { + r.confirmedAtBlock = block.number + 1 + blocksToWait; + } + + if (vetoed) { r.vetoed = true; } reimbursementsCount++;