Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
123 commits
Select commit Hold shift + click to select a range
3754d3c
assignment on rpc methods
henrypeters Jan 28, 2026
d7dfe65
exec_hash, finalized root, epoch and block_hash, slots, fork_choice
henrypeters Jan 28, 2026
b1ef2f0
add consensus concept assignment
MJigah Jan 28, 2026
7dc56c0
Ethereum wallet implementation file added
realghazal Jan 29, 2026
5da594b
Implement Address generator
MJigah Jan 29, 2026
04aa09d
feat: implemented address derivation
henrypeters Jan 29, 2026
189256a
fix: stop tracking node modules
MJigah Jan 29, 2026
f475b82
feat: create address generator
marvs8 Jan 29, 2026
f3e7d27
feat: add all assignment
MJigah Jan 29, 2026
c5d482b
feat: add all assignments
MJigah Jan 29, 2026
18ff4a3
chore: Merge branch 'miracle-assignment' into submission/assignment-0…
MJigah Jan 29, 2026
c6f6c54
chore: add entropy
henrypeters Jan 29, 2026
8b67e02
chore: add readme
henrypeters Jan 29, 2026
8cd5d6d
feat: Implement Block explorer with JSONrpc methods
MJigah Feb 2, 2026
77e2d62
fix: create readme for assignment 6 & add styles for assignment 7
MJigah Feb 2, 2026
cdaa6b3
feat: add assignment 8 - escrow
MJigah Feb 4, 2026
b27bf12
fix: implement access checks and validations
MJigah Feb 4, 2026
068f248
Add escrow tests
MJigah Feb 12, 2026
c74aaf6
fix
MJigah Feb 15, 2026
e2108e2
feat: add todo contract
MJigah Feb 15, 2026
2b21584
fix: remove escrow contract
MJigah Feb 15, 2026
ef65b03
fix: add escrow contract
MJigah Feb 15, 2026
2611037
feat: add milestone contract
MJigah Feb 15, 2026
f4e0843
feat: add vault contract
MJigah Feb 15, 2026
e89c5e5
Merge branch 'as-w4-d1' into submission/assignment-10/unrealtim-tech
MJigah Feb 16, 2026
1a5ab7f
Merge branch 'as-w4-d2' into submission/assignment-11/unrealtim-tech
MJigah Feb 16, 2026
0571954
Feat: Implement the todo contract
Mac-5 Feb 16, 2026
8467e23
Feat: Implement the todo contract
Mac-5 Feb 16, 2026
a84a159
Merge pull request #102 from unrealtim-tech/submission/assignment-11/…
unrealtim-tech Feb 16, 2026
932a971
Revert "Vault Contract"
unrealtim-tech Feb 16, 2026
25eb6e2
feat: Initialize the Milestone escrow contract
Mac-5 Feb 18, 2026
cc28094
feat: Initialize the Milestone escrow contract
Mac-5 Feb 18, 2026
b3e496f
feat: Initialize the TimeLock contract
Mac-5 Feb 18, 2026
7ac783e
feat: Initialize the TimeLock contract
Mac-5 Feb 18, 2026
b614fb1
feat: Initialize the Escrow contract
Mac-5 Feb 18, 2026
11eebaa
feat: Initialize the Escrow contract
Mac-5 Feb 18, 2026
3414c01
Remove fallback function from Escrow contract
Mac-5 Feb 24, 2026
1b4fc76
Remove fallback function from Escrow contract
Mac-5 Feb 24, 2026
f23cd53
chore: merge PR #140 from Mac-5/submission/assignment-02/Mac-5
sprtd Feb 24, 2026
252bc2a
chore: merge PR #140 from Mac-5/submission/assignment-02/Mac-5
sprtd Feb 24, 2026
170afc1
chore: Update .gitignore to exclude artifacts and non-code files
Mac-5 Feb 24, 2026
16dfb95
chore: Update .gitignore to exclude artifacts and non-code files
Mac-5 Feb 24, 2026
46b882b
chor: merge pull request #166 from BlockheaderWeb3-Community/as-w3-d3
sprtd Feb 25, 2026
074b1a3
chor: merge pull request #166 from BlockheaderWeb3-Community/as-w3-d3
sprtd Feb 25, 2026
24fcb5b
Add MarketPlace NFT marketplace implementation
Mac-5 Feb 25, 2026
ac131f0
Add MarketPlace NFT marketplace implementation
Mac-5 Feb 25, 2026
2fe0bf3
Change payment transfer to use call method
Mac-5 Feb 25, 2026
ad5034c
Change payment transfer to use call method
Mac-5 Feb 25, 2026
c183f5c
Fix call syntax for transferring sellerAmount
Mac-5 Feb 25, 2026
e9f83b6
Fix call syntax for transferring sellerAmount
Mac-5 Feb 25, 2026
292099a
chore: add test in package.json
sprtd Feb 25, 2026
70b427b
chore: add test in package.json
sprtd Feb 25, 2026
318bdb5
chore: merge PR #168 from Mac-5/features/tokens
sprtd Feb 25, 2026
a7eef71
chore: merge PR #168 from Mac-5/features/tokens
sprtd Feb 25, 2026
3026e4e
chore: merge PR #174 from BlockheaderWeb3-Community/tokens
sprtd Feb 25, 2026
614749f
chore: merge PR #174 from BlockheaderWeb3-Community/tokens
sprtd Feb 25, 2026
8fb57d9
chore: set up for testing
sprtd Feb 25, 2026
6066f7b
chore: set up for testing
sprtd Feb 25, 2026
b375343
chore: merge PR #178 from BlockheaderWeb3-Community/intro-to-testing
sprtd Feb 25, 2026
e31c287
chore: merge PR #178 from BlockheaderWeb3-Community/intro-to-testing
sprtd Feb 25, 2026
0091106
test: validate Timelock deployment
sprtd Feb 25, 2026
5b1987e
test: validate Timelock deployment
sprtd Feb 25, 2026
f7feedb
test: revert 0 ETH deposit
sprtd Feb 25, 2026
5eea927
test: revert 0 ETH deposit
sprtd Feb 25, 2026
68afe9e
test: validate reverts
sprtd Feb 25, 2026
5624a0a
test: validate reverts
sprtd Feb 25, 2026
26fb382
test: revert past unlock time
sprtd Feb 25, 2026
c69495f
test: revert past unlock time
sprtd Feb 25, 2026
316c5f3
test: validate multiple deposits
sprtd Feb 25, 2026
837c5b4
test: validate multiple deposits
sprtd Feb 25, 2026
355aef4
chore: merge PR #183 from BlockheaderWeb3-Community/intro-to-test-vault
sprtd Feb 25, 2026
963e979
chore: merge PR #183 from BlockheaderWeb3-Community/intro-to-test-vault
sprtd Feb 25, 2026
7b2586c
feat: add testing with foundry assignment
jxsonyx Mar 2, 2026
3ca8306
fix: fix submodule problem
jxsonyx Mar 2, 2026
c229f5d
Add OpenZeppelin Contracts as a submodule and update foundry.lock
jxsonyx Mar 4, 2026
1f7dfa0
feat: add Vault V2
jxsonyx Mar 4, 2026
9650996
chore: format code
jxsonyx Mar 4, 2026
46f8f39
chore: merge PR #196 from JTKaduma/timelock-test
sprtd Mar 4, 2026
2ce9e22
chore: setup timelock test env
sprtd Mar 4, 2026
3c393c0
chore: setup timelockv2
sprtd Mar 4, 2026
02a42e9
test: deposit with priceFeed
sprtd Mar 4, 2026
2e11cf6
upgradable contracts
aji70 Apr 2, 2026
5bb5779
upgradable contracts
aji70 Apr 2, 2026
d1e95de
Merge pull request #207 from aji70/main
aji70 Apr 2, 2026
ed6ff8b
Merge pull request #207 from aji70/main
aji70 Apr 2, 2026
782ec2f
upgradable contracts
aji70 Apr 2, 2026
d82eb67
upgradable contracts
aji70 Apr 2, 2026
4072595
Merge pull request #208 from aji70/main
aji70 Apr 2, 2026
999777d
Merge pull request #208 from aji70/main
aji70 Apr 2, 2026
9e9b220
feat: add upgradeable staking pool system (UUPS, factory, reentrancy …
luhrhenz Apr 2, 2026
aba62e9
feat: add upgradeable staking pool system (UUPS, factory, reentrancy …
luhrhenz Apr 2, 2026
b1d9f9f
Merge pull request #209 from luhrhenz/feat/staking-upgradeable
aji70 Apr 2, 2026
762b5c4
Merge pull request #209 from luhrhenz/feat/staking-upgradeable
aji70 Apr 2, 2026
8919901
chore: update structure
sprtd Jun 3, 2026
ced21fd
chore: add rust-session
sprtd Jun 3, 2026
5b4f201
chore: add rust-session
sprtd Jun 3, 2026
ee86b39
chore: update rust note
sprtd Jun 5, 2026
22f28c8
chore: update rust note
sprtd Jun 5, 2026
d80a765
chore: update overall
sprtd Jun 5, 2026
08df50f
chore: update overall
sprtd Jun 5, 2026
2d448a6
chore: remove committed build artifacts and update .gitignore
Mac-5 Jun 5, 2026
4b776ea
chore: remove committed build artifacts and update .gitignore
Mac-5 Jun 5, 2026
03216b0
chore: merge PR #230 from Mac-5/main
sprtd Jun 5, 2026
ddc44b7
chore: merge PR #230 from Mac-5/main
sprtd Jun 5, 2026
e6e11ac
chore: update overall.md
sprtd Jun 5, 2026
3fda4d0
chore: update overall.md
sprtd Jun 5, 2026
205c779
style: apply prettier formatting across all files
Mac-5 Jun 5, 2026
7bc5d3e
fix: rename .yml workflow to ci.yml so GitHub Actions picks it up
Mac-5 Jun 5, 2026
e1cb5f8
chore: merge upstream main and resolve formatting conflicts
Mac-5 Jun 5, 2026
4022ea3
chore: add array
sprtd Jun 5, 2026
babfd78
chore: merge PR #232 from Mac-5/main
sprtd Jun 5, 2026
d8e5a6c
chore: implement move and clone
sprtd Jun 5, 2026
e762164
chore: update test_move
sprtd Jun 5, 2026
be3213e
Merge pull request #233 from BlockheaderWeb3-Community/address-generator
Mac-5 Jun 5, 2026
76c9514
Merge branch 'main' into submission/assignment-06/henrypeters
Mac-5 Jun 5, 2026
26dc2de
Merge pull request #234 from BlockheaderWeb3-Community/submission/ass…
Mac-5 Jun 5, 2026
0d0cdc3
Merge pull request #235 from BlockheaderWeb3-Community/revert-102-sub…
Mac-5 Jun 5, 2026
d397607
Merge pull request #236 from BlockheaderWeb3-Community/submission/ass…
Mac-5 Jun 5, 2026
477bf34
Merge pull request #237 from BlockheaderWeb3-Community/testing-with-f…
Mac-5 Jun 5, 2026
4cef106
Merge pull request #238 from BlockheaderWeb3-Community/test/timelockv2
Mac-5 Jun 5, 2026
58a394a
chore: add student registry
sprtd Jun 9, 2026
db5e58f
refac: add student registry
sprtd Jun 9, 2026
e0b2d4f
refac: modularize routes, schema and handlers
sprtd Jun 12, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion .github/pull_request_template.md
Original file line number Diff line number Diff line change
@@ -1,9 +1,12 @@
## Summary

What does this PR implement?

## Testing

- [ ] Unit tests added
- [ ] Tests passing locally

## Notes
Any assumptions or trade-offs?

Any assumptions or trade-offs?
24 changes: 24 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
name: CI

on:
pull_request:
branches: [main]
push:
branches: [main]

jobs:
formatting:
name: Code Formatting (Prettier)
runs-on: ubuntu-latest

steps:
- name: Checkout repository
uses: actions/checkout@v4

- name: Set up Node.js
uses: actions/setup-node@v4
with:
node-version: 20

- name: Run Prettier check
run: npx prettier --check .
31 changes: 31 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,37 @@
package-lock.json
node_modules

# Dependencies
lib/

# Rust build artifacts
/target
**/target

# Hardhat / Foundry build artifacts
artifacts/
cache/
typechain-types/
out/
build-info/

# Solidity compiler binary
soljson-latest.js

# Hardhat Ignition build info (large generated files)
ignition/deployments/**/build-info/

# Logs
*.log

# OS files
.DS_Store
Thumbs.db

# IDE
.idea/
*.swp
*.swo


lib/
3 changes: 3 additions & 0 deletions .gitmodules
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
[submodule "assignments/foundry-test-assignment/lib/openzeppelin-contracts"]
path = assignments/foundry-test-assignment/lib/openzeppelin-contracts
url = https://github.com/OpenZeppelin/openzeppelin-contracts
2 changes: 1 addition & 1 deletion .prettierrc
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,4 @@
"trailingComma": "es5",
"printWidth": 80,
"tabWidth": 2
}
}
17 changes: 11 additions & 6 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -1,35 +1,40 @@
# How to Contribute

1. Getting Started
- Fork the repository
- Sync with upstream
- Create a feature branch

- Fork the repository
- Sync with upstream
- Create a feature branch

2. Branch Naming Convention
Example:
`submission/assignment-01/<github-username>`
Example:
`submission/assignment-01/<github-username>`

3. Commit Message Guidelines

Example (Conventional Commits–lite):

```
feat: implement token transfer logic
fix: handle zero-address edge case
test: add coverage for revert conditions
```

4. Pull Request Checklist

- [x] Code compiles
- [x] Tests pass
- [x] README included
- [x] No changes outside /submissions

5. PR Review Process

- [x] Automated checks
- [x] Manual review by mentors
- [x] Required fixes before merge

6. Common Mistakes to Avoid

- Editing assignment specs
- Submitting compiled artifacts
- Force-pushing after review
- Force-pushing after review
9 changes: 7 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,12 +1,15 @@
# Cohort 8

Blockchain Development Bootcamp — Cohort 8

This repository contains official technical materials, specifications, assignments, and collaboration artifacts for the 8th edition of our blockchain program. Dev participants are expected to actively use this repository throughout the program for learning, development, version control, and peer collaboration.

#### Repository Structure

The repository will evolve over time, but a typical structure looks like:

```cohort-8/
├── README.md # Repository overview and instructions
├── README.md # Repository overview and instructions
├── assignments/ # Coding exercises and assessments
├── projects/
│ ├── templates/ # Starter project templates
Expand All @@ -15,12 +18,14 @@ The repository will evolve over time, but a typical structure looks like:
```

#### Setup

Clone the repository:

```
git clone https://github.com/BlockheaderWeb3-Community/cohort-8.git
cd cohort-8
```

#### Code Formatting
This repository uses Prettier for formatting. Install the Prettier extension in your editor and enable Format on Save.

This repository uses Prettier for formatting. Install the Prettier extension in your editor and enable Format on Save.
1 change: 1 addition & 0 deletions assignment05/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
https://hackmd.io/@gXPhwY6gQKmHFQ55mXXm1g/S1b3oc_LWg
21 changes: 21 additions & 0 deletions assignment05/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
{
"dependencies": {
"bip32": "^5.0.0",
"bip39": "^3.1.0",
"ethereumjs-util": "^7.1.5",
"hdkey": "^2.1.0",
"keccak": "^3.0.4",
"secp256k1": "^5.0.1",
"tiny-secp256k1": "^2.2.4"
},
"name": "key-key",
"version": "1.0.0",
"main": "key.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC",
"description": ""
}
41 changes: 41 additions & 0 deletions assignment05/walletad.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
const bip39 = require("bip39");
const { BIP32Factory } = require("bip32");
const tinysecp = require("tiny-secp256k1");
const bip32 = BIP32Factory(tinysecp);
const secp256k1 = require("secp256k1");
const { keccak256 } = require("ethereumjs-util");
const crypto = require("crypto");

const entropy = crypto.randomBytes(32);


const mnemonic = bip39.entropyToMnemonic(entropy);
console.log("Mnemonic Phrase:\n", mnemonic);

const seed = bip39.mnemonicToSeedSync(mnemonic);

const root = bip32.fromSeed(seed);

const path = "m/44'/60'/0'/0/0";
const child = root.derivePath(path);const ADDRESS_COUNT = 4;

for (let i = 0; i < ADDRESS_COUNT; i++) {
const path = `m/44'/60'/0'/0/${i}`;
const child = root.derivePath(path);

const privateKey = child.privateKey;
// console.log("\nPrivate Key:\n", Buffer.from(privateKey).toString("hex"));

const publicKeyArray = secp256k1.publicKeyCreate(privateKey, false).slice(1);
const publicKey = Buffer.from(publicKeyArray);
// console.log("\nPublic Key (64 bytes):\n", publicKey.toString("hex"));

const hash = keccak256(publicKey);

const address = "0x" + hash.slice(-20).toString("hex");
// console.log("\nEthereum Address:\n", address);
console.log(`\nAddress #${i}`);
console.log("\nPrivate Key:\n", Buffer.from(privateKey).toString("hex"));
console.log("\nPublic Key (64 bytes):\n", publicKey.toString("hex"));
console.log("\nEthereum Address:\n", address);
};
6 changes: 4 additions & 2 deletions assignments/1/1-gas/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ This is a **conceptual example**, not an exact implementation of Ethereum’s ga
## What This Program Does

The program:

- Defines a unit of computational work
- Defines a price per unit of work
- Multiplies the two values to compute a gas fee
Expand All @@ -24,10 +25,10 @@ Gas Fee = Computational Work × Price Per Unit



### Gas
### Gas
Gas is a unit of measurement. It measures how much computation a transaction uses

### Gas Limit
### Gas Limit
Gas limit is the maximum amount of gas you are willing to use for a transaction.

### Gas price
Expand All @@ -40,3 +41,4 @@ A base fee is calculated automatically by the network
It changes depending on network congestion
This base fee is burned (destroyed forever)
**Burned ETH is removed from circulation → makes ETH deflationary**
```
2 changes: 2 additions & 0 deletions assignments/1/1-merkle-root/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
This project demonstrates how a **Merkle Tree** works by hashing a list of transactions and recursively combining them to produce a **Merkle root**.

The implementation is written in Rust and shows:

- How transactions are hashed
- How Merkle tree levels are built
- How the final Merkle root is computed
Expand Down Expand Up @@ -35,3 +36,4 @@ Pairwise hash concatenation
Repeated hashing of levels
Merkle Root
```
14 changes: 10 additions & 4 deletions assignments/3-block-observation/README.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
# Observations on a Block explorer(Etherscan) and a Transaction hash


### 1. Exploring the block explorer

While on the block explorer, I observed some standard metrics which were:

- Ether price: This gives the current market value of one `ether`
- Market cap: Short for market capitalisation, it is calculated by multiplying the current value of ether by the total circulating supply.
- Transactions: This shows the total number of transactions processed in ethereum over a period of time.
Expand All @@ -11,7 +12,9 @@ While on the block explorer, I observed some standard metrics which were:
- Latest transaction: This shows all the recent transaction that were mined in a block.

### 2. Exploring a block on etherscan (Block explorer)

After clicking on a recent block under the `Latest blocks` section, there were some details I observed which were:

- Block Height: It shows the number in which the block is positioned, right from the genesis block. It shows the length of the blockchain.
- Status: It shows if a block is fiinalised/confirmed
- Timestamp: It shows the date and time at which the block was created.
Expand All @@ -21,17 +24,20 @@ After clicking on a recent block under the `Latest blocks` section, there were s
- Block difficulty: This is the total difficulty of the chain up until the recent recent block.

### 3. Exploring a transaction hash

<!-- While on my rabby wallet, I wanted to view my transaction history, so I clicked on the `Transactions` icon, and selected the option `Custom network`, there I saw the transactions I made then selected the particular one I wanted, after clicking I observed some details like: -->

- **Sending ETH to my address**
On my rabby wallet, I clicked on `Send` button which prompted me to input an amount and put in the receivers' address, since I'm sending to myself, I inputted my wallet address. After that I clicked `Send` then I signed and confirmed the transaction. Immediately I was redirected to `etherscan.io`, there I observed some details like:
On my rabby wallet, I clicked on `Send` button which prompted me to input an amount and put in the receivers' address, since I'm sending to myself, I inputted my wallet address. After that I clicked `Send` then I signed and confirmed the transaction. Immediately I was redirected to `etherscan.io`, there I observed some details like:
- Transaction hash: It is unique identifier that is generated cryptographically when a transaction is created, it's more like a proof that a transaction a has gone through.
- Status: This shows if a transaction was successful or not
- Block: This shows the block height which this transaction is included.
- Timestamp: The date a time in which this transaction was created.
- From: Senders' address
- From: Senders' address
- To: Receivers' address
- Value: The value of ETH I'm spending

## Conclusion

The ethereum block explorer is a powerful tool that shows in real time the processes and production of blocks and transactions.
As well as a transaction hash that serves as a proof that an exchange of value has already taken place.
As well as a transaction hash that serves as a proof that an exchange of value has already taken place.
Loading
Loading