https://github.com/devvspaces/ktty-staking-contract
https://github.com/devvspaces/ktty-staking-contract
Last synced: 11 months ago
JSON representation
- Host: GitHub
- URL: https://github.com/devvspaces/ktty-staking-contract
- Owner: devvspaces
- Created: 2025-05-04T11:49:23.000Z (about 1 year ago)
- Default Branch: master
- Last Pushed: 2025-05-27T07:33:03.000Z (about 1 year ago)
- Last Synced: 2025-06-09T03:05:29.294Z (12 months ago)
- Language: Solidity
- Size: 57.6 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
## Foundry
**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.
- **Chisel**: Fast, utilitarian, and verbose solidity REPL.
## Documentation
https://book.getfoundry.sh/
## Usage
### Build
```shell
$ forge build
```
### Test
```shell
$ forge test
```
### Format
```shell
$ forge fmt
```
### Gas Snapshots
```shell
$ forge snapshot
```
### Anvil
```shell
$ anvil
```
### Deploy
```shell
$ forge script script/Counter.s.sol:CounterScript --rpc-url --private-key
```
### Cast
```shell
$ cast
```
### Help
```shell
$ forge --help
$ anvil --help
$ cast --help
```
```shell
forge create \
--rpc-url $SEPOLIA_RPC_URL \
--private-key $PRIVATE_KEY \
--etherscan-api-key $ETHERSCAN_API_KEY \
--constructor-args "RoninNFT" "RNFT" "https://peach-necessary-primate-505.mypinata.cloud/ipfs/bafkreiapgfyjvlyrqy6pnk5k2z63x7v7d7rlh4ju6tiz6iqsntawxm4hwu" 0x5fbdb2315678afecb367f032d93f642f64180aa3 0xe7f1725e7734ce288f8367e1bb143e90bb3f0512 1744470000 \
--verify \
src/RoninNFT.sol:RoninNFT
```
## Deployment steps
### Setup the environment variables
Copy the `.env.example` file to `.env` and fill in the required values.
```shell
cp .env.example .env
```
Source the `.env` file to load the environment variables.
```shell
source .env
```
### Deploy the contract
Make sure you have the required dependencies installed.
```shell
forge install
forge build
```
Run the deployment script.
```shell
forge script script/DeployKTTYStakingUpgradeable.s.sol --rpc-url $RPC_URL --broadcast --private-key $PRIVATE_KEY
```
Run the upgrade script.
```shell
forge script script/UpgradeKTTTYStaking.s.sol --rpc-url $RPC_URL --broadcast --private-key $PRIVATE_KEY
```
Verify the contract on Roninchain.
```shell
forge verify-contract --verifier sourcify --verifier-url https://sourcify.roninchain.com/server/ --chain-id 2020 $CONTRACT_ADDRESS src/KTTYStaking.sol:KTTYStaking
```
### Create tiers
Copy the commands in `init-tiers.sh` to create the tiers in the staking contract.
### Create reward tokens
```shell
cast send \
--rpc-url "$RPC_URL" \
--private-key "$PRIVATE_KEY" \
"$STAKING_CONTRACT_ADDRESS" \
"registerRewardToken(address,string,uint256)" \
"ADDRESS_HERE" \
"SYMBOL_HERE" \
1 \
--legacy
```
```shell
forge script script/MockToken.s.sol --rpc-url $RPC_URL --broadcast --private-key $PRIVATE_KEY
forge script script/KTTYStaking.s.sol --rpc-url $RPC_URL --broadcast --private-key $PRIVATE_KEY
forge verify-contract --verifier sourcify --verifier-url https://sourcify.roninchain.com/server/ --chain-id 2020 $CONTRACT_ADDRESS src/KTTYStaking.sol:KTTYStaking
forge script script/Token.s.sol --rpc-url $RPC_URL --broadcast --private-key $PRIVATE_KEY
# Add a new tier to the staking contract
cast send \
--rpc-url $RPC_URL \
--private-key $PRIVATE_KEY \
$STAKING_CONTRACT_ADDRESS \
"addTier(string,uint256,uint256,uint256,uint256)" \
"Tier 1" \
$(cast --to-wei "1") \
$(cast --to-wei "10") \
30 \
20000 \
--legacy
# Update a tier on the staking contract
cast send \
--rpc-url $RPC_URL \
--private-key $PRIVATE_KEY \
$STAKING_CONTRACT_ADDRESS \
"updateTier(uint256,string,uint256,uint256,uint256,uint256,bool)" \
1 \
"Entry" \
$(cast --to-wei "1000000") \
$(cast --to-wei "2900000") \
30 \
20000 \
true \
--legacy
cast send \
--rpc-url $RPC_URL \
--private-key $PRIVATE_KEY \
$STAKING_CONTRACT_ADDRESS \
"updateTier(uint256,string,uint256,uint256,uint256,uint256,bool)" \
2 \
"Intermediate" \
$(cast --to-wei "3000000") \
$(cast --to-wei "5900000") \
60 \
40000 \
true \
--legacy
cast send \
--rpc-url $RPC_URL \
--private-key $PRIVATE_KEY \
$STAKING_CONTRACT_ADDRESS \
"updateTier(uint256,string,uint256,uint256,uint256,uint256,bool)" \
3 \
"Advanced" \
$(cast --to-wei "6000000") \
$(cast --to-wei "9900000") \
90 \
100000 \
true \
--legacy
cast send \
--rpc-url $RPC_URL \
--private-key $PRIVATE_KEY \
$STAKING_CONTRACT_ADDRESS \
"updateTier(uint256,string,uint256,uint256,uint256,uint256,bool)" \
4 \
"Diamond" \
$(cast --to-wei "10000000") \
$(cast --to-wei "19900000") \
120 \
150000 \
true \
--legacy
cast send \
--rpc-url $RPC_URL \
--private-key $PRIVATE_KEY \
$STAKING_CONTRACT_ADDRESS \
"updateTier(uint256,string,uint256,uint256,uint256,uint256,bool)" \
5 \
"Platinum" \
$(cast --to-wei "20000000") \
$(cast --to-wei "50000000") \
180 \
250000 \
true \
--legacy
cast send \
--rpc-url $RPC_URL \
--private-key $PRIVATE_KEY \
$STAKING_CONTRACT_ADDRESS \
"updateTier(uint256,string,uint256,uint256,uint256,uint256,bool)" \
1 \
"Entry" \
$(cast --to-wei "1000000") \
$(cast --to-wei "2900000") \
180 \
20000 \
true \
--legacy
# Mint tokens
cast send \
--rpc-url $RPC_URL \
--private-key $PRIVATE_KEY \
"0x4c24d08Cd47894C7Af961325895381CB4216fd4D" \
"mint(address,uint256)" \
"0xA0Ca70DFB6Fb79fD5EF160D3EAc677868547ffEF" \
$(cast --to-wei "2000000000") \
--legacy
cast send \
--rpc-url $RPC_URL \
--private-key $PRIVATE_KEY \
"0x6F03FC28999a9230A5C8650b8d440098A8B52294" \
"allowance(address,address)" \
"0xA0Ca70DFB6Fb79fD5EF160D3EAc677868547ffEF" \
"0xEdE2bFf384ca4cfdBe4165ED7A02a55D1e10396c" \
--legacy
# Stake
cast send \
--rpc-url $RPC_URL \
--private-key $PRIVATE_KEY \
"0xEdE2bFf384ca4cfdBe4165ED7A02a55D1e10396c" \
"stake(uint256,uint256)" \
$(cast --to-wei "1000000") \
1 \
--legacy
cast send \
--rpc-url $RPC_URL \
--private-key $PRIVATE_KEY \
$STAKING_CONTRACT_ADDRESS \
"pause()" \
--legacy
cast send \
--rpc-url $RPC_URL \
--private-key $PRIVATE_KEY \
$STAKING_CONTRACT_ADDRESS \
"claimRewardsAndWithdraw(uint256)" \
1 \
--legacy
```