软件包从下载最多到下载最少。下载量是截止到写这篇文章时的数据。
如你所知,Web3是一个新的网络时代,它与Web2的不同之处在于其基础技术--区块链。
- 区块链是一种颠覆性的技术,其特点是作为通信和交易的去中心化解决方案。
- 去中心化意味着没有由第三方服务供应商控制的数据库。这些供应商可以拥有和持有你的账户或其他有关你的信息数据。
区块链由一系列的区块组成,形成一个数据库,而不是我们更熟悉的表和行的数据库。每个区块都有一个对其之前区块的引用,从而形成一个 不可变的数据结构.区块也有一个确切的时间戳,表明每个区块是何时被添加到链上的。目前,至少有一千条区块链--虽然不是所有的去中心化的。例子包括比特币或以太坊。
Python编程语言是开发区块链应用程序的最流行语言之一。与其他编程语言相比,Python允许在较少的代码行中编写有效的代码,这使得它成为区块链编码的最佳工具。这是因为Python在其官方仓库pypi.org/,提供了许多工具包,旨在使其更容易与区块链互动并创建去中心化的应用程序和智能合约。
弄清楚哪些是最适合开发者的,需要做一些研究。
除了在存储库中搜索项目和在网上搜索之外,还需要咨询致力于Python Ethereum区块链开发的Python开发者社区,以及加密货币开发者社区。我喜欢Web3的原因之一是社区,人们互相帮助,因为他们需要彼此。
在这篇文章中,你会发现2022年最流行的Python区块链开发的Python包列表,这样你就可以马上开始开发了!
在编制了最常用的软件包列表后,根据pepy.tech/网站上的总下载量,将它们从1到10进行了排名。
请注意,在这个列表和其他列表中,有许多包与不同的区块链一起工作,并具有不同的功能,如执行交易、签署交易、部署智能合约,甚至可以创建自己的区块链等等。我希望这是个开始,这样你就可以深入到万维网3。
让我们开始吧!
软件包#1 - IPython
虽然IPython不是一个只用于Web3的包,但它是一个用户友好的、强大的、交互式的Python解释器,区块链开发者喜欢用它来观察他们探索与区块链的交互时发生了什么。
当你在教程中读到以>>>
开始的代码时,它是为了在IPython这样的Python解释器中运行。它还有一些功能,如关键字、变量和函数名称的标签完成,测试、调试,以及默认的漂亮打印,等等。最终,它帮助你从Python中获得最大的收益。它类似于你在命令行上输入python
或python3
时得到的东西,但甚至更有帮助。
要获得默认的Python解释器,输入python
,你会得到命令提示符>>>
,你可以用它来工作。要获得IPython解释器,你必须先用以下方式安装它 [pip install Ipython](https://blog.finxter.com/how-to-install-ipython-in-python/)
.你输入IPython,就会得到In [1]:
作为命令提示符,并得到In [2]:
作为下一个命令。
下面的截图显示了与Ethereum区块链互动的设置。
.
包 #2 - eth_utils
+
下载次数较多的第二个包包括一些流行的函数和类,区块链开发者用来与以太坊互动。根据这个网站,其中最受欢迎的是。
encode_hex()
- 返回一个以十六进制表示的数值,前缀为 。0x
>>> from eth_utils import encode_hex
>>> encode_hex(b'\x01\x02\x03')
'0x010203'
to_bytes()
- 使用Ethereum生态系统中的标准做法转换数值。例如,字符串是使用UTF-8的二进制编码的。
>>> to_bytes(0)
B'\x00'
to_checksum_address()
- 对于地址的每个有效表示,将返回校验过的表示。
>>> to_checksum_address('0xd3cda913deb6f67967b99d67acdfa1712c293601')
'0xd3CdA913deB6f67967B99D67aCDFa1712C293601'
decode_hex()
- 返回解码为字节字符串的值。接受任何带或不带[0x](https://blog.finxter.com/python-print-hex-without-0x/)
前缀的任何字符串。
>>> decode_hex('0x123456')
b'\x124V'
keccak()
- 该函数生成一个代码哈希,与旧的哈希算法相比,它提供了更高的安全级别。
>>> keccak(text='')
b'\x85\xe8\x07"\xeb\x93\r\xe9;\xcc\xa8{\xa5\xdf\xda\x89\n\xa12\x95\xae\xad.\xec\xc9\x0b\xb2\xd9z\x14\x93\x16'
包#3 - web3.py
+
这是与Ethereum互动的默认包。
你可以使用Solidity来开发在区块链上运行的智能合约,或者开发客户端。
Web3.py允许你开发与Ethereum区块链互动的客户端。这些不一定是像面向用户的应用程序(如Web应用程序)那样的 "客户端",而是通过从区块链读取信息、向区块链写入新的交易数据或用智能合约执行业务逻辑来与区块链互动的 "客户端"。
这是开始使用以太坊的理想软件包,它还提供一些实用的功能。
在以太坊的应用中,你经常需要转换货币单位。Web3模块为此提供了一些辅助方法:fromWei
和toWei
。
Web3模块提供的其他辅助方法包括数据格式转换器(例如,toHex
)、地址辅助方法(例如,isAddress
)和哈希函数(例如,keccak
)。
要查看所有可用的方法和属性,可以使用IPython的自动完成功能,输入Web3.
,在点后按两次Tab
。
一个理智检查的例子。
In [5]: w3.isConnected()
2
Out[5]: True
包 #4 - eth-tester
+
由于Ethereum是最流行和最广泛使用的区块链之一,所以有一些工具用于测试基于Ethereum的应用程序,例如,测试智能合约。
Eth-tester是下载量最大的软件包之一,因为它创建了一个开发环境,绕过了与区块链的同步过程,如果你只是想要一个开发环境,这需要几个小时,是没有必要的。
这个测试器链接到一个模拟的以太坊节点,具有宽松的权限和一个假币来玩。该模拟节点被称为eth-tester
。
>>> from eth_tester import EthereumTester
>>> t = EthereumTester()
>>> t.get_accounts()
('0x7E5F4552091A69125d5DfCb7b8C2659029395Bdf',
'0x2B5AD5c4795c026514f8317c7a215E218DcCD6cF',
'0x6813Eb9362372EEF6200f3b1dbC3f819671cBA69',
'0x1efF47bc3a10a45D4B230B5d10E37751FE6AA718',
'0xe1AB8145F7E55DC933d51a18c793F901A3A0b276',
'0xE57bFE9F44b819898F47BF37E5AF72a0783e1141',
'0xd41c057fd1c78805AAC12B0A94a405c0461A6FBb',
'0xF1F6619B38A98d6De0800F1DefC0a6399eB6d30C',
'0xF7Edc8FA1eCc32967F827C9043FcAe6ba73afA5c',
'0x4CCeBa2d7D2B4fdcE4304d3e09a1fea9fbEb1528')
>>> t.get_balance('0x7E5F4552091A69125d5DfCb7b8C2659029395Bdf')
1000000000000000000000000
包 #5 - py-EVM
+
Py-EVM是Python中EVM(以太坊虚拟机)的实现,最初由Vitalik编写。
它的目的是测试功能和协议的变化。它包括现有Ethereum 1.0链的低级基元,以及对即将到来的Ethereum 2.0的新兴支持。
py-EVM库的主要用例之一是允许开发者创建想要与Ethereum生态系统互动的应用程序。
通过py-EVM,你可以创建一个简单的脚本,使用py-EVM库来创建一个新的区块链,并使用常规的py-EVM API读取该地址的余额,或者开发其他令人兴奋的用例。
例子
>>> from eth import constants
>>> from eth.chains.mainnet import MainnetChain
>>> from eth.db.atomic import AtomicDB
>>> from eth_utils import to_wei, encode_hex
>>> MOCK_ADDRESS = constants.ZERO_ADDRESS
>>> DEFAULT_INITIAL_BALANCE = to_wei(10000, 'ether')
>>> GENESIS_PARAMS = {
... 'difficulty': constants.GENESIS_DIFFICULTY,
... }
>>> GENESIS_STATE = {
... MOCK_ADDRESS: {
... "balance": DEFAULT_INITIAL_BALANCE,
... "nonce": 0,
... "code": b'',
... "storage": {}
... }
... }
>>> chain = MainnetChain.from_genesis(AtomicDB(), GENESIS_PARAMS, GENESIS_STATE)
>>> mock_address_balance = chain.get_vm().state.get_balance(MOCK_ADDRESS)
>>> print("The balance of address {} is {} wei".format(
... encode_hex(MOCK_ADDRESS),
... mock_address_balance)
... )
The balance of address 0x0000000000000000000000000000000000000000 is 10000000000000000000000 wei
包 #6 - indy-node
Indy节点是Hyperledger Indy的一部分,是一种用于私有、安全和强大身份的技术。该代码库是开源的,并作为初始代码贡献给Hyperledger Indy,这是一个区块链项目,现在是在Linux基金会下。
Indy Node包含运行自主权身份(SSI)的分布式账本节点所需的一切。
在所有的身份管理模式中,数字身份需要标识符来确保用户是他们所说的人。
然而,在自我主权身份中,标识符不需要中间人。这意味着用户的自我主权身份可以登记在一个债权中,如区块链中的一个区块。然后,该人可以在例如与银行进行交易时,分享识别数据。
Indy-node可与其他区块链互操作,也可独立使用,以推动身份的去中心化。如果你想运行自己的Indy分布式账本(DLT)网络,请使用indy-node。如果你想建立SSI应用程序,还有SKD库。
Hyperledger Indy附带了一个很好的例子,模拟了一个真实案例。请观看下面的视频。
包 #7 - my-thril
Mythril是一个安全分析工具,旨在检测为Ethereum、Hedera、Quorum、Vechain、Roostock、Tron和其他EVM兼容的区块链开发的智能合约的各种漏洞。
Mythril检测了许多安全问题,包括整数下溢、所有者对以太坊的改写,以及其他问题。请注意,Mythril旨在寻找一般的漏洞,而不能检测应用程序的业务逻辑问题。
下面的截图显示了分析的结果
$ myth analyze ether_send.sol
==== Unprotected Ether Withdrawal ====
SWC ID: 105
Severity: High
Contract: Crowdfunding
Function name: withdrawfunds()
PC address: 730
Estimated Gas Usage: 1132 - 1743
Anyone can withdraw ETH from the contract account.
Arbitrary senders other than the contract creator can withdraw ETH from the contract account without previously having sent an equivalent amount of ETH to it. This is likely to be a vulnerability.
--------------------
In file: tests/testdata/input_contracts/ether_send.sol:21
msg.sender.transfer(address(this).balance)
包 #8 - py-solc-x
在开发去中心化的应用程序时,特别是在编写智能合约时,有许多重复性的工作需要处理。
这些工作包括编译源代码。智能合约是用一种对人友好的语言(如Solidity)编写的,为了编译Solidity,我们需要使用solc
编译器。
这个软件包包含solcx
编译器。注意,solcx
,只有在 [web3.py](https://blog.finxter.com/introduction-to-web3-py/)
安装的情况下才能运行。
要部署一个合约,你需要compile_standard
和install_solc
模块的solcx
。第一个模块用来编译,第二个模块用来调用你想使用的solc
版本。
这个例子显示了compile_standard
,它有一个基于json的布局,开发者可以改变输入并告诉编译器期望的输出。
compiled_sol = compile_standard(
{
"language": "Solidity",
"sources": {"simpleStorage.sol": {"content": simple_storage_contract}},
"settings": {
"outputSelection": {
"*": {"*": ["abi", "metadata", "evm.bytecode", "evm.sourceMap"]}
}
},
},
solc_version="0.6.0",
)
包#9 - Vyper
Vyper是一种面向智能合约的高级编程语言,具有类似Python的语法,针对以太坊虚拟机(EVM)。它的用途不如它的EVM兄弟姐妹Solidity多;但是,如果你喜欢Python,这是你可能比Solidity更喜欢的一种语言。
这是一个vyper合同的例子,在vyper文档中发现,这是一个众筹合同,潜在的参与者可以为一个活动贡献资金。
包 #10 - bigchaindb
BigchainDB(BDB)是一个具有区块链属性的开源可查询数据库。它是一个不可变的记录系统;交易可以被排序和分组为区块,有时间戳,多方可以写到数据库,并有数据集的副本,以验证交易并同意真相。
归根结底,这就是区块链本身。开发者需要某些有用的功能来创建提供透明度的区块链。这对供应链、支付、资本市场和交易平台有巨大的价值,仅举几例。
这是该模块连接到数据库的一个例子。
from bigchaindb_driver import BigchainDB
conn = BigchainDB('https://test.ipdb.io')
你可以通过使用BigchainDB作为Ethereum中智能合约的注册表、通过BDB与Ethereum互补的父区块链应用进行整合(BigchainDB作为DB;Ethereum作为智能合约或货币),以及其他可能性来整合区块链,例如Ethereum。
集成的例子。
总结
这里列出了区块链最常用的Python包。
大多数包是用于与以太坊区块链交互的,但也有非常有趣的包,如indy-node和BigchainDB,可以作为区块链技术如何应用和与其他区块链集成的另一个例子。