Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
3 changes: 3 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,9 @@ For the sake of flexibility, each assignment is a separate package with its own
## Assignments

- [Simple Proxy Contract](./assignments/simple-proxy-contract)
- [Upgradeable Proxy Contract](./assignments/upgradeable-proxy-contract)
- [Transparent Proxy Contract](./assignments/transparent-proxy-contract) (TODO)
- [Multisig Wallet](./assignments/multisig-wallet)

## Setup

Expand Down
2 changes: 2 additions & 0 deletions assignments/multisig-wallet/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
# Multisig Wallet

18 changes: 18 additions & 0 deletions assignments/multisig-wallet/contracts/Counter.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
pragma solidity ^0.8.0;

contract Counter {
uint256 public counter;

function increment() public {
counter++;
}

function add(uint256 x) public {
counter += x;
}

// Just using this to make sure you've correctly handled reverts!
function fail() public {
revert("This function should fail");
}
}
83 changes: 83 additions & 0 deletions assignments/multisig-wallet/contracts/MultisigWallet.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
pragma solidity ^0.8.0;

contract MultisigWallet {
// struct Transaction {
// // fill me in
// }

constructor(
address[] memory _owners,
uint256 _required
)
public
{
revert("Implement me!");
}

function submitTransaction(
address _target,
uint256 _value,
bytes memory _data
)
public
{
revert("Implement me!");
}

function confirmTransaction(
uint256 _transactionId
)
public
{
revert("Implement me!");
}

function revokeConfirmation(
uint256 _transactionId
)
public
{
revert("Implement me!");
}

function executeTransaction(
uint256 _transactionId
)
public
{
revert("Implement me!");
}

function addOwner(
address _owner
)
public
{
revert("Implement me!");
}

function removeOwner(
address _owner
)
public
{
revert("Implement me!");
}

function replaceOwner(
address _owner,
address _newOwner
)
public
{
revert("Implement me!");
}

function changeRequirement(
uint256 _required
)
public
{
revert("Implement me!");
}
}
13 changes: 13 additions & 0 deletions assignments/multisig-wallet/hardhat.config.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
import { HardhatUserConfig } from 'hardhat/types'

// Plugins
import '@nomiclabs/hardhat-ethers'
import '@nomiclabs/hardhat-waffle'

const config: HardhatUserConfig = {
solidity: {
version: '0.8.11',
}
}

export default config
26 changes: 26 additions & 0 deletions assignments/multisig-wallet/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
{
"name": "simple-proxy-contracts",
"version": "1.0.0",
"main": "index.js",
"license": "MIT",
"private": true,
"scripts": {
"compile": "hardhat compile",
"test": "hardhat test"
},
"devDependencies": {
"@nomiclabs/hardhat-ethers": "^2.0.4",
"@nomiclabs/hardhat-waffle": "^2.0.1",
"@types/chai-as-promised": "^7.1.4",
"@types/mocha": "^9.0.0",
"@types/node": "^17.0.8",
"chai": "^4.3.4",
"chai-as-promised": "^7.1.1",
"ethereum-waffle": "^3.4.0",
"ethers": "^5.5.3",
"hardhat": "^2.8.2",
"mocha": "^9.1.3",
"ts-node": "^10.4.0",
"typescript": "^4.5.4"
}
}
Loading