SpartanDev: 23/08/21 – 29/08/21
Happy first birthday to Spartan Protocol! Automated testing and DApp development continues towards aligning with the new contracts
Summary
Happy Birthday Spartans !!!
Thankyou for lending your support and determination to the shield-wall, it goes along way for a community driven project. Safe to say its been a pretty wild ride so far, we hope you have your seatbelts fastened because things are about to speed up.
Automated testing is in full swing, putting the protocol through the grinder and helping streamline processes. Whilst this has been happening the remaining contributors have been refining the DApp ready to take full use of V2 contracts. Onwards.
Read the full year in review here.
Wednesday feeBurn Update
Spartan Socials — Twitter
Top Impressions:
Top Engagement:
Top Community Mention:
SpartanSocials — Medium
SpartanSocials — Telegram
Contributor’s Focus
CodeArena Contest
- COMPLETED ✅ — triage and prioritise the feedback submitted from the CodeArena wardens during the contest to prepare for the judges
- IN PROGRESS — work through the post-contest tasks with the C4 judges & team for the eventual allocation of awards to security wardens
- IN PROGRESS — communicate with security wardens to clarify/expand on feedback
Once these tasks above are completed, the CodeArena report will be published, and Spartans will be able to review the final list of findings to understand how the changes that have already been implemented into Spartan Protocol (in the PostC5 repository) fit into this greater picture.
As discussed previously, we continue to build and refine code in parallel with the CodeArena post-contest actions.
SPARTA V2 (Token)
- COMPLETED (& ONGOING) — Work with DEXs & aggregators to ensure up-to-date information on the new SPARTA token (retiring the previous contract address) (1inch, PancakeSwap etc.)
- COMPLETED (& ONGOING) — Work with token-tracking informational websites to ensure new token info is up-to-date (BSCscan, CoinGecko, CoinMarketCap etc.)
SpartanContracts
- COMPLETED ✅ — Sort and prioritise all CodeArena submissions into contract scopes along with tags based on ‘actionable’ or ‘discussion points’
- COMPLETED ✅ (only minor changes as required from now on) — Implementing refinements to contracts to address C4 & contributor feedback since the C4 contest code-freeze
- IN PROGRESS — Rebuild automated testing
- Deploy updated V2 contracts to BSC testnet for at least 1 week of community stress testing
- Deploy completed V2 contracts to BSC mainnet
DAppV2
- COMPLETED (& ONGOING) — Set up a reliable index of history scoped to contracts (use this for positions page etc)
- IN PROGRESS — Update the DApp to suit the contract changes
- IN PROGRESS — Use the new testnet subgraph to build a more lightweight positions page for V2
After Mainnet
- Enable Bond allocations to replenish TVL into the V2 pools
- March onwards with our original goals of building the decentralised, yield-generating synthetics protocol on Binance Smart Chain
GitHub Activity — SpartanContractsV2 (PostC5 Branch)
contracts/BondVault.sol
- Updated comments
contracts/Dao.sol
- Updated comments
- Changed nested mappings to private and created getters/helpers instead
- Removed transfer require() from moveBASEBalance()
contracts/DaoVault.sol
- Updated comments
- Removed old mappings
- Added purgeDeployer()
- Fixed getMemberPoolDepositTime() helper (was pointing to wrong mapping)
contracts/Pool.sol
- Updated comments
- Added PoolFactory to onlyPROTOCOL() modifier
- Added Router to onlyDAO() modifier
- Changed baseCap to WEI in constructor
- Changes to safetyCheck()
- Changed to run every time even if the pool’s freeze status is already true
- Now we check the rate every time but *only* update the oldRate if an hour has passed and the pool’s status is not frozen
- Added extra logic for if the pool is frozen to automatically handle the freeze status
- If the pool is frozen but the ratio is back at safe levels; flick frozen status to false (for the pool; not global)
- If the pool is frozen and 1 hour has passed; have the ratio of the pool come towards the new rate at a 25% weighted rate. ie. (currentRate + (oldRate * 3) ) / 4
contracts/Reserve.sol
- Added a freezeTime variable to potentially handle auto-unfreeze
contracts/Router.sol
- Updated comments
- Removed feeAllocation variable and assignment (no longer used; was apart of older more complex dividend logic)
- Added purgeDeployer()
- addLiquidityAsymForMember() — changed back to use the pool’s swap function instead of interfacing with the Router’s swap function (this also removes the dividend component)
- zapLiquidity() — removed dividend logic (save gas)
- swapSynthToAsset() — moved the swapPool requires inside the else {} statement to avoid wasted logic/gas
- _addDividend() — bypass dividend if emissions are off
- currentPoolRevenue() — removed helper (use mapping instead)
- pastPoolRevenue() — removed helper (use mapping instead)
- Removed unneeded require() for transfers between contracts:
- removeLiquidityExactAsym()
- zapLiquidity()
- swapAssetToSynth()
- _handleTransferIn()
8. Added require() for globalFreeze to be false after the safetyCheck
- swapAssetToSynth()
- swapSynthToAsset()
contracts/poolFactory.sol
- Updated comments
- Added require() to prevent a SPARTAv2:SPARTAv2 pool
- _handleTransferIn() — removed unneeded require() for transfers between contracts
contracts/synthVault.sol
- Changed non-nested mappings to public and removed helper
test/1_pool.js
Recreated automated tests:
- Create pools — BNB & TOKEN
- Add liquidity Symmetrical — BNB, TOKEN & SPARTA
- Add liquidity Asymmetrical — BNB, TOKEN & SPARTA
- Remove Liquidity Symmetrical — BNB, TOKEN & SPARTA
- Remove Liquidity Asymmetrical — BNB, TOKEN & SPARTA
test/2_swap.js
Recreated automated tests:
- Swap SPARTA to BNB
- Swap BNB to SPARTA
- Swap SPARTA for TOKEN
- Swap TOKEN for SPARTA
- Curate pools
- ZapLiquidity
- Create Synths
- Swap SPARTA to TOKENs
- Swap BNB for BNBs
- Swap BNBs to SPARTA
- Swap TOKEN for TOKENs
- Swap TOKENs to TOKEN
test/math.js
- Updated math to suit contract changes
test/utils.js
- Updated utils to suit contract changes
GitHub Activity — SpartanDAppV2 (V2TN Branch)
package.json
- Updated bootstrap to v5.1.0
- Updated react-bootstrap to v2.0.0-beta.5
*.scss
- Fixed font-family mismatches; pointed most of them to the fonts stated in the variables file
- Reduced some card/input padding
src/components/Supply/Supply.js
- Updated layout
- Added icons and info tooltips
- Added external-link to tokenomics info (documentation)
src/components/Tooltip/tooltip.js
Added in tooltips for:
- New pool / initializing period info
- New pool ratio confirm info
- New pool fee confirm info
src/components/WalletSelect/WalletSelect.js
- Realigned the header section; moved copy button up next to wallet address
src/components/WalletSelect/walletTypes.js
- Reduced size of wallet selections and icons (need to fix colours and fine-tune the icon sizes here still)
src/routes.js
- Changed ‘CodeArena’ page to ‘Donate’ page
src/store/pool/actions.js
- Updated redux actions to suit the changes to the Pool contracts
src/utils/web3Dao.js
- Created new utils file specifically for simulating the Dao contract functions maths off-chain
- Recreated just the bond calculations for now with all the returns we might need for UI
src/utils/web3Router.js
- Created new utils file specifically for simulating the Router contract functions maths off-chain
- Recreated all the math/calculations with lots of helpful returns as may be required throughout the dapp
- Used this to refactor out a lot of the messy logic inside the views/components
src/utils/web3Utils.js
- Ripped out irrelevant maths/logic
- Rewrote the maths/calcs to handle all the Utils contract functions off-chain
- minusFeeBurn() — added function to convert a wei input to its value minus the calculated feeBurn for that value transfer. Used to refactor throughout the codebase
- convertTimeUnits() — added function to convert seconds to the most readable unit (days, hours, minutes, seconds) along with another string-return for the unit’s label. Used to refactor throughout
- getTimeUntil() — added function to calculate seconds to then hand to convertTimeUnits() and get a countdown of time until a timestamp
- getTimeSince() — added function to calculate seconds to then hand to convertTimeUnits() and get an amount of time passed since a timestamp
src/views/pages/Dao/ProposalItem.js
- Refactored all time calculations to use the new Utils functions above
src/views/pages/Donate/Overview.js
- Converted CodeArena donation page to general Donation page
- Updated all the text on the page with more current placeholder text
- This page will eventually be repurposed with a tile per ‘expense/budget/project’ which people can choose to specifically donate to/for
src/views/pages/Home/NewPool.js
- Cleaned up the input-label alignments
- Added confirm switch for the new-pool-fee (1% LP token fee for whoever creates the pool to reduce spam and protect pools from super-edge-case rounding/infinite ratio attacks/bugs)
src/views/pages/Home/Overview.js
- Combined page header/breadcrumb section with an info/summary section (this will need a community contributor to pad out the info/icons here)
- Created new tabs for ‘type’ of pool; Curated, Standard & New
- Curated = pools that have been curated by the DAO to be enabled for dividends, vaultWeight, synths & DAO proposal weight
- Standard = a normal AMM pool that has been live for more that 7 days.
- New = a normal pool that was deployed less than 7 days ago. *Liquidity can not be removed from ‘New’ pools until 7 days have passed* other than that they act as normal pools (add liquidity and swap)
- This page is ready for UI contributors to clean up/style and add text as required
src/views/pages/Pools/Components/TxnModal.js
- Added modal to the AddLiq page to confirm txn inputs/outputs
- Handle new pools; show a switch to confirm you understand liquidity will be locked in a ‘new’ pool until its at least 7 days old
src/views/pages/Pools/LiqAdd.js
- Ripped out all the old maths and pointed to the new maths in web3Router (see above)
- Combined some elements to make more compact
src/views/pages/Pools/LiqBond.js
- Ripped out all the old maths and pointed to the new maths in web3Router / web3Bond (see above)
- Combined some elements to make more compact
src/views/pages/Pools/LiqRemove.js
- Ripped out all the old maths and pointed to the new maths in web3Router (see above)
- Combined some elements to make more compact
- Added dividend estimation logic to know what dividends to expect before performing the transaction
src/views/pages/Swap/Swap.js
- Ripped out all the old maths and pointed to the new maths in web3Router (see above)
- Combined some elements to make more compact
- Added dividend estimation logic to know what dividends to expect before performing the transaction
src/views/pages/Swap/SwapPair.js
- Combined some elements to make it more compact (See above screenshot including the new layout
src/views/pages/Synths/Overview.js
- Ripped out all the old maths and pointed to the new maths in web3Router (see above)
- Combined some elements to make more compact
- Added dividend estimation logic to know what dividends to expect before performing the transaction
src/views/pages/Vault/SynthVault.js
- Refactored all time calculations to use the new Utils functions above
- Added function to build an array of claimable synth addresses to hand the new havestAll() function (calculate the array off-chain and hand to the adjusted contract function to save a lot of gas)
src/views/pages/Bond/Bond.js
- Added function to build an array of claimable Bond positions to hand the new claimAll() function (calculate the array off-chain and hand to the adjusted contract function to save a lot of gas)
GitHub Activity — Resources
- Community-contributed SpartanProtocolV2 mainnet teaser trailer
Project Information
Official Links
- Website: https://spartanprotocol.org/
- DApp: https://dapp.spartanprotocol.org/
- GitBook (Docs): https://docs.spartanprotocol.org
- GitHub: https://github.com/spartan-protocol
Community Contribution
Spartan Protocol is at its core, a community-driven and led project. In this vein, the more contributors the better. There is a great opportunity for community members to contribute by making LP reward analysis tools, etc.
Recently, community members have been graciously funnelling in to contribute to explainer articles, ideas and even $SPARTA donations to support the growth of the platform.
Engage with the community and contributors
Where to find out about all the latest updates or suggest improvements — get involved.
- Medium: https://medium.com/spartanprotocol
- Twitter: https://twitter.com/spartanprotocol
- Telegram Community: https://t.me/spartanprotocolorg
- Telegram Announcements: https://t.me/spartanprotocolann
- Community-Built Discord: https://discord.gg/wQggvntnGk