CryptoZombies学习笔记——Lesson4

本文深入探讨了以太坊智能合约中的payable函数、随机数生成及重构通用逻辑等核心概念。详细讲解了如何利用payable使函数接收ETH转账,transfer函数的使用,以及在Solidity中生成随机数的挑战与解决方案。此外,还介绍了如何通过重构提高代码效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第四课主要介绍payable函数相关。

chapter1: payable修饰函数

  以太坊允许同时调用函数和eth转账。msg.value显示发送到合约的以太币数,ether是内置整型数。如果函数没有payable,将不能接受前端调用时附加的eth。

chapter2:transfer

  transfer函数可以发送eth,this.balance是当前账户所有资产。格式:

address.transfer(value);

  address是目的地址,value是发送的eth数。

  当你发送eth到合约账户中时,eth是一直存储在合约账户里的,直到你通过一个函数把它取走,实例如下:

contract GetPaid is Ownable {
  function withdraw() external onlyOwner {
    owner.transfer(this.balance);
  }
}

 

chapter3:zombieBattles

  就是利用payable新建一个功能函数

 

chapter4:随机数

  solidity里,用keccak256生成随机数,生成随机数的参数只能用一次,其实是一种伪随机。这样易被不诚实节点攻击。

  因为solidity采用pow共识机制,大量挖矿竞争者需要竞争解决一个数学问题,优先解决者将工作量证明和事务共同发布。此时该挖矿者可以在自己节点无限生成随机数直到达到满意结果后再发布。

  这个问题解决比较复杂,可以参考https://ethereum.stackexchange.com/questions/191/how-can-i-securely-generate-a-random-number-in-my-smart-contract的回答。有一种思路是利用oracles访问外部函数生成随机数。

  当然,这种攻击需要耗费大量资源,所以像我们做的这种小游戏可以直接用random函数来生成随机数,没有谁那么闲来攻击一个效益极差的节点。

 

chapter5:Zombie Fighting

  一个新功能

chapter6,7:重构通用逻辑

  把代码里使用了好多次的require打包成了一个modifier。

chapter8:完善attack函数

chapter9之后:新增一些函数参数,和一些完善

  

 

  

  

 

转载于:https://www.cnblogs.com/txltxl22/p/9665108.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值