Otterspace’s EIP-4973-compliant non-transferable badge protocol helps DAOs create better incentive systems, automate permissions and enable non-financialized governance ✨ 🦦 🚀
- Install Foundry
- Requires Node
v16and Solidity0.8.16
git clone git@github.com:otterspace-xyz/otterspace-contracts.git
git submodule update --init
yarn
forge install
forge build
forge test
npx hardhat typechain
npx hardhat testLive contracts on Goerli:
We're publishing this repository at @otterspace-xyz/contracts
npm i @otterspace-xyz/contractsWith node >= 16, contract ABIs can be imported into JavaScript applications as npm dependencies as follows:
Badges ABI
import Badges from '@otterspace-xyz/contracts/out/Badges.sol/Badges.json' assert { type: 'json' }Raft ABI
import Raft from '@otterspace-xyz/contracts/out/Raft.sol/Raft.json' assert { type: 'json' }We're exporting specific .sol files using the "files" property in
package.json. Please familiarize yourself with the .sol files we're
exporting by looking into package.json.
We use Foundry and Hardhat together. With this setup we get:
- Unit tests written in Solidity (Forge)
- Integration tests written in JavaScript (Mocha)
Foundry is a blazing fast, portable and modular toolkit for Ethereum application development written in Rust.
Foundry consists of:
- Forge: Ethereum testing framework (like Truffle, Hardhat and DappTools).
- Cast: Swiss army knife for interacting with EVM smart contracts, sending transactions and getting chain data.
- Anvil: local Ethereum node, akin to Ganache, Hardhat Network.
Need help getting started with Foundry? Read the 📖 Foundry Book!
Hardhat is an Ethereum development environment for professionals. It facilitates performing frequent tasks, such as running tests, automatically checking code for mistakes or interacting with a smart contract.
On Hardhat's website you will find:
- create a
.envfile matching the variables seen in.env.example - run
./scripts/deployProxy.ts .env - Hardhat will deploy the SpecDataHolder, Raft, and Badges contracts, then deploy a proxy for each one.
- Once deployed, follow the logged instructions in your terminal to verify the contracts.
- VERY IMPORTANT: call
setBadgesAddresson theSpecDataHoldercontract. Without this, it won't work.
Add a .vscode file under the root
{
"solidity.packageDefaultDependenciesContractsDirectory": "src",
"solidity.packageDefaultDependenciesDirectory": "lib",
"solidity.compileUsingRemoteVersion": "v0.8.16"
}See changelog.md file.
- update "version" in package.json
- re-deploy contracts
- update contract addresses in readme (if necessary)
- update changelog
See LICENSE file.