标签:hex ddr add ide https ring call str change
Solidity API 主要表现为Solidity 内置的特殊的变量及函数,他们存在于全局命名空间里,主要分为以下几类:
下面详细讲解下
用来提供一些区块链当前的信息。
注意:
msg的所有成员值,如msg.sender,msg.value的值可以因为每一次外部函数调用,或库函数调用发生变化(因为msg就是和调用相关的全局变量)。
不应该依据 block.timestamp, now 和 block.blockhash来产生一个随机数(除非你确实需要这样做),这几个值在一定程度上被矿工影响(比如在赌博合约里,不诚实的矿工可能会重试去选择一个对自己有利的hash)。
对于同一个链上连续的区块来说,当前区块的时间戳(timestamp)总是会大于上一个区块的时间戳。
为了可扩展性的原因,你只能查最近256个块,所有其它的将返回0.
用于判断内部错误,条件不满足时抛出异常
require(bool condition):
用于判断输入或外部组件错误,条件不满足时抛出异常
revert():
终止执行并还原改变的状态
ecrecover函数需要四个参数,需要被签名数据的哈希结果值,r,s,v分别来自签名结果串。
r = signature[0:64]
s = signature[64:128]
v = signature[128:130]
其中v取出来的值或者是00或01。要使用时,我们先要将其转为整型,再加上27,所以我们将得到27或28。在调用函数时v将填入27或28。
用javascript表达如下,这里是一个例子:
紧密打包参数(tightly packed)意思是说参数不会补位,是直接连接在一起的,下面几个是相等的。
如果需要填充,可以使用显式类型转换:keccak256("\x00\x12") 与keccak256(uint16(0x12))相同。
注意,常量将使用存储它们所需的最少字节数来打包,例如keccak256(0) == keccak256(uint8(0))和keccak256(0x12345678) == keccak256(uint32(0x12345678))
在私链(private blockchain)上运行sha256,ripemd160或ecrecover可能会出现Out-Of-Gas报错。因为私链实现了一种预编译合约,合约要在收到第一个消息后才会真正存在(虽然他们的合约代码是硬编码的)。而向一个不存在的合约发送消息,所以才会导致Out-Of-Gas的问题。一种解决办法(workaround)是每个在你真正使用它们之前先发送1 wei到这些合约上来完成初始化。在官方和测试链上没有这个问题。
.balance (uint256):
.transfer(uint256 amount):
.send(uint256 amount) returns (bool):
.call(...) returns (bool):
.callcode(...) returns (bool):
.delegatecall(...) returns (bool):
更多信息参考地址篇。
警告:send() 执行有一些风险:如果调用栈的深度超过1024或gas耗光,交易都会失败。因此,为了保证安全,必须检查send的返回值,如果交易失败,会回退以太币。如果用transfer会更好。
另外,当前合约里的所有函数均可支持调用,包括当前函数本身。
圆方圆区块链汇集大批区块链名师,采取导师值班制,为学员实时解决技术疑难。请关注圆方圆区块链知识星球与导师。(培训咨询请联系船长13826054890微信手机同号)
作者Tiny xiong ,专注于区块链底层研究和以太坊开发.是圆方圆区块链的导师,更多熊老师的文章和视频请关注圆方圆链圈公众号。
智能合约语言 Solidity 教程系列8 - Solidity API(特殊的变量及函数)
标签:hex ddr add ide https ring call str change
原文地址:https://www.cnblogs.com/yuanfangyuan/p/8763157.html