add SimpleStorage smart contract
This commit is contained in:
45
simple-storage/.github/workflows/test.yml
vendored
Normal file
45
simple-storage/.github/workflows/test.yml
vendored
Normal file
@@ -0,0 +1,45 @@
|
||||
name: CI
|
||||
|
||||
on:
|
||||
push:
|
||||
pull_request:
|
||||
workflow_dispatch:
|
||||
|
||||
env:
|
||||
FOUNDRY_PROFILE: ci
|
||||
|
||||
jobs:
|
||||
check:
|
||||
strategy:
|
||||
fail-fast: true
|
||||
|
||||
name: Foundry project
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
submodules: recursive
|
||||
|
||||
- name: Install Foundry
|
||||
uses: foundry-rs/foundry-toolchain@v1
|
||||
with:
|
||||
version: nightly
|
||||
|
||||
- name: Show Forge version
|
||||
run: |
|
||||
forge --version
|
||||
|
||||
- name: Run Forge fmt
|
||||
run: |
|
||||
forge fmt --check
|
||||
id: fmt
|
||||
|
||||
- name: Run Forge build
|
||||
run: |
|
||||
forge build --sizes
|
||||
id: build
|
||||
|
||||
- name: Run Forge tests
|
||||
run: |
|
||||
forge test -vvv
|
||||
id: test
|
||||
14
simple-storage/.gitignore
vendored
Normal file
14
simple-storage/.gitignore
vendored
Normal file
@@ -0,0 +1,14 @@
|
||||
# Compiler files
|
||||
cache/
|
||||
out/
|
||||
|
||||
# Ignores development broadcast logs
|
||||
!/broadcast
|
||||
/broadcast/*/31337/
|
||||
/broadcast/**/dry-run/
|
||||
|
||||
# Docs
|
||||
docs/
|
||||
|
||||
# Dotenv file
|
||||
.env
|
||||
66
simple-storage/README.md
Normal file
66
simple-storage/README.md
Normal file
@@ -0,0 +1,66 @@
|
||||
## 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 <your_rpc_url> --private-key <your_private_key>
|
||||
```
|
||||
|
||||
### Cast
|
||||
|
||||
```shell
|
||||
$ cast <subcommand>
|
||||
```
|
||||
|
||||
### Help
|
||||
|
||||
```shell
|
||||
$ forge --help
|
||||
$ anvil --help
|
||||
$ cast --help
|
||||
```
|
||||
21
simple-storage/README_PRVKEY_BEST_PRACTICE.md
Normal file
21
simple-storage/README_PRVKEY_BEST_PRACTICE.md
Normal file
@@ -0,0 +1,21 @@
|
||||
# Private Key Best Practice
|
||||
|
||||
Utilize `cast wallet`
|
||||
|
||||
```bash
|
||||
cast wallet import nameOfWalletOrAddress --interactive
|
||||
```
|
||||
|
||||
Then run everything with private key from account
|
||||
|
||||
Previously:
|
||||
|
||||
```bash
|
||||
forge script script/DeploySimpleStorage.s.sol --rpc-url $RPC_URL --broadcast --private-key $PRIVATE_KEY
|
||||
```
|
||||
|
||||
Now:
|
||||
|
||||
```bash
|
||||
forge script script/DeploySimpleStorage.s.sol --rpc-url http://127.0.0.1:8545 --broadcast --account nameOfAccountGoesHere --sender 0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266
|
||||
```
|
||||
6
simple-storage/foundry.toml
Normal file
6
simple-storage/foundry.toml
Normal file
@@ -0,0 +1,6 @@
|
||||
[profile.default]
|
||||
src = "src"
|
||||
out = "out"
|
||||
libs = ["lib"]
|
||||
|
||||
# See more config options https://github.com/foundry-rs/foundry/blob/master/crates/config/README.md#all-options
|
||||
1
simple-storage/lib/forge-std
Submodule
1
simple-storage/lib/forge-std
Submodule
Submodule simple-storage/lib/forge-std added at 1eea5bae12
15
simple-storage/script/DeploySimpleStorage.s.sol
Normal file
15
simple-storage/script/DeploySimpleStorage.s.sol
Normal file
@@ -0,0 +1,15 @@
|
||||
// SPDX-License-Identifier: MIT
|
||||
|
||||
pragma solidity ^0.8.19;
|
||||
|
||||
import {Script} from "forge-std/Script.sol";
|
||||
import {SimpleStorage} from "../src/SimpleStorage.sol";
|
||||
|
||||
contract DeploySimpleStorage is Script {
|
||||
function run() external returns (SimpleStorage) {
|
||||
vm.startBroadcast();
|
||||
SimpleStorage simpleStorage = new SimpleStorage();
|
||||
vm.stopBroadcast();
|
||||
return simpleStorage;
|
||||
}
|
||||
}
|
||||
33
simple-storage/src/SimpleStorage.sol
Normal file
33
simple-storage/src/SimpleStorage.sol
Normal file
@@ -0,0 +1,33 @@
|
||||
// I'm a comment!
|
||||
// SPDX-License-Identifier: MIT
|
||||
|
||||
pragma solidity ^0.8.19;
|
||||
|
||||
// pragma solidity ^0.8.0;
|
||||
// pragma solidity >=0.8.0 <0.9.0;
|
||||
|
||||
contract SimpleStorage {
|
||||
uint256 myFavoriteNumber;
|
||||
|
||||
struct Person {
|
||||
uint256 favoriteNumber;
|
||||
string name;
|
||||
}
|
||||
// uint256[] public anArray;
|
||||
Person[] public listOfPeople;
|
||||
|
||||
mapping(string => uint256) public nameToFavoriteNumber;
|
||||
|
||||
function store(uint256 _favoriteNumber) public {
|
||||
myFavoriteNumber = _favoriteNumber;
|
||||
}
|
||||
|
||||
function retrieve() public view returns (uint256) {
|
||||
return myFavoriteNumber;
|
||||
}
|
||||
|
||||
function addPerson(string memory _name, uint256 _favoriteNumber) public {
|
||||
listOfPeople.push(Person(_favoriteNumber, _name));
|
||||
nameToFavoriteNumber[_name] = _favoriteNumber;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user