Union Protocol (v2)
  • Introduction
  • Important Links
  • 🌐Protocol Overview
    • How Union Works
    • Plain English (Detailed)
    • Use Cases
    • v1->v2 changelog
    • FAQ
  • ⚖️Governance
    • UNION DAO
      • Community Delegates
      • Gaurdians & Multisigs
    • UNION Token
    • Governance Process
      • Technical Implementations
    • Glossary of Terms
  • 🔨Developers
    • Union Contracts Overview
    • Contract ABIs & Addresses
    • Core Components
      • UserManager
        • UserManagerERC20
        • UserManagerDAI
      • uToken
        • UDai
        • UErc20
      • AssetManager
      • Comptroller
      • MarketRegistry
      • InterestRateModel
      • PureTokenAdapter
      • AaveV3Adapter
    • Governance
      • UnionToken
        • ArbUnionWrapper
        • ArbUnion
        • OpUnion
      • Governor
      • Timelock
    • Union SDK
    • Union Data
      • Documentation
    • Peripheral & Fun Contracts
    • GraphQL Endpoints
  • 🚴User Guides
    • Becoming a Member
    • How Bridging Tokens Works
      • Bridge UNION token from Arbitrum to Ethereum
    • Voting & Delegation
      • Delegation from Gnosis
    • Vouching & Lending
  • 👩‍💻Developer Guides
    • In Progress
  • ⚠️Risk
    • Types of Risk
Powered by GitBook
On this page
  • Contracts
  • Quickstart
  • Installation

Was this helpful?

Edit on GitHub
  1. Developers

Union SDK

PreviousTimelockNextUnion Data

Last updated 1 year ago

Was this helpful?

A library to help developers build their own contracts that interact with Union protocol.

Contracts

- has the basic functions of Union member.

- a contract Union member that can borrower from other members.

- a contract Union member that can vouch for other members.

Quickstart

Installation

npm install @unioncredit/v1-sdk

Imports

import "@unioncredit/v1-sdk/contracts/BaseUnionMember.sol";
import "@unioncredit/v1-sdk/contracts/UnionVoucher.sol";
import "@unioncredit/v1-sdk/contracts/UnionBorrower.sol";

Example Borrower

An example implementation of a contract that is a Union member. Once registered, this contract can borrow DAI and use it to buy .

//SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import "@unioncredit/v1-sdk/contracts/UnionBorrower.sol";

/**
 * @notice A UnionMember that borrows DAI to go long on OSQTH
 */
contract SqueethWithFriends is UnionBorrower {
  address public dai;
  
  constructor(address _dai) {
    dai = _dai;
  }
  
  function borrowAndSqueeth(uint256 _amountInDai) external {
    _borrow(_amountInDai);
    _investInSqueeth(_amountInDai);
  }
  
  function sellAndRepay(uint _amountInSqueeth) external {
    _sellSqueeth(_amountInSqueeth);
    uint balance = IERC20(dai).balanceOf(address(this));
    _repayBorrow(balance);
  }
  
  function _investInSqueeth(uint256 _amountInDai) internal {
    // buy OSQTH with DAI
  }
  
  function _sellSqueeth(uint256 _amountInSqueeth) internal {
    // sell OSQTH for DAI
  }
}

Example Voucher

//SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import "@unioncredit/v1-sdk/contracts/UnionVoucher.sol";

/**
 * @notice A UnionMember that vouches for holders of frankfrank
 */
contract VouchForFrankFrank is UnionVoucher {
  uint256 public vouchAmount;
  IERC721 public frank;
  
  constructor(uint _vouchAmount, IERC721 _frank) {
    vouchAmount = _vouchAmount;
    frank = _frank;
  }
  
  function stake() external {
    uint balance = IERC20(dai).balanceOf(address(this));
    _stake(balance);
  }
  
  function vouchForFrankFrank(address holder) external {
    require(frank.balanceOf(holder) > 0, "!holder");
    _updateTrust(holder, vouchAmount);
  }
  
  function cancelPaperHands(address holder) external {
    require(frank.balanceOf(holder) <= 0, "!paper hands");
    _cancelVouch(holder);
  }
}

An example implementation of a contract that is a Union member. Once registered, this contract can vouch for holders.

🔨
BaseUnionMember
UnionBorrower
UnionVoucher
OSQTH
frankfrank