Apr 07, · Ethereum Android is more than just a mobile Ethereum wallet. It offers you the full power of the Ethereum World Computer from your Android device. You decide if you want to share information with others. The whole platform - wallet, node, and API - . gasthausamflughafen.de Exchange APIs Build bitcoin apps on top of gasthausamflughafen.de Exchange API for free. Rest API Explore the REST API documentation for detailed examples of the various functionality offered, Blockchain Wallet Service Send and receive funds from gasthausamflughafen.de Wallets via a simple API. View Documentation. Accept Bitcoin, Ethereum, Litecoin and 10+ Blockchains and + tokens with few lines of code. Custody Providers. We help Custodial Solutions scale. Generate a wallet using our API with a password, in this case we encrypt the private key with this password and save it on our side. We use 4 levels for securing the password.
Bitcoin ethereum wallet apiTop Bitcoin & Cryptocurrency APIs 
If there's an error or you'd like to suggest a change, please consider submitting a pull request to benefit the broader BlockCypher community. We will never introduce any breaking changes within v1, but we may add new, non-breaking features from time to time. Currently, there's only one version of the API v1. For Ethereum, there are the available blockchains:.
We want everyone to try BlockCypher with as little friction as possible, which is why you don't need a token for any read-only GET calls. Once you have your token, you can append it to all your requests like any other URL parameter. To request higher limits or SLAs beyond what's offered on the accounts page, please email us. All endpoints that can retrieve a single Object can be batched to return multiple objects.
If you're cURLing the API directly, batching simply requires appending each identifier to the previous one using a semicolon check the code pane for an example.
The results are aggregated in a JSON array. To ease your development process, we offer an Ethereum-compatible internal testnet and faucet. The chain is private no data is broadcast, only BlockCypher mines the transactions. In case you missed the Resources section , the BlockCypher Ethereum Testnet is accessible from this resource:. To help facilitate automated testing in your applications, a faucet endpoint is available on BlockCypher's Ethereum Testnet.
Calling the faucet endpoint, along with passing a valid address, will automatically createand propagatea new transaction funding the address with the amount you provide.
You can then use the funded address to publish contracts, engage in other transactions, or to aid in automated testing. Some of you might be more interested in the endpoints themselves, in which case, feel free to skip to the next section. For each Object there's a description and a link to a germane API endpoint. A Blockchain represents the current state of the Ethereum blockchain. Typically returned from the Chain API endpoint. A Block represents the current state of a particular block from a Blockchain.
Typically returned from the Block Hash and Block Height endpoints. A TX represents the current state of a particular transaction from either a Block within a Blockchain , or an unconfirmed transaction that has yet to be included in a Block. A TXRef object represents summarized data about a transaction input or output. Typically found in an array within an Address object, which is usually returned from the standard Address Endpoint.
Typically returned from the Address Balance and Address endpoints. An AddressKeychain represents an associated collection of public and private keys alongside their respective Ethereum address. Generally returned and used with the Generate Address Endpoint. A Contract represents an embedded contract on the Ethereum blockchain, and is used with both creating and executing contracts in our Contract API.
All the fields below are generally optional , but may be required depending on the particular contract endpoint you're using. A PaymentForward object represents a request set up through the Payment Forwarding service. The first componentand highest levelof the BlockCypher Ethereum API allows you to query general information about Ethereum's blockchain and blocks. If you're new to blockchains, you can think of the blockchain itself as an immutable, distributed ledger.
Each block in the blockchain is like a "page" in the ledger containing information about transactions between parties. A great place to start understanding the mechanics behind blockchains is the original Bitcoin whitepaper.
To get a handle on how Ethereum differs from Bitcoin, you can check the Ethereum project whitepaper. General information about the Ethereum blockchain is available by GET-ing the base resource. While the amount of gas is fixed for a given EVM operation, the price of gas fluctuates based on market demand on the Ethereum blockchain similar to Bitcoin fees.
For more detail, check this very helpful Stack Exchange explanation. For more detailed information about the data returned, check the Blockchain object. The returned object contains information about the block, including its height, the total amount of wei transacted within it, the number of transactions in it, transaction hashes listed in the canonical order in which they appear in the block, and more.
For more detail on the data returned, check the Block object. You can also query for information on a block using its height, using the same resource but with a different variable type. As above, the returned object contains information about the block, including its hash, the total amount of wei transacted within it, the number of transactions in it, transaction hashes listed in the canonical order in which they appear in the block, and more.
If you're new to blockchains, you can think of public addresses as similar to bank account numbers in a traditional ledger. The biggest differences:. The Address Balance Endpoint is the simplestand fastestmethod to get a subset of information on a public address. The returned object contains information about the address, including its balance in wei and the number of transactions associated with it. The endpoint omits any detailed transaction information, but if that isn't required by your application, then it's the fastest and preferred way to get public address information.
The Address Endpoint returns more information about an address' transactions than the Address Balance Endpoint , but sacrifices some response speed in the process. The returned object contains information about the address, including its balance in wei, the number of transactions associated with it, and transaction summaries in descending order by block height.
The Generate Address endpoint allows you to generate private-public key-pairs along with an associated public address. No information is required with this POST request. BlockCypher's Ethereum Transaction API allows you to look up information about unconfirmed transactions, query transactions based on hash, and create and propagate your own transactions. You can read more about this design decision here. Transaction signing and generation are also different in Ethereum, but for basic transactions, the process is very similar to our Bitcoin API.
The Transaction Hash Endpoint returns detailed information about a given transaction based on its hash. TXHASH is a string representing the hex-encoded transaction hash you're interested in querying, for example:. The returned object contains detailed information about the transaction, including the value transfered, fees collected, date received, any scripts associated with an output, and more.
The Unconfirmed Transactions Endpoint returns an array of the latest transactions that haven't been included in any blocks. The returned object is an array of transactions that haven't been included in blocks, arranged in reverse chronological order latest is first, then older transactions follow. To use BlockCypher's two-endpoint transaction creation tool, first you need to provide the input address, output address, and value to transfer in wei.
Provide this in a partially-filled out TX request object. As you can see from the code example, you only need to provide a single public address within the addresses array of both the input and output of your TX request object. You also need to fill in the value with the amount you'd like to transfer from one address to another. Note that we only accept a single input and output address per Ethereum's transaction model, and tosign only returns a single element in its array; we use arrays for parity with our Bitcoin API.
As a return object, you'll receive a TXSkeleton containing a slightly-more complete TX alongside data you need to sign in the tosign array. You'll need this object for the next steps of the transaction creation process. With your TXSkeleton returned from the New Transaction Endpoint, you now need to use your private key to sign the data provided in the tosign array. Digital signing can be a difficult process, and is where the majority of issues arise when dealing with cryptocurrency transactions.
Ethereum uses the same elliptic curve as Bitcoin secpk1 , so any Bitcoin signing library that fits with your workflow should suffice. If you want to experiment with client-side signing, consider using our signer tool. Once you've finished signing the tosign data locally, put that hex-encoded data into the signatures array of the TXSkeleton. Unlike Bitcoin, you don't need to include the signing accounts public key, as on Ethereum this is derived using the tosign data and signature data.
But you must include the tosign data in addition to the signatures array for that derivation to work. We also offer the ability to decode raw transactions without sending propagating them to the network; perhaps you want to double-check another client library or confirm that another service is sending proper transactions.
If you'd prefer to use your own transaction library instead of the recommended path of our two-endpoint transaction generation we're still happy to help you propagate your raw transactions. Simply send your raw hex-encoded transaction to this endpoint and we'll leverage our well-connected network to propagate your transaction faster than anywhere else.
You can then use the hash to track its progress on the network. If an address ahead of current addresses listed in an HD Wallet receives a transaction, it will be added, along with any addresses between the new address and the last used one. In general, using a wallet instead of an address in an API will have the effect of batching the set of addresses contained in the wallet.
The following code examples should be considered serially; that is to say, the results will appear as if each API call were done sequentially. As you'll see in the examples, if you're using HD Wallets, take care to use the appropriate resource e.
For normal wallets, at minimum, you must include the name attribute and at least one public address in the addresses array. The encoding of the key is documented here.
If not given, the wallet will derive address straight from the given extended pubkey. See BIP32 for more info. If successful, it will return the same Wallet or HDWallet object you requested, appended with your user token. You can then query detailed information on individual wallets via their names by leveraging the Get Wallet Endpoint.
You only need to include the additional addresses in a new addresses array in the object. If successful, it will return the newly modified Wallet , including an up-to-date, complete listing of addresses. It returns the addresses in a partially filled out Wallet which you'll find under the addresses attribute. If successful, it will return an HTTP status code with no return object. If successful, it will returned the newly modified Wallet composed with an AddressKeychain. If successful, it will return an HDWallet but only with the newly derived address es represented in its chains field to limit the data transmitted; for the full address list after derivation, you can follow up this API call with the Get Wallet Addresses Endpoint.
If you're new to blockchains, the idea of transactions is relatively self-explanatory. Here's what's going on underneath the hood: a transaction takes previous "unspent transaction outputs" also known as UTXOs as "transaction inputs" and creates new "locking scripts" on those inputs such that they are "sent" to new addresses to become new UTXOs. While most of these public addresses are reference points for single private keys that can "unlock" the newly created UTXOs, occasionally they are sent to more exotic addresses through pay-to-script-hash , typically multisignature addresses.
The Transaction Hash Endpoint returns detailed information about a given transaction based on its hash. TXHASH is a string representing the hex-encoded transaction hash you're interested in querying, for example:.
The returned object contains detailed information about the transaction, including the value transfered, date received, and a full listing of inputs and outputs.
The Unconfirmed Transactions Endpoint returns an array of the latest transactions relayed by nodes in a blockchain that haven't been included in any blocks. The returned object is an array of transactions that haven't been included in blocks, arranged in reverse chronological order latest is first, then older transactions follow.
In either case, for security reasons, we never take possession of your private keys. We do use private keys with our Microtransaction API , but they are for low-value transactions and we discard them immediately from our servers' memory. To use BlockCypher's two-endpoint transaction creation tool, first you need to provide the input address es , output address, and value to transfer in satoshis.
Provide this in a partially-filled out TX request object. As you can see from the code example, you only need to provide a single public address within the addresses array of both the input and output of your TX request object. You also need to fill in the value with the amount you'd like to transfer from one address to another. If you'd like, you can even use a Wallet instead of addresses as your input.
While this particular usage will differ between client libraries, the result is the same: the addresses within your wallet will be used as the inputs , as if all of them had been placed within the addresses array.
As a return object, you'll receive a TXSkeleton containing a slightly-more complete TX alongside data you need to sign in the tosign array. You'll need this object for the next steps of the transaction creation process. For the extra cautious, you can protect yourself from a potential malicious attack on BlockCypher by validating the data we're asking you to sign.
Unfortunately, it's impossible to do so directly, as pre-signed signature data is hashed twice using SHA With your TXSkeleton returned from the New Transaction Endpoint, you now need to use your private key s to sign the data provided in the tosign array.
Digital signing can be a difficult process, and is where the majority of issues arise when dealing with cryptocurrency transactions. We are working on integrating client-side signing solutions into our libraries to make this process easier. You can read more about signing here. In the mean time, if you want to experiment with client-side signing, consider using our signer tool. Once you've finished signing the tosign array locally, put that hex-encoded data into the signatures array of the TXSkeleton.
Signature and public key order matters, so make sure they are returned in the same order as the inputs you provided. Signing and creating transactions can be one of the trickiest parts of using blockchains in your applications.
By default, we allow unconfirmed UTXOs as inputs when creating transactions. We will compute change and fees the same way. Fees in cryptocurrencies can be complex. We provide 2 different ways for you to control the fees included in your transactions:. To learn more about fees, bitcoinfees. You'll notice this used to powerful effect in the section on Multisig Transactions. These are the possible script types:. If you'd prefer to use your own transaction library instead of the recommended path of our two-endpoint transaction generation we're still happy to help you propagate your raw transactions.
Simply send your raw hex-encoded transaction to this endpoint and we'll leverage our huge network of nodes to propagate your transaction faster than anywhere else.
If you'd like, you can use the decoded transaction hash alongside an Event to track its progress in the network. We also offer the ability to decode raw transactions without sending propagating them to the network; perhaps you want to double-check another client library or confirm that another service is sending proper transactions. This allows you to double check the which input you are spending and the value transfered.
If it succeeds, you'll receive your decoded WitnessToSignTx object. Multisignature transactions are made simple by the method described in the Creating Transactions section, but they deserve special mention.
In order to use them, you first need to fund a multisignature address. The code example demonstrates how the partially filled TX request object would appear. If it returns with an HTTP Status Code , then your multisignature address via a pay-to-script-hash address is funded. Once funded, you might want to programmatically spend the money in the address at some point. Here the process is similar, but with the inputs and outputs reversed.
Then you'd need to return each piece of data signed twice, preserving order between signatures and pubkeys, resulting in four elements for the signatures and pubkeys arrays:. While you can certainly use our guided transaction process and customize your script output, there's a simpler way: through our Data Endpoint. All you need is the data you want to embed up to 40 bytes, inclusive and we'll handle the rest. In your request object, simply include the data you want to embed.
By default, you needn't set an encoding if your data is hex-encoded like a hash, the typical use case for null-data. That said, if you want to embed plaintext messages in the blockchain, you can set encoding to string.
If successful, the return object will include your original request along with the hash of the transaction containing your data as a null-data output. To view the data output on the blockchain, simply query the transaction via the hash returned, and check the null-data output within the returned transaction.
Please keep in mind that it will always be represented by hex-encoding on the blockchain, even if you selected string as your data encoding ; to see it as your original plaintext, you have to convert it client-side.
By operating a well-connected node, we collect a lot of information about how transactions propagate; for example, our Confidence Factor relies on this connectivity. With this endpoint, you can leverage our connectivity to get an approximation of a transaction's location of origin.
TXHASH is a string representing the hex-encoded transaction hash you're interested in querying for propagation information. The return object is described below:. You can get a live view of unconfirmed transaction propagation analysis on Bitcoin by connecting to our Transaction Propagation WebSocket, at the following address:. As soon as an unconfirmed transaction hits 10 peers, we send the object described above through this WebSocket. In addition to our normal Transaction API , we offer a unique, on-chain microtransaction endpoint that makes it easy to propagate smaller, nearly-instantly guaranteed, more frequent transactions that are still publicly auditable and trusted through their existence on the blockchain.
How can we do what others claim require off-chain, centralized services? We leverage our own infrastructure; in particular, our Confidence Factor. As of this writing, we haven't had a single failed mictrotransaction, and we're improving our confidence data all the time. We also pay for the mining fees for your first 8, microtransactions. After which, we automatically optimize fee structure to achieve a balance between guaranteeing confidence it will be in the next block and minimizing cost.
If there isn't enough value in your microtransaction for the fee, we'll return an error. The endpoint is simple to employ, and uses a slightly pared down transaction object, appropriately called a MicroTX.
For low value source addresses and testing, we support directly sending private keyswe'll construct, sign, and send the transaction for you.
We never store the private key, and remove it from server memory as soon as its used. The request object is a partially filled out MicroTX , whose format differs depending on whether you're sending a private key or public key for the source address.
In either case, there are two options you can set:. The simplest way to send a Microtransaction is by using a private key. You can read more descriptions about these fields within MicroTX object description , although they should be self-explanatory.
If successful thereafter, a completed MicroTX object will be returned which will include the transaction's hash for future queries , along with an HTTP Status Code Much like creating normal transactions the process requires two endpoint calls; the first is similar to the private key method, but with public keys.
You must then sign the data in this array with your locally-stored private key; signing can be a tricky process, but you can use our signer tool as a baseline.
Once that data is signed, it must be inserted to a signatures within the previously returned MicroTX object. In general, sending any private key to an outside service is bad security practice. However, security and convenience are often in opposition. In terms of deciding whether passing private keys for microtransactions is a reasonable tradeoff, consider the following:.
Finally, we only offer the option of passing private keys because we understand that signing on the client side can be difficult, depending on the environment. We hope that by fully understanding the tradeoffs and risks, you'll make the right choice for your situation. One of the things that makes BlockCypher's API uniquely powerful is our ability to accurately predict the likelihood of an attempted double-spend succeeding against a transaction; this percentage probability is optionally included within the confidence attribute on any unconfirmed transaction returned by the Transaction Hash Endpoint when using the includeConfidence flag, in addition to the explicit Transaction Confidence Endpoint detailed below.
So what does that confidence attribute actually mean? In simpler terms, if an unconfirmed transaction returns a confidence factor of By design, we're conservative. As you may have gathered from the frequency of links to this feature in these docs, we're exceptionally proud of the work we've done to build this feature and provide it to our users. And that pride extends to our own confidence in our confidence product. We've leveraged this product internally on two major features:.
There are a host of factors that go into our confidence calculation, but you can broadly organize them into two categories. The shape of transactions refers to aspects of transactions that don't vary with time time-invariant in our model. The behavior of transactions refers to aspects of transactions that do vary with time time-variant in our model.
On the shape side of our model, we ask a number of questions about a transaction: How is it structured? What are its inputs and outputs? What's its signature type? Broadly speaking, without knowing anything about the network, does it look like this transaction will be confirmed soon? The behavior part of our model primarily focuses on how a transaction propagates through the network. In order to model this correctly, you need both a great connection to the network and a lot of past data, which we have.
By monitoring transaction propagation, the number of nodes that have received it, and how quickly they received it, we can calculate its probability to be the "winning" transaction at any given point in time, if a double-spend was attempted. The result is a robust and reliable metric for judging unconfirmed transaction confidence, especially when used in concert with webhooks and websockets.
Our work here is based on several public research results in addition to our own in-depth follow-up research, which you can read about here. We are constantly improving our confidence model, and we always publish our findings when we do. Our confidence interval is automatically included in any unconfirmed transaction , but you can retrieve it through a specific endpoint too. The returned TXConfidence object contains the all-important confidence percentage, receive count and more.
You can find an unconfirmed transaction hash from our block explorer here. Cryptocurrency addresses, transactions, and blocks are extremely powerful, but the labels they employ can be That's why we have a Metadata API, allowing both public and private key-value storage against addresses, transactions, and blocks.
The Metadata API supports both public and private key-value storage. In both cases, setting metadata requires use of a token if you haven't already, you can register for one here. Public metadata is immutable ; once set, it cannot be modified or deleted. If you accidentally set public metadata and need it deleted, contact us.
Also, as implied by the name, it's openly accessible to the whole worldregardless of whether they have a token or not. Consequently, private metadata is associated and only accessible with your user token. The methods for interacting with metadata are outlined below. If another key with the same name already exists under your private metadata store, supplying a new value will replace it.
New key-value pairs will be added without replacing prexisting key-value pairs. Blockchains contain a wealth of data, but much of it is inscrutable without arduous effort.
Our Analytics API makes uncovering these patterns easy, enabling you to discover insights efficiently and programmatically. The publicly accessible Analytics API is a set of preconfigured tools and pipelines built against our flexible analytics backend. It serves as both a useful tool for one-off analysis and a live demonstration for custom implementations. If you're interested in a custom Analytics solution at enterprise scaleor have any ideas for general purpose analytics queries to benefit the community!
Each engine has its own request parameterslisted belowbut all are described in detail on the JobArgs object page. The following engines can power your analytics jobs. The resource below represents the URL you'd POST to create an analytics job based on the engine you're interested in using, along with the required and optional JobArgs parameters for searching.
Returns the list of addresses along with their associated transaction hashes and amounts that have paid the target address. Returns the list of addresses along with their associated transaction hashes and amounts that have been paid by the target address. Returns the most active limit number of addresses, optionally within a certain bounded time range denoted by start and end. Returns the outputs this address generated within a certain bounded time range denoted by start and end.
N- degree address connectivity query. Currently only examines addresses that generate outputs in the same transaction as the target address. Returns transactions relayed by a given source IP address and port within the given time range denoted by start and end. Note that the max limit is for this engine. This creates an analytics job asynchronously, taking in appropriate JobArgs based on the engine as described above. Returns a Job ; take special note of the ticket which is the unique identifier you'll use to get results and query job status.
You can check the status of your job with this endpoint, using the ticket returned in the Job object from creating an analytics job. Returns the results of a ticket ed job. The results themselves may be an array of JSON objects or an array of strings, depending on the engine used. Blockchains are about transferring value and ownership, so why can't that value extend beyond a blockchain's native token?
Thanks to the possibility of embedding arbitrary data through null-data outputs, a blockchain can! However, the act of creating these alternate forms of valueand choosing a format that was universally readablecan be fraught with difficulty. We built our Asset API to simplify that process. Now instead of spelunking through a blockchain's native transactions and interpreting them yourself, you can utilize this set of APIs to easily issue, check, and transfer assets.
This set of endpoints currently leverages the Open Assets Protocol , a simple, robust method of embedding assets across any blockchain that supports null-data outputs. Asset addresses are just like regular bitcoin addresses, and are generated from a private-public keypair. They only differ by a prefix ex: 'a' for instead of '1' to distinguish them. Note that while it returns an Address object, anything that would have represented "satoshis" now represents "amount of asset.
One of the well-known benefits of cryptocurrency is the ability to allow users to partake in online commerce without necessarily requiring extensive setup barriers, like registering new accounts.
In that spirit, our Payment Forwarding API is the easiest way to acceptand consolidatepayments securely without forcing your users to create accounts and jump through unnecessary loops. It's also a generic way to automatically transfer value from one address to another.
While there are many possible use cases, the two we hear most about are:. We do not take a fee on payment forwarding, other than the required 10, satoshi miner fee; payments are free. However, as part of your own services, you can include a fee either fixed or a percentage that will also be automatically transfered to your own address in the same transaction. Fee-based business models are thus easily achieved, and moreover, easily auditable via the blockchain.
First, to create an payment forwarding address, you need to POST a partially filled PaymentForward object to the payment creation endpoint. You can see more details about these options in the PaymentForward object details. This returns the full array of your currently active payment forwarding addresses, based on your token. By default, this endpoint only returns the first payment forwards.
If you have more, you can page through them using the optional start parameter. Blockchains are highly transactional systems. Many usage patterns require knowing when an event occurs: i. Instead of requiring you to continuously poll resources, we provide push APIs to facilitate those use cases, and support both WebSockets and WebHooks.
You are responsible for your own actions. If you mess something up or break any laws while using this software, it's your fault, and your fault only. You are responsible for your own karma. Don't be a jerk and respect the rights of others. What goes around comes around. The user expressly knows and agrees that the user is using the Ethereum platform at the users sole risk. The user acknowledges that the user has an adequate understanding of the risks, usage and intricacies of cryptographic tokens and blockchain-based open source software, eth platform and ethereum The user acknowledges and agrees that, to the fullest extent permitted by any applicable law, the disclaimers of liability contained herein apply to any and all damages or injury whatsoever caused by or related to risks of, use of, or inability to use, ethereum or the Ethereum platform under any cause or action whatsoever of any kind in any jurisdiction, including, without limitation, actions for breach of warranty, breach of contract or tort including negligence and that neither Stiftung Ethereum i.
Ethereum Foundation nor Ethereum team shall be liable for any indirect, incidental, special, exemplary or consequential damages, including for loss of profits, goodwill or data that occurs as a result.
Some jurisdictions do not allow the exclusion of certain warranties or the limitation or exclusion of liability for certain types of damages. Therefore, some of the above limitations in this section may not apply to a user. Ethereum Android is more than just a mobile Ethereum wallet. It offers you the full power of the Ethereum World Computer from your Android device.
You decide if you want to share information with others. The whole platform - wallet, node, and API - are built on top of state of the art cryptographic mechanisms. Blockchain technology is inherently decentralized. We aim to keep it that way by letting the user choose which infrastructure he wants to use. The app is a fully functioning mobile Ether Wallet. Send and receive ether and see your transaction history. Connect your own node of any type of Ethereum based Blockchain in a matter of seconds.
Fast switching between nodes. The wallet app is designed following Google's Material Design. Identicons are used as avatars to recognize addresses more easily. Sell and buy digital goods and services with this mobile decentralized peer-to-peer payment framework.
We designed the App so that both technological savvy and just casual users can benefit from it. You can use Ethereum Android completely out of the box without installing any extra software or setting up any infrastructure.
In case you do want to be fully decentralized, you can, at any time, just switch to your own node. The app itself is a fully functional Ethereum Wallet optimized for Android with similar functionality to the well known Mist Browser.
MetaMask is a bridge that allows you to visit the distributed web of tomorrow in your browser today. It allows you to run Ethereum dApps right in your browser without running a full Ethereum node. MetaMask includes a secure identity vault, providing a user interface to manage your identities on different sites and sign blockchain transactions.
Were initially building MetaMask as a Chrome extension, but eventually plan to support Firefox and beyond. If youre a developer, you can start developing with MetaMask today. Our mission is to make Ethereum as easy to use for as many people as possible. The full code can be found at. We collaborated with the Bancor team to make sure the current exploit is protected against, although for a little while there would still be a chance to make some beer money for educational purposes.
Imagine trying to hack Bank of America except you can read all of their code in advance, all of their transactions are public, and if you steal the money its irreversible. Sounds like a paranoid worst-case scenario? Well, this is exactly the setup Ethereum smart contract developers have to deal with every day. Bitcoin and the blockchain technology unlocked tremendous possibilities in international payments, and the Ethereum further magnified it by allowing to manage these payments through programs called smart contracts.
However, smart contracts also give hackers a much easier setup for attacks. Front-running is one such attack. The term originated in the stock market, back in the days when trades were executed on paper, carried by hand between the trading desks. A broker would receive an order from a client to buy a certain stock, but then place a buy order for themselves in front.
That way the broker benefits from the price increase at the expense of their client. Naturally, the practice is unfair and was outlawed. On the blockchain, the problem becomes a lot more severe.