Pyethereum is the core blockchain related logic: transactions, blocks, contract VM, etc....
Pyethapp uses both pydevp2p for the p2p logic along with Pyethereum to create a complete Ethereum client.
So if you want a complete networked Ethereum client use Pyethapp. If you just want to experiment with the blockchain related logic you can use Pyethereum by ...
pythereum and pythapp - your question tags - are Python implementations of Ethereum's core library and command line client respectively. They are orthogonal to the language in which smart contracts are written.
So the short answer to your question is: no.
Having said that, have a look at Serpent: https://github.com/ethereum/wiki/wiki/Serpent
No. Geth does not provide any plugin infrastructure for custom code execution and there are no immediate plans to add it. We are aware that Python supports such features and we've considered it, but our code still is very dynamic and we don't want to introduce further APIs at this point that we would be committed to supporting.
To get a working version in a virtualenv on Ubuntu 17 I first did (as per @audiomason suggestion above - I haven't tried without this step):
pip install ethereum==1.6.0 pyethapp==1.2.0
then (fixes this)
pip install pyelliptic==1.5.7
then (fixes this)
pip install tinyrpc[websocket]
It then works :-)
Ethereum smart contracts need to compile to EVM (Ethereum Virtual Machine) bytecode. There are no Python to EVM compilers, and for some of the challenges, see What is the merit of creating new smart contract languages like Solidity instead of using other languages?
The options are to use a Python-like language Serpent or a recent (Nov 2016) experimental ...
The size of data field is dependent on the block gas limit.
In the Ethereum public blockchain, the limit for the data field was 89kb as of Feb 7, 2016. Source. You can use a similar methodology to check for the limit now.
However, In a private blockchain, there's no limit to the data field. You can set the block gas limit value in your genesis file. Source
pyethapp is a Python package.
Python community package installation guide.
Use pip tool to install Python packages. If package is properly installed you can do:
pip uninstall pyethapp
If you did not install package using pip then just remove files from your hard disk.
Account generation is slow by design.
Part of the account generation process involves scrypt or pbkdf2, password hashing algorithms that are designed to be slow in order to mitigate brute force attacks on your private keys.
If you look here in the pyethereum source you can see the parameters that are used for each of these hash functions. Both use a work ...
meaning that there should not be any protocol differences between clients. Is this correct?
Yes, both implement the Ethereum protocol, should be in consensus, and there should be no differences. In fact, one can earn Ether or Bitcoin
by submitting consensus issues (examples) to the Ethereum Bounty program.
The answer is patience. pyethapp is rather a proof of concept implementation than a production ready node.
I had to wait several hours until I noticed the client started to synchronize the main network. It's very slowly sync'ing for some days now and I have only the first million blocks on disk. Keep waiting for the rest.
TL;DR pyethapp works, but prepare ...
In case someone finds this now (two years after the question was posted) like I did: After trying to fix various problems running pyethapp on mainnet I took a closer look at this page from the wiki. It implies that pyethapp does not work on the mainnet at the moment or at least did not in March 2017.
The message you're seeing is from the pydevp2p p2p networking library, which is used for peer discovery. Your node sits in _discovery_loop() while it tries to discover a minimum number of peers from which to sync the blockchain.
In this case, having a Pyethapp equivalent of Geth's --fast flag wouldn't help. The --fast option helps speed up the sync of the ...
As far as I know you only have the two hooks you mention above: on_start() and on_block(), beyond that you'll need to experiment with what's possible. There's very little documentation on the User Service functionality, but all the source is there to learn from.
From the code:
The coinbase address is given by the config field pow.coinbase_hex. If
this does not exist or is None, the address of the first account is
used instead. If there are no accounts, the coinbase is
For reference, DEFAULT_COINBASE is defined in that file as:
DEFAULT_COINBASE = 'de0b295669a9fd93d5f28d9ec85e40f4cb697bae'....
Here is a github repo I created to quickly make a private ethereum network for testing/development:
It uses doesn't use pytheapp, but it might be helpful
Does it need to be pyethapp, or are you open to any library that allows you to interact with a client?
One option is to connect using web3.py, installed with pip install web3.
From the docs, edited for simplicity:
>>> from web3 import Web3, HTTPProvider
>>> web3 = Web3(HTTPProvider('http://localhost:8545'))
You might wanted to check Running a private network
If you want to test or play around with Ethereum, you can follow this guide to setup docker with a private Ethereum network.
Running a private network Guide
Set up Docker and pull the container
Run it docker-compose scale bootstrap=1 miner=2 eth=3
More Info here
This is a recent bug in pycparser: https://github.com/pyca/cryptography/issues/3187.
There are two workarounds you can try:
pip install pycparser==2.13
or if you don't want to downgrade the pycparser:
pip install cryptography --no-binary pycparser
I think this is a good question, but it never got an answer, so I'm answering it.
There's two ways to do this, I think.
First would be to modify the source code of the node in such a way that nothing changes except immediately after the finalization of a transaction it would fire off a system call. This would require you to download, modify, and build the ...
for the accounts side of you question, the test_add_account method should give you a good overview of a possible implementation in your script.
for the transactions, the documentation about creating transactions explains it well, you use the eth object like this :
tx = eth.transact('d63b635a458b99f7e900477e2d261d5d13e45d59', value=100)
Now you can also ...