合约测试
Testing Smart Contract with Ethers and Mocha:[https://hardhat.org/docs/guides/testing/using-ethers]Hardhat-Ethers-Chai[https://hardhat.org/docs/plugins/hardhat-ethers-chai-matchers]Ether.js V6 文档:[https://docs.ethers.org/v6/]Hardhat Ethers:[https://hardhat.org/docs/plugins/hardhat-ethers] 开始写测试代码其实就是在做科学实验。每一个测试用例(it)都遵循AAA模式: Arrange (准备):准备环境、部署合约、准备测试账户。 Act (执行):调用合约的某个函数(比如 mint 或 transfer)。 Assert (断言):验证结果是否符合预期(比如余额变了吗?报错了吗?)。 MochaMocha是一个测试框架。提供了一个结构来组织和运行你的测试代码。它定义了测试的骨架。 1234567...
Rust
学习网站:【官方文档】[https://doc.rust-lang.org/book/title-page.html]【HOH共学营】[https://github.com/gpteth/lets-rust/blob/main/tutorial/02_memory_management.md] 开始先搭建环境,太久远了,这里不赘述了,可去官网下载。以下命令最好在GitBash里面执行。创建新项目: 1cargo new <hello-rust> 有可能: 1cargo new --lib my_lib 编译并运行: 12cargo buildcargo run 基础编程概念关于变量一旦将值绑定到名称,就无法更改该值。 1234567fn main() { let x = 5; println!("The value of x is: {x}"); //错误! x = 6; println!("The value of x is: {x}");...
Foundry框架
Foundry 的优势是完全使用 Solidity 进行开发与测试,且Foundry 构建、测试的执行速度非常快。 对比HardHat 维度 Foundry Hardhat 开发语言 纯 Solidity(测试、部署、脚本都用 Solidity) JavaScript/TypeScript(测试、脚本)+ Solidity(合约) 学习曲线 对 Solidity 开发者更友好,上手快 需掌握 JS/TS,适合全栈背景开发者 测试效率 原生支持多线程,测试速度极快 基于 Node.js,测试速度较快但略逊于 Foundry 生态集成 生态较新,工具链集成度高(铸币、Fuzz 测试等) 生态成熟,插件丰富(如 Hardhat Etherscan、Hardhat Deploy) 部署流程 部署脚本用 Solidity 编写,简洁直接 部署脚本用 JS/TS,灵活性高 Fuzz 测试 原生支持,内置模糊测试工具 需依赖第三方插件(如hardhat-fuzz) 调试体验 调试功能较弱,主要依赖日志输出 内置调试器,支持断点、单...
Web3通识
共识算法PowPoW 的概念最初并非为加密货币而设计的。它是由 Cynthia Dwork 和 Moni Naor 于 1993 年提出的,旨在阻止针对电子邮件服务的垃圾邮件攻击。 工作量证明所涉及的计算需要一定的时间和资源。对于普通用户来说,这种额外的工作量是可以接受的,因为它不会显著影响正常的邮件操作。然而,对于通常发送数千封垃圾邮件的垃圾邮件发送者来说,这个计算过程会消耗大量的时间和资源。这种机制大大增加了发送垃圾邮件的成本,从而有效减少了垃圾邮件的数量。 2008 年,化名中本聪(Satoshi Nakamoto)的个人或团体在创建比特币时应用了 PoW 机制。 比特币是一个去中心化的分布式网络。发起新交易时,网络内没有中央权威机构来验证和确认交易。为了防范恶意攻击,需要一种机制来确保所有网络参与者(节点)对交易记录的有效性和区块链状态达成一致。PoW 机制解决了这一共识问题,为比特币网络提供了去中心化的安全性,确保其运行不依赖于任何单一实体,并维护了网络的完整性。 图源:HackQuest 最长链原则:在比特币网络中,众多矿工同时挖矿,经常产生多个合法区块,从而导致区块...
前端-回声每周任务总结
Week2(基础表单+鱼)需加强的点 <label> 标签的 for 属性需要与对应表单元素的 id 属性值匹配才能建立关联,否则点击文字不会触发单选按钮的选中状态。 对于单选按钮(type="radio"),需要给同一组选项设置相同的 name 属性(如name="gender"),这样它们才能选了一个就不能选另一个。 下拉框选择: 12345<label for="direction">选择方向:</label><select id="direction" name="direction"> <option value="web-frontend">Web 前端组</option> <option value="web-backend">Web 后端组</option></select><br /> ...
ERC20
什么是ERC20?就是一份技术规范(一键发币模板)。2017年定稿。从此任何钱包交易所与DApp都不再需要为每个新代币进行定制开发,直接用这个模板就行。 EIP-20(全称为 Ethereum Improvement Proposal 20),也常被称为 “ERC-20 标准”(ERC 即 Ethereum Request for Comments,是 EIP 被社区接受后的正式名称)。它定义了 fungible token(可替代代币)的统一接口规范,让不同代币在以太坊网络中能被一致地交互和管理。 内容ERC20标准提供了name、symbol、decimals等元数据接口,用于描述代币的基本信息,如名称、符号和小数位数,方便用户识别和使用。 6个函数 总供应量 1function totalSupply() public view returns (uint256) 转账(从自己账户直接转移代币) 1function transfer(address _to, uint256 _value) public returns (bool success) 余额查询 ...
HardHat框架
开始安装并初始化12cd ...npx hardhat --init 使用 OpenZepplin 等第三方库: 1npm install @openzeppelin/contracts --save-dev 在合约里的体现: 1import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; 编译合约1npx hardhat compile 成功编译后,会在 artifacts/contracts/ 目录下生成Name.json ,包含了智能合约的 ABI 、字节码(Bytecode)等。 运行测试12npx hardhat testnpx hardhat test <文件名> 其实我们在测试时, 合约已经部署到了 Hardhat 内置的网络上。 部署合约在scripts文件夹,新建一个deploy.js 用来写部署脚本。 12345678# 部署到Hardhat的「默认内置网络」npx hardhat run scripts/deploy.js# 本地部署npx hardhat ru...
Git版本控制
开始Git 管理文件有 3 个关键区域: 命令学习1.设置账号 12345678git config --global user.name "March" //用户名git config --global user.email 1342454075@qq.com //邮箱git config --global credential.helper store //保存git config --global --list //查看git config --global --unset user.email //删除邮箱(用户名类似) 2.管理文件 12345678910111213141516171819202122git init //初始化:在当前文件夹创建一个Git仓库git status //查看工作区、暂存区的文件状态echo "I am learning git.">test47.txt //写入内容到某一个文件,没有文件则创建,有文件则内容覆盖掉type test47.txt //查看文件内容(WindowsCMD适用)...
Solidity
学习网站:Solidity 官方文档WTF 学院 代码框架123456// SPDX-License-Identifier: MITpragma solidity ^0.8.0;contract MyContract {} 第一行是SPDX许可证标识,用于声明该合约使用 MIT 开源许可证。在 Solidity 0.6.8 及以上版本中,推荐显式声明许可证,它告诉用户该合约的使用权限和限制。第二行pragma是 Solidity 中的关键字,用于指定编译器版本规则。 版本号在任何一个Solidity智能合约中,首先需要的就是Solidity的使用版本,它应该被标注在Solidity代码的最上面。 Solidity是一个更新频率很高的语言,和别的语言相比,它总会有新版本,所以我们需要告诉代码,要用哪个版本。 ^0.8.0(最常见的形式):表示支持0.8.0及以上的版本(同 >= 0.8.0)。 0.8.22:表示只支持0.8.22版本。 = 0.8.0 <= 0.9.0:表示支持0.8.0及以上0.9.0及以下的版...







