
WTF Cairo极简教程: 2. 基本类型 Felt
我最近在学cairo-lang,巩固一下细节,也写一个WTF Cairo极简教程,供小白们使用。教程基于cairo 0.10.2版本 推特:@0xAA_Science|@WTFAcademy_ WTF Academy 社群:Discord|微信群|官网 wtf.academy 所有代码和教程开源在 github: github.com/WTFAcademy/WTF-Cairofeltfelt(field element,域元素)是 cairo 的基本类型,数字,字符串,地址通通由它表示。它是定义在 $[0, P]$ 的整数,其中 P 是一个非常大的质数。在目前的版本中,$P = 2^{251}+17*2^{192}+1$,大小为252 bit。P 具有一些很好的数学性质用于零知识证明,因此没有选择和Solidity一致的256 bit。整型felt 可以被整型赋值,下面的例子中,我们将 7828582 赋值给 res:@view func int() -> (res: felt) { return (res=7828582); } 字节felt 可以被 bytes(十六进制数)赋...

WTF Cairo极简教程: 2. 基本类型 Felt
我最近在学cairo-lang,巩固一下细节,也写一个WTF Cairo极简教程,供小白们使用。教程基于cairo 0.10.2版本 推特:@0xAA_Science|@WTFAcademy_ WTF Academy 社群:Discord|微信群|官网 wtf.academy 所有代码和教程开源在 github: github.com/WTFAcademy/WTF-Cairofeltfelt(field element,域元素)是 cairo 的基本类型,数字,字符串,地址通通由它表示。它是定义在 $[0, P]$ 的整数,其中 P 是一个非常大的质数。在目前的版本中,$P = 2^{251}+17*2^{192}+1$,大小为252 bit。P 具有一些很好的数学性质用于零知识证明,因此没有选择和Solidity一致的256 bit。整型felt 可以被整型赋值,下面的例子中,我们将 7828582 赋值给 res:@view func int() -> (res: felt) { return (res=7828582); } 字节felt 可以被 bytes(十六进制数)赋...

WTF Cairo极简教程: 1. Hello Cairo(5行代码)
我最近在学cairo-lang,巩固一下细节,也写一个WTF Cairo极简教程,供小白们使用。教程基于cairo 0.10.2版本 推特:@0xAA_Science|@WTFAcademy_ WTF Academy 社群:Discord|微信群|官网 wtf.academy 所有代码和教程开源在 github: github.com/WTFAcademy/WTF-CairoCairo 简介cairo(cairo-lang)是StarkNet(以太坊ZK-Rollup扩容方案)智能合约的编程语言。它同时也用于编写可证明程序,证明某个计算已正确执行。Cairo主要有两个特点:ZK友好: Cairo是原生的可证明计算的编程语言,可以直接编译为Stark可证明程序。而Solidity不能。难学: Cairo是低级语言,学习曲线陡峭;并且现在属于开发早期,每个版本都会有很大改变。目前Cairo版本为0.10.2,预计22年年底发行比较成熟的1.0版本。开发工具: Cairo Playground本教程中,我会用cairo playground来运行cairo合约。cairo playgr...

WTF Cairo极简教程: 1. Hello Cairo(5行代码)
我最近在学cairo-lang,巩固一下细节,也写一个WTF Cairo极简教程,供小白们使用。教程基于cairo 0.10.2版本 推特:@0xAA_Science|@WTFAcademy_ WTF Academy 社群:Discord|微信群|官网 wtf.academy 所有代码和教程开源在 github: github.com/WTFAcademy/WTF-CairoCairo 简介cairo(cairo-lang)是StarkNet(以太坊ZK-Rollup扩容方案)智能合约的编程语言。它同时也用于编写可证明程序,证明某个计算已正确执行。Cairo主要有两个特点:ZK友好: Cairo是原生的可证明计算的编程语言,可以直接编译为Stark可证明程序。而Solidity不能。难学: Cairo是低级语言,学习曲线陡峭;并且现在属于开发早期,每个版本都会有很大改变。目前Cairo版本为0.10.2,预计22年年底发行比较成熟的1.0版本。开发工具: Cairo Playground本教程中,我会用cairo playground来运行cairo合约。cairo playgr...

WTF Solidity 合约安全: S10. 貔貅
我最近在重新学 solidity,巩固一下细节,也写一个“WTF Solidity 极简入门”,供小白们使用(编程大佬可以另找教程),每周更新 1-3 讲。 推特:@0xAA_Science|@WTFAcademy_ 社区:Discord|微信群|官网 wtf.academy 所有代码和教程开源在 github: github.com/AmazingAng/WTF-Solidity这一讲,我们将介绍貔貅合约和预防方法(英文习惯叫蜜罐代币 honeypot token)。貔貅学入门貔貅是中国的一个神兽,因为在天庭犯了戒,被玉帝揍的肛门封闭了,只能吃不能拉,可以帮人们聚财。但在Web3中,貔貅变为了不详之兽,韭菜的天敌。貔貅盘的特点:投资人只能买不能卖,仅有项目方地址能卖出。 通常一个貔貅盘有如下的生命周期:恶意项目方部署貔貅代币合约。宣传貔貅代币让散户上车,由于只能买不能卖,代币价格会一路走高。项目方rug pull卷走资金。学会貔貅合约的原理,才能更好的识别并避免被割,才能做一个顽强的韭菜!貔貅合约这里我们介绍一个极简的ERC20代币貔貅合约Pixiu。在该合约中,只有合约拥有者...

WTF Solidity 合约安全: S10. 貔貅
我最近在重新学 solidity,巩固一下细节,也写一个“WTF Solidity 极简入门”,供小白们使用(编程大佬可以另找教程),每周更新 1-3 讲。 推特:@0xAA_Science|@WTFAcademy_ 社区:Discord|微信群|官网 wtf.academy 所有代码和教程开源在 github: github.com/AmazingAng/WTF-Solidity这一讲,我们将介绍貔貅合约和预防方法(英文习惯叫蜜罐代币 honeypot token)。貔貅学入门貔貅是中国的一个神兽,因为在天庭犯了戒,被玉帝揍的肛门封闭了,只能吃不能拉,可以帮人们聚财。但在Web3中,貔貅变为了不详之兽,韭菜的天敌。貔貅盘的特点:投资人只能买不能卖,仅有项目方地址能卖出。 通常一个貔貅盘有如下的生命周期:恶意项目方部署貔貅代币合约。宣传貔貅代币让散户上车,由于只能买不能卖,代币价格会一路走高。项目方rug pull卷走资金。学会貔貅合约的原理,才能更好的识别并避免被割,才能做一个顽强的韭菜!貔貅合约这里我们介绍一个极简的ERC20代币貔貅合约Pixiu。在该合约中,只有合约拥有者...

WTF Solidity 合约安全: S09. 拒绝服务
我最近在重新学solidity,巩固一下细节,也写一个“WTF Solidity极简入门”,供小白们使用(编程大佬可以另找教程),每周更新1-3讲。 推特:@0xAA_Science|@WTFAcademy_ 社区:Discord|微信群|官网 wtf.academy 所有代码和教程开源在github: github.com/AmazingAng/WTFSolidity这一讲,我们将介绍智能合约的拒绝服务(Denial of Service, DoS)漏洞,并介绍预防的方法。NFT项目 Akutar 曾因为 DoS 漏洞损失 11,539 ETH,当时价值 3400 万美元。DoS在 Web2 中,拒绝服务攻击(DoS)是指通过向服务器发送大量垃圾信息或干扰信息的方式,导致服务器无法向正常用户提供服务的现象。而在 Web3,它指的是利用漏洞使得智能合约无法正常提供服务。 在2022年4月,一个很火的 NFT 项目名为 Akutar,他们使用荷兰拍卖进行公开发行,筹集了 11,539.5 ETH,非常成功。之前持有他们社区Pass的参与者会得到 0.5 ETH的退款,但是他们处理...

WTF Solidity 合约安全: S09. 拒绝服务
我最近在重新学solidity,巩固一下细节,也写一个“WTF Solidity极简入门”,供小白们使用(编程大佬可以另找教程),每周更新1-3讲。 推特:@0xAA_Science|@WTFAcademy_ 社区:Discord|微信群|官网 wtf.academy 所有代码和教程开源在github: github.com/AmazingAng/WTFSolidity这一讲,我们将介绍智能合约的拒绝服务(Denial of Service, DoS)漏洞,并介绍预防的方法。NFT项目 Akutar 曾因为 DoS 漏洞损失 11,539 ETH,当时价值 3400 万美元。DoS在 Web2 中,拒绝服务攻击(DoS)是指通过向服务器发送大量垃圾信息或干扰信息的方式,导致服务器无法向正常用户提供服务的现象。而在 Web3,它指的是利用漏洞使得智能合约无法正常提供服务。 在2022年4月,一个很火的 NFT 项目名为 Akutar,他们使用荷兰拍卖进行公开发行,筹集了 11,539.5 ETH,非常成功。之前持有他们社区Pass的参与者会得到 0.5 ETH的退款,但是他们处理...

WTF Solidity 合约安全: S08. 绕过合约检查
我最近在重新学solidity,巩固一下细节,也写一个“WTF Solidity极简入门”,供小白们使用(编程大佬可以另找教程),每周更新1-3讲。 推特:@0xAA_Science|@WTFAcademy_ 社区:Discord|微信群|官网 wtf.academy 所有代码和教程开源在github: github.com/AmazingAng/WTFSolidity这一讲,我们将介绍绕过合约长度检查,并介绍预防的方法。绕过合约检查很多 freemint 的项目为了限制科学家(程序员)会用到 isContract() 方法,希望将调用者 msg.sender 限制为外部账户(EOA),而非合约。这个函数利用 extcodesize 获取该地址所存储的 bytecode 长度(runtime),若大于0,则判断为合约,否则就是EOA(用户)。 // 利用 extcodesize 检查是否为合约 function isContract(address account) public view returns (bool) { // extcodesize > 0 的地址一定是合约...

WTF Solidity 合约安全: S08. 绕过合约检查
我最近在重新学solidity,巩固一下细节,也写一个“WTF Solidity极简入门”,供小白们使用(编程大佬可以另找教程),每周更新1-3讲。 推特:@0xAA_Science|@WTFAcademy_ 社区:Discord|微信群|官网 wtf.academy 所有代码和教程开源在github: github.com/AmazingAng/WTFSolidity这一讲,我们将介绍绕过合约长度检查,并介绍预防的方法。绕过合约检查很多 freemint 的项目为了限制科学家(程序员)会用到 isContract() 方法,希望将调用者 msg.sender 限制为外部账户(EOA),而非合约。这个函数利用 extcodesize 获取该地址所存储的 bytecode 长度(runtime),若大于0,则判断为合约,否则就是EOA(用户)。 // 利用 extcodesize 检查是否为合约 function isContract(address account) public view returns (bool) { // extcodesize > 0 的地址一定是合约...