diff --git a/Bugmaker_WICL1st .md b/Bugmaker_WICL1st .md index e9c438f..447bcfb 100644 --- a/Bugmaker_WICL1st .md +++ b/Bugmaker_WICL1st .md @@ -56,7 +56,7 @@ ## 笔记证明 Notes Proof ### 07.14 -- 今日学习时间:7.14 9 a.m--12a.m +- 今日学习时间:7.14 9 a.m--12 a.m - 学习内容小结:`solidity`语法回顾 `require`语句的用法 `msg.sender&&t.orign`的区别(`msg.sender`指的是函数的调用者,`tx.orign`指的是合约总的发起人,一般是钱包地址) @@ -64,6 +64,30 @@ `引用类型`:对于已分配好的引用类型,对原有值的改变*不会*影响现有值 `字符串`:string.concat--字符串连接,bytes().length--获取字符串长度 复习了常见的控制流语句 +### 07.15 +- 今日学习时间:7.15 2 p.m--5 p.m +- 学习内容小结:`Uniswap V2`概念学习 + +*Flash Swap* +>Uniswap v2增加了一个新特性,允许用户在支付费用前先收到并使用代币,只要他们在同一个交易中完成支付。swap方法会在转出代币和检查k值两个步骤之间,调用一个可选的用户指定的回调合约。一旦回调完成,Uniswap合约会检查当前代币余额,并且确认其满足k值条件(在扣除手续费后)。如果当前合约没有足够的余额,整个交易将被回滚。 +利用的是以太坊交易的原子性,用户已经接受到代币,后续如果检查k值不符合规定,就会回滚交易,整个交易不会被确认,即用户不会收到闪电贷的代币。 + +*WAP--时间加权* +>由于uniswap的价格定义规则,币价由上个区块最后记录的价格决定。在新一笔交易确认之前,修改上个区块的币价,则会导致币价波动。 +假设交易池中有a 200、b 100,以a的来表示b的价格则为b=2a +若在下一笔交易产生之前,向交易池中发送100b,这是b的价格则为b=a,而不是b=2a +这样币价在短时间内偏离了市场价格,可能导致攻击者进行套利操作 +此时Uniswap就采用了TWAP进行控制币价短时间波动 + +*手续费* +>Uniswap 手续费为交易额的0.3%,手续费会根据权重分给LP,交易保证池子满足x*y=k,代币数量可能会发生改变,但是x与y的乘积不变。 +手续费会增加交易池的价值,币的总数可能也会改变。 + +*流动性代币* +>流动性代币(Liquidity Tokens),有时称为流动性提供者代币(LP Tokens),是由去中心化交易所(如Uniswap)发行的代币,用来表示流动性提供者在特定流动性池中的份额。当流动性提供者向流动性池中注入代币时,他们会收到相应的流动性代币作为凭证。 +>流动性代币的数量与交易池中的总价值成比例。例如,如果用户提供了流动性池10%的代币,他们将获得总流动性代币的10%。 +*首次铸币攻击* +>首次铸币攻击是指攻击者在第一次添加流动性时存入最小单位(10的-18次方,即1 wei)的流动性,比如1 wei ABC和1 wei XYZ,此时将铸造1 wei 流动性代币(根号1,二者乘积的算数平方根);同时,攻击者在同一个交易中继续向池子转入(非铸造)100万个ABC和100万个XYZ,接着调用 sync()方法更新缓存余额,此时1 wei的流动性代币价值100万+(10的-18次方)ABC和100万+(10的-18次方)XYZ。因为这是交易的最小单位,其他流动性参与者要想添加流动性,需要等价的大量代币,其价格可能高到大部分人无法参与。 ### 07.16 XXX