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