Untitled Diff

Created Diff never expires
The two files are identical
There is no difference to show between these two files
0 removals
62 lines
0 additions
62 lines
// SPDX-License-Identifier: AGPL-3.0-or-later
// SPDX-License-Identifier: AGPL-3.0-or-later
// Copyright (C) 2021 Dai Foundation
// Copyright (C) 2021 Dai Foundation
// This program is free software: you can redistribute it and/or modify
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published by
// it under the terms of the GNU Affero General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
// (at your option) any later version.
//
//
// This program is distributed in the hope that it will be useful,
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
// GNU Affero General Public License for more details.
//
//
// You should have received a copy of the GNU Affero General Public License
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see <https://www.gnu.org/licenses/>.
// along with this program. If not, see <https://www.gnu.org/licenses/>.


pragma solidity ^0.6.11;
pragma solidity ^0.6.11;


interface ApproveLike {
interface ApproveLike {
function approve(address, uint256) external;
function approve(address, uint256) external;
}
}


// Escrow funds on L1, manage approval rights
// Escrow funds on L1, manage approval rights


contract L1Escrow {
contract L1Escrow {
// --- Auth ---
// --- Auth ---
mapping(address => uint256) public wards;
mapping(address => uint256) public wards;


function rely(address usr) external auth {
function rely(address usr) external auth {
wards[usr] = 1;
wards[usr] = 1;
emit Rely(usr);
emit Rely(usr);
}
}


function deny(address usr) external auth {
function deny(address usr) external auth {
wards[usr] = 0;
wards[usr] = 0;
emit Deny(usr);
emit Deny(usr);
}
}


modifier auth() {
modifier auth() {
require(wards[msg.sender] == 1, "L1Escrow/not-authorized");
require(wards[msg.sender] == 1, "L1Escrow/not-authorized");
_;
_;
}
}


event Rely(address indexed usr);
event Rely(address indexed usr);
event Deny(address indexed usr);
event Deny(address indexed usr);


event Approve(address indexed token, address indexed spender, uint256 value);
event Approve(address indexed token, address indexed spender, uint256 value);


constructor() public {
constructor() public {
wards[msg.sender] = 1;
wards[msg.sender] = 1;
emit Rely(msg.sender);
emit Rely(msg.sender);
}
}


function approve(
function approve(
address token,
address token,
address spender,
address spender,
uint256 value
uint256 value
) external auth {
) external auth {
emit Approve(token, spender, value);
emit Approve(token, spender, value);


ApproveLike(token).approve(spender, value);
ApproveLike(token).approve(spender, value);
}
}
}
}