Skip to content

Commit

Permalink
ConfirmWithdrawMessage
Browse files Browse the repository at this point in the history
  • Loading branch information
0xbuidlman committed Oct 29, 2019
1 parent 4438eee commit 5ba1690
Showing 1 changed file with 16 additions and 2 deletions.
18 changes: 16 additions & 2 deletions contracts/main/DAIBridge.sol
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ contract DAIBridge is ValidatorsOperations {

IERC20 private token;

enum Status {PENDING, WITHDRAW, APPROVED, CANCELED, CONFIRMED}
enum Status {PENDING, WITHDRAW, APPROVED, CANCELED, CONFIRMED, CONFIRMED_WITHDRAW}

struct Message {
bytes32 messageID;
Expand All @@ -24,6 +24,7 @@ contract DAIBridge is ValidatorsOperations {
event RevertMessage(bytes32 messageID, address sender, uint amount);
event WithdrawMessage(bytes32 MessageID, address recepient, bytes32 sender, uint amount);
event ApprovedRelayMessage(bytes32 messageID, address sender, bytes32 recipient, uint amount);
event ConfirmWithdrawMessage(bytes32 messageID, address sender, bytes32 recipient, uint amount);


mapping(bytes32 => Message) messages;
Expand Down Expand Up @@ -70,11 +71,16 @@ contract DAIBridge is ValidatorsOperations {
_;
}

modifier approvedMessage(bytes32 messageID) {
modifier approvedMessage(bytes32 messageID) {
require(messages[messageID].status == Status.APPROVED, "Message is not approved");
_;
}

modifier withdrawMessage(bytes32 messageID) {
require(messages[messageID].status == Status.WITHDRAW, "Message is not approved");
_;
}

function setTransfer(uint amount, bytes32 substrateAddress) public {
require(token.allowance(msg.sender, address(this)) >= amount, "contract is not allowed to this amount");
token.transferFrom(msg.sender, address(this), amount);
Expand Down Expand Up @@ -131,4 +137,12 @@ contract DAIBridge is ValidatorsOperations {
emit WithdrawMessage(messageID, recipient, sender, availableAmount);
}

/*
* Confirm Withdraw tranfer by message ID after approve from Substrate
*/
function confirmWithdrawTransfer(bytes32 messageID) public withdrawMessage(messageID) onlyManyValidators {
Message storage message = messages[messageID];
message.status = Status.CONFIRMED_WITHDRAW;
emit ConfirmWithdrawMessage(messageID, message.spender, message.substrateAddress, message.availableAmount);
}
}

0 comments on commit 5ba1690

Please sign in to comment.