用Hardhat开发智能合约,并发布ERC721 NFT

1. 安装Hardhat npm install --save-dev hardhat 2. 初始化Hardhat工程 npx hardhat 3. 安装官方contract库 npm install @openzeppelin/contracts 4. 完成ERC721 NFT智能合约代码 目录contracts/DrawNFT.sol // SPDX-License-Identifier: MIT pragma solidity ^0.8.4; import "@openzeppelin/contracts/token/ERC721/ERC721.sol"; import "@openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol"; import "@openzeppelin/contracts/access/Ownable.sol"; import "@openzeppelin/contracts/utils/Counters.sol"; contract DrawNFT is ERC721, ERC721URIStorage, Ownable { using Counters for Counters.Counter; Counters.Counter private _tokenIdCounter; constructor() ERC721("DrawNFT", "DNFT") {} function safeMint(address to, string memory uri) public onlyOwner { uint256 tokenId = _tokenIdCounter....

2022-08-18 · 3 min · 479 words · Xuqi.Zhong

用Hardhat开发智能合约,并发布ERC20 Token

1. 安装Hardhat npm install --save-dev hardhat 2. 初始化Hardhat工程 npx hardhat 3. 安装官方contract库 npm install @openzeppelin/contracts 4. 完成Token智能合约代码 目录contracts/DrawToken.sol // SPDX-License-Identifier: MIT pragma solidity ^0.8.4; import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; import "@openzeppelin/contracts/access/Ownable.sol"; contract DrawToken is ERC20, Ownable { constructor() ERC20("DrawToken", "DTK") {} function mint(address to, uint256 amount) public onlyOwner { _mint(to, amount); } } 5. 完成合约部署代码 目录scripts/deploy.ts import { ethers } from "hardhat"; async function main() { // DrawToken const DrawToken = await ethers....

2022-08-18 · 3 min · 434 words · Xuqi.Zhong

Eth智能合约签名校验 - 可用于实现多签合约

1. 对message进行签名 from eth_account.messages import encode_defunct from web3 import Web3 from eth_keys import keys KEY = ... # 填写账户私钥 w3 = Web3(Web3.HTTPProvider(<input eth node url/>)) # 请填写以太坊的节点url account = w3.eth.account.from_key(KEY) print('address: ', account.address) rawText = 'hello' # 签名message signedMessage = account.sign_message(encode_defunct(text=rawText)) print('message hash: ', signedMessage.messageHash.hex()) # print(signedMessage) print('v: ', int(signedMessage.v)) print('r: ', hex(signedMessage.r)) print('s: ', hex(signedMessage.s)) print('signature: ', signedMessage.signature.hex()) print(w3.eth.account.recover_message(encode_defunct(text=rawText), signature=signedMessage.signature)) 2. 执行脚本,得到 address: 0x1c74c86906d91766e143e1d009C8604b66001363 message hash: 0x50b2c43fd39106bafbba0da34fc430e1f91e3c96ea2acee2bc34119f92b37750 v: 28 r: 0x5a0121bea4f2c1e9e6aad76bd3e06191a533c0b53a77df31e3b6310dbf4f698f s: 0x17216a4bfd7cf812bf2a6d9b44122c807880a5cb3de403d4baa8e0fb352189dd signature: 0x5a0121bea4f2c1e9e6aad76bd3e06191a533c0b53a77df31e3b6310dbf4f698f17216a4bfd7cf812bf2a6d9b44122c807880a5cb3de403d4baa8e0fb352189dd1c 0x1c74c86906d91766e143e1d009C8604b66001363 3....

2022-03-27 · 2 min · 278 words · Xuqi.Zhong

打造以太坊私有链,合约的部署与使用

1. 下载 $ git clone https://github.com/ethereum/go-ethereum.git 2. 编译 $ cd go-ethereum $ make geth 把./build/bin/geth添加到可执行路径中 3. 配置初始状态 保存配置到genesis.json文件 { "config": { "chainId": 7777, "homesteadBlock": 0, "eip150Block": 0, "eip155Block": 0, "eip158Block": 0, "byzantiumBlock": 0, "constantinopleBlock": 0, "petersburgBlock": 0, "ethash": {} }, "difficulty": "1", "gasLimit": "8000000", "alloc": { "7df9a875a174b3bc565e6424a0050ebc1b2d1d82": { "balance": "300000" }, "f41c74c9ae680c1aa78f42e5647a62f353b7bdde": { "balance": "400000" } } } 执行geth init --datadir data genesis....

2022-03-15 · 3 min · 635 words · Xuqi.Zhong