⚠️ 正式开始前请确保你在身体上和精神上都处于合适的状态,请刻意练习,残酷面对 🆒。为方便检索 The First Web3 URL Intensive CoLearning 简写为 WICL1st,第 2 期即为WICL2nd,第 3 期即为 WICL3rd,以此类推。
⚠️ 报名需要按要求认真填写下面 [ XXX ] 部分,方可通过报名审核,通过审核即可开始自主学习。
-
自我介绍:
Bugmaker [ from Cuit,web3 learner,focus on smart contract build and Solidity related project develop ,graduate in 2 years ]
-
组队期待:
长期 [ 寻找区区块链开发的黑客松队友 ]
-
你认为你会完成本次 Web3 URL 的残酷学习吗?
Yes [ Yes 100% or Maybe xx% ]
-
7 月 8 日 - 7 月 14 日:
-
自我介绍:大家按要求更新上方自我介绍,方面大家互相了解,及后续自由组队方向。
-
Web3 URL 残酷共学频道报道:大家可以自由在残酷共学群里交流分享,互动答疑,根据自身学习阶段情况随时开启自由组队。
-
课前学习:了解残酷共学流程,GitHub 协作共学基础;Web3:// 协议课前学习。
-
-
7 月 15 日 - 7 月 21 日:
- 7 月 15 日 周一晚 8 点- 9 点(北京时间): 第 1 次公开课分享
- 本周共学内容: 涉及 Web3:// 的背景和演进历史;支持 Web3:// 协议的访问方式 (gateway 和 EVM browser)来浏览以太坊上面的数据;熟悉使用 Web3:// 和 EthStorage 早期测试网来部署简单的去中心化网站。
- Homework1: 见课程 PPT。
-
7 月 22 日 - 7 月 28 日
-
7 月 22 日 周一晚 8 点- 9 点(北京时间): 第 2 次公开课分享
-
本周共学内容: 涉及 Web3:// 高级开发工具,包括:在命令行通过 web3curl 来通过 Web3:// 协议下载数据,通过 ethfs-uploader 批量上传网页数据,通过 manual 模式来搭建去中心化多人交互全链网站;及深入理解以太坊的存储模型和 gas 开销等。
-
边学边用实战开发: 根据组队情况自由安排。
-
Homework2: 见课程 PPT。
-
-
7 月 29 日 - 8 月 4 日
- 7 月 29 日 周一晚 8 点- 9 点(北京时间): 第 3 次公开课分享
- 本周共学内容: 涉及实际应用案例分享及未来以太坊基础设施在 Web3:// 的重要作用及开发方向等。
- 边学边用实战开发: 根据组队情况自由安排。
- 结营分享: 具体时间及详情另在「Web3 URL 残酷共学频道」通知。
- 今日学习时间:7.13 9 a.m--12 a.m
- 学习内容小结:
solidity
语法回顾
require
语句的用法
msg.sender&&t.orign
的区别(msg.sender
指的是函数的调用者,tx.orign
指的是合约总的发起人,一般是钱包地址)
mapping
的用法,包括赋值、查询、删除语句
引用类型
:对于已分配好的引用类型,对原有值的改变不会影响现有值
字符串
:string.concat--字符串连接,bytes().length--获取字符串长度
复习了常见的控制流语句
- 今日学习时间:7.14 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。因为这是交易的最小单位,其他流动性参与者要想添加流动性,需要等价的大量代币,其价格可能高到大部分人无法参与。
- 今日学习时间:7.15 9 a.m.--2 p.m.
- 学习内容小结:Solidity 语法复习
库函数属性无论为
internal
还是public
,都可以被合约所调用。调用internal
属性的函数,等同于调用合约内部的internal
属性的函数,无需额外的gas
消耗;而调用public
属性的函数则等同于合约public
函数的调用,会产生额外的合约调用开销。
使用using for
,可将库函数作为成员变量赋值给类型,例如,using Math for uint256
表示之后,uint256
类型的数据可以直接调用Math
库中的函数,并将自身作为第一个参数。
只有被
Virtual
定义的函数,才能被重写。重写的函数必须保证参数列表和返回值类型一致。这包括参数的顺序、类型和名称。
重写需要有override
属性
枚举能和整型进行类型转换吗?
枚举类型可以与整数进行显式转换,但不能进行隐式转换。
//修饰符的语法结构
modifier demo() {
... // 函数执行前执行的代码
_; // 执行被修饰的函数
... // 函数执行结束后执行的代码
}
接口有哪些特性
接口不能实现任何函数;
接口无法继承其它合约,但可以继承其它接口;
接口中的所有函数声明必须是external
的;
接口不能定义构造函数;
接口不能定义状态变量;
XXX