编译器
0.6.12+commit.27d51765
文件 1 的 7:DSTokenAbstract.sol
pragma solidity >=0.5.12;
interface DSTokenAbstract {
function name() external view returns (bytes32);
function symbol() external view returns (bytes32);
function decimals() external view returns (uint256);
function totalSupply() external view returns (uint256);
function balanceOf(address) external view returns (uint256);
function transfer(address, uint256) external returns (bool);
function allowance(address, address) external view returns (uint256);
function approve(address, uint256) external returns (bool);
function approve(address) external returns (bool);
function transferFrom(address, address, uint256) external returns (bool);
function push(address, uint256) external;
function pull(address, uint256) external;
function move(address, address, uint256) external;
function mint(uint256) external;
function mint(address,uint) external;
function burn(uint256) external;
function burn(address,uint) external;
function setName(bytes32) external;
function authority() external view returns (address);
function owner() external view returns (address);
function setOwner(address) external;
function setAuthority(address) external;
}
文件 2 的 7:DaiAbstract.sol
pragma solidity >=0.5.12;
interface DaiAbstract {
function wards(address) external view returns (uint256);
function rely(address) external;
function deny(address) external;
function name() external view returns (string memory);
function symbol() external view returns (string memory);
function version() external view returns (string memory);
function decimals() external view returns (uint8);
function totalSupply() external view returns (uint256);
function balanceOf(address) external view returns (uint256);
function allowance(address, address) external view returns (uint256);
function nonces(address) external view returns (uint256);
function DOMAIN_SEPARATOR() external view returns (bytes32);
function PERMIT_TYPEHASH() external view returns (bytes32);
function transfer(address, uint256) external returns (bool);
function transferFrom(address, address, uint256) external returns (bool);
function mint(address, uint256) external;
function burn(address, uint256) external;
function approve(address, uint256) external returns (bool);
function push(address, uint256) external;
function pull(address, uint256) external;
function move(address, address, uint256) external;
function permit(address, address, uint256, uint256, bool, uint8, bytes32, bytes32) external;
}
文件 3 的 7:DaiJoinAbstract.sol
pragma solidity >=0.5.12;
interface DaiJoinAbstract {
function wards(address) external view returns (uint256);
function rely(address usr) external;
function deny(address usr) external;
function vat() external view returns (address);
function dai() external view returns (address);
function live() external view returns (uint256);
function cage() external;
function join(address, uint256) external;
function exit(address, uint256) external;
}
文件 4 的 7:GemJoinAbstract.sol
pragma solidity >=0.5.12;
interface GemJoinAbstract {
function wards(address) external view returns (uint256);
function rely(address) external;
function deny(address) external;
function vat() external view returns (address);
function ilk() external view returns (bytes32);
function gem() external view returns (address);
function dec() external view returns (uint256);
function live() external view returns (uint256);
function cage() external;
function join(address, uint256) external;
function exit(address, uint256) external;
}
文件 5 的 7:JugAbstract.sol
pragma solidity >=0.5.12;
interface JugAbstract {
function wards(address) external view returns (uint256);
function rely(address) external;
function deny(address) external;
function ilks(bytes32) external view returns (uint256, uint256);
function vat() external view returns (address);
function vow() external view returns (address);
function base() external view returns (uint256);
function init(bytes32) external;
function file(bytes32, bytes32, uint256) external;
function file(bytes32, uint256) external;
function file(bytes32, address) external;
function drip(bytes32) external returns (uint256);
}
文件 6 的 7:RwaUrn2.sol
pragma solidity 0.6.12;
import {VatAbstract} from "dss-interfaces/dss/VatAbstract.sol";
import {JugAbstract} from "dss-interfaces/dss/JugAbstract.sol";
import {DSTokenAbstract} from "dss-interfaces/dapp/DSTokenAbstract.sol";
import {GemJoinAbstract} from "dss-interfaces/dss/GemJoinAbstract.sol";
import {DaiJoinAbstract} from "dss-interfaces/dss/DaiJoinAbstract.sol";
import {DaiAbstract} from "dss-interfaces/dss/DaiAbstract.sol";
contract RwaUrn2 {
mapping(address => uint256) public wards;
mapping(address => uint256) public can;
VatAbstract public vat;
JugAbstract public jug;
GemJoinAbstract public gemJoin;
DaiJoinAbstract public daiJoin;
address public outputConduit;
event Rely(address indexed usr);
event Deny(address indexed usr);
event Hope(address indexed usr);
event Nope(address indexed usr);
event File(bytes32 indexed what, address data);
event Lock(address indexed usr, uint256 wad);
event Free(address indexed usr, uint256 wad);
event Draw(address indexed usr, uint256 wad);
event Wipe(address indexed usr, uint256 wad);
event Quit(address indexed usr, uint256 wad);
modifier auth() {
require(wards[msg.sender] == 1, "RwaUrn2/not-authorized");
_;
}
modifier operator() {
require(can[msg.sender] == 1, "RwaUrn2/not-operator");
_;
}
constructor(
address vat_,
address jug_,
address gemJoin_,
address daiJoin_,
address outputConduit_
) public {
require(outputConduit_ != address(0), "RwaUrn2/invalid-conduit");
vat = VatAbstract(vat_);
jug = JugAbstract(jug_);
gemJoin = GemJoinAbstract(gemJoin_);
daiJoin = DaiJoinAbstract(daiJoin_);
outputConduit = outputConduit_;
wards[msg.sender] = 1;
DSTokenAbstract(GemJoinAbstract(gemJoin_).gem()).approve(gemJoin_, type(uint256).max);
DaiAbstract(DaiJoinAbstract(daiJoin_).dai()).approve(daiJoin_, type(uint256).max);
VatAbstract(vat_).hope(daiJoin_);
emit Rely(msg.sender);
emit File("outputConduit", outputConduit_);
emit File("jug", jug_);
}
function rely(address usr) external auth {
wards[usr] = 1;
emit Rely(usr);
}
function deny(address usr) external auth {
wards[usr] = 0;
emit Deny(usr);
}
function hope(address usr) external auth {
can[usr] = 1;
emit Hope(usr);
}
function nope(address usr) external auth {
can[usr] = 0;
emit Nope(usr);
}
function file(bytes32 what, address data) external auth {
if (what == "outputConduit") {
require(data != address(0), "RwaUrn2/invalid-conduit");
outputConduit = data;
} else if (what == "jug") {
jug = JugAbstract(data);
} else {
revert("RwaUrn2/unrecognised-param");
}
emit File(what, data);
}
function lock(uint256 wad) external operator {
require(wad <= 2**255 - 1, "RwaUrn2/overflow");
DSTokenAbstract(gemJoin.gem()).transferFrom(msg.sender, address(this), wad);
gemJoin.join(address(this), wad);
vat.frob(gemJoin.ilk(), address(this), address(this), address(this), int256(wad), 0);
emit Lock(msg.sender, wad);
}
function free(uint256 wad) external operator {
require(wad <= 2**255, "RwaUrn2/overflow");
vat.frob(gemJoin.ilk(), address(this), address(this), address(this), -int256(wad), 0);
gemJoin.exit(msg.sender, wad);
emit Free(msg.sender, wad);
}
function draw(uint256 wad) external operator {
bytes32 ilk = gemJoin.ilk();
jug.drip(ilk);
(, uint256 rate, , , ) = vat.ilks(ilk);
uint256 dart = divup(rad(wad), rate);
require(dart <= 2**255 - 1, "RwaUrn2/overflow");
vat.frob(ilk, address(this), address(this), address(this), 0, int256(dart));
daiJoin.exit(outputConduit, wad);
emit Draw(msg.sender, wad);
}
function wipe(uint256 wad) external {
daiJoin.join(address(this), wad);
bytes32 ilk = gemJoin.ilk();
jug.drip(ilk);
(, uint256 rate, , , ) = vat.ilks(ilk);
uint256 dart = rad(wad) / rate;
require(dart <= 2**255, "RwaUrn2/overflow");
vat.frob(ilk, address(this), address(this), address(this), 0, -int256(dart));
emit Wipe(msg.sender, wad);
}
function quit() external {
require(can[msg.sender] == 1 || vat.live() == 0, "RwaUrn2/not-operator-or-still-live");
DSTokenAbstract dai = DSTokenAbstract(daiJoin.dai());
uint256 wad = dai.balanceOf(address(this));
dai.transfer(outputConduit, wad);
emit Quit(msg.sender, wad);
}
uint256 internal constant RAY = 10**27;
function add(uint256 x, uint256 y) internal pure returns (uint256 z) {
require((z = x + y) >= x, "Math/add-overflow");
}
function sub(uint256 x, uint256 y) internal pure returns (uint256 z) {
require((z = x - y) <= x, "Math/sub-overflow");
}
function mul(uint256 x, uint256 y) internal pure returns (uint256 z) {
require(y == 0 || (z = x * y) / y == x, "Math/mul-overflow");
}
function divup(uint256 x, uint256 y) internal pure returns (uint256 z) {
z = add(x, sub(y, 1)) / y;
}
function rad(uint256 wad) internal pure returns (uint256 z) {
return mul(wad, RAY);
}
}
文件 7 的 7:VatAbstract.sol
pragma solidity >=0.5.12;
interface VatAbstract {
function wards(address) external view returns (uint256);
function rely(address) external;
function deny(address) external;
function can(address, address) external view returns (uint256);
function hope(address) external;
function nope(address) external;
function ilks(bytes32) external view returns (uint256, uint256, uint256, uint256, uint256);
function urns(bytes32, address) external view returns (uint256, uint256);
function gem(bytes32, address) external view returns (uint256);
function dai(address) external view returns (uint256);
function sin(address) external view returns (uint256);
function debt() external view returns (uint256);
function vice() external view returns (uint256);
function Line() external view returns (uint256);
function live() external view returns (uint256);
function init(bytes32) external;
function file(bytes32, uint256) external;
function file(bytes32, bytes32, uint256) external;
function cage() external;
function slip(bytes32, address, int256) external;
function flux(bytes32, address, address, uint256) external;
function move(address, address, uint256) external;
function frob(bytes32, address, address, address, int256, int256) external;
function fork(bytes32, address, address, int256, int256) external;
function grab(bytes32, address, address, address, int256, int256) external;
function heal(uint256) external;
function suck(address, address, uint256) external;
function fold(bytes32, address, int256) external;
}
{
"compilationTarget": {
"lib/mip21-toolkit/src/urns/RwaUrn2.sol": "RwaUrn2"
},
"evmVersion": "istanbul",
"libraries": {
"ChecksummedAddress": "0xf880b93f25d9c528703adc403a56c1fdfb2e5900",
"SolidityTypeConversions": "0xf9e6d5084f70f814f1f03514e75c37a6b40f4936",
"Strings": "0x93688e1fa99e80d65dc3c07f69ff07198321056d"
},
"metadata": {
"bytecodeHash": "ipfs"
},
"optimizer": {
"enabled": false,
"runs": 200
},
"remappings": [
":clipper-mom/=lib/dss-exec-lib/lib/clipper-mom/src/",
":ds-auth/=lib/ds-token/lib/ds-auth/src/",
":ds-math/=lib/ds-math/src/",
":ds-note/=lib/ds-value/lib/ds-thing/lib/ds-note/src/",
":ds-pause/=lib/dss-gem-joins/lib/dss-deploy/lib/ds-pause/src/",
":ds-proxy/=lib/dss-exec-lib/lib/ds-proxy/src/",
":ds-stop/=lib/dss-exec-lib/lib/osm-mom/lib/osm/lib/ds-stop/src/",
":ds-test/=lib/ds-test/src/",
":ds-thing/=lib/ds-value/lib/ds-thing/src/",
":ds-token/=lib/ds-token/src/",
":ds-value/=lib/ds-value/src/",
":dss-auto-line/=lib/dss-exec-lib/lib/dss-auto-line/src/",
":dss-chain-log/=lib/mip21-toolkit/lib/dss-chain-log/src/",
":dss-deploy/=lib/dss-gem-joins/lib/dss-deploy/src/",
":dss-direct-deposit/=lib/dss-exec-lib/lib/dss-direct-deposit/src/",
":dss-exec-lib/=lib/dss-exec-lib/src/",
":dss-gem-joins/=lib/dss-gem-joins/src/",
":dss-interfaces/=lib/dss-interfaces/src/",
":dss-lerp/=lib/dss-exec-lib/lib/dss-lerp/src/",
":dss-psm/=lib/mip21-toolkit/lib/dss-psm/src/",
":dss/=lib/dss/src/",
":esm/=lib/dss-gem-joins/lib/dss-deploy/lib/esm/src/",
":flipper-mom/=lib/dss-exec-lib/lib/flipper-mom/src/",
":forge-std/=lib/forge-std/src/",
":forward-proxy/=lib/forward-proxy/src/",
":ilk-registry/=lib/mip21-toolkit/lib/ilk-registry/src/",
":median/=lib/dss-exec-lib/lib/median/src/",
":mip21-toolkit/=lib/mip21-toolkit/src/",
":mkr-authority/=lib/dss-exec-lib/lib/mkr-authority/src/",
":osm-mom/=lib/dss-exec-lib/lib/osm-mom/src/",
":osm/=lib/dss-exec-lib/lib/osm-mom/lib/osm/src/",
":univ2-lp-oracle/=lib/dss-exec-lib/lib/univ2-lp-oracle/src/"
]
}
[{"inputs":[{"internalType":"address","name":"vat_","type":"address"},{"internalType":"address","name":"jug_","type":"address"},{"internalType":"address","name":"gemJoin_","type":"address"},{"internalType":"address","name":"daiJoin_","type":"address"},{"internalType":"address","name":"outputConduit_","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"usr","type":"address"}],"name":"Deny","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"usr","type":"address"},{"indexed":false,"internalType":"uint256","name":"wad","type":"uint256"}],"name":"Draw","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"what","type":"bytes32"},{"indexed":false,"internalType":"address","name":"data","type":"address"}],"name":"File","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"usr","type":"address"},{"indexed":false,"internalType":"uint256","name":"wad","type":"uint256"}],"name":"Free","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"usr","type":"address"}],"name":"Hope","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"usr","type":"address"},{"indexed":false,"internalType":"uint256","name":"wad","type":"uint256"}],"name":"Lock","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"usr","type":"address"}],"name":"Nope","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"usr","type":"address"},{"indexed":false,"internalType":"uint256","name":"wad","type":"uint256"}],"name":"Quit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"usr","type":"address"}],"name":"Rely","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"usr","type":"address"},{"indexed":false,"internalType":"uint256","name":"wad","type":"uint256"}],"name":"Wipe","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"can","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"daiJoin","outputs":[{"internalType":"contract DaiJoinAbstract","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"usr","type":"address"}],"name":"deny","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"wad","type":"uint256"}],"name":"draw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"what","type":"bytes32"},{"internalType":"address","name":"data","type":"address"}],"name":"file","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"wad","type":"uint256"}],"name":"free","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"gemJoin","outputs":[{"internalType":"contract GemJoinAbstract","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"usr","type":"address"}],"name":"hope","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"jug","outputs":[{"internalType":"contract JugAbstract","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"wad","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"usr","type":"address"}],"name":"nope","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"outputConduit","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"quit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"usr","type":"address"}],"name":"rely","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vat","outputs":[{"internalType":"contract VatAbstract","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"wards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"wad","type":"uint256"}],"name":"wipe","outputs":[],"stateMutability":"nonpayable","type":"function"}]