代币水龙头项目🎃
一、背景 项目地址:https://github.com/chitian-victor/pumpkin_faucet 这是一个基于 Next.js 和 Foundry 构建代币水龙头项目,支持用户在一定的时间间隔内领取指定数量的代币,仅供学习使用 项目展示 后续可以自行拓展的功能: 支持修改领取间隔以及领取数量 支持捐赠代币 支持修改代币和水龙头地址 项目部署&体验 在进入开发之前一定要清楚,我们做的到底是个什么东西….. 1. 后端部署12345cd backend# 首先,单开一个 terminal 执行下面的指令启动 foundry 的测试区块节点,控制台会输出固定的 10 个公钥和私钥地址anvil# 之后再单开一个 terminal 部署上我们的合约,并进行初始化make init 2. 前端部署123cd frontendnpm installnpm run dev 3. 修改水龙头地址 path: pumpkin_faucet/frontend/components/context.tsx 12// 找到下面...
以太坊扩容方案 - Layer2
一、背景区块链技术存在着“不可能三角”,即无法同时达到 可扩展(Scalability) 、去中心化(Decentralization) 、安全(Security) ,三者只能得其二 可扩展性:每秒可以处理大量交易。 去中心化:拥有大量参与区块生产和验证交易的节点。 安全性:获得网络的多数控制权需要非常高昂的成本。 以太坊的底层设计是将安全性与去中心化 放在了不可能三角的首位,这也就造成了性能的先天不足,无法满足大规模的交互。当前以太坊的 TPS 约 25-30 TPS(出块 12 秒 / 块,Gas 上限 60M,2025 年Fusaka 升级后) ,对比传统支付系统:Visa 的峰值 TPS 约为 24,000 笔 / 秒,支付宝的峰值 TPS 约为 100,000 笔 / 秒。以太坊的性能差距达到了千倍级别,根本无法支撑大规模的日常交易。 二、扩容手段 简单说,以太坊扩容就是为了又快又省钱,提升用户体验 非主流扩容手段 以下的扩容手段目前已经不再是主流方案,而且大多也都转型为了 rollup,可以选择性了解 分片(sharding)...
EVM(以太坊虚拟机)
一、定义EVM 全称是 Ethereum Virtual Machine ,具备以下特性: 虚拟运行环境: 它不直接运行在硬件上,而是作为一个软件层运行在每一个以太坊节点(计算机)中。 沙盒化(Sandboxed): EVM 是完全隔离的。在 EVM 中运行的代码(智能合约)无法访问网络、文件系统或其他进程。这保证了即使合约有恶意代码,也不会损害节点本身。 统一性: 无论在 Windows、Linux 还是 macOS 上运行以太坊节点,EVM 的执行结果都是完全一致的。 二、工作原理 1. 代码的编译与执行流程 编写: 开发者写好 Solidity 代码。 编译: 编译器将代码转换为 Bytecode(字节码)。这是 EVM 唯一能读懂的语言(一串十六进制数字)。 部署: 字节码被作为数据发送到区块链上存储。 执行: 当用户调用合约时,EVM 读取这些字节码,并将其分解为 Opcode(操作码) 逐行执行。实际是底层的 switch-case 解释器中逐条触发宿主机早已编译好的对应逻辑「比如 go 编写的 geth,把 Opcode 映射成了已经编译好的 go 代码,复用这...
errgroup 改进版
一、概述 golang官方版本:golang.org/x/sync/errgroup 改进版:https://github.com/chitian-victor/errgroup 核心方法: golang官方版本的介绍 errgroup.WithContext, 初始化Group变量,生成新的带有cancel方法的context变量 1234func WithContext(ctx context.Context) (*Group, context.Context) { ctx, cancel := context.WithCancel(ctx) return &Group{cancel: cancel}, ctx} Group.Go,发起协程,监听到error产生,调用cancel方法 12345678910111213141516171819func (g *Group) Go(f func() error) { if g.sem != nil {...
用 python 实现一个记忆助手
一、背景 仓库地址:https://github.com/chitian-victor/memory-assistant 记忆的本质,无非就是重复再重复。为了适配我日常工作与生活中的英语需求,一款辅助提升词汇量的工具应运而生。它不止于背单词,而是万物皆可记,万物皆可背。市面上很多单词软件都只能背单词,而且是固定词库里面的,不足够开放,这也是我开发该工具的主要原因,要不然就不会重复造轮子了。 二、工具描述使用方式 安装依赖: python >= 3.11 pip install tkmacosx 执行 make 指令生成软件包「软件包位置:./dist/app.app」 数据默认存储在了~/my_github/memory-assistant-private/v2/data/items.txt,可以通过修改代码修改存储位置 基本功能 支持手动添加词条 支持生成指定数量的复习词条列表 支持词条打标:认识/不认识,并且支持删除 核心算法 这里的算法指的是如何为每个词条生成需要复习的权重,这里参考了艾宾浩斯公式,同时加入了自...
用 go 实现一个协程池
描述MVP[已实现]: 固定协程/worker数量 自动领取&执行任务 支持协程池停止 支持任务提交&等待完成 支持调整任务队列长度 拓展[待添加]: 支持协程数量动态/手动调整:可以通过新旧替换的方式,先启动新的,再关闭旧的 支持任务超时:利用 context.withtimeout 实现 支持查看任务结果:将 taskFunc 用 struct 包起来,包含任务 ID 和任务结果 代码实现123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103package testimport ( "context" "errors" "...
P2P 简介
1. 节点发现:如何找到第一个节点 引导节点 (Bootstrap Nodes / Seed Nodes): 这是 P2P 网络的“出生点”。P2P 软件的源码里通常会硬编码(Hardcode)几个由官方或社区维护的、长期在线的公网 IP 地址。或者,种子文件里面会带有下载节点 IP 地址 启动流程: 你的节点启动后,会先连接这些引导节点。引导节点本身不处理业务逻辑,它只做一件事——把它认识的其他几十个节点的 IP 列表发给你。拿到列表后,你就可以断开引导节点,去和这些普通节点建立真实的连接了。 2. 网络拓扑与路由 (Topology & Routing):怎么传递消息? 无结构网络 (Unstructured) & Gossip 协议: 原理: 节点之间是随机连接的。当你想发送一条消息时,你把它发给你认识的邻居(比如 5 个节点),这 5 个邻居再各自发给他们的邻居。就像病毒传播或者人群中散播“流言(Gossip)”一样,消息会呈指数级扩散到全网。 特点: 极其健壮,哪怕挂掉一半节点网络也能运转。但极其浪费带宽(存在大量重复消息)。 结构...