译文出自:登链翻译计划
译者:翻译小组
校对:Tiny熊
正如我们之前所说,这个合约的最终目标是实现一个质押dApp,当满足一些条件,用户就可以质押ETH。如果没有达到这些条件,用户可以撤回他们的ETH。
这些条件是:
至少向质押合约质押1个ETH
在deadline(30秒)内达到1个ETH的质押阈值
需要掌握的重要概念
调用外部合约-区块链上的每个合约都像一个公共的RESTAPI。如果合约被声明为public或external,你可以从web3app或直接从另一个合约调用它们。
函数修改器(FunctionModifier)-修改器是可以在函数调用之前和/或之后运行的代码。它们可以用来限制访问,验证输入,或防范重入性攻击。
错误处理-错误处理很重要,因为它可以还原智能合约的状态,并通知用户还原的原因。你可以把这种还原比作数据库的rollback。
Grayscale首席法务官:SEC应批准所有现货比特币ETF申请:金色财经报道,Grayscale首席法务官Craig Salm发布公开信称,Grayscale法律团队向GBTC待决的19b-4申请以及其他七个现货比特币ETF文件提交了一封评论信,其中包括新的-拟议的监督共享协议(SSA),这是为了说明为何SEC应批准所有现货比特币ETF申请。
Craig Salm写道:我们仍然对现货比特币ETF申请的增长势头感到鼓舞。这不仅凸显了比特币现货市场的持续成熟,而且也强化了我们长期以来的信念,即美国投资者应该能够在美国购买现货比特币ETF。
评论信中有几个要点值得重点关注:首先, 正如在诉讼中所阐明的,SEC已经能够在之前批准比特币期货 ETF 的基础上批准现货比特币 ETF。比特币的现货和期货市场有着千丝万缕的联系(第三方研究表明相关性高达 99%)。这意味着对CME比特币期货市场的监管--一个受美国商品期货交易委员会 (CFTC) 监管的规模较大的市场,也是市场间监管集团 (Intermarket Surveillance Group) 的成员,该集团是一个共享市场监管的全球交易所网络,应足以防止基础现货比特币市场中潜在的欺诈或操纵。
其次,SEC与比特币ETF相关的行动应该以公平有序的方式进行。作为一个以信息披露为基础的监管机构,SEC 不应该挑选赢家和输家;相反,美国证券交易委员会应继续一致、公平地向发行人提供反馈或指导。
最终,这是为了确保美国投资者受到保护并能够选择他们喜欢的比特币投资工具。全美50个州有近100万投资者拥有GBTC,GBTC转换为ETF将为这些投资者带来数十亿美元的回报。当SEC准备好批准现货比特币ETF申请时,根本没有理由阻止GBTC投资者购买他们应得的现货比特币ETF,我们将继续代表投资者倡导这一提议。[2023/7/28 16:03:19]
发送ETH-Solidity有本地方法可以将ETH从一个合约转账到另一个合约/地址。
Mintverse和NFTScan共同推出NFT项目联合认证签名活动:3月10日消息,据NFTScan官方报道,Mintverse平台与NFTScan共同推出了NFT项目联合认证签名活动,支持NFT资产合约开发者和项目方对其部署的NFT项目进行签名认证,并提交相关基础资料和社交信息。所有在NFTScan上签署认证的项目,将同步在Mintverse上获得认证。为了鼓励项目方主动认证签名,提供及时、准确的项目信息及数据, Mintverse平台将返还全部被认证项目的手续费到项目方及项目交易用户,该活动将持续到今年六月底。前100个签名认证项目及其交易用户更也有机会获得未来Mintverse代币MINTS空投。认证活动已经启动,开发者可以通过NFTScan浏览器平台即刻进行签名验证。与OpenSea平台的认证方式有所不同,此次签名认证活动不仅要求NFT开发者进行钱包地址签名,还会要求其提供更为详细的项目信息和社交资料,以及版权描述、metadata示例等重要信息。[2022/3/10 13:48:06]
练习实现
HyperPay钱包与NFTSCAN达成战略合作:据官方消息,HyperPay钱包与 NFTSCAN 达成战略合作,双方团队将在 NFT 资产数据聚合方面展开深度合作。HyperPay是一款安全好用的多生态数字钱包,为数字货币用户和企业提供资产托管、理财增值、消费支付等金融服务。
在HyperPay最新发布的 4.1.18 版本中,新增了“NFT”资产板块,由NFTSCAN OPEN API为其提供NFT 数据支持。此次合作,将为HyperPay钱包用户带来NFT 资产查询收藏体验。[2021/12/21 7:53:38]
声明一个deadline,它是区块时间延后30秒
创建一个publictimeLeft()函数,用于返回剩余时间,直到时间到deadline为止
创建一个修改器(Modifier),用于检查外部合约是否已经完成
创建一个修改器(Modifier),用于动态检查deadline是否到了
只允许用户在时间没到deadline且没有执行外部合约的情况下质押ETH
去中心化服务平台AVA发布公共测试网Cascade:由康奈尔大学计算机学者Emin Gun Sirer创立的去中心化服务平台AVA宣布正式发布公共测试网Cascade,该测试网为AVA路线图规划中两个测试网版本的第一个,参与者在所发布的第一个版本中能够加入全局验证者网络并体验交易。[2020/4/18]
只有当时间没有到deadline且balances没有达到阀值,用户才可以撤回资金
创建一个execute()方法,将资金从质押合约转移到外部合约并执行另一个合约外部函数
当你在本地测试合约是一定要注意:区块链的状态只有在区块被打包时才会更新。区块编号和区块时间都只有在交易完成后才会更新。这意味着timeLeft()只有在交易完成后才会更新。如果你想模拟真实场景,可以改变Hardhat配置来模拟区块自动挖矿。如果你想了解更多,请看mining-mode文档。
合约代码更新
//SPDX-License-Identifier:MITpragmasolidity^0
动态 | 区块链公司Scalar A轮融资资方新增J Power及TIS:区块链公司Scalar近期宣布将向其A轮融资新资方电源开发株式会社(J Power)以及TIS实施第三方定向增发进行筹资,此前已有4名资方参投。Scalar此前一直在推进其核心产品——分布式账本软件“Scalar DLT”的开发。通过此轮募资,Scalar除了扩展Scalar DLT的功能等之外,还致力于构筑该公司扩大销售的体制。(Crypto.Watch)[2020/2/17]
else{require(timeRemaining>0,"Deadlineisalreadyreached");}_;}/***functionexecute()publicstakeNotCompleteddeadlineReached(false){uint256contractBalance=address(this)
/***}
为什么与练习1中的代码不同?
我认为在这个实例中,变量openForWithdraw是不必要的。可以根据质押合约和外部合约的状态直接判定是否可以撤回资金。
简单起见,本例中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反弹迫在眉睫?
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。