Overview

Interfaces Supported

ERC-20

Baal shares and loot are pausable, fungible tokens. Non-conformant tokens can also be handled by Baal by implementing safeTransfer/From().

EIP-2612

Baal shares support EIP-712-style approvals by implementing permit(), allowing pulls in a single transaction and 'gas' to be paid in tokens (including Baal shares), abstracting the need to hold ETH.

eip-1167

Minimal Proxy Contract

GNosis Zodiac

A composable design philosophy for DAOs, Zodiac is a collection of tools built according to an open standard

SharesERC20.sol

  • ERC20 openzeppelin/contracts/token/ERC20/ERC20.sol
  • clone proxy
  • Ownable by baal
  • Initializable openzeppelin/contracts/proxy/utils/Initializable.sol - for setup by baal
  • delegation management similar to comp
  • before transfer override: Allows transfers if msg.sender is Baal which enables minting and burning, move delegates and self delegate

External delegation functions

function delegate(address delegatee) external
function delegateBySig(
address delegatee,
uint256 nonce,
uint256 deadline,
bytes calldata signature
) external

Events

event DelegateVotesChanged(
address indexed delegate,
uint previousBalance,
uint newBalance
);
event DelegateChanged(
address indexed delegator,
address indexed fromDelegate,
address indexed toDelegate
);
event Transfer(
address indexed from,
address indexed to,
uint256 amount
);

LootToken.sol

  • ERC20 openzeppelin/contracts/token/ERC20/ERC20.sol
  • Ownable by baal
  • minimal clone proxy eip-1167
  • Initializable openzeppelin/contracts/proxy/utils/Initializable.sol - for setup by baal
  • before transfer override: Allows transfers if msg.sender is Baal which enables minting and burning