commit
876fa13c60
9 changed files with 8010 additions and 0 deletions
@ -0,0 +1,9 @@ |
||||
node_modules |
||||
.env |
||||
coverage |
||||
coverage.json |
||||
typechain |
||||
|
||||
#Hardhat files |
||||
cache |
||||
artifacts |
||||
@ -0,0 +1,15 @@ |
||||
# Basic Sample Hardhat Project |
||||
|
||||
This project demonstrates a basic Hardhat use case. It comes with a sample contract, a test for that contract, a sample script that deploys that contract, and an example of a task implementation, which simply lists the available accounts. |
||||
|
||||
Try running some of the following tasks: |
||||
|
||||
```shell |
||||
npx hardhat accounts |
||||
npx hardhat compile |
||||
npx hardhat clean |
||||
npx hardhat test |
||||
npx hardhat node |
||||
node scripts/sample-script.js |
||||
npx hardhat help |
||||
``` |
||||
@ -0,0 +1,22 @@ |
||||
//SPDX-License-Identifier: Unlicense |
||||
pragma solidity ^0.8.0; |
||||
|
||||
import "hardhat/console.sol"; |
||||
|
||||
contract Greeter { |
||||
string private greeting; |
||||
|
||||
constructor(string memory _greeting) { |
||||
console.log("Deploying a Greeter with greeting:", _greeting); |
||||
greeting = _greeting; |
||||
} |
||||
|
||||
function greet() public view returns (string memory) { |
||||
return greeting; |
||||
} |
||||
|
||||
function setGreeting(string memory _greeting) public { |
||||
console.log("Changing greeting from '%s' to '%s'", greeting, _greeting); |
||||
greeting = _greeting; |
||||
} |
||||
} |
||||
@ -0,0 +1,40 @@ |
||||
// SPDX-License-Identifier: MIT |
||||
pragma solidity ^0.8.2; |
||||
|
||||
import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; |
||||
import "@openzeppelin/contracts/access/Ownable.sol"; |
||||
import "@openzeppelin/contracts/token/ERC20/extensions/draft-ERC20Permit.sol"; |
||||
import "@openzeppelin/contracts/token/ERC20/extensions/ERC20Votes.sol"; |
||||
|
||||
contract UltraCoin is ERC20, Ownable, ERC20Permit, ERC20Votes { |
||||
constructor() ERC20("Ultra Coin", "UC") ERC20Permit("Ultra Coin") { |
||||
_mint(msg.sender, 53121881 * 10 ** decimals()); |
||||
} |
||||
|
||||
function mint(address to, uint256 amount) public onlyOwner { |
||||
_mint(to, amount); |
||||
} |
||||
|
||||
// The following functions are overrides required by Solidity. |
||||
|
||||
function _afterTokenTransfer(address from, address to, uint256 amount) |
||||
internal |
||||
override(ERC20, ERC20Votes) |
||||
{ |
||||
super._afterTokenTransfer(from, to, amount); |
||||
} |
||||
|
||||
function _mint(address to, uint256 amount) |
||||
internal |
||||
override(ERC20, ERC20Votes) |
||||
{ |
||||
super._mint(to, amount); |
||||
} |
||||
|
||||
function _burn(address account, uint256 amount) |
||||
internal |
||||
override(ERC20, ERC20Votes) |
||||
{ |
||||
super._burn(account, amount); |
||||
} |
||||
} |
||||
@ -0,0 +1,21 @@ |
||||
require("@nomiclabs/hardhat-waffle"); |
||||
|
||||
// This is a sample Hardhat task. To learn how to create your own go to
|
||||
// https://hardhat.org/guides/create-task.html
|
||||
task("accounts", "Prints the list of accounts", async (taskArgs, hre) => { |
||||
const accounts = await hre.ethers.getSigners(); |
||||
|
||||
for (const account of accounts) { |
||||
console.log(account.address); |
||||
} |
||||
}); |
||||
|
||||
// You need to export an object to set up your config
|
||||
// Go to https://hardhat.org/config/ to learn more
|
||||
|
||||
/** |
||||
* @type import('hardhat/config').HardhatUserConfig |
||||
*/ |
||||
module.exports = { |
||||
solidity: "0.8.4", |
||||
}; |
||||
@ -0,0 +1,15 @@ |
||||
{ |
||||
"name": "hardhat-project", |
||||
"devDependencies": { |
||||
"@nomiclabs/hardhat-ethers": "^2.0.0", |
||||
"@nomiclabs/hardhat-waffle": "^2.0.0", |
||||
"@openzeppelin/hardhat-upgrades": "^1.14.0", |
||||
"chai": "^4.2.0", |
||||
"ethereum-waffle": "^3.0.0", |
||||
"ethers": "^5.0.0", |
||||
"hardhat": "^2.8.3" |
||||
}, |
||||
"dependencies": { |
||||
"@openzeppelin/contracts": "^4.4.2" |
||||
} |
||||
} |
||||
@ -0,0 +1,32 @@ |
||||
// We require the Hardhat Runtime Environment explicitly here. This is optional
|
||||
// but useful for running the script in a standalone fashion through `node <script>`.
|
||||
//
|
||||
// When running the script with `npx hardhat run <script>` you'll find the Hardhat
|
||||
// Runtime Environment's members available in the global scope.
|
||||
const hre = require("hardhat"); |
||||
|
||||
async function main() { |
||||
// Hardhat always runs the compile task when running scripts with its command
|
||||
// line interface.
|
||||
//
|
||||
// If this script is run directly using `node` you may want to call compile
|
||||
// manually to make sure everything is compiled
|
||||
// await hre.run('compile');
|
||||
|
||||
// We get the contract to deploy
|
||||
const Greeter = await hre.ethers.getContractFactory("Greeter"); |
||||
const greeter = await Greeter.deploy("Hello, Hardhat!"); |
||||
|
||||
await greeter.deployed(); |
||||
|
||||
console.log("Greeter deployed to:", greeter.address); |
||||
} |
||||
|
||||
// We recommend this pattern to be able to use async/await everywhere
|
||||
// and properly handle errors.
|
||||
main() |
||||
.then(() => process.exit(0)) |
||||
.catch((error) => { |
||||
console.error(error); |
||||
process.exit(1); |
||||
}); |
||||
@ -0,0 +1,19 @@ |
||||
const { expect } = require("chai"); |
||||
const { ethers } = require("hardhat"); |
||||
|
||||
describe("Greeter", function () { |
||||
it("Should return the new greeting once it's changed", async function () { |
||||
const Greeter = await ethers.getContractFactory("Greeter"); |
||||
const greeter = await Greeter.deploy("Hello, world!"); |
||||
await greeter.deployed(); |
||||
|
||||
expect(await greeter.greet()).to.equal("Hello, world!"); |
||||
|
||||
const setGreetingTx = await greeter.setGreeting("Hola, mundo!"); |
||||
|
||||
// wait until the transaction is mined
|
||||
await setGreetingTx.wait(); |
||||
|
||||
expect(await greeter.greet()).to.equal("Hola, mundo!"); |
||||
}); |
||||
}); |
||||
Loading…
Reference in new issue