Web3.py学习记录——Web3 API

编码和解码

Web3.toHex(primitive=None,hexstr=None,text=None)
将各种输入转换为它的十六进制形式并返回。它遵循JSON-RPC规范中转换为十六进制的规则。

>>> Web3.toHex(0)
'0x0'
>>> Web3.toHex(1)
'0x1'
>>> Web3.toHex(0x0)
'0x0'
>>> Web3.toHex(0x000F)
'0xf'
>>> Web3.toHex(b'')
'0x'
>>> Web3.toHex(b'\x00\x0F')
'0x000f'
>>> Web3.toHex(False)
'0x0'
>>> Web3.toHex(True)
'0x1'
>>> Web3.toHex(hexstr='0x000F')
'0x000f'
>>> Web3.toHex(hexstr='000F')
'0x000f'
>>> Web3.toHex(text='')
'0x'
>>> Web3.toHex(text='cowmö')
'0x636f776dc3b6' # 对这个使用toText将得到'cowmö'

Web3.toText(primitive=None,hexstr=None,text=None)
将各种输入转换为它的等价字符串并返回。文本被解码为UTF-8。

>>> Web3.toText(0x636f776dc3b6)
'cowmö'
>>> Web3.toText(b'cowm\xc3\xb6')
'cowmö'
>>> Web3.toText(hexstr='0x636f776dc3b6')
'cowmö'
>>> Web3.toText(hexstr='636f776dc3b6')
'cowmö'
>>> Web3.toText(text='cowmö')
'cowmö'

Web3.toBytes(primitive=None,hexstr=None,text=None)
接受各种输入并返回与之相当的字节。文本被编码为UTF-8。

>>> Web3.toBytes(0)
b'\x00'
>>> Web3.toBytes(0x000F)
b'\x0f'
>>> Web3.toBytes(b'')
b''
>>> Web3.toBytes(b'\x00\x0F')
b'\x00\x0f'
>>> Web3.toBytes(False)
b'\x00'
>>> Web3.toBytes(True)
b'\x01'
>>> Web3.toBytes(hexstr='0x000F')
b'\x00\x0f'
>>> Web3.toBytes(hexstr='000F')
b'\x00\x0f'
>>> Web3.toBytes(text='')
b''
>>> Web3.toBytes(text='cowmö')
b'cowm\xc3\xb6'

Web3.toInt(primitive=None,hexstr=None,text=None)
将输入转换为整数。

>>> Web3.toInt(0)
0
>>> Web3.toInt(0x000F)
15
>>> Web3.toInt(b'\x00\x0F')
15
>>> Web3.toInt(False)
0
>>> Web3.toInt(True)
1
>>> Web3.toInt(hexstr='0x000F')
15
>>> Web3.toInt(hexstr='000F')
15

Web3.toJSON(obj)
将输入转换为等价JSON形式。

>>> Web3.toJSON(3)
'3'
>>> Web3.toJSON({'one': 1})
'{"one": 1}'

货币转换

Web3.toWei(value,currency)
返回由转换为wei的currency参数指定的面额的值。(不是很懂)

>>> Web3.toWei(1, 'ether')
1000000000000000000

Web3.fromWei(value, currency)
将以wei为单位的值转换为以currency的值。返回值类型为Decimal,以确保精度下降到wei。

>>> Web3.fromWei(1000000000000000000, 'ether')
Decimal('1')

地址

Web3.isAddress(value)
如果value是一种可识别的地址格式,则返回True。
**·**允许有0x前缀和无前缀值。
**·**如果地址包含大小写混合字符,此函数还根据EIP55检查地址校验和是否有效。

>>> Web3.isAddress('0xd3CdA913deB6f67967B99D67aCDFa1712C293601')
True

Web3.isChecksumAddress(value)
如果value是一个有效的EIP55校验和地址( checksummed address),则返回True。

>>> Web3.isChecksumAddress('0xd3CdA913deB6f67967B99D67aCDFa1712C293601')
True
>>> Web3.isChecksumAddress('0xd3cda913deb6f67967b99d67acdfa1712c293601')
False

Web3.toChecksumAddress(value)
返回value转换的EIP55校验和的形式。

>>> Web3.toChecksumAddress('0xd3cda913deb6f67967b99d67acdfa1712c293601')
'0xd3CdA913deB6f67967B99D67aCDFa1712C293601'

密码散列

classmethod Web3.keccak(primitive=None,hexstr=None,text=None)
返回给定值value的Keccak-256加密。在计算散列之前,text被编码为UTF-8,就像Solidity。以下任何一项均有效并等效:

>>> Web3.keccak(0x747874)
>>> Web3.keccak(b'\x74\x78\x74')
>>> Web3.keccak(hexstr='0x747874')
>>> Web3.keccak(hexstr='747874')
>>> Web3.keccak(text='txt')
HexBytes('0xd7278090a36507640ea6b7a0034b69b0d240766fa3f98e3722be93c613b29d2e')

classmethod Web3.solidityKeccak(abi_type,value)
返回keccak -256,就像它将由Solidity keccak函数在值列表内容的打包ABI编码上计算一样。abi_types参数应该是一个固体类型字符串列表,对应于提供的每个值。

>>> Web3.solidityKeccak(['bool'], [True])
HexBytes("0x5fe7f977e71dba2ea1a68e21057beebb9be2ac30c6410aa38d4f3fbe41dcffd2")

>>> Web3.solidityKeccak(['uint8', 'uint8', 'uint8'], [97, 98, 99])
HexBytes("0x4e03657aea45a94fc7d47ba826c8d667c0d1e6e33a64a036ec44f58fa12d6c45")

>>> Web3.solidityKeccak(['uint8[]'], [[97, 98, 99]])
HexBytes("0x233002c671295529bcc50b76a2ef2b0de2dac2d93945fca745255de1a9e4017e")

>>> Web3.solidityKeccak(['address'], ["0x49EdDD3769c0712032808D86597B84ac5c2F5614"])
HexBytes("0x2ff37b5607484cd4eecf6d13292e22bd6e5401eaffcc07e279583bc742c68882")

>>> Web3.solidityKeccak(['address'], ["ethereumfoundation.eth"])
HexBytes("0x913c99ea930c78868f1535d34cd705ab85929b2eaaf70fcd09677ecd6e5d75e9")

对比Solidity的写法:

bytes32 data1 = keccak256(abi.encodePacked(true));
assert(data1 == hex"5fe7f977e71dba2ea1a68e21057beebb9be2ac30c6410aa38d4f3fbe41dcffd2");
bytes32 data2 = keccak256(abi.encodePacked(uint8(97), uint8(98), uint8(99)));
assert(data2 == hex"4e03657aea45a94fc7d47ba826c8d667c0d1e6e33a64a036ec44f58fa12d6c45");

classmethod Web3.sha3(primitive=None,hexstr=None,text=None)
keccak()已弃用此方法,弃用了就不看了。
https://web3py.readthedocs.io/en/stable/web3.main.html#cryptographic-hashing
classmethodWeb3.soliditySha3(abi_types, value)
solidityKeccak()已弃用此方法,弃用了就不看了。

检查可编码性

w3.is_encodable(_type.,value)
如果给定value可以被编码成给定的类型,则返回True。

>>> from web3.auto.gethdev import w3
>>> w3.is_encodable('bytes2', b'12')
True
>>> w3.is_encodable('bytes2', b'1')
True
>>> w3.is_encodable('bytes2', '0x1234')
True
>>> w3.is_encodable('bytes2', b'123')
False

RPC API 模块

每个Web3实例还公开这些名称空间API模块。

Web3.eth
查看web3.eth API

Web3.miner
查看Miner API

Web3.pm
查看Package Manager API

Web3.geth
查看Geth API

Web3.parity
查看Parity API

这些内部模块继承自web3.module。模块类提供了一些web3.py库内部的配置。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值