译文出自:登链翻译计划
译者:翻译小组
校对:Tiny熊
正如我们之前所说,这个合约的最终目标是实现一个质押dApp,当满足一些条件,用户就可以质押ETH。如果没有达到这些条件,用户可以撤回他们的ETH。
这些条件是:
至少向质押合约质押1个ETH
在deadline(30秒)内达到1个ETH的质押阈值
需要掌握的重要概念
调用外部合约-区块链上的每个合约都像一个公共的RESTAPI。如果合约被声明为public或external,你可以从web3app或直接从另一个合约调用它们。
函数修改器(FunctionModifier)-修改器是可以在函数调用之前和/或之后运行的代码。它们可以用来限制访问,验证输入,或防范重入性攻击。
错误处理-错误处理很重要,因为它可以还原智能合约的状态,并通知用户还原的原因。你可以把这种还原比作数据库的rollback。
Grayscale:与Coinbase达成的监控共享协议不能满足监管机构的现行标准:金色财经报道,资产管理公司Grayscale在周四致美国证券交易委员会的一封信中,给人们对现货比特币 ETF 的新申请热潮泼了一盆冷水,与Coinbase达成的所谓监控共享协议既不能满足监管机构的现行标准,也不能满足投资者的要求。根据监管机构当前使用的标准,这是必要的。
Grayscale 律师 Joseph Hall 在信中写道,上市交易所和比特币现货交易场所之间达成监督共享协议的可能性并不是一个新想法。Coinbase 并未作为国家证券在市场监管机构注册。交易所、经纪自营商或期货交易所。[2023/7/28 16:03:51]
发送ETH-Solidity有本地方法可以将ETH从一个合约转账到另一个合约/地址。
练习实现
声明一个deadline,它是区块时间延后30秒
创建一个publictimeLeft()函数,用于返回剩余时间,直到时间到deadline为止
Etherscan推出AI工具“Code Reader”:金色财经报道,以太坊区块链浏览器Etherscan推出了一款新的AI工具“Code Reader”,它将使用OpenAI的大型语言模型来帮助用户了解任何智能合约的源代码。[2023/6/20 21:48:06]
创建一个修改器(Modifier),用于检查外部合约是否已经完成
创建一个修改器(Modifier),用于动态检查deadline是否到了
只允许用户在时间没到deadline且没有执行外部合约的情况下质押ETH
只有当时间没有到deadline且balances没有达到阀值,用户才可以撤回资金
创建一个execute()方法,将资金从质押合约转移到外部合约并执行另一个合约外部函数
当你在本地测试合约是一定要注意:区块链的状态只有在区块被打包时才会更新。区块编号和区块时间都只有在交易完成后才会更新。这意味着timeLeft()只有在交易完成后才会更新。如果你想模拟真实场景,可以改变Hardhat配置来模拟区块自动挖矿。如果你想了解更多,请看mining-mode文档。
NFTScan新增Blockscan Chat功能:4月1日消息,近日,NFTScan浏览器与Etherscan团队进行合作,在NFT资产详情页和用户Profile页面新增了Blockscan Chat功能。通过该chat功能,用户在NFTScan平台可以与任意NFT holder进行点对点的沟通交流,这极大的提高了NFT群体的沟通效率。(NFTSCAN公众号)[2022/4/1 14:31:40]
合约代码更新
//SPDX-License-Identifier:MITpragmasolidity^0
else{require(timeRemaining>0,"Deadlineisalreadyreached");}_;}/***functionexecute()publicstakeNotCompleteddeadlineReached(false){uint256contractBalance=address(this)
/***}
Broxus宣布启动Everscale Grants计划:12月2日消息,Everscale(此前名为Free TON)网络开发商Broxus已宣布启动其Everscale Grants计划,目前已开放申请。该赠款将提供共计1500万枚EVER,计划将为符合条件、有前途的IT初创公司提供财务和专业支持。此前报道,去中心化区块链网络Free TON宣布更名为Everscale,代币TON名称变更为EVER。(Bitcoin.com)[2021/12/2 12:46:20]
为什么与练习1中的代码不同?
我认为在这个实例中,变量openForWithdraw是不必要的。可以根据质押合约和外部合约的状态直接判定是否可以撤回资金。
简单起见,本例中withdraw函数不接受外部地址作为参数,只有质押者本人可以撤回资金。
我们已经将Solidity更新到0.8.4版本,Hardhat更新到2.6.1版本。有些scaffold-eth可能仍然依赖于旧版本的Solidity,我认为出于安全、优化和功能完整的考虑,使用最新的版本是很重要的。
比特币徽标将出现在NASCAR赛车手的赛车及赛车服上:金色财经报道,Square旗下移动支付平台Cash App正在将比特币徽标带入美国纳斯卡车赛(NASCAR)。在即将到来的赛季中,比特币徽标将显示在赛车手Darrell “Bubba” Wallace的赛车和赛车服上。根据Square和推特首席执行官Jack Dorsey的推文,比特币徽标将出现在赛车服上的两个位置。据悉,在Wallace的赛车和赛车服上出现比特币徽标是Cash App与Wallace团队多年合作关系的一部分。[2020/7/21]
回顾一下
函数修改器(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反弹迫在眉睫?
根据中国雄安官网11月9日信息,人民银行雄安新区营管部联合雄安新区改革发展局召开雄安新区数字人民币试点工作推进座谈会.
1900/1/1 0:00:00尊敬的用户:BKEXGlobal现决定升级部分币种交易对,期间暂停BIN_USDT,FTS_USDT,SPS_USDT,MINIDOGE_USDT,DPET_USDT,GINUX_USDT.
1900/1/1 0:00:00TheLockMETAX&Earn#1(term14days)willlaunchat8:00UTConNovember15thatGate.
1900/1/1 0:00:00項目簡介:OKB是由OKBlockchain基金會發行的全球通用積分。OKB由OKEx全球頂級的研發人員基於區塊鏈技術設計並推出,采用通證經濟模型將全球最優質的創新型數字資產項目和OKEx平臺用.
1900/1/1 0:00:00親愛的ZT用戶:ZT創新板即將上線SQUID,並開啟SQUID/USDT交易對。具體上線時間如下:充值:已開啟;交易:2021年11月9日16:00;SQUID項目簡介:魷魚遊戲是Binance.
1900/1/1 0:00:00从我第一次正式宣布EOS网络基金会成立以来,在短短三个月内,我相信我们已经推动EOS进入了一个新的创世纪。虽然我们仍然有很长的路要走,但我们已经取得的进展是非常鼓舞人心的.
1900/1/1 0:00:00