Warning! Contract bytecode has been changed and doesn't match the verified one. Therefore, interaction with this smart contract may be risky.
- Contract name:
- DaiJoin
- Optimization enabled
- true
- Compiler version
- v0.6.12+commit.27d51765
- Optimization runs
- 200
- EVM Version
- default
- Verified at
- 2025-04-18T13:56:56.182162Z
Constructor Arguments
0x00000000000000000000000016ca93f2f65d5495c874109fff38d11d39850b67000000000000000000000000c40c58afff0a8908c392a752f4951eff381aa0b2
Arg [0] (address) : 0x16ca93f2f65d5495c874109fff38d11d39850b67
Arg [1] (address) : 0xc40c58afff0a8908c392a752f4951eff381aa0b2
Contract source code
// SPDX-License-Identifier: AGPL-3.0-or-later
/// join.sol -- Basic token adapters
pragma solidity ^0.6.12;
interface GemLike {
function decimals() external view returns (uint);
function transfer(address,uint) external returns (bool);
function transferFrom(address,address,uint) external returns (bool);
}
interface DSTokenLike {
function mint(address,uint) external;
function burn(address,uint) external;
}
interface VatLike {
function slip(bytes32,address,int) external;
function move(address,address,uint) external;
}
contract GemJoin {
// --- Auth ---
mapping (address => uint) public wards;
function rely(address usr) external auth {
wards[usr] = 1;
emit Rely(usr);
}
function deny(address usr) external auth {
wards[usr] = 0;
emit Deny(usr);
}
modifier auth {
require(wards[msg.sender] == 1, "GemJoin/not-authorized");
_;
}
VatLike public vat; // CDP Engine
bytes32 public ilk; // Collateral Type
GemLike public gem;
uint public dec;
uint public live; // Active Flag
// Events
event Rely(address indexed usr);
event Deny(address indexed usr);
event Join(address indexed usr, uint256 wad);
event Exit(address indexed usr, uint256 wad);
event Cage();
constructor(address vat_, bytes32 ilk_, address gem_) public {
wards[msg.sender] = 1;
live = 1;
vat = VatLike(vat_);
ilk = ilk_;
gem = GemLike(gem_);
dec = gem.decimals();
emit Rely(msg.sender);
}
function cage() external auth {
live = 0;
emit Cage();
}
function join(address usr, uint wad) external {
require(live == 1, "GemJoin/not-live");
require(int(wad) >= 0, "GemJoin/overflow");
vat.slip(ilk, usr, int(wad));
require(gem.transferFrom(msg.sender, address(this), wad), "GemJoin/failed-transfer");
emit Join(usr, wad);
}
function exit(address usr, uint wad) external {
require(live == 1, "GemJoin/not-live"); // Added live check
require(wad <= 2 ** 255, "GemJoin/overflow");
vat.slip(ilk, msg.sender, -int(wad));
require(gem.transfer(usr, wad), "GemJoin/failed-transfer");
emit Exit(usr, wad);
}
}
contract DaiJoin {
// --- Auth ---
mapping (address => uint) public wards;
function rely(address usr) external auth {
wards[usr] = 1;
emit Rely(usr);
}
function deny(address usr) external auth {
wards[usr] = 0;
emit Deny(usr);
}
modifier auth {
require(wards[msg.sender] == 1, "DaiJoin/not-authorized");
_;
}
VatLike public vat; // CDP Engine
DSTokenLike public dai; // Stablecoin Token
uint public live; // Active Flag
// Events
event Rely(address indexed usr);
event Deny(address indexed usr);
event Join(address indexed usr, uint256 wad);
event Exit(address indexed usr, uint256 wad);
event Cage();
constructor(address vat_, address dai_) public {
wards[msg.sender] = 1;
live = 1;
vat = VatLike(vat_);
dai = DSTokenLike(dai_);
emit Rely(msg.sender);
}
function cage() external auth {
live = 0;
emit Cage();
}
uint constant ONE = 10 ** 27;
function mul(uint x, uint y) internal pure returns (uint z) {
require(y == 0 || (z = x * y) / y == x);
}
function join(address usr, uint wad) external {
require(live == 1, "DaiJoin/not-live"); // Added live check
vat.move(address(this), usr, mul(ONE, wad));
dai.burn(msg.sender, wad);
emit Join(usr, wad);
}
function exit(address usr, uint wad) external {
require(live == 1, "DaiJoin/not-live");
vat.move(msg.sender, address(this), mul(ONE, wad));
dai.mint(usr, wad);
emit Exit(usr, wad);
}
}
Contract ABI
[{"type":"constructor","stateMutability":"nonpayable","inputs":[{"type":"address","name":"vat_","internalType":"address"},{"type":"address","name":"dai_","internalType":"address"}]},{"type":"event","name":"Cage","inputs":[],"anonymous":false},{"type":"event","name":"Deny","inputs":[{"type":"address","name":"usr","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"Exit","inputs":[{"type":"address","name":"usr","internalType":"address","indexed":true},{"type":"uint256","name":"wad","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"Join","inputs":[{"type":"address","name":"usr","internalType":"address","indexed":true},{"type":"uint256","name":"wad","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"Rely","inputs":[{"type":"address","name":"usr","internalType":"address","indexed":true}],"anonymous":false},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"cage","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"contract DSTokenLike"}],"name":"dai","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"deny","inputs":[{"type":"address","name":"usr","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"exit","inputs":[{"type":"address","name":"usr","internalType":"address"},{"type":"uint256","name":"wad","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"join","inputs":[{"type":"address","name":"usr","internalType":"address"},{"type":"uint256","name":"wad","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"live","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"rely","inputs":[{"type":"address","name":"usr","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"contract VatLike"}],"name":"vat","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"wards","inputs":[{"type":"address","name":"","internalType":"address"}]}]
Contract Creation Code
0x608060405234801561001057600080fd5b506040516107f73803806107f78339818101604052604081101561003357600080fd5b508051602091820151336000818152938490526040808520600190819055600381905580546001600160a01b038087166001600160a01b0319928316179092556002805492861692909116919091179055519293919290917fdd0e34038ac38b2a1ce960229778ac48a8719bc900b6c4f8d0475c6e8b385a6091a25050610738806100bf6000396000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c8063957aa58c11610066578063957aa58c146101185780639c52a7f114610132578063bf353dbb14610158578063ef693bed1461017e578063f4b9fa75146101aa57610093565b806336569e77146100985780633b4da69f146100bc57806365fae35e146100ea5780636924500914610110575b600080fd5b6100a06101b2565b604080516001600160a01b039092168252519081900360200190f35b6100e8600480360360408110156100d257600080fd5b506001600160a01b0381351690602001356101c1565b005b6100e86004803603602081101561010057600080fd5b50356001600160a01b0316610350565b6100e86103f2565b61012061047f565b60408051918252519081900360200190f35b6100e86004803603602081101561014857600080fd5b50356001600160a01b0316610485565b6101206004803603602081101561016e57600080fd5b50356001600160a01b0316610526565b6100e86004803603604081101561019457600080fd5b506001600160a01b038135169060200135610538565b6100a06106c9565b6001546001600160a01b031681565b60035460011461020b576040805162461bcd60e51b815260206004820152601060248201526f4461694a6f696e2f6e6f742d6c69766560801b604482015290519081900360640190fd5b6001546001600160a01b031663bb35783b30846102346b033b2e3c9fd0803ce8000000866106d8565b6040518463ffffffff1660e01b815260040180846001600160a01b03168152602001836001600160a01b031681526020018281526020019350505050600060405180830381600087803b15801561028a57600080fd5b505af115801561029e573d6000803e3d6000fd5b505060025460408051632770a7eb60e21b81523360048201526024810186905290516001600160a01b039092169350639dc29fac925060448082019260009290919082900301818387803b1580156102f557600080fd5b505af1158015610309573d6000803e3d6000fd5b50506040805184815290516001600160a01b03861693507fb4e09949657f21548b58afe74e7b86cd2295da5ff1598ae1e5faecb1cf19ca9592509081900360200190a25050565b336000908152602081905260409020546001146103ad576040805162461bcd60e51b815260206004820152601660248201527511185a529bda5b8bdb9bdd0b585d5d1a1bdc9a5e995960521b604482015290519081900360640190fd5b6001600160a01b03811660008181526020819052604080822060019055517fdd0e34038ac38b2a1ce960229778ac48a8719bc900b6c4f8d0475c6e8b385a609190a250565b3360009081526020819052604090205460011461044f576040805162461bcd60e51b815260206004820152601660248201527511185a529bda5b8bdb9bdd0b585d5d1a1bdc9a5e995960521b604482015290519081900360640190fd5b600060038190556040517f2308ed18a14e800c39b86eb6ea43270105955ca385b603b64eca89f98ae8fbda9190a1565b60035481565b336000908152602081905260409020546001146104e2576040805162461bcd60e51b815260206004820152601660248201527511185a529bda5b8bdb9bdd0b585d5d1a1bdc9a5e995960521b604482015290519081900360640190fd5b6001600160a01b038116600081815260208190526040808220829055517f184450df2e323acec0ed3b5c7531b81f9b4cdef7914dfd4c0a4317416bb5251b9190a250565b60006020819052908152604090205481565b600354600114610582576040805162461bcd60e51b815260206004820152601060248201526f4461694a6f696e2f6e6f742d6c69766560801b604482015290519081900360640190fd5b6001546001600160a01b031663bb35783b33306105ab6b033b2e3c9fd0803ce8000000866106d8565b6040518463ffffffff1660e01b815260040180846001600160a01b03168152602001836001600160a01b031681526020018281526020019350505050600060405180830381600087803b15801561060157600080fd5b505af1158015610615573d6000803e3d6000fd5b5050600254604080516340c10f1960e01b81526001600160a01b0387811660048301526024820187905291519190921693506340c10f199250604480830192600092919082900301818387803b15801561066e57600080fd5b505af1158015610682573d6000803e3d6000fd5b50506040805184815290516001600160a01b03861693507f22d324652c93739755cf4581508b60875ebdd78c20c0cff5cf8e23452b29963192509081900360200190a25050565b6002546001600160a01b031681565b60008115806106f3575050808202828282816106f057fe5b04145b6106fc57600080fd5b9291505056fea26469706673582212204e415ccaae7f57d2693d75ff5e591093d681c2330e7c20b33bc45d3208fcf39d64736f6c634300060c003300000000000000000000000016ca93f2f65d5495c874109fff38d11d39850b67000000000000000000000000c40c58afff0a8908c392a752f4951eff381aa0b2
Deployed ByteCode
0x608060405234801561001057600080fd5b50600436106100935760003560e01c8063957aa58c11610066578063957aa58c146101185780639c52a7f114610132578063bf353dbb14610158578063ef693bed1461017e578063f4b9fa75146101aa57610093565b806336569e77146100985780633b4da69f146100bc57806365fae35e146100ea5780636924500914610110575b600080fd5b6100a06101b2565b604080516001600160a01b039092168252519081900360200190f35b6100e8600480360360408110156100d257600080fd5b506001600160a01b0381351690602001356101c1565b005b6100e86004803603602081101561010057600080fd5b50356001600160a01b0316610350565b6100e86103f2565b61012061047f565b60408051918252519081900360200190f35b6100e86004803603602081101561014857600080fd5b50356001600160a01b0316610485565b6101206004803603602081101561016e57600080fd5b50356001600160a01b0316610526565b6100e86004803603604081101561019457600080fd5b506001600160a01b038135169060200135610538565b6100a06106c9565b6001546001600160a01b031681565b60035460011461020b576040805162461bcd60e51b815260206004820152601060248201526f4461694a6f696e2f6e6f742d6c69766560801b604482015290519081900360640190fd5b6001546001600160a01b031663bb35783b30846102346b033b2e3c9fd0803ce8000000866106d8565b6040518463ffffffff1660e01b815260040180846001600160a01b03168152602001836001600160a01b031681526020018281526020019350505050600060405180830381600087803b15801561028a57600080fd5b505af115801561029e573d6000803e3d6000fd5b505060025460408051632770a7eb60e21b81523360048201526024810186905290516001600160a01b039092169350639dc29fac925060448082019260009290919082900301818387803b1580156102f557600080fd5b505af1158015610309573d6000803e3d6000fd5b50506040805184815290516001600160a01b03861693507fb4e09949657f21548b58afe74e7b86cd2295da5ff1598ae1e5faecb1cf19ca9592509081900360200190a25050565b336000908152602081905260409020546001146103ad576040805162461bcd60e51b815260206004820152601660248201527511185a529bda5b8bdb9bdd0b585d5d1a1bdc9a5e995960521b604482015290519081900360640190fd5b6001600160a01b03811660008181526020819052604080822060019055517fdd0e34038ac38b2a1ce960229778ac48a8719bc900b6c4f8d0475c6e8b385a609190a250565b3360009081526020819052604090205460011461044f576040805162461bcd60e51b815260206004820152601660248201527511185a529bda5b8bdb9bdd0b585d5d1a1bdc9a5e995960521b604482015290519081900360640190fd5b600060038190556040517f2308ed18a14e800c39b86eb6ea43270105955ca385b603b64eca89f98ae8fbda9190a1565b60035481565b336000908152602081905260409020546001146104e2576040805162461bcd60e51b815260206004820152601660248201527511185a529bda5b8bdb9bdd0b585d5d1a1bdc9a5e995960521b604482015290519081900360640190fd5b6001600160a01b038116600081815260208190526040808220829055517f184450df2e323acec0ed3b5c7531b81f9b4cdef7914dfd4c0a4317416bb5251b9190a250565b60006020819052908152604090205481565b600354600114610582576040805162461bcd60e51b815260206004820152601060248201526f4461694a6f696e2f6e6f742d6c69766560801b604482015290519081900360640190fd5b6001546001600160a01b031663bb35783b33306105ab6b033b2e3c9fd0803ce8000000866106d8565b6040518463ffffffff1660e01b815260040180846001600160a01b03168152602001836001600160a01b031681526020018281526020019350505050600060405180830381600087803b15801561060157600080fd5b505af1158015610615573d6000803e3d6000fd5b5050600254604080516340c10f1960e01b81526001600160a01b0387811660048301526024820187905291519190921693506340c10f199250604480830192600092919082900301818387803b15801561066e57600080fd5b505af1158015610682573d6000803e3d6000fd5b50506040805184815290516001600160a01b03861693507f22d324652c93739755cf4581508b60875ebdd78c20c0cff5cf8e23452b29963192509081900360200190a25050565b6002546001600160a01b031681565b60008115806106f3575050808202828282816106f057fe5b04145b6106fc57600080fd5b9291505056fea26469706673582212204e415ccaae7f57d2693d75ff5e591093d681c2330e7c20b33bc45d3208fcf39d64736f6c634300060c0033