Skip to content

Latest commit

 

History

History
125 lines (93 loc) · 7.71 KB

Bugmaker_WICL1st .md

File metadata and controls

125 lines (93 loc) · 7.71 KB

Web3 URL 残酷共学第 1 期残酷指引

⚠️ 正式开始前请确保你在身体上和精神上都处于合适的状态,请刻意练习,残酷面对 🆒。为方便检索 The First Web3 URL Intensive CoLearning 简写为 WICL1st,第 2 期即为WICL2nd,第 3 期即为 WICL3rd,以此类推。

⚠️ 报名需要按要求认真填写下面 [ XXX ] 部分,方可通过报名审核,通过审核即可开始自主学习。


[ 你的名字 ]

  1. 自我介绍:

    Bugmaker [ from Cuit,web3 learner,focus on smart contract build and Solidity related project develop ,graduate in 2 years ]

  2. 组队期待:

    长期 [ 寻找区区块链开发的黑客松队友 ]

  3. 你认为你会完成本次 Web3 URL 的残酷学习吗?

    Yes [ Yes 100% or Maybe xx% ]


第 1 期共学时间计划

  • 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 残酷共学频道」通知。

笔记证明 Notes Proof

07.13

  • 今日学习时间:7.13 9 a.m--12 a.m
  • 学习内容小结:solidity语法回顾
    require语句的用法
    msg.sender&&t.orign的区别(msg.sender指的是函数的调用者,tx.orign指的是合约总的发起人,一般是钱包地址)
    mapping的用法,包括赋值、查询、删除语句
    引用类型:对于已分配好的引用类型,对原有值的改变不会影响现有值
    字符串:string.concat--字符串连接,bytes().length--获取字符串长度
    复习了常见的控制流语句

07.14

  • 今日学习时间: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。因为这是交易的最小单位,其他流动性参与者要想添加流动性,需要等价的大量代币,其价格可能高到大部分人无法参与。

07.15

  • 今日学习时间:7.15 9 a.m.--2 p.m.
  • 学习内容小结:Solidity 语法复习
try-catch 语法
library库函数用法

库函数属性无论为internal还是public,都可以被合约所调用。调用internal属性的函数,等同于调用合约内部的internal属性的函数,无需额外的gas消耗;而调用public属性的函数则等同于合约public函数的调用,会产生额外的合约调用开销。
使用using for,可将库函数作为成员变量赋值给类型,例如,using Math for uint256 表示之后,uint256类型的数据可以直接调用Math库中的函数,并将自身作为第一个参数。

Override&&Virtual

只有被Virtual定义的函数,才能被重写。重写的函数必须保证参数列表和返回值类型一致。这包括参数的顺序、类型和名称。
重写需要有override属性

FAQ

枚举能和整型进行类型转换吗?
枚举类型可以与整数进行显式转换,但不能进行隐式转换。

//修饰符的语法结构
modifier demo() {
 ...  // 函数执行前执行的代码
  _;   // 执行被修饰的函数
  ...  // 函数执行结束后执行的代码
}

接口有哪些特性
接口不能实现任何函数;
接口无法继承其它合约,但可以继承其它接口;
接口中的所有函数声明必须是external的;
接口不能定义构造函数;
接口不能定义状态变量;

07.17

XXX