技术教学 | Solidity编程语言:Address_DRE:Retrogression

地址

这里要说的地址并不是通常的编程语言中的内存地址,而是交易地址。我们知道区块链进行价值传递的时候必须是通过一个地址传递到另一个地址,无论交易或者合约都离不开地址。因此把地址作Address为Solidity语言的内嵌数据类型会十分方便开发的,更重要的一点就是在Solidity中,所有合约都继承地址Address类型。这不仅仅是单纯的为了在语法上的实现,而在实际情况是合约本身就离不开地址,包括合约的部署和执行都需要地址的参与。地址是两种类型,一种是address,一种是addresspayable。其中addresspayable相比address类型多了两个成员方法send和transfer,表示可以向addresspayable类型的变量进行转帐操作。

报告:全球区块链身份管理市场预计在2021-2025年期间将增长35.8亿美元:Reportlinker.com宣布发布“2021-2025年全球区块链身份管理市场”报告。报告表示全球区块链身份管理市场有望在2021-2025年增长35.8亿美元,在预测期内以近71%的复合年增长率增长。(globenewswire)[2021/8/2 1:29:42]

地址类型格式要求

以太坊中的地址是20个字节,比如0x52908400098527886E0F7030069857D2E4169EE7,由于一个字节等于8位,所以地址也可以使用uint160来声明。地址通常可以进行比较运算。

动态 | 美国伊利诺伊州《区块链技术法案》生效,智能合约被合法化:美国伊利诺伊州已朝着通过《区块链技术法案》规范基于区块链的技术迈出了重要的一步。该法案由众议员Keith Wheeler支持,于2020年1月1日生效,该法案首先要解决的问题之一就是对区块链本身的定义:“区块链是指由多方使用去中心化方法创建的电子记录,用以核实和储存交易的数字记录,而交易记录则由先前交易信息的加密散列加以保护。”此外,该法案还提供了加密散列、电子记录和智能合约的定义。该法案还规定,“不得仅仅因为区块链被用于创建、存储或验证智能合约、记录或签字而剥夺这些客体的法律效力或可执行性。”法案还补充说,如果需要以书面形式提交包含记录的基于区块链的智能合约,那么该合约就符合法律规定。换句话说,智能合约现在在法庭上是可接受的,它们可以用来提供证明或要求可执行性。(CryptoPotato)[2020/1/10]

pragmasolidity>=0

声音 | 中银国际CEO:将区块链等技术与传统金融服务的需求相结合可降低小微企业风险溢价:据央广网财经报道,3月23日,由国务院发展研究中心主办的中国发展高层论坛2019经济峰会在北京举行,中银国际CEO李彤在会上指出,将移动互联网、大数据分析、人工智能、区块链等新一代信息技术与传统金融服务的需求相结合,既可以改善信息不对称,降低小微企业的风险溢价,又可以简化服务流程,扩大服务范围。[2019/3/24]

functiongetOwner()publicreturns(address){returnowner;}

functiongetContractAddr()publicviewreturns(address){returnaddress(this);}

声音 | 蚂蚁金服首席分析师:以公链为代表的技术可成为信用供给方:11月11日,芝麻信用创始人、蚂蚁金服首席分析师戴庆祝在上海举行的区块链底层技术学术交流会上表示,因为区块链分布式、自治、加密的特性,以公链为代表的技术可以成为继政府、法律、商业机构(中介)之后的又一个信用供给方,且其成本远低于以往。此外,节点作为区块链世界的个体,同样需要综合多方信息对其进行多维度的信用评分。[2018/11/11]

functiongetSenderAddr()publicreturns(address){returnmsg

}

msg

functiontestTranser()payablepublic{addresspayableto=0x52908400098527886E0F7030069857D2E4169EE7;to

functiontestStack1024(uintdepth)payablepublic{addresspayableto=0x52908400098527886E0F7030069857D2E4169EE7;boolr=to

}

/*functiontestCSend()payablepublic{addresspayableto=address(this);this

*/

/*functiontestCTranser()payablepublic{//addresspayableto=0x52908400098527886E0F7030069857D2E4169EE7;address(this)

*/}

方法:

send

send方法相比较transfer方法来说更“底层”一些,如果send方法执行失败,并不会抛出异常,而是返回false。

send调用栈深度不能超过1024,否则会执行失败。这个问题在testStack1024方法中进行了验证,不过传入的数字太大的话,会执行失败,即使没到1024,原因还没找到。

send方法会返回bool类型的结果来表示执行结果。

如果gas不够会执行失败。

建议使用transfer方法,相对更安全些。

transfer

transfer和send使用方法上一样,也是用来进行转帐操作,如果当前帐户余额不足或者对方帐户拒绝转帐,则会执行失败。

如果transfer的调用地址是一个合约地址,则合约的回调函数将被执行。

关call及delegatecall、staticcall单独使用一篇幅来讲。

作者:感谢HPB蓝莲花团队整理供稿。

注:如有问题请在下方留言联系我们技术社群。

汪晓明博客:http://wangxiaoming.com/

汪晓明:HPB芯链创始人,巴比特专栏作家。十余年金融大数据、区块链技术开发经验,曾参与创建银联大数据。主创区块链教学视频节目《明说》30多期,编写了《以太坊官网文档中文版》,并作为主要作者编写了《区块链开发指南》,在中国区块链社区以ID“蓝莲花”知名。

郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。

金智博客

[0:0ms0-3:595ms