Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/bokkypoobah/umswap

umswap - "Like WETH, but for ERC-721s"
https://github.com/bokkypoobah/umswap

erc20 erc721 pool smart-contract solidity swap

Last synced: 3 months ago
JSON representation

umswap - "Like WETH, but for ERC-721s"

Awesome Lists containing this project

README

        

# umswap - "Like WETH, but for ERC-721s"

Umswaps are subsets of ERC-721 NFT collections pooled into ERC-20 tokens.

Umswaps are created by UmswapFactory.

UI being built at [https://bokkypoobah.github.io/umswap/](https://bokkypoobah.github.io/umswap/).




## History

* 2022-07-16 [UmswapFactory 0.8.5 testing](deployed/UmswapFactory_0.8.5_0x9D6856A4CCef088dA9B6E8a7c476aE05BC7caA2E.sol) deployed to [0x9d6856a4ccef088da9b6e8a7c476ae05bc7caa2e](https://etherscan.io/address/0x9d6856a4ccef088da9b6e8a7c476ae05bc7caa2e#code)

* 2022-07-30 [UmswapFactory 0.8.6 testing](deployed/UmswapFactory_0.8.6_0x39D61eDC9E951C93A0A714c008006c5093992db3.sol) deployed to [0x39D61eDC9E951C93A0A714c008006c5093992db3](https://etherscan.io/address/0x39D61eDC9E951C93A0A714c008006c5093992db3#code)

* 2022-07-31 [UmswapFactory 0.8.7 testing](deployed/UmswapFactory_0.8.7_0xb9969521413D036eAb5Ff2095cDc31BF4600AF9e.sol) deployed to [0xb9969521413D036eAb5Ff2095cDc31BF4600AF9e](https://etherscan.io/address/0xb9969521413D036eAb5Ff2095cDc31BF4600AF9e#code)

* 2022-08-01 [UmswapFactory 0.8.8 testing](deployed/UmswapFactory_0.8.8_0x06cD34744eb3bE01808790Df7D1AeB63355b27Ea.sol) deployed to [0x06cD34744eb3bE01808790Df7D1AeB63355b27Ea](https://etherscan.io/address/0x06cD34744eb3bE01808790Df7D1AeB63355b27Ea#code)
* [Bug bounty](https://twitter.com/BokkyPooBah/status/1553875661248270337) offer on this contract
* Cancelled 2022-08-15 - new version

* 2022-08-15 [UmswapFactory 0.8.9 testing](deployed/UmswapFactory_0.8.9_0x0AE45D0a938f4F07F236e5f43ffB05E79ceE8268.sol]) deployed to [0x0AE45D0a938f4F07F236e5f43ffB05E79ceE8268](https://etherscan.io/address/0x0AE45D0a938f4F07F236e5f43ffB05E79ceE8268#code)
* [Bug bounty](https://twitter.com/BokkyPooBah/status/1553875661248270337) now on offer on this contract
* Cancelled 2022-09-28 - new version

* 2022-09-28 [UmswapFactory 0.9.0 testing](deployed/UmswapFactory_0.9.0_0x8f093895cD4C54eaB897C6377e1Bf85Fe5B4E948.sol]) deployed to [0x8f093895cD4C54eaB897C6377e1Bf85Fe5B4E948](https://etherscan.io/address/0x8f093895cD4C54eaB897C6377e1Bf85Fe5B4E948#code)
* [Bug bounty](https://twitter.com/BokkyPooBah/status/1553875661248270337) now on offer on this contract



## Umswap Functions

### Umswap Read Functions

#### allowance(tokenOwner, spender)

Standard [ERC-20](https://eips.ethereum.org/EIPS/eip-20) function.

```javascript
function allowance(address tokenOwner, address spender) override external view returns (uint remaining)
```


#### balanceOf(tokenOwner)

Standard [ERC-20](https://eips.ethereum.org/EIPS/eip-20) function.

```javascript
function balanceOf(address tokenOwner) override external view returns (uint balance)
```


#### decimals()

Standard [ERC-20](https://eips.ethereum.org/EIPS/eip-20) function. Set to 18 decimals.

```javascript
function decimals() override external view returns (uint8)
```


#### getInfo()

```javascript
function getInfo() public view returns (address _creator, string memory __symbol, string memory __name, uint[] memory _tokenIds, uint _swappedIn, uint _swappedOut, uint __totalSupply)
```


#### isValidTokenId(tokenId)

```javascript
function isValidTokenId(uint _tokenId) public view returns (bool)
```


#### name()

Standard [ERC-20](https://eips.ethereum.org/EIPS/eip-20) function.

```javascript
function name() override external view returns (string memory)
```


#### symbol()

Standard [ERC-20](https://eips.ethereum.org/EIPS/eip-20) function.

```javascript
function symbol() override external view returns (string memory)
```


#### totalSupply()

Standard [ERC-20](https://eips.ethereum.org/EIPS/eip-20) function.

```javascript
function totalSupply() override external view returns (uint)
```


### Umswap Write Functions

#### approve(spender, tokens)

Standard [ERC-20](https://eips.ethereum.org/EIPS/eip-20) function.

```javascript
function approve(address spender, uint tokens) override external returns (bool success)
```


#### receive()

Receive any tips in ETH.

```receive
receive() external payable
```


#### swap(inTokenIds, outTokenIds, integrator)

```javascript
function swap(uint[] calldata _inTokenIds, uint[] calldata _outTokenIds, address integrator) public payable reentrancyGuard
```


#### transfer(to, tokens)

Standard [ERC-20](https://eips.ethereum.org/EIPS/eip-20) function.

```javascript
function transfer(address to, uint tokens) override external returns (bool success)
```


#### transferFrom(from, to, tokens)

Standard [ERC-20](https://eips.ethereum.org/EIPS/eip-20) function.

```javascript
function transferFrom(address from, address to, uint tokens) override external returns (bool success)
```



## UmswapFactory Functions

### UmswapFactory Read Functions

#### isValidName

Is name valid? Name cannot start or end with spaces, or contain repeating spaces. Name must be between 1 and 48 characters in length. Valid characters are 0-9, A-Z, a-z, space, +, -, : .

```javascript
function isValidName(string memory str) public pure returns (bool)
```


#### getUmswapsLength

```javascript
function getUmswapsLength() public view returns (uint _length)
```


#### getUmswaps

```javascript
function getUmswaps(uint[] memory indices) public view returns (
Umswap[] memory _umswaps,
address[] memory _creators,
string[] memory _symbols,
string[] memory _names,
uint[][] memory _tokenIds,
uint[] memory _swappedIns,
uint[] memory _swappedOuts,
uint[] memory _totalSupplies
)
```


#### owner

Owner of UmswapFactory

```javascript
address public owner
```


#### umswaps

Array of child Umswap addresses

```javascript
Umswap[] public umswaps
```


### UmswapFactory Write Functions

#### newUmswap

```javascript
function newUmswap(IERC721Partial _collection, string calldata _name, uint[] calldata _tokenIds, address integrator)
```


#### receive

```javascript
receive() external payable
```


#### transferOwnership

```javascript
function transferOwnership(address _newOwner) public onlyOwner
```


#### withdraw

```javascript
function withdraw(address token, uint tokens, uint tokenId) public onlyOwner
```


## Testing

See [test/00_test_0.js](test/00_test_0.js) for the testing scripts and [testIt.out](testIt.out) for the results.


### UmswapFactory
* [ ] Owned
* [ ] Can only initialise once `AlreadyInitialised()`
* [ ] Transfer ownership
* [ ] Valid ownership transfer
* [ ] Invalid ownership transfer `NotOwner()`
* [ ] TipHandler
* [ ] Zero tips
* [ ] Non-zero tips
* [ ] `integrator` set to `address(0)`
* [ ] `integrator` set to `address(this)`
* [ ] `integrator` set to EOA/contract address/contract that rejects ETH payment
* [ ] CloneFactory
* [ ] Check
* [ ] UmswapFactory
* [ ] `newUmswap(...)`
* [ ] Collection set to EOA `NotERC721()`
* [ ] Collection set to non ERC-721 contract `NotERC721()`
* [ ] Invalid name `InvalidName()`
* [ ] TokenIds not sorted ascending `TokenIdsMustBeSortedWithNoDuplicates()`
* [ ] Duplicate set `DuplicateSet()`
* [ ] Receive ETH transfers
* [ ] Reject ERC-721 `safeTransferFrom(msg.sender, UmswapFactory, tokenId)` transfers
* [ ] Withdraw
* [ ] ETH
* [ ] ERC-20
* [ ] ERC-721
* [ ] Not owner `NotOwner()`

### Umswap
* [ ]
* [ ]
* [ ]

## Notes

npm install --save-dev hardhat
OpenZeppelin v4.7.0
npm install --save-dev @openzeppelin/test-helpers
npm install --save-dev @nomicfoundation/hardhat-toolbox