UNPKG

shadows-contract

Version:

The smart contracts which make up the Shadows system. (shadows.link)

48 lines (35 loc) 3.42 kB
# Shadows Shadows is a decentralized synthetic asset issuance protocol built on Substrate. The value of these synthetic assets is underpinned by DOWS, and as long as DOWS is locked in a smart contract, synthetic assets can be issued. Unique debt pool design mechanism. Trading of synthetic assets is essentially a transfer between debts. Smart contracts automatically execute the conversion of a synthetic asset to another synthetic asset without an order book, without counterparties, and without the problems of liquidity and trading slippage. ## DApps * https://reactor.shadows.link ## Usage and requirements ### For tests (in javascript) Install the dependencies for the project using npm ``` $ npm i ``` To run the tests: ``` $ npm test ``` ## Contracts - **ExchangeRates.sol:** A key value store (bytes4 -> uint) of currency exchange rates, all priced in USD. Understands the concept of whether a rate is stale (as in hasn't been updated frequently enough), and only allows a single annointed oracle address to do price updates. - **ExternStateToken.sol:** The concept of an ERC20 token which stores its allowances and balances outside of the contract for upgradability. - **FeePool.sol:** Understands fee information for Shadows. As users transact, their fees are kept in `0xfeefeefee...` and stored in xUSDs. Allows users to claim fees they're entitled to. - **Shadows.sol:** Has a list of Synths and understands issuance data for users to be able to mint and burn Synths. - **ShadowsEscrow.sol:** During the crowdsale, users were asked to escrow their Havvens to insulate against price shocks on the token. Users are able to unlock their DOWS on a vesting schedule. - **Depot.sol:** Allows users to exchange ETH for xUSD and DOWS (has not yet been updated for multicurrency). - **LimitedSetup.sol:** Some contracts have actions that should only be able to be performed during a specific limited setup period. After this period elapses, any functions using the `onlyDuringSetup` modifier should no longer be callable. - **Migrations.sol:** Truffle's migrations contract. - **Synth.sol:** Synth token contract which remits fees on transfers, and directs the Shadows contract to do exchanges when appropriate. - **SynthAirdropper.sol:** Used to optimise gas during our initial airdrop of Synth. - **Owned.sol:** Allows us to leverage the concept of a contract owner that is specially priviledged and can perform certain actions. - **Pausable.sol:** Implements the concept of a pause button on a contract. Methods that should be paused use a particular modifier. - **Proxy.sol:** Our proxy contracts which forward all calls they receive to their target. Events are always emitted at the proxy, not within the target, even if you call the target directly. - **Proxyable.sol:** Implemented on a contract so it can be the target of a proxy contract. - **SafeDecimalMath.sol:** Safe math + decimal math. Using `_dec` on an operation makes it operate "on decimals" by either dividing out the extra UNIT after a multiplication, or multiplying it in before a division. - **SelfDestructible.sol:** Allows an owner of a contract to set a self destruct timer on it, then once the timer has expired, to kill the contract with `selfdestruct`. - **State.sol:** Implements the concept of an associated contract which can be changed by the owner. - **TokenState.sol:** Holds approval and balance information for tokens.