火星链 火星链
Ctrl+D收藏火星链
首页 > TRX > 正文

HTT:scaffold-eth 挑战:实现锁定机制和资金撤回(Part2)

作者:

时间:1900/1/1 0:00:00

译文出自:登链翻译计划

译者:翻译小组

校对:Tiny熊

正如我们之前所说,这个合约的最终目标是实现一个质押dApp,当满足一些条件,用户就可以质押ETH。如果没有达到这些条件,用户可以撤回他们的ETH。

这些条件是:

至少向质押合约质押1个ETH

在deadline(30秒)内达到1个ETH的质押阈值

需要掌握的重要概念

调用外部合约-区块链上的每个合约都像一个公共的RESTAPI。如果合约被声明为public或external,你可以从web3app或直接从另一个合约调用它们。

函数修改器(FunctionModifier)-修改器是可以在函数调用之前和/或之后运行的代码。它们可以用来限制访问,验证输入,或防范重入性攻击。

错误处理-错误处理很重要,因为它可以还原智能合约的状态,并通知用户还原的原因。你可以把这种还原比作数据库的rollback。

Etherscan新增支持在多个EVM链上搜索已部署的相似合约:8月11日消息,以太坊区块链浏览器Etherscan宣布,新增支持在多个EVM链上搜索已部署的相似合约,用户可通过此功能在多链世界中找到喜爱的合约实例,或者找到可以进行测试部署并进行操作的测试网络部署。[2023/8/11 16:20:43]

发送ETH-Solidity有本地方法可以将ETH从一个合约转账到另一个合约/地址。

练习实现

声明一个deadline,它是区块时间延后30秒

创建一个publictimeLeft()函数,用于返回剩余时间,直到时间到deadline为止

创建一个修改器(Modifier),用于检查外部合约是否已经完成

创建一个修改器(Modifier),用于动态检查deadline是否到了

只允许用户在时间没到deadline且没有执行外部合约的情况下质押ETH

只有当时间没有到deadline且balances没有达到阀值,用户才可以撤回资金

英特尔:Intel Blockscale ASIC比特币挖矿芯片将于三季度发货:4月4日消息,英特尔今日宣布全新比特币挖矿芯片 Intel Blockscale ASIC 将在今年三季度发货,该芯片将支持达 580 GH/s 的哈希率和高达 26 J/TH 的功率。据英特尔称,他们已经在比特币挖矿领域研究了数十年时间来提高工作量证明(PoW)的挖矿能耗效率,据英特尔加速计算系统和图形事业部区块链和商业解决方案总经理 Jose Rios 称:Intel Blockscale ASIC 芯片将帮助比特币挖矿公司在未来几年实现可持续和算力扩展目标。

不过,英特尔公司表示,只会为客户提供芯片,而不会提供完整的 ASIC 矿机,Argo Blockchain、Block, Inc.、Hive Blockchain 和 GRIID Infrastructure 是首批获得英特尔芯片的加密挖矿公司之一。(BitcoinMagazine)[2022/4/4 14:03:52]

创建一个execute()方法,将资金从质押合约转移到外部合约并执行另一个合约外部函数

NFTSCAN浏览器推出NFT Collection签名认证功能:2月17日消息,NFTSCAN浏览器宣布近日上线了NFT Collection签名认证功能,支持NFT合约开发者和项目方对其部署的NFT Collection项目进行签名认证,并提交相关基础资料和社交信息。[2022/2/17 9:58:33]

当你在本地测试合约是一定要注意:区块链的状态只有在区块被打包时才会更新。区块编号和区块时间都只有在交易完成后才会更新。这意味着timeLeft()只有在交易完成后才会更新。如果你想模拟真实场景,可以改变Hardhat配置来模拟区块自动挖矿。如果你想了解更多,请看mining-mode文档。

合约代码更新

//SPDX-License-Identifier:MITpragmasolidity^0

else{require(timeRemaining>0,"Deadlineisalreadyreached");}_;}/***functionexecute()publicstakeNotCompleteddeadlineReached(false){uint256contractBalance=address(this)

NFT资产浏览器和数据分析平台NFTSCAN推出API开放平台:10月16日消息,NFTSCAN推出API开放平台,目前,NFT开放平台支持的API主要有以下几个:

1)获取一个钱包地址中持有的NFT资产数据;

2)获取一个NFT资产合约下所有的NFT数据;

3)获取某个NFT资产的详细信息,如:铸造信息、Metadata等;

4)获取一个钱包地址与所有NFT资产合约相关的历史交易记录;

5)获取一个钱包地址与指定NFT资产合约相关的历史交易记录;

其他更多的NFT数据API还在开发和拓展中。除了上述常规的API外,NFTSCAN团队也支持NFT数据接口的定制化服务。

据悉,NFTSCAN作为一个专业的NFT资产浏览器和数据分析平台,目前已全面覆盖了以太坊网络的NFT数据,拓展多链NFT数据也在积极筹划中。[2021/10/16 20:33:53]

/***}

为什么与练习1中的代码不同?

我认为在这个实例中,变量openForWithdraw是不必要的。可以根据质押合约和外部合约的状态直接判定是否可以撤回资金。

Etherscan正在为Arbitrum构建资源管理器,或将于7月准备就绪:以太坊扩容网络Arbitrum开发团队Offchain Labs宣布与以太坊区块链资源浏览器Etherscan达成合作关系,目前Etherscan正在为Arbitrum构建一个资源管理器,可能会在7月准备就绪。另外,区块链开发平台Alchemy将把其开发者平台带入到Arbitrum,旨在以低成本在Arbitrum上扩展去中心化应用。[2021/5/28 22:51:40]

简单起见,本例中withdraw函数不接受外部地址作为参数,只有质押者本人可以撤回资金。

我们已经将Solidity更新到0.8.4版本,Hardhat更新到2.6.1版本。有些scaffold-eth可能仍然依赖于旧版本的Solidity,我认为出于安全、优化和功能完整的考虑,使用最新的版本是很重要的。

回顾一下

函数修改器(FunctionModifiers):首先,你可以看到我们已经创建了两个修改器。正如你已经从Solidity的例子中学到的,函数修改器是可以在一个函数调用之前或之后运行的代码。在上面的例子中,我们添加了带参数的函数修改器!

当你定义了一个函数修改器(FunctionModifiers)后,你可以在函数名称后附加上修改器的名称。如果修改器回退了,函数会在运行之前就回退!

stake()函数:与练习1相同。

timeLeft()函数:使用block.timestamp的值来计算剩余秒数。

withdraw()函数:在修改器通过后,检查用户是否有余额,如果没有余额就返回。为了防止重入性攻击,你应该在任何调用之前先修改合约的状态。这就是为什么我们要把用户的余额保存在一个变量中,并把用户的余额更新为0。

execute()函数:在修改器通过后,调用外部合约complete()函数,并检查一切是否成功。

现在用yarndeploy部署更新后的合约,并在本地进行测试,检查一下:

在你进行交易的时候timeLeft是否在变化?

你能在时间到deadline之后质押ETH吗?

如果合约被执行,能在deadline前或后撤回资金吗?

即使质押金额没有达到阀值,也可以执行合约吗?

可以多次执行合约吗?

https://www.youtube.com/watch?v=193ZeR17dtk

本翻译由CellETF赞助支持。

来源:https://stermi.medium.com/how-to-write-your-first-decentralized-app-scaffold-eth-challenge-1-staking-dapp-b0b6a6f4d242

参考资料

登链翻译计划:https://github.com/lbc-team/Pioneer

翻译小组:https://learnblockchain.cn/people/412

Tiny熊:https://learnblockchain.cn/people/15

调用外部合约:https://solidity-by-example.org/calling-contract/

函数修改器(FunctionModifier):https://solidity-by-example.org/function-modifier/

重入性攻击:https://solidity-by-example.org/hacks/re-entrancy/

错误处理:https://solidity-by-example.org/error/

发送ETH:https://solidity-by-example.org/sending-ether/

mining-mode文档:https://hardhat.org/hardhat-network/reference/#mining-modes

重入性攻击:https://solidity-by-example.org/hacks/re-entrancy/

CellETF:https://celletf.io/?utm_souce=learnblockchain

免责声明:作为区块链信息平台,本站所发布文章仅代表作者个人观点,与链闻ChainNews立场无关。文章内的信息、意见等均仅供参考,并非作为或被视为实际投资建议。

本文来源于非小号媒体平台:

登链社区

现已在非小号资讯平台发布105篇作品,

非小号开放平台欢迎币圈作者入驻

入驻指南:

/apply_guide/

本文网址:

/news/10481471.html

免责声明:

1.资讯内容不构成投资建议,投资者应独立决策并自行承担风险

2.本文版权归属原作所有,仅代表作者本人观点,不代表非小号的观点或立场

上一篇:

比特币进入牛市交叉点,BTC反弹迫在眉睫?

标签:NFTETHHTTTPSFirst Ever NFTETHPLOhtt币局tps币圈

TRX热门资讯
COM:XT关于延迟上线KISHIMOTO的公告

尊敬的XT用户:应项目方通知,KISHIMOTO将延迟上线,具体时间平台将另行公告通知。给您带来的不变,请您谅解!如有问题,请及时联系在线客服。感谢您对XT.COM的支持与信任.

1900/1/1 0:00:00
COI:中币开放IMX及SUKU提币业务

尊敬的中币用户:????中币现已开放IMX及SUKU提币业务。感谢您对中币的支持与信任!中币运营团队2021年11月10日关注我们Telegram:ZBEnglishhttps://t.me/Z.

1900/1/1 0:00:00
MON:ZT創新板即將上線MONS

親愛的ZT用戶:ZT創新板即將上線MONS,並開啟MONS/USDT交易對。具體上線時間如下:充值:已開啟;交易:2021年11月11日17:00;MONS項目簡介:MonstersClan是有.

1900/1/1 0:00:00
ECH:關於支持 VeChain (VET)、AR(Arweave)、Vite(VITE)網絡升級和硬分叉的公告

親愛的用戶:幣安將支持VeChain、Arweave(AR)、Vite的網絡升級和硬分叉,具體安排如下:幣安預計將於東八區時間2021年11月16日15:00暫停VET代幣的充值、提現業務.

1900/1/1 0:00:00
区块链:区块链符号理论:符号方案和符号系统

上期我们对《区块链之符号理论》中的一些概念进行了描述和讨论,本期将对更深层次的进行论述。符号理论:符号方案和符号系统符号的表现,或数字符号,体现了从语法到语义的转变.

1900/1/1 0:00:00
META:【奖励发放】第三期理财活动结束及奖励发放的公告

第三期理财活动结束及奖励发放的公告作者AAXManager过去15分钟内已更新尊敬的AAX用户:AAX于2021年10月20日18:00至2021年11月2日18:00举办的“第三期理财活动.

1900/1/1 0:00:00