timezone |
---|
Asia/Shanghai |
-
自我介绍
WTF Academy 成员,参与过WTF Academy相关开发、校对、翻译,担任本次学习的助教
-
你认为你会完成本次残酷学习吗?
可以完成
学习ERC4626 ,你把ETH存了后,可以在金库得到stETH作为质押凭证,同时有一些项目是可以用stETH作为资产抵押去获得收益,提供了非常大的灵活性。
学习EIP712数据签名,在之前的简易签名中,会隐藏原始的签名信息,在712签名中可以看到签名的原始数据,更透明,更安全。
学习ERC 2612,可以做到A账号没ETH,但是由B账号完成委托任务,在抢跑中见到过。
学习了三种完成跨链桥的方法。
学习多重调用,可以在一次call中完成多个函数,并且要么都成功,要么都失败,完成很多功能。
学习去中心化交易所,或者说组LP的功能,后期有能力构建完成一部分。
学习闪电贷,可以在没有抵押的场景下借到款,但是整个动作完成后需要马上偿还代币。
学习分账,重点是 Code is Law ,要是银行也可以自动替人执行分账,那就太牛了。
学习线性释放,重点是约束股权人或者大户,让他们没法一次性全部解售,跟股票限制股东是一回事。
学习代币锁,防止组LP的庄直接跑路,组LP的时候如何检测呢?后面研究下。
学习时间锁,为了防止黑客或者某些安全事件,增加锁定期,在锁定期无法操作。
学习代理合约,正常合约能让人们知道它的工作原理,但是如果出现安全问题,也没办法修复,采用代理合约方式,可以升级合约修补漏洞。
学习可升级合约,可升级合约和代理合约的区别在于它的实现方式的变更,代理合约是一个合约,直接更换代理合约即可,可升级合约链接的合约直接可以更新。
学习透明代理,因为升级合约时容易遇到函数选择器相同的情况,简单来说就是两个函数的特征码是一样的,就不知道调用哪个了,透明代理指定管理者直接可以选择调用哪个函数,避免升级时出现无法解决的问题。
学习通用可升级代理,简单来说,没看懂,与透明代表比较起来,省gas。
学习多签钱包,可以让自己的钱包更安全,多个人一起才能控制账号。但是又出现了安全问题,如果你的账号被多签,钱包所有权就转移了,简单来说,成了别人的钱包了,见过一次。
学习数字签名内容,了解到数字签名实际上为了防止误签了恶意交易,所以“倡导”在消息中添加特殊字符,但是最近看到好多大佬也遇到了误签而被盗的问题,大家还是得仔细检查签名信息。
学习NFT的交易逻辑,可以自己搞交易所。
学习链上随机数,随机数的作用在网络中还是非常重要的,任何涉及到概率的问题都是随机数问题,所以之前也有很多因为随机数导致的安全问题,开发中都需要注意。
学习ERC1155,我们正常接触代币,都是一种一种,但是在游戏这个具体场景下,出现了物品的概念,在一个游戏中有非常多的物品,不可能每一个物品都发行一种代币,这样太麻烦,所以引出了ERC1155的功能,一个合约实现一堆的代币,完成物品的功能。
学习WETH,ETH的原始版本实际上并不支持智能合约,需要经过WETH的包装才能支持相应的功能。
学习代币水龙头,可以在上一节发行自己代币的基础上开发水龙头,方便其他人测试与交互。
学习空头合约,通过批量转账方式完成空投的发放。
学习ERC721,可用于发行NFT。同时为了检测功能性,又可以检测ERC165,作为能力的检测。
学习荷兰拍卖,可以防止gas war。
学习默克尔树,只需要完成证明,即可省下数量惊人的手续费,这里就有一点点工作量和证明关系的理解。
学习完前面的语言基础后已经可以进行完整的项目开发了,今天学习如何发行erc20代币,还是比较简单的。直接套用函数就行了。
学习try-catch的异常处理方法,正确处理函数的异常对于我们日常开发非常有必要。
学习到函数选择器,解决了我之前的困惑,为什么abi或者说硬编码也可以用来调用函数,实际上每个函数有自己的methodie,从而确认调用函数对象。
学习hash概念,用于消息的唯一性确认,但是是用来干嘛呢?谁对这个行为敏感呢?再考虑下。
学习ABI编码解码,之前对这个也有简单的了解,为什么呢?有些合约不开源,你想要交互,只能走网页。 你想批量操作,就会研究ABI相关的东西。
学习如何指定合约地址的合约创建方法,听着好像可以干黑客的操作。 学习如何删除合约,还看到了改名原因:) , 可以在销毁合约后进行指定转账的操作。
学习代币对的创建方式和流程,create代币后,通过PairFactory创建代币对,然后通过pair进行管理。
学习委托函数,了解委托函数的运行状态依赖之前的调用函数状态。
学习call 调用方式及call安全性问题。
学习调用其他合约,完成组合功能。
学习 接收和发送eth,可以正确处理资产
学习 库合约的使用方法。
学习 函数重载,了解函数重载的定义和匹配机制。
修复force push main导致的异常
学习 继承,了解到特殊的继承规则,钻石继承指一个派生类同时有两个或两个以上的基类,需要使用特殊关键字super完成。
学习 抽象合约和接口,抽象合约是需要重写或者未完成,都是抽象合约。
接口理解下来就是正常调库中的接口。
学习 异常,了解到三种抛出异常的方法,最省gas的是error。
学习 控制流,控制流即逻辑处理,都是正常开发常见的。
学习到一种插入算法常见错误,uint处理到负数后会报错,大家需要仔细处理。
学习 构造函数和修饰器,构造函数是一种特殊函数,每个合约只能部署一个,用于初始化变量。
修饰器用于处理函数的调用权限,只有某个地址可调用。
学习事件,包括事件的结构和如何触发事件。
evm中的log可以存储事件,分为主题和数据两部分。
学习变量初始化,看到奇怪的名词,空白函数,发现只是起占位的作用,可以在继承函数中实现具体功能,但是具体用途和模板函数有什么区别呢?
AI解释也比较笼统,没理解,后续结合项目了解。
变量初始化完成后可以进行恢复初始化,和C++中的理解不同的是,delete实现的操作是恢复变量的初始值,而不是直接删除这个变量,那看来是只能
进行修改,而不能删除?还是有些奇怪。
学习常数,常数有在声明时候必须初始化的常数,并且不能修改。
也有可以分开处理的常数。
学习函数输出,正常的函数调用中,我们会与协作人员规定函数返回格式,但是代码并没有强力检查。
从而很多情况下,会出现函数结果与预期不符,导致程序崩溃的问题,在web3中规定,一个函数有两个返回值。
returns返回规定的数据格式,return返回具体的返回值。
基于此进行的扩展,可以直接在returns中返回的指定的变量,这样就相当于是初始化,然后直接在函数中调用,就不需要return主动返回。
返回的值也可以留空,不处理。
学习数据位置,正常的数据对象分为两种,变量和常量,在web3中,因为不同的数据的存储是有成本的,
链上成本高,storage数据存储在链上,消耗gas高。
不在链上,就分为两种,一种是常量 calldata ,一种是变量 memory。
变量又分为三种,有一种又是特殊的,可以上链的,是状态变量。
其他的就是常见的局部变量和全局变量。
全局变量又分为两个类型,web3是处理时间与金钱问题,所以以太单位全是整数,没有小数点概念。
时间也是需要精确处理,提高合约的可读性和可维护性。
学习 引用类型,有数组和结构体。
学习映射的规则,比较重要的是映射也是链上的变量数据。
学习 数值类型,除传统的类型外,web3中多了几种类型,分别是地址类,定长字节数组。
此外可以把enum显式转化为int。
学习 函数,我们在常见的函数分类中,分为类内函数和类外函数。
在web3中,有更多的分类,将内外有了更明确的分类。
又分为了
- 内外可同时使用的
- 只能从外调用的
- 只能从合约内调用的,继承的合约可用
- 只能从本合约内调用的,继承的合约也不可用
因为web3中更多都是基于账户操作,权限也更为专业。 分为三种类型,在这节中学习了常见的payable类型函数,用于交易操作。
辅导大家使用git