Python以太坊和比特币生成vanity地址

作者:ca88编程

本学科详细讲明怎么样运用Python开垦以太坊应用,课程内容即涉及以太坊中的大旨概念,举例账户管理、状态与交易、智能合约开辟与互为、过滤器和事件等,同期也详细表达怎么样利用Python与以太坊进行互动,是Python技术员学习以太坊应用开荒的不二接纳。

在这里个笔记中,作者将运用Python命令行测量检验以太坊的RPC客商端,希图好狂敲键盘吧。进程中关于JSON RPC的越多消息,能够参考JSON RPC。

编写制定代码

代码特简单,你只需求成立二个相接转变地址的while循环,并依据你的目的短语进行反省。那是比特币地址的代码:

from bitcoin import *target = input('Input Target Phrasen>')priv = random_key()addr = pubtoaddr(privtopubwhile not addr.lower().startswith('1{}'.format: priv = random_key() addr = pubtoaddr(privtopubprint('Address: {}nPrivate Key: {}'.format(addr, priv))

以太坊不怎么差异,因为它并未有放置的自由密钥生成器,所以你必得导入os来变化随机数并应用SHA3来哈希它们以生成私钥。

其它,请小心,以太坊地点是十五进制的,只行使了字符a-f和0-9,由此你能够调换的地点类型受到节制。即使输入的目的不是十九进制,它将Infiniti循环,因为它世代不会扭转饱含非十七进制字符之处。

from ethereum import utilsimport ostarget = input('Input Target Phrasen>')priv = utils.sha3(os.urandomaddr = utils.checksum_encode(utils.privtoaddrwhile not addr.lower().startswith('0x{}'.format: priv = utils.sha3(os.urandom addr = utils.checksum_encode(utils.privtoaddrprint('Address: {}nPrivate Key: {}'.format(addr, priv.hex

自家期待你对这一个有部分野趣!其余,请在乎目的短语中的每一个附加字符都会以指数方式加码浮动难度,因而请勿过长。

======================================================================

共享部分以太坊、EOS、比特币等区块链相关的交互式在线编制程序实战教程:

python以太坊,首假诺针对python技术员使用web3.py举行区块链以太坊开荒的详解。

  • java以太坊付出教程,首要是针对java和android技士实行区块链以太坊开拓的web3j详解。
  • php以太坊,主倘诺介绍使用php实行智能合约开辟交互,举办账号创造、交易、转账、代币开垦以致过滤器和贸易等内容。
  • 以太坊入门教程,主要介绍智能合约与dapp应用开采,符合入门。
  • 以太坊支出进级教程,主假设介绍使用node.js、mongodb、区块链、ipfs达成去中央化电商DApp实战,相符进级。
  • C#以太坊,首要教学怎么样使用C#支付基于.Net的以太坊应用,满含账户管理、状态与交易、智能合约开垦与互动、过滤器和贸易等。
  • EOS教程,本课程扶植您飞快入门EOS区块链去大旨化应用的开销,内容富含EOS工具链、账户与钱袋、发行代币、智能合约开辟与配置、使用代码与智能合约交互等着力知识点,最终汇总接受各知识点完毕叁个便签DApp的付出。
  • java比特币开辟教程,本学科面向初读书人,内容即含有比特币的基本概念,比如区块链存款和储蓄、去中央化共鸣机制、密钥与剧本、交易与UTXO等,同期也详细批注如何在Java代码中集成比特币帮衬效用,举例创制地址、管理卡包、构造裸交易等,是Java程序猿秀出班行的比特币开辟学习课程。
  • php比特币开拓教程,本学科面向初读书人,内容即包蕴比特币的中央概念,举例区块链存款和储蓄、去中央化共鸣机制、密钥与剧本、交易与UTXO等,同期也详细疏解如何在Php代码中集成比特币援救功效,比如成立地址、管理卡包、构造裸交易等,是Php程序员庸中佼佼的比特币开荒学习课程。

汇智网原创翻译,转发请注脚出处。这里是原作如何用Python为以太坊和比特币生成设想地址

配备智能合约

运用Python来铺排智能合约而不运营自身的节点是丰裕辛劳的,所以咱们将在此一步上做简双手脚。对于广大智能合约用例,你只需求施行一次。

正如我前边涉嫌的,有关如何安顿ERC20公约的百万条指南,由此大家将配置一些不如的。

问:哪个人喜欢在互连网络享受他们的理念?

大家都开卷有得?

好答案。以下笔者称之为“Soap Box”肥皂盒的智能合约允许任哪个人向区块链广播他们想要的别的思想,在固定的剩余时间能够看见它。

唯独有三个主题材料:唯有付出了必备的0.02以太网费用的地址技巧播出他们的思想。听上去不太公平,但好似此。

Remix,以太坊的在线代码编辑器极其了不起,由此在此边成立二个新文件并粘贴以下代码。它是用Solidity(SmartContracts的编程语言)编写的。如若代码未有太多意义并不首要,大家就要稍后详细介绍有关部分,但最终这是三个Python教程。

pragma solidity ^0.4.0;contract SoapBox {// Our 'dict' of addresses that are approved to share opinions //我们批准分享意见的地址的“字典” mapping (address => bool) approvedSoapboxer; string opinion; // Our event to announce an opinion on the blockchain //我们的事件发布对区块链的意见 event OpinionBroadcast(address _soapboxer, string _opinion);// This is a constructor function, so its name has to match the contract //这是一个构造函数,所以它的名字必须与合约相匹配 function SoapBox() public { } // Because this function is 'payable' it will be called when ether is sent to the contract address. //因为这个函数是“支付”,所以当以太网被发送到合约地址时将被调用。 function() public payable{ // msg is a special variable that contains information about the transaction // msg是一个特殊变量,包含有关交易的信息 if (msg.value > 20000000000000000) { //if the value sent greater than 0.02 ether  //如果发送的值大于0.02 ether // then add the sender's address to approvedSoapboxer //然后将发件人的地址添加到approvedSoapboxer approvedSoapboxer[msg.sender] = true; } } // Our read-only function that checks whether the specified address is approved to post opinions. //我们的只读函数,用于检查指定地址是否被批准发布意见。 function isApproved(address _soapboxer) public view returns (bool approved) { return approvedSoapboxer[_soapboxer]; } // Read-only function that returns the current opinion //返回当前意见的只读函数 function getCurrentOpinion() public view returns { return opinion; }//Our function that modifies the state on the blockchain //我们的函数修改了区块链上的状态 function broadcastOpinion(string _opinion) public returns (bool success) { // Looking up the address of the sender will return false if the sender isn't approved //如果发件人未获批准,查找发件人的地址将返回false if (approvedSoapboxer[msg.sender]) { opinion = _opinion; emit OpinionBroadcast(msg.sender, opinion); return true; } else { return false; } }}

以下是Metamask变得这几个管用的地点:若是您点击重新混音窗口右上角的“run”运转标签并在“Environment”意况下拉列表中精选“Injected Web3”注入的Web3,则“Account”帐户下拉列表中应填充你的帐户地址早在MetaMask中开创。若无,只需刷新浏览器就能够。

ca88编程 1image

然后单击“create”创造。Metamask应该弹出一个弹出窗口,必要您确认交易。若无,只需张开Metamask增加并在那实施:

ca88编程 2image

您将要Remix调节台尾巴部分收到一条音讯,告知您合约的始建正在等待管理。单击链接以在Etherscan上查看其意况。假诺刷新而且“To”收件人字段填充了合约地址,则合约已成功布置。

假若您记下了合约地址,大家就该起来通过Web3.py与公约进行互相了。

以笔者之见,有两种方式得以与以太坊智能合约进行相互。最终八个日常混在协作,但差别很要紧。我们曾经见到了第四个:在区块链上配置智能合约。今后我们将介绍任何的python:

  • 向合约发送以太:真正自己解说,将以太币从卡包发送到智能合约的地点。希望换取有用的东西。
  • 调用函数:实行智能合约的只读成效以获取有些音信。
  • 与效果与利益拓宽交易:试行智能合约的效劳,该功效能够校正区块链的情事。
  • 翻看事件:查看由于早先的效果与利益交易而发表到区块链的音信。

局地智能合约富含“payable”应付功用。尽管您将Ether发送到公约的地点,则会接触这几个功用。多个一流的用例便是ICO:将以太送到协议中,然后回来给你的是代币。

首先,大家将从导入开首,创造一个新的web3指标,通过Infura.io连接到Ropsten TestNet。

import timefrom web3 import Web3, HTTPProvidercontract_address = [YOUR CONTRACT ADDRESS]wallet_private_key = [YOUR TEST WALLET PRIVATE KEY]wallet_address = [YOUR WALLET ADDRESS]w3 = Web3(HTTPProvider([YOUR INFURA URL]))w3.eth.enable_unaudited_features()

您可以在Metamask中的帐户名称旁边的菜单中找到你的卡包私钥。因为大家选用的Web3.py的有些职能未有通过完全核查以管教安全性,所以大家要求调用w3.eth.enable_unaudited_features()来确认大家知道大概会爆发难题的事态。小编告诉过你我们用私钥做了有的摇摇欲倒的事体!

今昔大家将编辑叁个函数,将以太币从大家的钱袋发送到合约:

def send_ether_to_contract(amount_in_ether): amount_in_wei = w3.toWei(amount_in_ether,'ether'); nonce = w3.eth.getTransactionCount(wallet_address) txn_dict = { 'to': contract_address, 'value': amount_in_wei, 'gas': 2000000, 'gasPrice': w3.toWei('40', 'gwei'), 'nonce': nonce, 'chainId': 3 } signed_txn = w3.eth.account.signTransaction(txn_dict, wallet_private_key) txn_hash = w3.eth.sendRawTransaction(signed_txn.rawTransaction) txn_receipt = None count = 0 while txn_receipt is None and (count < 30): txn_receipt = w3.eth.getTransactionReceipt print(txn_receipt) time.sleep if txn_receipt is None: return {'status': 'failed', 'error': 'timeout'} return {'status': 'added', 'txn_receipt': txn_receipt}

率先让我们回想一下贸易字典txn_dict:它含有了定义大家发送给智能合约的交易所需的大多数音信。

  • to:我们将以太送到哪儿(在此种地方下是智能合约)。
  • Vaule:大家送多少钱单位wei。
  • gas:瓦斯是衡量在以太坊上执行交易的精兵简政职业量度。在这里种情景下,大家钦点了我们甘愿实行此交易的纯石脑油量的上限。
  • gasPrice:我们甘愿为每单位瓦斯支付多少钱。
  • Nonce:这是多少个地方nonce并非更布满的干活表明。它只是发送地址所做的先前交易次数的计数,用于制止重复开支。
  • Chain ID:各个以太坊互连网都有谈得来的链ID:主网的ID为1,而Ropsten为3。你可以在此找到更加长的列表。

至于瓦斯限定的立即表达:有部分功用能够让您估量交易将使用多少瓦斯。但是,笔者意识接纳范围的特级方法是计量出您愿意付出多少钱,然后再让交易失利,然后再去做。

假设大家定义了贸易的第一片段,大家就能接收大家卡包的私钥对其进行签字。然后它就足以发送到网络了,大家将采纳sendRawTransaction方法。

在矿工决定将其包涵在一个区块中早先,我们的交易实际不会成功。通常来说,你为各种单位支付的开销Gas(记住大家的煤油价格参数)决定了三个节点调整将你的贸易满含在一个区块中的速度。

ca88编程 3image

那时间延迟意味着交易是异步的。当我们调用sendRawTransaction时,大家会立马收获贸易的独占鳌头哈希值。你可以随尽管用此哈希来查询你的交易是还是不是已带有在块中。大家知晓,当且仅当大家可以赢得贸易发票时才将交易增加到区块链中(因为有着好的购置都富含发票吗?)。那就是为啥大家成立循环来按时检查大家是还是不是有小票:

 txn_receipt = None count = 0 while txn_receipt is None and (count < 30): txn_receipt = w3.eth.getTransactionReceipt print(txn_receipt) time.sleep

值得注意的是,交易能够加多到区块链中,但照样因各样缘由而倒闭,比方未有丰富的瓦斯。

那正是将以太符号发送给合约的Python代码。让大家飞速回看一下我们在Solidity中写的搪塞函数:

function() public payable{ if (msg.value >= 20000000000000000) { approvedSoapboxer[msg.sender] = true; } }

Msg是智能合约中的叁个奇怪变量,在那之中含有关于发送到智能合约的贸易的新闻。在此种景色下,我们使用msg.value,它交给了交易中发送的Ether数量(在Wei并非raw Ether中)。相近,msg.sender交给了举办贸易的钱袋之处:即使已经发送了丰盛的以太币,大家会将其增多到已特许帐户的字典中。

连绵起伏运维send_ether_to_contract函数。希望你能接过回执。你还足以经过在Etherscan的Ropsten Network部分查找你的卡包地址来检查交易是不是造成。大家就要下生龙活虎节中获得Python中的更加的多消息。

python以太坊

推行贰个挖沙步骤

执行矿工以证实交易。

输入:

prev_balance_sen = client.get_balance(sending_address)prev_balance_rec = client.get_balance(receiving_address)

result = !geth --exec "miner.start();admin.sleepBlocks;miner.stop();" attachif result[0] != 'true': print('Fail: %s' % result[0])else: print("Mining finished!")

出口挖矿完毕:

Mining finished!

输入:

print("Received %d"% (client.get_balance(receiving_address)-prev_balance_rec))

出口收到金额:

Received 12000000000

先是检查余额的间隔,输入:

print("Difference of the sender %d"% (client.get_balance(sending_address)-prev_balance_sen))

输出:

Difference of the sender 4999999988000000000

对此采矿来讲,矿工将获取采矿奖金。

输入:

mining_bonus = 5000000000000000000

要博得以太网发送的数据,我们需求减去采矿奖金。

输入:

print("Amount difference: %d" % int(client.get_balance(sending_address)-prev_balance_sen - mining_bonus))

出口金额差异:

Amount difference: -12000000000

======================================================================

享受部分以太坊、EOS、比特币等区块链相关的交互式在线编程实战教程:

  • python以太坊,重就算针对python技术员使用web3.py进行区块链以太坊开辟的详解。
  • java以太坊付出教程,首即使针对java和android程序猿实行区块链以太坊支付的web3j详解。
  • php以太坊,主假使介绍使用php举办智能合约开荒交互,进行账号创制、交易、转账、代币开垦以致过滤器和贸易等内容。
  • 以太坊入门教程,首要介绍智能合约与dapp应用开辟,切合入门。
  • 以太坊支出晋级教程,首如果介绍使用node.js、mongodb、区块链、ipfs达成去宗旨化电商DApp实战,符合进级。
  • C#以太坊,首要讲师如何使用C#支出基于.Net的以太坊应用,包蕴账户管理、状态与贸易、智能合约开采与互为、过滤器和交易等。
  • EOS教程,本学科扶植你连忙入门EOS区块链去核心化应用的开辟,内容包含EOS工具链、账户与钥匙包、发行代币、智能合约开采与配置、使用代码与智能合约交互等骨干知识点,最后总结使用各知识点完成五个便签DApp的支出。
  • java比特币开拓教程,本课程面向初读书人,内容即含有比特币的骨干概念,比方区块链存款和储蓄、去主旨化共鸣机制、密钥与剧本、交易与UTXO等,同期也详细讲授怎么样在Java代码中集成比特币帮衬功效,比方创立地址、管理钱包、构造裸交易等,是Java程序猿大才盘盘的比特币开采学习课程。
  • php比特币开荒教程,本学科面向初学者,内容即含有比特币的中央概念,比如区块链存款和储蓄、去中央化共鸣机制、密钥与剧本、交易与UTXO等,同一时间也详细讲授怎么着在Php代码中集成比特币帮忙成效,比如创立地址、处理卡包、构造裸交易等,是Php程序猿博学多才的比特币开拓学习课程。
  • tendermint区块链开垦详解,本学科切合希望利用tendermint举办区块链开荒的工程师,课程内容即包罗tendermint应用开采模型中的大旨概念,举例ABCI接口、默克尔(Merkel)树、多版本状态库等,也席卷代币发行等充分的实际操作代码,是go语言程序员快速入门区块链开采的特等选项。

汇智网原创翻译,转发请标记出处。这里是原来的文章在Python中动用以太坊RPC客商端

前几天,大家将编辑一个特别简单的python脚本来生成虚荣地址,这么些地点是以有个别短语或字母类别伊始的加密钱币地址。该过程涉及生成私钥并检核查象短语的地点,直到找到满意的地点。

与函数交易

我们正在与智能合约实行末了的重要互动:广播意见。再一回,我们来探视大家的Solidity Code:

function broadcastOpinion(string _opinion) public returns (bool success) { if (approvedSoapboxer[msg.sender]) { opinion = _opinion; emit OpinionBroadcast(msg.sender, opinion); return true; } else { return false; } }

此处未有何新东西:大家利用传入的_opinion参数并行使它来设置全局变量意见。(假令你愿意,能够透过getter函数查询实习生)。有一条线有一些区别:

emit OpinionBroadcast(msg.sender, opinion)

笔者们飞快就能介绍。

当你通过贸易与智能合约的功力拓宽彼当时,功能对智能合约状态所做的其它改动都会在区块链上发布。为了换取这种特权,你不得不向矿工支付部分的以太量。Python时间:

def broadcast_an_opinion: nonce = w3.eth.getTransactionCount(wallet_address) txn_dict = contract.functions.broadcastOpinion.buildTransaction({ 'chainId': 3, 'gas': 140000, 'gasPrice': w3.toWei('40', 'gwei'), 'nonce': nonce, }) signed_txn = w3.eth.account.signTransaction(txn_dict, private_key=wallet_private_key) result = w3.eth.sendRawTransaction(signed_txn.rawTransaction) tx_receipt = w3.eth.getTransactionReceipt count = 0 while tx_receipt is None and (count < 30): time.sleep tx_receipt = w3.eth.getTransactionReceipt print(tx_receipt) if tx_receipt is None: return {'status': 'failed', 'error': 'timeout'} processed_receipt = contract.events.OpinionBroadcast().processReceipt(tx_receipt) print(processed_receipt) output = "Address {} broadcasted the opinion: {}" .format(processed_receipt[0].args._soapboxer, processed_receipt[0].args._opinion) print return {'status': 'added', 'processed_receipt': processed_receipt}

那实际与将Ether发送到智能合约时接收的经过同样。大家将创立并签订一个交易,然后将其发送到互连网。再贰次,交易是异步的,那意味着不管函数被报告在Solidity代码中回到什么,你实在猎取的事物资总公司是交易的哈希。

由于交易本人并未回来任何有效的音信,大家需求此外东西。那致使大家接纳末段情势与智能合约举办互相。

python利用web3.py开荒以太坊应用dapp的实战教程:

有备无患条件

为以太坊设置Python RPC客商端,输入:

jitsejan@jjvps:~$ pip install ethereum-rpc-client

输入:

jitsejan@jjvps:~$ geth --networkid 23 --nodiscover --maxpeers 0 --port 30333 --rpc

输入:

!geth account list

输出:

Account #0: {8cf9deda0712f2291fb16739f8759e4a0a575854} keystore:///home/jitsejan/.ethereum/keystore/UTC--2017-05-01T14-58-43.532247863Z--8cf9deda0712f2291fb16739f8759e4a0a575854

输入:

from eth_rpc_client import Clientclient = Client(host="127.0.0.1", port="8545")

输入:

import pdirpdir

输出:

abstract class: __subclasshook__attribute access: __delattr__, __dir__, __getattribute__, __setattr__class customization: __init_subclass__object customization: __format__, __hash__, __init__, __new__, __repr__, __sizeof__, __str__other: _coinbase_cache, _coinbase_cache_til, _nonce, async_timeout, host, is_async, port, request_queue, request_thread, results, sessionpickle: __reduce__, __reduce_ex__rich comparison: __eq__, __ge__, __gt__, __le__, __lt__, __ne__special attribute: __class__, __dict__, __doc__, __module__, __weakref__descriptor: default_from_address: @property with getter, Cache the coinbase address so that we don't make two requests for everyfunction: _make_request: call: https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_call construct_json_request: get_accounts: https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_accounts get_balance: https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_getbalance get_block_by_hash: https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_getblockbyhash get_block_by_number: https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_getblockbynumber get_block_number: https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_blocknumber<F37> get_code: https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_getcode get_coinbase: https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_coinbase get_filter_changes: https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_getfilterchanges get_filter_logs: https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_getfilterlogs get_gas_price: https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_gasprice get_logs: https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_getlogs get_max_gas: get_nonce: get_transaction_by_hash: https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_gettransactionbyhash get_transaction_receipt: https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_gettransactionreceipt make_request: new_block_filter: https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_newblockfilter new_filter: https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_newfilter new_pending_transaction_filter: https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_newpendingtransactionfilter process_requests: Loop that runs in a thread to process requests synchronously. send_transaction: https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_sendtransaction uninstall_filter: https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_uninstallfilter wait_for_block: wait_for_transaction: 

输入:

address = client.get_coinbase()address

输出:

0x8cf9deda0712f2291fb16739f8759e4a0a575854

输入:

client.get_balance

输出:

135000419895999999940

输入:

address_vps_one = "0xc257beaea430afb3a09640ce7f020c906331f805"address_vps_two = "0xe86ee31b7d32b743907fa7438c422a1803717deb"client.get_balance(address_vps_one)client.get_balance(address_vps_two)

输出:

699916006000000000083000420044000000060

安装包

ca88编程,先是,我们供给设置一些能够进行总括的软件包,以便从私钥生成有效的集体地址。要扭转比特币地址,要求转到终端并输入上面三令五申安装比特币:

pip install bitcoin

要生成以太坊地址,你须要经过输入下边发号出令来安装以太坊:

pip install ethereum

按自身的计算对我们的话幸运的是,二〇一七年Web3.py的第4版揭橥,那意味以往比未来更易于运营python脚本并观望区块链上发生的美妙事情。像幽灵般的。

本文由ca88发布,转载请注明来源

关键词: ca88网址 Python 以太 命令行 客户端