范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

通过web3。py用Python存取Ethereum

  想要通过 Python 存取 Ethereum,从 Ethereum 官方的 Github 中可以看到有两种模块可以达成:web3.py 和 pyethereum 。就我目前的理解来说,两者的差别在于 web3.py 主要是作为外部存取 Ethereum 客户端,也就是说 web3.py 函数库本身不会成为区块链节点,也不会进行区块链同步,而是连接一个区块链上的节点,把区块链当成是外部资料库一样取用而已;而 pyethereum 则比较像是 geth 那样,是用来把自己做成一个区块链节点,会正常进行区块同步,也可以作为矿工开始挖矿。
  在本篇当中,因为是想要一个轻量级的客户端来与区块链互动,并不想要准备庞大的储存空间来存放区块链的资料,因此会以 web3.py 为主。  配置 web3.py 执行环境  通过 web3.py 连接 Ethereum 节点  存取区块链上的 ERC20 合约  签署并送出交易
  配置 web3.py 执行环境
  web3.py 可以直接通过 pip 安装。  pip install web3
  需注意的是,在 Windows 上想安装时,会需要事先安装 Visual C++ Builder,否则在安装的最后阶段会因为无法编译而失败。
  通过 web3.py 连结 Ethereum 节点
  web3.py 因为自身不会作为一个区块链的节点存在,因此它需要有一个节点用来存取区块链上的资料。一般来说最安全的方式应该是自己使用 geth 或者 parity 来自建节点,不过如果在不想要自建节点的状况时,可以考虑看看 infura 提供的 HTTP 节点服务。
  以 infura 现在的 API 来说,如果要连接 Ropsten 测试链,连接的网址是  https://ropsten.infura.io/v3/api_key  ,其中 api_key   要去注册帐号才取得。以下的程序仿照了 web3.py 内建的 auto.infura   的作法,会从环境变数读取 INFURA_API_KEY   这个参数来组出 infura.io   的 HTTP 位址,用来建立根基 Ropsten 测试链的连线。 import os  from web3 import (     HTTPProvider,     Web3, )  INFURA_ROPSTEN_BASE_URL = "https://ropsten.infura.io/v3"  def load_infura_url():     key = os.environ.get("INFURA_API_KEY", "")     return "%s/%s" % (INFURA_ROPSTEN_BASE_URL, key)  w3 = Web3(HTTPProvider(load_infura_url()))
  存取区块链上的 ERC20 合约
  在开始存取合约之前,需要先谈谈什么是 ABI 。在 Ethereum 中,因为合约都是以编译过的 binary code 形式存在,因此其实函数库没办法直接知道合约传输的内容到底是什么,因为合约的回传值全都是 binary。因此在操作合约之前,需要提供一份 ABI 文件,告诉函数库如何使用合约。  # Assume the contract we"re going to invoke is a standard ERC20 contract. with open("erc20.abi.json") as f:     erc20_abi = json.load(f)  # Web3 accept only checksum address. So we should ensure the given address is a # checksum address before accessing the corresponding contract. contract_addr = w3.toChecksumAddress("0x4e470dc7321e84ca96fcaedd0c8abcebbaeb68c6");  erc20_contract = w3.eth.contract(address=contract_addr, abi=erc20_abi)  for func in erc20_contract.all_functions():     logger.debug("contract functions: %s", func)  logger.debug("Name of the token: %s", erc20_contract.functions.name().call())
  这里假设我们想存取 Ropsten 测试链上位置是  0x4e470dc7321e84ca96fcaedd0c8abcebbaeb68c6   的智能合约。这个合约是透过 etherscan 随便找的某个 ERC20 这个合约,因此可以用标准的 ERC20 的 ABI 来存取它。我们在建立这个合约的 instance 时,先跑一个回圈印出合约内所有的 function(这个步骤其实是在列出 ABI 上面的信息),接着试着呼叫合约中的 name()   来取得这个合约宣告的代币名称。最后输出的内容如下: 2018-09-07 15:02:53,815 | __main__ | DEBUG | contract functions:  2018-09-07 15:02:53,816 | __main__ | DEBUG | contract functions:  2018-09-07 15:02:53,824 | __main__ | DEBUG | contract functions:  2018-09-07 15:02:53,824 | __main__ | DEBUG | contract functions:  2018-09-07 15:02:53,824 | __main__ | DEBUG | contract functions:  2018-09-07 15:02:53,824 | __main__ | DEBUG | contract functions:  2018-09-07 15:02:53,824 | __main__ | DEBUG | contract functions:  2018-09-07 15:02:53,825 | __main__ | DEBUG | contract functions:  2018-09-07 15:02:53,825 | __main__ | DEBUG | contract functions:  2018-09-07 15:02:54,359 | __main__ | DEBUG | Name of the token: KyberNetwork
  签署并送出交易
  在上面的例子中,呼叫智能合约时是直接呼叫智能合约里的 function,但这一般只能用在读取区块链上的资料的状况。如果是想要通过呼叫智能合约来写入资料到区块链,就必须要用另一种方式来呼叫合约,也就是必须先签署交易,然后付 gas 去执行这个交易。
  假设我们一样是要呼叫一个 ERC20 这个合约,要执行合约上的  transferFrom()   这个函数。transferFrom()   需要三个参数 _from  、 _to  、 _value  ,表示要从 _from   帐号转帐给 _to   帐号,转账金额是 _value  。 # Set the account which makes the transaction. account = w3.toChecksumAddress(os.environ.get("ETHEREUM_ACCOUNT", "")) w3.eth.defaultAccount = account  # Web3 accept only checksum address. So we should ensure the given address is a # checksum address before accessing the corresponding contract. contract_address = w3.toChecksumAddress("0x4e470dc7321e84ca96fcaedd0c8abcebbaeb68c6") contract = w3.eth.contract(address=contract_address, abi=contract_abi)  # Prepare the necessary parameters for making a transaction on the blockchain. estimate_gas = contract.functions.transferFrom(account, account, w3.toWei("1", "eth")).estimateGas() nonce = w3.eth.getTransactionCount(account)  # Build the transaction. txn = contract.functions.transferFrom(account, account, w3.toWei("1", "eth")).buildTransaction({     "chainId": 3,     "gas": estimate_gas,     "gasPrice": w3.toWei("1", "gwei"),     "nonce": nonce })  logger.debug("Transaction: %s", txn)  # Sign the transaction. private_key = bytes.fromhex(os.environ.get("ETHEREUM_ACCOUNT_PKEY", "")) signed_txn = w3.eth.account.signTransaction(txn, private_key=private_key)  tx_hash = w3.eth.sendRawTransaction(signed_txn.rawTransaction) logger.debug("Txhash: 0x%s", bytes.hex(tx_hash))
  在上面的程序中,首先第 2 ~ 3 首先从环境变量中读取我们要使用的帐号,这个帐号将会用来发送交易,当然要付 gas 时间也会从这个帐号扣。第 10 ~ 20 行建立一个原始交易(raw transaction),这个交易中因为我们需要自行指定包括 gas、nonce 等参数,因此需要排在前面 11 ~ 12 确认参数要设定多少。然后最重要的第 25 ~ 26 行读取私钥,并且用私钥去签署交易。这里假设私钥的组成会是用 Hex 编码的文字,所以使用  bytes.fromhex   把 Hex 编码转回成 byte 格式。签好以后就送出交易,送出交易时 API 会回传 byte 格式的交易的 transaction hash,可以把它编码后印出来,之后就可以去 etherscan 上查找这笔交易了。

明年起!国内将对汽油机颗粒捕集器等部件实施零关税新能源汽车未来是大势所趋,但目前又不能完全取代燃油车。因此,未来很长一段时间,国内的燃油车保有量还是很高。为了改善环境质量,从明年起,国内很多汽车可能都会装上颗粒捕集器和汽车用电子混动车型开始发力,谁会成为最大的赢家?所周知,在新能源汽车大规模普及前,混动车型可以说是解决当下油耗法规和双积分问题的最佳办法。在去年发布的节能与新能源汽车技术路线图2。0中也提到,预计至2035年,传统能源动力乘用车内存为程序分配空间的四种分配方式存储器是个宝贵但却有限的资源。一流的操作系统,需要能够有效地管理及利用存储器。内存为程序分配空间有四种分配方式1连续分配方式2基本分页存储管理方式3基本分段存储管理方式4段页式存储大众董事会与CEO握手言和,一致对抗特斯拉大众汽车(Volkswagen)工厂帝国的心脏德国沃尔夫斯堡工厂陷入了从发动机汽车到电动汽车的转型危机。12月9日,内部矛盾激烈的大众汽车集团董事会最终达成一致,重新支持位于风口浪你认为人死后,微信头条空间游戏等等网络数据该怎么处理?人死后,微信这类东西没人报亡,照样存在。让它成为永久的记忆存在,在天国获得欣慰。自己挖的坑,自己跳吧,我来回答。只求抛砖引玉,引发有益的探讨与思考。文章分五部分01假如我原地死亡0全民优打与三大运营商唱反调,拒绝4G用户冷处理近日,三大运营商公布今年运营的各种成果汇报,最值得关注的是在2021年里,5G信号基站的建设已经超过了125万座,来到了一个非常可观的数字,同时下一年在5G建设上的基金支出还会加大被白宫切断视频的唐凤又被韩国突然取消视频演讲来源环球时报因涉嫌违反一个中国政策而被美国消失的台湾政务委员唐凤,又摊上事了。唐凤(资料图)据台湾联合新闻网12月20日报道,台对外事务部门当天发布新闻稿称,韩国政府第四次工业革命为什么中国诞生了世界级互联网公司,而日本俄罗斯却没有?这个世界,有两个互联网,一个是中国互联网,一个是美国互联网。美国互联网,因为是互联网的发源地,具备科技领先性。美国近几十年来投入了大量资金,以及互联网的无国界性,导致美国互联网公司网站建设中降低被挂马的风险怎么做网站一旦挂载,会给访问者和网站本身带来一些麻烦,如1网页上会出现一些恶意脚本,可能弹出大量垃圾广告弹出窗口,跳转到无关甚至非法的网站,插入大量链接,页面死圈等,降低访问体验2影响网折叠屏会成为主流吗?三星做出预测,华为独占国内市场七成份额全新的屏幕形态,折叠屏会不会是智能手机未来的发展趋势?这还不好说,但是敢于尝试也是行业的一大进步。都在吐槽华为价格贵,可它确实销量很高。智能手机经历了这十年的高速发展的黄金时期,终小米新专利曝光卷曲型折叠屏手机无折痕体积更小手机中国新闻小米近期公布一项专利,在使用柔性屏的基础上实现了折痕的出现,相比现在的折叠屏,它采用卷曲的方式让物理压痕得到了有效的扼制,这样的设计其实并非第一次出现,但小米有计划将其
售价149元,最难抢的一款充电宝,小米无线充电宝开箱测评前言随着科技的发展,智能手机的普及,手机越来越成为大家必不可少的出行装备之一。手机厂商也不断对手机的拍照性能续航等方面进行升级,但由于机身大小的限制,导致电池容量较小,不足以满足大时隔半年,手中的千元王子魅族16Xs依然很香,不愧是小16s魅族16Xs上市已有半年多,当时从ZAKER那里拿到了测评机会,外观经典,颜值好看,性能够用如今已过去了大半年,新机不断涌现,那么它的表现还够满足需求吗?外观魅族16Xs正面采用了realmeX50Pro正式发布,手中的小米10还香吗?2月24号下午,realme举行了全球新品发布会,大会上发布了旗下首款5G旗舰realmeX50Pro。外观设计方面,拥有青苔与红锈两种配色,背部采用了AG磨砂工艺,让玻璃有了类肌颜值在线的骚红版小米5X,现在看依旧很美,日常使用毫不卡顿这是一部2017年发布的手机,放到现在来看颜值依旧吊打后起的红米56系列,甚至我觉得比玻璃设计的红米note7。当年苹果7系列带起了全金属一刀切设计的潮流(准确来说,魅族pro6才4KHDRDCIP3色域明基EW3270U畅爽视听体验前言作为一名自媒体工作者基本上每天都是埋头电脑面前写稿修图以及剪视频等,熬夜更是家常便饭,长时间的直视屏幕导致我们的眼睛会特别的疲劳酸涩,所以一台好的显示器很有必要。以往1080P唱吧小巨蛋麦克风G2Pro,让您宅家也可轻松High唱前沿都市的快节奏生活迫使我们每天处于忙碌状态,作为一名上班族每天三点一线的奔波于公司住处,长时间下来导致我们的精神压力也随之增大,所以我们应当适当的放松休闲一下。像叶涵每个月都会约让家务变成一种享受美的P2G无线吸尘器前沿说起做家务,很多人都觉得头疼吧,要是遇上亲戚朋友在家狂欢一场,清洁卫生更是难做。而叶涵今天为大家带来的是美的P2G无线吸尘器的体验,一款能让你爱上做家务的一个好帮手。要知道这款让小家更安全生活更智能配备修长锁身海尔智能门锁E18诚意来在5GAI智能和物联网等技术赋能下,智能家居行业高速发展,全屋智能互联的时代正在向我们走来。而作为全屋智能互联的起点,门锁这个守门神,除了守护着我们家庭的安全,更承载着用户对智能化孩视宝OG235BAI智能台灯,全面守护宝宝的视力健康前沿台灯,作为我们日常生活中的小家电可以说随处可见,像家里宝宝在写作业时能很好的起到照明作用从而可有效的防止近视发生。并且进入到万物互联时代,台灯已不再是以往单独的照明作用,更有护降价引起网友轰动!5G套餐跌破至9元,低门槛超前享用5G5G市场庞大面对市场饱和,激烈的竞争和疫情等挑战,国内主要运营商经受住了考验,并在前三个季度保持了营业收入的整体增长。其中,中国移动和中国电信的5G用户净增长总计超过1亿,而中国联羊皮卷今天你做了什么?一今天我们要开始新的生活今天,我爬出满是失败创伤的茧壳。今天,我重新来到这个世上,我出生在葡萄园中,园内的葡萄任人享用。今天,我要从最高最密的葡萄藤上摘下智慧的果实。这葡萄藤是好几