宇宙链 宇宙链
Ctrl+D收藏宇宙链
首页 > FTX > 正文

以太坊技术 | Solidity 函数修改器以及异常处理

作者:

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

链闻ChainNews:

Solidity是以太坊上最主流的函数修改器。本篇文章从技术角度展示了如何针对异常情况在代码层面进行详细分析,最后总结出异常情况最易出现的一些场景,并给出相对应的建议。

来源|矩阵数字经济智库作者|闫莺等

函数修改器

Solidity提供了一个函数修改器的特性。函数修改器与Python中的装饰器类似,可以在一定程度上改变函数的行为,比如可以自动在函数执行前检查参数是否合法。函数修改器是可以被继承的,同时可以被派生类覆盖重写。

下面代码展示了如何声明并使用函数修改器。

contractowned{functionowned(){owner=msg

addressowner;//这个合约定义了一个在派生合约中使用的函数修改器//";"指代被修改函数的函数体。//当这个函数执行前,先检查msg

}contractContractisowned{//从owned合约继承了onlyOwner函数修改器并且将其作用于close函数//确保了这个函数只有在调用者为合约创建者时才会生效functionclose()onlyOwner{selfdestruct(owner);}}

持有超0

}}contractRegisterispriced,owned{mapping(address=>bool)registeredAddresses;uintprice;functionRegister(uintinitialPrice){price=initialPrice;}//这里需要payable修饰词,否则无法通过该方法转账以太币//函数修饰器costs接收参数price//使用costs修饰器确保registe函数在msg

functionchangePrice(uint_price)onlyOwner{price=price;}}

Darwinia PC2在Rococo-V1中成功中继以太坊Ropsten网络区块头:据官方消息,Darwinia PC2在Rococo-V1中成功中继以太坊Ropsten网络区块头,标志着以太坊和波卡生态实现了通过达尔文网络,波卡生态桥中心,实现了连通的第一步。Rococo-V1中首笔异构链间跨链转账在Darwinia PC2上完成,波卡的测试网Rococo和以太坊测试网Ropsten网络实现了跨链转账,标志着波卡主网未来将可以通过达尔文实现与以太坊完成异构链跨链转账。[2021/4/1 19:35:31]

下面的例子展示了如何使用函数修改器实现一个重入锁机制。

contractMutex{boollocked;modifiernoReentrancy(){require(!locked);locked=true;;locked=false;}//这个函数使用了noReentrancy修改器,这保证了在f函数内部无法再次调用f函数//在执行return7时也执行了函数修改器中的locked=false语句functionf()noReentrancyreturns(uint){require(msg

}异常处理以太坊使用状态回退机制处理异常。如果发生了异常,当前消息调用和子消息调用产生的所有状态变化都将被撤销并且返回调用者一个报错信号。Solidity语言提供了两个方便的函数assert和require来检查条件,并且当条件不满足的时候抛出一个异常。assert函数通常用于检查变量和内部错误,require函数用于确保程序执行的必要条件是成立的。一个正常运行的程序不应该遇到assert和require失败,否则程序代码中一定存在需要修复的问题。revert函数和throw关键词会标识发生了错误并且回退当前的消息调用产生的状态改变。当前调用收到子消息调用产生的异常时会自动抛出,所以异常会一层层上浮直到最上层的根调用,代码会立刻终止执行并回退状态改变。但是,

}

分析 | 随着以太坊转向PoS,staking将对行业产生重大影响:币安研究院最近发布报告称,随着以太坊即将转向PoS,staking将对行业产生重大影响。报告指出,支持或准备支持staking的十大加密资产累计市值为258亿美元。截至发稿时,这意味着未来支持staking的资产约占行业总市值的10%。(Cointelegraph)[2019/10/29]

一个assert类型的异常会在下述场景抛出:

访问数组越界,下标为负数或者超出长度。访问固定长度的bytesN越界,下标为负数或者超出长度。对0做除法或者对0取模,比如5/0,5%0。移位操作使用了一个负数做操作数。转换一个特别大的数或者负数到枚举类型变量。使用移位操作时给一个负数值。使用枚举时将过大值或赋值转为枚举类型变量。调用assert函数并且参数值为false。一个require类型的异常会在下述场景抛出:

动态 | 以太坊未确认交易55242笔:据Etherscan.io数据显示,当前以太坊未确认交易数为55242笔,网络状况与昨日基本持平,但仍较为拥堵。[2019/1/2]

调用throw。调用require并且参数值为false。发起一个消息调用,但是这个调用没有正常完成,比如Gas耗尽、被调用函数不存在或者函数本身抛出一个异常。使用new创建一个合约,但是和3中提到的原因一样构造函数没有正常完成。调用外部函数时指向一个不包含代码的地址。合约通过一个没有payable修辞词的函数接收以太币,包括构造函数和fallback函数。合约通过一个公开的访问函数接收以太币。.transfer()失败。在require类型的异常发生时会执行回退操作,对于一个assert类型的异常执行一个无效操作。在这两种情况下,以太坊虚拟机都会撤销所有的状态改变。这样做是因为发生了意料之外的情况,交易无法安全执行下去,为了保证交易的原子性,最安全的操作就是撤销该交易对状态造成的影响。

莫斯科市采用以太坊区块链技术进行投票 使其国家民主可以更加透明:莫斯科市采用以太坊区块链技术进行投票,使其国家民主可以更加透明。利用现有的一个名为Active Citizen的项目,莫斯科市已经允许居民对一系列措施进行广泛的投票,包括了从他们新的地铁列车的名字,到新的体育场馆的座位颜色。但是为了缓解人们对于是否信任这座城市的选票计数的担忧,政府在该项目的架构中添加了一个 以太坊区块链的私有版本。[2018/2/22]

在编写合约代码时,我们需要合理使用assert和require来保证代码能够按我们预期的设计进行。

更多精彩内容,关注链闻ChainNews公众号,或者来微博**@链闻ChainNews**与我们互动!转载请注明版权和原文链接!

来源链接:mp.weixin.qq.com

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

链闻研究院

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

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

入驻指南:

/apply_guide/

本文网址:

/news/3626956.html

以太坊ETH

免责声明:

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

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

上一篇:

文摘|Schnorr签名:比特币的最新升级

标签:以太坊OWNICERICE比特币以太坊是什么意思town币有前途吗Media Licensing TokenPricetools

FTX热门资讯
因高端勒索软件感染增加,Q1 加密货币勒索金额几为上季度一倍

根据TheNextWeb的报道,软件安全公司Coveware最近发布了一份有关勒索软件攻击的报告显示,2019年第一季度受害者向勒索软件攻击者的加密货币赎金支付比上一季度增加了近90%.

1900/1/1 0:00:00
调查了 130 种加密货币后,FBI 对数字代币依然持中立态度

美国联邦调查局透露其正在调查的部分案件涉及130种加密货币。该机构表示,与由加密货币支付而引发的非法活动正在不断增加。这些案件涵盖了「人口贩卖、交易、绑架以及勒索软件攻击」.

1900/1/1 0:00:00
BitGo 宣布将增加对 57 种以太坊资产的托管服务

对于机构投资者来说,进入加密代币的广阔世界已经变得越来越容易。安全创业公司BitGo周二表示,它将扩大其托管产品和服务,支持57种新的以太坊资产,此举是受保护私钥服务需求的推动——私钥是作为加密资产的密码的字符串,一旦丢失将一去不复返.

1900/1/1 0:00:00
芝商所比特币期货交易在5月创下多项新记录,市场释放买入信号

2月芝商所以太坊期货交易额上涨3.3%逼近5000亿美元:金色财经报道,据Block Research数据显示,2月芝商所以太坊期货月均交易额达到4990亿美元,涨幅为3.7%;比特币期货持仓量下跌超15%,达到18.8亿美元.

1900/1/1 0:00:00
慢雾:破解造成 BetDice 项目恐慌的交易回滚攻击手法

2018年12月19日,众多游戏类DApp遭遇交易回滚攻击,其中包括BetDice,EOSMax,ToBet等。按当时18元人民币的价格计算,损失超过500万人民币。期间BetDice通过链金术平台发出多次公告,一度造成恐慌.

1900/1/1 0:00:00
被盗 1.7 亿 BTT 今又被盗 2600 万 TRX,TronBank 在刻意埋藏后门?

此次TronBank合约被盗事件再次印证了一个简单到令人发指的常识——所谓智能合约的开源并不能等同于「无条件的安全」,而且粗糙的去中心化机制可能存在被利用的中心化黑幕可能.

1900/1/1 0:00:00