Solidity API怎么使用

发布时间:2021-12-07 15:44:55 作者:iii
来源:亿速云 阅读:137

这篇文章主要讲解了“Solidity API怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Solidity API怎么使用”吧!

区块和交易的属性(Block And Transaction Properties)

用来提供一些区块链当前的信息。

注意: msg的所有成员值,如msg.sender,msg.value的值可以因为每一次外部函数调用,或库函数调用发生变化(因为msg就是和调用相关的全局变量)。

不应该依据 block.timestamp, now 和 block.blockhash来产生一个随机数(除非你确实需要这样做),这几个值在一定程度上被矿工影响(比如在赌合约里,不诚实的矿工可能会重试去选择一个对自己有利的hash)。

对于同一个链上连续的区块来说,当前区块的时间戳(timestamp)总是会大于上一个区块的时间戳。

为了可扩展性的原因,你只能查最近256个块,所有其它的将返回0.

错误处理

数学及加密功能

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表达如下:

    var msg = '0x8CbaC5e4d803bE2A3A5cd3DbE7174504c6DD0c1C'

    var hash = web3.sha3(msg)
    var sig = web3.eth.sign(address, h).slice(2)
    var r = `0x${sig.slice(0, 64)}`
    var s = `0x${sig.slice(64, 128)}`
    var v = web3.toDecimal(sig.slice(128, 130)) + 27

订阅区块链技术专栏可以参考到完整的使用例子。

<!-- [例子](https://ethereum.stackexchange.com/questions/1777/workflow-on-signing-a-string-with-private-key-followed-by-signature-verificatio): -->

紧密打包参数(tightly packed)意思是说参数不会补位,是直接连接在一起的,下面几个是相等的。

keccak256("ab", "c")
keccak256("abc")

keccak256(0x616263)  // hex
keccak256(6382179)
keccak256(97, 98, 99)   //ascii

如果需要填充,可以使用显式类型转换: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到这些合约上来完成初始化。在官方和测试链上没有这个问题。

地址相关

Address的余额,以wei为单位。

发送给定数量的ether到某个地址,以wei为单位。失败时抛出异常。

发送给定数量的ether到某个地址,以wei为单位, 失败时返回false。

发起底层的call调用。失败时返回false。

发起底层的callcode调用,失败时返回false。 不鼓励使用,未来可能会移除。

发起底层的delegatecall调用,失败时返回false

更多信息参考地址篇。

警告:send() 执行有一些风险:如果调用栈的深度超过1024或gas耗光,交易都会失败。因此,为了保证安全,必须检查send的返回值,如果交易失败,会回退以太币。如果用transfer会更好。

合约相关

另外,当前合约里的所有函数均可支持调用,包括当前函数本身。

感谢各位的阅读,以上就是“Solidity API怎么使用”的内容了,经过本文的学习后,相信大家对Solidity API怎么使用这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!

推荐阅读:
  1. 智能合约编程语言-solidity快速入门(下)
  2. solidity的twoarray怎么使用

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

solidity api

上一篇:Solidit数组有什么用

下一篇:选择正确的windows桌面即服务解决方案的10个注意事项分别是什么

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》