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

通过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 上查找这笔交易了。

美巨头没想到打脸来得这么快,欧洲多国明确表态,华为危机解除?华为的5G热潮,让中国的通信技术登上了世界之巅。然而,这引起了美国的仇恨。一轮强力镇压,试图通过限制他人的发展来保护自己的利益。尽管芯片禁令对华为的各项业务产生了重大影响,但任正非雅迪爱玛推出新款两轮电动车,一次充电,续航最高能到300公里十年前我们还经常能够看到道路上有着汽车摩托车电动车自行车一同出行的场景,由于政策的原因,出行需求变化的原因,现在道路上几乎只能看到汽车和电动车,而自行车和摩托车基本已经被电动车所完一个众包外卖小哥的年中总结!很中肯,也很深切自述者小文,33岁,男性,离异,一个7岁的女儿,和爸妈同住。从去年8月底开始,主业上班工资少,再加上父母年纪大了,孩子读书等开销大,让自己试图去寻找一份兼职很有必要。在刷刷小视频的什么人的手机号长期不换?随着科学技术进步,通信功能从固定电话,寻呼机至砖头般移动手机,直到现代3G4G5G智能手机号,有关重要企业业务人员,主管(总经理董事长等),为方便业务,是不换手机号。有些企业还备有秀出你的手机卡套餐,敢问套餐哪家强?电信29,500分钟100G全国流量。我移动用的是9块钱月,40G流量(4G),1300分钟通话时长。我办的携号转网套餐,不过移动有个大坑,大家要小心!我是今年年初办携号转网,套餐程序员2021。9。90知乎月饼吃了拉肚子?官方致歉9月8日,知乎月饼吃了拉肚子话题登上微博热榜第一。微博凰家实验室称中秋将至,知乎给自己的国内大V发月饼,陆续有大量大V反馈试吃后化身喷射战士,腹泻拉肚以比心陪玩为首的七款陪玩软件被强制下架原因疑似涉黄现如今游戏领域玩家已达三千万,这个数据还在不断增长,因此衍生出的许多产业链也随之出现,比如最近国家新颁发的未成年人游戏政策,又比如陪玩领域,就在近日包括比心在内的七款陪玩APP因涉美团骑手的社保,谁来交?王兴估计不会管了互联网还没有影响人们的生活之前,虚拟网络和现实生活的联系并不多,许多人可以完全将虚拟网络和现实生活分得一清二楚。但随着互联网的不断发展,人们可以通过虚拟网络完成购物,各大平台可以通比亚迪海豚电动飞度提前国产了?最近汽车圈动物园家族命名越来越火,例如我们耳熟能详的大狗白猫蚂蚁,最近有一款海洋朋友刚刚在成都车展上市,它就是比亚迪的全新新能源车型海豚。乍一看有些朋友可能会觉得新车和飞度有几分神华为发布会13日召开14寸大屏手机真相大白中关村在线消息昨日华为官方宣布,9月13日召开华为智慧办公新品发布会。据悉,本次发布会华为还将发布一款14寸智能设备,被称为14寸为大屏手机。今日,据博主菊厂影业Fans爆料,所谓20万以内纯电动车特斯拉有Model2,大众有ID。3,比亚迪呢?由于特斯拉的存在,国内纯电动车市场变得好看起来,不为别的,特斯拉不按常理出牌,动不动就官降,鲶鱼成了鲨鱼,使得众多竞争对手疲于应付。现在还好,引入国产的Model3也只是在20万以
100W高颜值耐用编织线,倍思这款性价比无敌我算是一个线材大户了,这些年前前后后用了不少线,主要的原因就是很多产品的原装线材基本都是采用塑料外皮,这就带来几个问题。一是不耐用,在不经意的弯折下,很有可能就出现脱皮,破裂的可能CRM系统如何证明对小型电商和线下零售商有益?信息技术已经影响了人们互动交流吃饭和购物的方式。由于消费者购物习惯的改变,零售业尤其是实体店都受到了影响。缓慢但稳定地,实体连锁店正在通过在线提供产品来拥抱技术。系统的方法以及万无谷歌新机Pixel7曝光!首发安卓13系统,撞脸iPhone14设计作者fanfan来源极果编辑部去年10月底,谷歌Pixel6系列上市,该机凭借可媲美骁龙888的自研Tensor芯片和辨识度极高的外观设计,获得一大波好评,使得不少消费者将其收入囊国产版iOS系统来了?云储存直接解决内存问题!网友很强不得不说,虽然现在手机厂商们几乎都在研制自家的操作系统,但无论是国产之光小米的MIUI系统,还是荣耀的MagicUIOPPO的ColorOS等国产系统,都无法真正撼动苹果iOS的地比亚迪将搭载地平线最新款芯片,多家国内芯片公司加速量产记者周姝祺编辑4月21日,比亚迪与地平线正式宣布达成定点合作,比亚迪将在其部分车型上搭载地平线高性能大算力自动驾驶芯片征程5,打造行泊一体方案,实现高等级自动驾驶功能。按照计划,搭早资道科兴回应公司高管因病去世科大讯飞新专利可使绘本人物由静转动网传科兴高管去世,公司回应属实4月20日消息,一则关于科兴高管去世的讣告在网上流传。该讣告显示,北京科兴生物制品有限公司政府事务中心高级经理曹晓斌因病医治无效,于2022年4月17壹现场丨公司用虚拟货币支付拖欠工资遭离职员工拒绝双方对簿公堂虚拟货币不具有与法定货币等同的法律地位,相关业务活动也属于非法金融活动。境外虚拟货币交易所通过互联网向我国境内居民提供服务,同样属于非法金融活动。北京青年报记者4月21日获悉,一公三大运营商一季度日均赚超3亿元5G套餐推动业绩上行本报记者李乔宇见习记者许林艳4月21日晚间,中国移动中国联通披露了一季报,至此,中国移动中国联通中国电信三大运营商一季报已全部披露完毕。据证券日报记者粗略计算,今年一季度,三大运营一公司要求员工下班前先发手机电量截图,防止上班摸鱼IT之家4月21日消息,4月19日一公司要求员工下班发手机电量截图的话题冲上微博热搜。原来,近日武汉一位网友发帖吐槽,称公司领导发布群公告要求员工下班前将手机电量消耗截图私发检查,显卡危机500天只有NVIDIA和AMD赢麻了图片来源视觉中国文奇偶派显卡价格最低的是哪一天?接下来的一天。过去的两个月里,这句段子每天都在应验着。坚挺了近一年的显卡高价,随着2022年春天的到来,终于彻底坐上了向下的过山车。头条新闻之热点大事件头条新闻之热点大事件华为轮值董事长胡厚崑没有自建芯片工厂的计划华为轮值董事长胡厚崑表示,虽然面临芯片断供,但华为没有自建芯片厂的计划,产业分工是有要求的。华为依旧寻求有质量的生存,