| timezone |
|---|
UTC+8 |
GitHub ID: qiujingGit
Telegram: @微信:Q34518362970
重庆,想进入web3行业,意向后端开发岗位,INFP,最近在学习go
听会毕业典礼
-
参加晚上的实现岗位宣讲会,准备投递BGA的全栈开发工程师
-
发现一个宝藏web3基础学习网站:https://www.alchemy.com/university
- 跳表主要是通过多层链表来实现,底层链表保存所有元素,而每一层链表都是下一层的子集。
-
插入时,首先从最高层开始查找插入位置,然后随机决定新节点的层数,最后在相应的层中插入节点并更新指针。
-
删除时,同样从最高层开始查找要删除的节点,并在各层中更新指针,以保持跳表的结构。
-
查找时,从最高层开始,逐层向下,直到找到目标元素或确定元素不存在。查找效率高,时间复杂度为O(log)
哈希冲突指的是:两个或多个不同的原始数据(键值 Key),经过哈希函数(Hash Function)计算后,得到了相同的哈希值(Hash Value),最终映射到哈希表的同一个存储位置。
有序集合(Sorted Set)是一种能够保持元素有序性,同时支持高效插入、删除和查找操作的数据结构。
- 基于数组 / 列表的实现(简单但低效)
- 基于链表的实现(优化插入删除但牺牲查找)
- 基于二叉搜索树(BST)的实现
- 中序遍历可得到升序序列
- 红黑树(Red-Black Tree)
- AVL 树
- 进程是独立的程序实例,资源隔离但开销大
- 线程是进程内的执行流,共享资源且开销中等
- 协程是用户态的轻量级线程,开销极小但需要程序主动调度
本质原因是多个协程的并发执行特性与共享数据的非原子操作之间的矛盾
- 协程的并发执行特性,Go 语言的协程由 runtime 调度,多个协程可能在不同的 CPU 核心上并行执行,或在同一核心上快速切换执行,切换时机不确定。
- 非原子操作的拆分执行,看似简单的操作(如 i++)在底层会被拆分为多个 CPU 指令(读取、修改、写入)
- 缓存一致性问题,现代 CPU 都有缓存机制,不同核心上的协程可能看到共享数据的不同缓存副本,需要同步机制(sync.Mutex、channel)
- 一个Dao是怎么运行的
- Dapp技术开发
- 流动性池设置:
- Uniswap V3:每个交易对只能有 4 个固定费率的池子,分别是 0.01%、0.05%、0.3%、1%,池子对应的 tick space 也各不相同,创建池子时只能选择这 4 种中的一个。
- Uniswap V4:每个交易对理论上可以有任意数量的池子,每个池子的费率可以是任意值,tick space 也可以是任意值,这使得流动性池的设置更加灵活,但也可能导致流动性碎片化。
- 合约架构:
- Uniswap V3:每个流动性资金池都部署新的合约,创建资金池和执行多池兑换的成本较高。
- Uniswap V4:采用单例模式,所有资金池都存储在一个合约中,即 PoolManager 合约进行统一管理,节省了大量的燃料成本,提高了跨池路由效率。
- 交易机制:
- Uniswap V3:每次交易都需要计算所有相关仓位的余额,涉及跨池交易时,需要在多个池子间多次执行 transfer,交易成本较高。
- Uniswap V4:引入闪电记账机制,每个操作前会先做一个锁定,锁定期间只会更新一个称为 delta 的内部净余额,仅在锁定结束时才进行外部转账,大大节省了交易成本。
- 功能扩展性:
- Uniswap V3:功能相对固定,缺乏灵活的定制化能力。
- Uniswap V4:引入 Hooks 机制,允许开发者在交易流程的不同阶段插入自定义逻辑,大大提升了协议的灵活性和可扩展性,例如可以实现动态费用、链上限价单、时间加权平均做市商(TWAMM)等功能。
- 对原生 ETH 的支持:
- Uniswap V3:不直接支持原生 ETH 交易对,需要通过 WETH 进行交易,增加了交易成本。
- Uniswap V4:恢复对原生 ETH 交易对的支持,原生 ETH 转账的燃料成本大约是 ERC-20 转账的一半,降低了交易成本。
- 代币记账:
- Uniswap V3:主要使用 ERC20 代币进行交易和流动性提供。
- Uniswap V4:引入了 ERC1155 代币用于额外的代币记账,用户可以将代币保留在单例合约中,避免 ERC20 频繁转入和转出合约,对于频繁交易者或流动性提供者非常有价值。
- 集中流动性(Concentrated Liquidity):重构流动性分布逻辑
- V2 在 x*y=k 的情况下,做市的价格区间是 (0, ∞)。实际交易往往只在一个相对较窄的价格区间内发生,这就导致大部分资金处于闲置状态,无法为 LP(流动性提供者)带来收益(手续费)。
- V3 允许LP自主选择特定价格区间部署资金,而非全区间。例如,LP 可将 ETH/USDC 流动性仅部署在 1800-2200 美元区间,使资金集中在交易活跃的价格带。
- 流动性池的精细化管理:多费率层级与聚合流动性
- 多费率选择:
- V2 中每个交易对仅有一种固定手续费率(0.3%),无法匹配不同资产的波动特性。
- V3 为每个交易对提供三种费率层级(0.05%、0.3%、1%),LP 可根据资产波动性选择:
- 稳定币对(如 USDC/USDT)选 0.05%(低波动→低费率吸引交易);
- 高波动币对(如 ETH/ALT)选 1%(高风险→高费率补偿 LP)。
- 聚合流动性:同一交易对的不同费率池和不同价格区间的流动性被统一聚合,交易者无需手动选择池,协议会自动匹配最优流动性。
- 仓位分离与 NFT 化:LP 资产的精细化管理
- V2 的问题:同一交易对的所有 LP 资金混合在单一池中,LP 无法区分自己的资金区间,且退出时需赎回全部份额。
- V3 的改进: 每个 LP 的流动性头寸(Position)被独立记录,包含其选择的价格区间、费率层级和资金量。 头寸被NFT 化(ERC-721 代币),代表对特定区间流动性的所有权。LP 可单独管理某笔头寸(如添加 / 移除资金、转移给他人),实现精细化操作。
- 价格计算与滑点优化:更高效的交易执行
- V2 的局限:基于恒定乘积公式(x*y=k),价格随交易深度线性变化,大额交易滑点较高。
- V3 的改进: 保留恒定乘积模型核心,但仅在 LP 设定的价格区间内生效。由于流动性集中,相同资金量下,区间内的实际流动性深度更高,滑点显著降低。 引入 “流动性累积量”(Liquidity Accumulator)机制,优化价格计算精度,尤其在极端价格波动时减少误差。
- Gas 费优化:减少链上存储与计算
- V3 通过优化数据结构(如用 Tick 索引替代全区间存储)和简化计算逻辑,大幅降低了交易和流动性操作的 Gas 消耗。例如,添加流动性时仅需记录区间上下限和资金量,无需遍历全价格轴。
- 针对高频操作(如频繁调整流动性区间),设计了更高效的更新机制,进一步降低链上成本。
Uniswap V3 的本质是从 “被动提供全区间流动性” 转向 “主动管理定向流动性”,通过让 LP 自主选择风险与收益的匹配方式(价格区间 + 费率),实现资金效率的质的飞跃。这一改进不仅提升了 LP 的单位资金收益,也通过集中流动性降低了交易者的滑点,同时保留了 AMM 的去中心化和无需许可特性,奠定了其在 DEX 领域的技术领先地位。
v2 版本最大的痛点是资金利用率(Capital Efficiency)太低,v3 版本在解决这个问题的同时,还带了了新的改进,总体总结如下:
- 可灵活选择价格区间提供流动性
- 更好用的预言机
- order book 功能
- 灵活的费率
- 学习Gin和GORM框架使用
- Golang-ethclient示例程序
- 参加晚上关于web3小白初入职场问题解答分享会
- 减少存储操作(Storage Write)
- 读取存储第一次需 2100 gas(后续 100 gas),而内存读取仅 3 gas; -----> 多次访问同一存储数据时
- 每次写入 storage 的成本高达 20,000 gas;-----> 优先使用 memory。
- 使用位压缩(Bit Packing)
- 将多个变量压缩到一个 uint256 中以节省存储空间。
struct Packed {
uint128 a;
uint128 b;
}- 减少不必要的运算,如循环时 array.length 缓存到变量中。
- 函数可见性选择
- external 比 public 更节省 gas,适用于仅被外部调用的函数。
- 最小权限原则(Least Privilege)
- 模块化结构便于审计
- 显式错误处理与事件记录
必要性:
- 智能合约一旦部署无法修改,审计是风险控制关键手段。
- 资金安全:避免用户资产被盗。
- 法律合规:一些监管要求必须审计证明。
- 交互流程
- 初始化连接:前端检测并连接 Web3 提供者
- 用户授权:请求用户授权访问钱包账户
- 合约实例化:使用 ABI 和合约地址创建合约实例
- 函数调用:通过合约实例调用智能合约函数
- 交易签名:钱包对交易进行数字签名
- 广播交易:将签名交易发送到区块链网络
- 状态更新:获取交易结果并更新前端界面
- 合约 ABI
- ABI(Application Binary Interface,应用二进制接口)是智能合约对外提供的接口描述规范。
- 在前端,ABI 以 JSON 格式定义,描述合约中的函数、参数、返回类型等。
- ABI 是实现前端与合约交互的基础,前端可通过 ABI 调用对应函数、读取状态变量。
- 完成 ABI 导入与钱包连接后,通过 Web3.js 创建合约实例,绑定合约地址与 ABI,从而可直接调用合约中的函数接口。
// 创建合约实例
contract = new web3.eth.Contract(contractABI, address);- 合约方法调用
- send方法
- 用于执行状态改变的交易
- 需要指定 from 参数(发送者地址)
- 返回交易对象,包含 transactionHash 等信息
- 用户需要在钱包中确认交易并支付 gas 费用
- call方法
- 用于执行只读查询或者模拟操作以判断某笔交易是否会成功
- 不需要 gas 费用,不会改变区块链状态
- 可以直接获取返回值
- 前端(User Interface):
- 前端页面
- 使用钱包进行身份验证和签署交易
- 智能合约(Smart Contracts):
- 部署在区块链上的业务逻辑
- 数据检索器(Indexer):
- 使用传统的数据库记录智能合约释放的日志事件。
- 在前端进行数据展示时需要检索器内的数据。一个简单的示例是某 NFT 项目需要展示用户持有的所有 NFT,但是 NFT 合约并不会提供通过输入地址参数返回该地址下的所有 NFT 的函数,此时我们可以运行数据检索器将 Transfer 事件读取后写入传统数据库内,前端可以在传统数据库内检索用户持有的 NFT 数据。
- 区块链和去中心化存储(Blockchain & Decentralized Storage):
- 数据存储如IPFS和Arweave也是中心化的,数据会在多个节点上备份。
- 状态机模式: 智能合约本质上是一个状态机,通过交易改变合约状态。
- 事件驱动编程: 使用事件(Events)记录重要的状态变化,便于前端监听和日志记录。
- 模块化设计: 通过继承和库(Library)实现代码复用和模块化。
重入攻击(Reentrancy Attack)是智能合约中最常见且危害极大的安全漏洞之一。该攻击方式通常发生在合约向外部地址发送以太币或调用外部合约函数时,攻击者利用回调机制在合约状态更新之前重复调用受影响的函数,从而多次提取资金或重复执行某些操作,造成资产损失或逻辑混乱。
-
攻击原理简述,典型的重入攻击流程如下:
- 合约调用外部合约或地址(如 call 发送以太币);
- 外部合约在其回调函数中重新调用原合约尚未更新状态的函数;
- 原合约在状态尚未变更的前提下再次执行逻辑;
- 攻击者反复进入该函数,实现多次提现等恶意操作。
-
防护措施:
- 检查-生效-交互模式(CEI Pattern):
contract SecureContract {
mapping(address => uint256) public balances;
function withdraw() external {
uint256 amount = balances[msg.sender];
require(amount > 0, "No balance");
// 先更新状态
balances[msg.sender] = 0;
// 后进行外部调用
(bool success,) = msg.sender.call{value: amount}("");
require(success, "Transfer failed");
}
}- 重入锁(Reentrancy Guard):
contract ReentrancyGuard {
bool private locked;
modifier noReentrant() {
require(!locked, "Reentrant call");
locked = true;
_;
locked = false;
}
}
contract SecureWithGuard is ReentrancyGuard {
mapping(address => uint256) public balances;
function withdraw() external noReentrant {
uint256 amount = balances[msg.sender];
require(amount > 0, "No balance");
balances[msg.sender] = 0;
(bool success,) = msg.sender.call{value: amount}("");
require(success, "Transfer failed");
}
}学习创建第一个NFT:https://nft.myfirst.io/
- 保存、转发助记词或者密钥时,采用分段复制 + 手动输入 + 断网等多种方式,降低整体泄漏风险。
- 保持良好的电脑和手机使用习惯,不安装来历不明的软件。
- 很多资深人士的做法是将资产放入硬件钱包,每次需要对外交互的时候,都重新创建一个新钱包,用完即废弃。
- 项目是否在明确、受监管的司法辖区内注册
- 是否为了取得合规资质,经过专业机构的第三方审计或安全测试
- 是否具备KYC、AML等反洗钱与用户身份识别制度
- 是否对外公开项目负责人、团队背景、资金来源路径等基本信息
- 是否具备高风险模块
- 是否存在高风险的扩张方式(传销等)
自 2017 年以来,中国监管部门已陆续发布多项针对虚拟货币的限制政策,主要包括:
- 禁止 ICO(首次代币发行);
- 禁止虚拟货币交易所运营与提供撮合服务;
- 明确虚拟货币不具有法偿性,不得作为支付工具;
- 禁止境外交易平台向中国境内居民提供服务;
- 打击以虚拟货币为载体的非法集资、传销、洗钱、赌博等活动。
中国刑法中不仅规定了属地管辖,同时也规定了属人管辖,也即即便境外部分在中国境外犯罪的,中国刑法也具有管辖权,届时境内的主体和个人可能需要承担相应的刑事责任,即便不是主犯,也可能会被认定为共同犯罪或者帮助犯罪。
DeFi(去中心化金融)、NFT(非同质化代币)、DAO(去中心化自治组织)与 MEME(模因币)四大领域
Uniswap 通过恒定乘积公式:x * y = k 公式,自动决定每个交易的价格和兑换率。它确保了池子的总价值始终保持平衡,避免了价格波动过大。
借贷模式与超额抵押 稳定费率与清算机制
往往缺乏明确的技术价值,但通过强大的社区共识和文化认同获得价值
练习模拟网站:https://defihacklabs.io/
- 概念:区块链是一种去中心化的分布式账本技术,用于在网络节点之间安全、透明且不可篡改地记录事务数据(比如交易数据)。
- 结构:
- 特性:
- 去中心化(Decentralization)
- 不可篡改性(Immutability)
- 透明性与可追溯性(Transparency & Traceability)
- 匿名性与隐私保护(Anonymity & Privacy)
- 概念:比特币(Bitcoin)是一种去中心化的数字货币,是区块链技术的首个成功应用。
- 特点:
- 具有货币的属性,不会通胀。
- 价格由供需决定。
- 作为维系去中心化区块链网络的代币奖励。
- 用户发起交易:用户通过钱包应用发起转账、智能合约调用等操作
- 交易广播:交易信息被广播到整个网络中的各个节点
- 节点验证:网络中的矿工节点验证交易的合法性(余额是否足够、签名是否正确等)
- 打包成块:通过共识机制(如工作量证明),矿工将验证过的交易打包成新的区块
- 链接上链:新区块被添加到区块链上,更新全网的账本状态
- 奖励发放:成功打包区块的矿工获得代币奖励和交易手续费
区块链根据访问权限与治理模式,大致可分为三类。按照去中心化程度从高到低排列。
Web3 ≠ Web 3.0
Web3 是区块链驱动的革命 Web 3.0 是语义网技术驱动的数据组织升级
以太坊(Ethereum)是继比特币之后最具影响力的区块链平台,由程序员维塔利克・布特林(Vitalik Buterin)于 2013 年提出构想,2015 年正式上线。它不仅是一种加密货币(其代币称为 “以太币”,简称 ETH),更核心的是一个支持智能合约的去中心化平台,旨在实现 “世界计算机” 的愿景 —— 让开发者能在其上构建和运行去中心化应用(DApps)。
- 工作量证明(PoW)转向权益证明(PoS)
- The Merge(合并)
现在的以太坊实际上是两层结构:
- 执行层:处理交易、智能合约(原主网)
- 共识层:管理验证者、确定区块顺序(信标链)
- 准入门槛:质押 32 ETH 成为验证者
- 工作方式:系统随机选择验证者来提议和验证区块
- 奖励机制:验证者获得新发行的 ETH + 交易费用
- 惩罚机制:作恶者质押的 ETH 被销毁(Slashing)
核心特点:
- 图灵完备:就像真正的电脑一样,EVM 可以执行各种逻辑,比如 if 判断、循环等。
- 全球同步:每个矿工/节点都会自己执行一遍合约代码,保证结果一样。
- 隔离安全:EVM 把合约“关”在一个小房间里运行,不允许它乱访问用户的数据和网络,保护隐私和安全。


