[UPDATE: the challenge is over! 65KM have been run, and 1.85 ETH have been collected :) Thanks to all!]
This is the back-end engine of the Cryptorun challenge. The goal of this challenge is for Thomas Vanderstraeten to run 60km around Brussels to raise funds and awareness for BeCode.
The catch: funds will be collected in crypto-currency using ETH, and the GPS of Thomas will be connected to the Blockchain!
You can find detailed explanation of the code behind this challenge on this general blog article. Please also consult this blog article dedicated to testing of the contract.
Special thanks to Hannes for his kind review and suggestions!
The smart contract lives at address 0x7ad38438b15338f6d1846961903055ada6fff054, it can be consulted here on Etherscan. NOTE THAT IT IS NOW CLOSED TO ANY DONATIONS!
The Oracle in charge of connecting with Strava runs on AWS Lambda with a Python 2.7 runtime.
A exceedingly simple dummy Oracle for the Truffle test suite. This Lambda has the same interface as the real Oracle, but the status that it returns can easily be switched as it is read from an environment variable. We use the aws-cli to directly update this environment variable during the tests, to fake the evolution of the challenge status.
We use Truffle to perform all tests. Once you're done with the below setup, just run truffle test test/cryptoRun.js
and enjoy the show.
Note that since Truffle cannot read the Oraclize.sol file directly from GitHub, we have to import this contract locally and source it accordingly in the CryptoRun contract import statement (we use the version available here). It is important that the Oraclize contract is named usingOraclize.sol
so that Truffle knows it's this one that must be imported.
Make sure you have ganache-cli
installed. Then run in a daemon window
ganache-cli --defaultBalanceEther 1000000 --mnemonic "test blockchain"
Note that the mnemonic option will ensure that it's always the same addresses that will be generated, which is require so we don't have to constantly update the OAR in the Ethereum Bridge setup (see further).
After ganache has been started, make sure you have Ethereum Bridge installed. For this, clone locally the repo available here, then run npm install
. You can then run the following command in a daemon window
node bridge -H localhost:8545 -a 9
Wait for the bridge to load (long and verbose). After it's done, it should instruct you to put the following line in the Oraclized smart contract constructor:
OAR = OraclizeAddrResolverI(0x6f485C8BF6fc43eA212E93BBF8ce046C7f1cb475);
Note that the actual address might vary. Sometimes there might be issue with the Bridge warning that it has already see specific Tx IDs - this is due to incompatibilites with latest solc versions. In that case just delete everything within the ethereum-bridge/database/tingodb folder.
Make sure you have the correct access rights to modify the test Lambda for the Oracle - this will be needed for the forced refreshed during the tests.
Before deploying, do make sure to have removed the following lines from the contract used for testing:
The below line
import "./usingOraclize.sol";
must be replaced by
import "github.com/oraclize/ethereum-api/oraclizeAPI.sol";
The below line should be completely removed from the contract constructor function
OAR = OraclizeAddrResolverI(0x6f485C8BF6fc43eA212E93BBF8ce046C7f1cb475);
The below line
oraclize_query("URL", "json(https://pgy2ax76f9.execute-api.eu-central-1.amazonaws.com/test/CryptoRunTest).challenge_status");
must be replaced by
oraclize_query("URL", "json(https://pgy2ax76f9.execute-api.eu-central-1.amazonaws.com/prod/CryptoRun).challenge_status");
The address of BeCode must be specified as a constructor parameter when the contract is first deployed.