
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 合约安全: 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 合约安全 S06. 签名重放
我最近在重新学solidity,巩固一下细节,也写一个“WTF Solidity极简入门”,供小白们使用(编程大佬可以另找教程),每周更新1-3讲。 推特:@0xAA_Science|@WTFAcademy_ 社区:Discord|微信群|官网 wtf.academy 所有代码和教程开源在github: github.com/AmazingAng/WTFSolidity这一讲,我们将介绍智能合约的签名重放(Signature Replay)攻击和预防方法,它曾间接导致了著名做市商 Wintermute 被盗2000万枚 $OP。签名重放上学的时候,老师经常会让家长签字,有时候家长很忙,我就会很“贴心”照着以前的签字抄一遍。某种意义上来说,这就是签名重放。 在区块链中,数字签名可以用于识别数据签名者和验证数据完整性。发送交易时,用户使用私钥签名交易,使得其他人可以验证交易是由相应账户发出的。智能合约也能利用 ECDSA 算法验证用户将在链下创建的签名,然后执行铸造或转账等逻辑。更多关于数字签名的介绍请见WTF Solidity第37讲:数字签名。 数字签名一般有两种常见的重放攻击...
WTF Academy: wtf.academy

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 合约安全: 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 合约安全 S06. 签名重放
我最近在重新学solidity,巩固一下细节,也写一个“WTF Solidity极简入门”,供小白们使用(编程大佬可以另找教程),每周更新1-3讲。 推特:@0xAA_Science|@WTFAcademy_ 社区:Discord|微信群|官网 wtf.academy 所有代码和教程开源在github: github.com/AmazingAng/WTFSolidity这一讲,我们将介绍智能合约的签名重放(Signature Replay)攻击和预防方法,它曾间接导致了著名做市商 Wintermute 被盗2000万枚 $OP。签名重放上学的时候,老师经常会让家长签字,有时候家长很忙,我就会很“贴心”照着以前的签字抄一遍。某种意义上来说,这就是签名重放。 在区块链中,数字签名可以用于识别数据签名者和验证数据完整性。发送交易时,用户使用私钥签名交易,使得其他人可以验证交易是由相应账户发出的。智能合约也能利用 ECDSA 算法验证用户将在链下创建的签名,然后执行铸造或转账等逻辑。更多关于数字签名的介绍请见WTF Solidity第37讲:数字签名。 数字签名一般有两种常见的重放攻击...
WTF Academy: wtf.academy

Subscribe to 0xAA

Subscribe to 0xAA
Share Dialog
Share Dialog


>100 subscribers
>100 subscribers
我最近在重新学solidity,巩固一下细节,也写一个“Solidity极简入门”,供小白们使用(编程大佬可以另找教程),每周更新1-3讲。
欢迎关注我的推特:@0xAA_Science
WTF技术社群discord,内有加微信群方法:链接
所有代码和教程开源在github: github.com/AmazingAng/WTFSolidity
Remix是以太坊官方推荐的智能合约开发IDE,非常易用。Remix让你可以直接在浏览器中快速部署测试智能合约,而不需要安装配置任何程序。这一讲,我们将完整的介绍如何使用Remix部署合约,并调用其中的函数。
Remix官网:remix.ethereum.org

打开官网进入Remix,我们可以看到Remix由四个面板组成:
图标面板:上面有代表不同功能的图标,点击后,相应的功能个会显示在侧面版上。
侧面版:各种功能的 GUI。
主面板:代码编辑器。
终端:将显示与 GUI 交互的结果,也可以在此处运行脚本。

图标面板默认有4个图标,其中文件,编译,部署是最常用的。在你添加更多的remix插件后,它们也会显示在图标面板上。
首先点击文件图标,侧面版会变为文件浏览器。

我们可以在文件浏览器中管理我们的workspace,文件夹和文件。

在contract文件夹下面,有三个remix自带的合约例子,分别是1_Storage.sol, 2_Owner.sol和3_Ballot.sol。
点击1_Storage.sol,代码会显示在主面板的代码编辑器上。这个合约非常简单:它一个状态变量number,在链上存储一个uint256类型的数字;它有两个函数,store()函数将一个数字赋值给number变量;retrieve()展示number变量的数值。
接下来,点击编译图标,进入Solidity Compiler。在这里,我们选择Solidity 0.8.7版本,然后点击Compile 1_Storage.sol按钮进行编译。在合约成功编译后,编译图标上会显示绿色对勾。

你也可以尝试在优化中选在优化(Enable Optimization),次数设置为200,有时会省gas消耗。
下一步,我们要把编译好的合约部署到本地虚拟机或链上。首先点击部署,进入部署界面。

在ENVIRONMENT中,我们可以选择我们部署的环境,默认的是JavaScript VM,所有交易都在本地浏览器的沙盒区块链中执行,使用的是它给你的虚拟钱包地址;你也可以选择Injected Web3,即连接你的metamask钱包,所有交易会在真实的区块链中执行。
这里,我们选择JavaScript VM,你可以在钱包地址(ACCOUNT)栏看到虚拟机给你分配的测试地址。不需要调整Gas,也不用往合约里发送ETH。在CONTRACT栏中选择你要部署的合约Storage。1_Storage.sol文件中只有一个合约,因此默认就是部署它;但当文件包含多个合约时,我们需要手动选择要部署的合约。
点击DEPLOY键,部署完毕!
注意:如果我们选择的是Injected Web3来部署合约,每一笔交易都将上链,需要钱包确认交易并支付gas。
在合约部署成功后,我们可以在Deployed Contracts中找到我们部署的合约Storage。展开它,我们看到合约中的外部函数:store和retrieve。

我们在store函数那行的文本框中输入100,并点击函数名调用它。调用成功后,我们可以在终端上看到log信息,点击Debug按钮可以查看交易详情。

之后,我们调用retrieve函数,显示number变量被成功更新为100。

这一讲,我们介绍了如何使用Remix编译,部署并调用智能合约。Remix非常简单易用,也是·WTF Solidity极简教程选用的IDE工具
我最近在重新学solidity,巩固一下细节,也写一个“Solidity极简入门”,供小白们使用(编程大佬可以另找教程),每周更新1-3讲。
欢迎关注我的推特:@0xAA_Science
WTF技术社群discord,内有加微信群方法:链接
所有代码和教程开源在github: github.com/AmazingAng/WTFSolidity
Remix是以太坊官方推荐的智能合约开发IDE,非常易用。Remix让你可以直接在浏览器中快速部署测试智能合约,而不需要安装配置任何程序。这一讲,我们将完整的介绍如何使用Remix部署合约,并调用其中的函数。
Remix官网:remix.ethereum.org

打开官网进入Remix,我们可以看到Remix由四个面板组成:
图标面板:上面有代表不同功能的图标,点击后,相应的功能个会显示在侧面版上。
侧面版:各种功能的 GUI。
主面板:代码编辑器。
终端:将显示与 GUI 交互的结果,也可以在此处运行脚本。

图标面板默认有4个图标,其中文件,编译,部署是最常用的。在你添加更多的remix插件后,它们也会显示在图标面板上。
首先点击文件图标,侧面版会变为文件浏览器。

我们可以在文件浏览器中管理我们的workspace,文件夹和文件。

在contract文件夹下面,有三个remix自带的合约例子,分别是1_Storage.sol, 2_Owner.sol和3_Ballot.sol。
点击1_Storage.sol,代码会显示在主面板的代码编辑器上。这个合约非常简单:它一个状态变量number,在链上存储一个uint256类型的数字;它有两个函数,store()函数将一个数字赋值给number变量;retrieve()展示number变量的数值。
接下来,点击编译图标,进入Solidity Compiler。在这里,我们选择Solidity 0.8.7版本,然后点击Compile 1_Storage.sol按钮进行编译。在合约成功编译后,编译图标上会显示绿色对勾。

你也可以尝试在优化中选在优化(Enable Optimization),次数设置为200,有时会省gas消耗。
下一步,我们要把编译好的合约部署到本地虚拟机或链上。首先点击部署,进入部署界面。

在ENVIRONMENT中,我们可以选择我们部署的环境,默认的是JavaScript VM,所有交易都在本地浏览器的沙盒区块链中执行,使用的是它给你的虚拟钱包地址;你也可以选择Injected Web3,即连接你的metamask钱包,所有交易会在真实的区块链中执行。
这里,我们选择JavaScript VM,你可以在钱包地址(ACCOUNT)栏看到虚拟机给你分配的测试地址。不需要调整Gas,也不用往合约里发送ETH。在CONTRACT栏中选择你要部署的合约Storage。1_Storage.sol文件中只有一个合约,因此默认就是部署它;但当文件包含多个合约时,我们需要手动选择要部署的合约。
点击DEPLOY键,部署完毕!
注意:如果我们选择的是Injected Web3来部署合约,每一笔交易都将上链,需要钱包确认交易并支付gas。
在合约部署成功后,我们可以在Deployed Contracts中找到我们部署的合约Storage。展开它,我们看到合约中的外部函数:store和retrieve。

我们在store函数那行的文本框中输入100,并点击函数名调用它。调用成功后,我们可以在终端上看到log信息,点击Debug按钮可以查看交易详情。

之后,我们调用retrieve函数,显示number变量被成功更新为100。

这一讲,我们介绍了如何使用Remix编译,部署并调用智能合约。Remix非常简单易用,也是·WTF Solidity极简教程选用的IDE工具
No activity yet