In [1]:
from time import sleep
from __future__ import division
from web3 import Web3, HTTPProvider
import json

import pandas
import numpy as np
import matplotlib.pyplot as plt
import seaborn
seaborn.set_style("whitegrid")
seaborn.despine()
%matplotlib inline
%config InlineBackend.figure_formats = {'svg',}

# Connect to the network
web3 = Web3(HTTPProvider('http://localhost:8545'))

# Get contract signature
with open('../ethereum/build/contracts/Market.json') as energy_file:    
    energy_json = json.load(energy_file)
contract_abi = energy_json['abi']
network_id = energy_json['networks'].keys()[-1]
contract_address = energy_json['networks'][network_id]['address']

# List accounts and set default account
accounts = web3.eth.accounts
web3.eth.defaultAccount = accounts[0]
contract = web3.eth.contract(contract_abi, contract_address)
energy_posted_event = contract.on('energy_posted_event', filter_params={'fromBlock': 'earliest'})
participant_at_clearing_request = contract.on('participant_at_clearing_request', filter_params={'fromBlock': 'earliest'})
market_cleared_event = contract.on('market_cleared_event', filter_params={'fromBlock': 'earliest'})
bill_sent_event = contract.on('bill_sent_event', filter_params={'fromBlock': 'earliest'})

In [2]:
print('Number of accounts ' + str(len(accounts)))

# Estimated gas
gas = contract.estimateGas().add_participant()
print('Estimated gas per participant added ' + str(gas) + ' ETH')

# Add all participants
for account in accounts:
    trans_hash = contract.transact({'from': account, 'to': contract_address, 'gas': 900000}).add_participant()

    
# Check how many participants have been added
print('Number of participants ' + str(contract.call().number_of_participant()))


Number of accounts 10
Estimated gas per participant added 92294 ETH
Number of participants 10

In [3]:
def wait_until_trans_receipt(trans_hash):
    status = None
    while status is None:
        sleep(0.2)
        status = web3.eth.getTransactionReceipt(trans_hash)

In [5]:
energy_balances = [100, 500, 600, 200, 300, -100, -100, -200, -25, -50]
print('Total energy balance ' + str(sum(energy_balances)) + ' wh')
assert(len(accounts) == len(energy_balances))

# Estimated gas
gas = contract.estimateGas().post_energy_balance(int(10))
print('Estimated gas per participation ' + str(gas) + ' ETH')

# Post consumption and production for each account
for account, energy_balance in zip(accounts, energy_balances):
    temp = {'from': account, 'to': contract_address, 'gas': 900000}
    trans_hash = contract.transact(temp).post_energy_balance(int(energy_balance))
    wait_until_trans_receipt(trans_hash)

# Estimated gas
gas = contract.estimateGas().clear_market()
print('Estimated gas to clear market ' + str(gas) + ' ETH')

# Clear the market
contract.transact({'to': contract_address, 'gas': 4000000}).clear_market()
wait_until_trans_receipt(trans_hash)

# time.sleep(3)

# # Estimated gas
# gas = contract.estimateGas().bill_all_participants()
# print('Estimated gas to bill participants ' + str(gas) + ' ETH')

# contract.transact({'to': contract_address, 'gas': 4000000}).bill_all_participants()


Total energy balance 1225 wh
Estimated gas per participation 68318 ETH
Estimated gas to clear market 87771 ETH

In [110]:
participant_at_clearing_request.get(only_changes=False)


Out[110]:
[{'address': u'0xfc5303c96a7fc61c9b3fa0e368885c5aebb73652',
  'args': {u'_nbparticipation': 10, u'_totparticipant': 10},
  'blockHash': u'0x0a2997c912907ab59e5cae6fa950d75cdecc89851812916b05c7ed033db5e219',
  'blockNumber': 28,
  'event': u'participant_at_clearing_request',
  'logIndex': 0,
  'transactionHash': u'0x0cbcecf88ac42c6df932be3523917e41d8410d910141f4bc9ffab3003f5652db',
  'transactionIndex': 0},
 {'address': u'0xfc5303c96a7fc61c9b3fa0e368885c5aebb73652',
  'args': {u'_nbparticipation': 10, u'_totparticipant': 10},
  'blockHash': u'0x0f514a64494c713b1db429846b5dd9f45c23bcc7ced783b4d0164f6e41e2e125',
  'blockNumber': 39,
  'event': u'participant_at_clearing_request',
  'logIndex': 0,
  'transactionHash': u'0x44b101b5c154cabc7d1ab5d0cfffb76379e9621794d795b846de564c95d4e8a1',
  'transactionIndex': 0},
 {'address': u'0xfc5303c96a7fc61c9b3fa0e368885c5aebb73652',
  'args': {u'_nbparticipation': 10, u'_totparticipant': 10},
  'blockHash': u'0x5d35094672cc44452386ce423d8e936845310ae5a2f242b4196d064aa5128638',
  'blockNumber': 50,
  'event': u'participant_at_clearing_request',
  'logIndex': 0,
  'transactionHash': u'0x544b2e5c16e31c3973ac8b78962d72b2d1bbbd12421d3f90013d9aafa95628e2',
  'transactionIndex': 0},
 {'address': u'0xfc5303c96a7fc61c9b3fa0e368885c5aebb73652',
  'args': {u'_nbparticipation': 10, u'_totparticipant': 10},
  'blockHash': u'0xd0ad405797ee8d7259cd4dbee30e8d568914d80ca01c214d5397782789120a2a',
  'blockNumber': 61,
  'event': u'participant_at_clearing_request',
  'logIndex': 0,
  'transactionHash': u'0xc1c3f98778a41014d51790ba6908a331c76a40c9c8ec8a15ec4b16c70631b588',
  'transactionIndex': 0},
 {'address': u'0xfc5303c96a7fc61c9b3fa0e368885c5aebb73652',
  'args': {u'_nbparticipation': 20, u'_totparticipant': 10},
  'blockHash': u'0xc1f55e63011406be3ddbc1092758ec6790e900b17b8bd872902ae6f91e39f530',
  'blockNumber': 72,
  'event': u'participant_at_clearing_request',
  'logIndex': 0,
  'transactionHash': u'0x78622983da7698a89b16a3919f083998c6e88a5b2f718192986b1363f0db920e',
  'transactionIndex': 0},
 {'address': u'0xfc5303c96a7fc61c9b3fa0e368885c5aebb73652',
  'args': {u'_nbparticipation': 30, u'_totparticipant': 10},
  'blockHash': u'0x26251684881ffdec7e453360846f2077795f25640da3c37a8971bef9bea1e928',
  'blockNumber': 83,
  'event': u'participant_at_clearing_request',
  'logIndex': 0,
  'transactionHash': u'0x67e34f3cf11ef93ec29e70e79139e30a648b6affc305819a818ab7c8e6232a06',
  'transactionIndex': 0},
 {'address': u'0xfc5303c96a7fc61c9b3fa0e368885c5aebb73652',
  'args': {u'_nbparticipation': 10, u'_totparticipant': 10},
  'blockHash': u'0xb73ab204958143a5843c3005ca54da5a7b5557b454cd8f2763f2897d52d316ac',
  'blockNumber': 94,
  'event': u'participant_at_clearing_request',
  'logIndex': 0,
  'transactionHash': u'0x531e0d8b51a31e14f1008595d5f66e5e8ac43f22e500adfacf210fbab0176016',
  'transactionIndex': 0},
 {'address': u'0xfc5303c96a7fc61c9b3fa0e368885c5aebb73652',
  'args': {u'_nbparticipation': 10, u'_totparticipant': 10},
  'blockHash': u'0xe4ce571fa8697bdc4ca6b6304df749a135373d1630aee1af9aec08203b564027',
  'blockNumber': 105,
  'event': u'participant_at_clearing_request',
  'logIndex': 0,
  'transactionHash': u'0xbfb2d0c5e23aadb3b53b0a45033b9843ec4b3d6abdecf12c3c654c6e78cbee1d',
  'transactionIndex': 0},
 {'address': u'0xfc5303c96a7fc61c9b3fa0e368885c5aebb73652',
  'args': {u'_nbparticipation': 10, u'_totparticipant': 10},
  'blockHash': u'0x5146b931a68fa4b21cedcb7487209d5118852aca824b068a2bb151777039e302',
  'blockNumber': 116,
  'event': u'participant_at_clearing_request',
  'logIndex': 0,
  'transactionHash': u'0x1160c6671c149d7dac47e7ac38825f06c760b69a555991d161d834bc24edf0a9',
  'transactionIndex': 0}]

In [78]:
market_cleared_event.get(only_changes=False)


Out[78]:
[{'address': u'0x5e599d37de8bfbc1fb7584debf9ec39b376447a4',
  'args': {u'_buy': 105,
   u'_gen': 475,
   u'_prod': 1700,
   u'_sell': 120,
   u'ratio': 357},
  'blockHash': u'0xa0f451c5288eb95f82e0bd767a0785d2cb812d3a6213baa4c840b812c4909b67',
  'blockNumber': 28,
  'event': u'market_cleared_event',
  'logIndex': 1,
  'transactionHash': u'0x1753c9c1fdf3cdcc66bd6ffb1c7c9100a8633bcc39ca9162214b1aff1a6b21ad',
  'transactionIndex': 0}]

In [79]:
energy_posted_event.get(only_changes=False)


Out[79]:
[{'address': u'0x5e599d37de8bfbc1fb7584debf9ec39b376447a4',
  'args': {u'_target': u'0xa0cddae21dc9bdd024f023e857ebac9b00a36d1f',
   u'_value': 100},
  'blockHash': u'0x4f296eeaf104f29c5fd6fdf2b6051fe20a8f0e0dda352eae7162b33fccc188ea',
  'blockNumber': 18,
  'event': u'energy_posted_event',
  'logIndex': 0,
  'transactionHash': u'0x81548af6e5719e58325ccb3fae47361177e44dc22e460e0d1bd486c54b5e28cc',
  'transactionIndex': 0},
 {'address': u'0x5e599d37de8bfbc1fb7584debf9ec39b376447a4',
  'args': {u'_target': u'0x9d442647c69f925cf9c7162fc2d431a1026d230c',
   u'_value': 500},
  'blockHash': u'0xfb1d04e5814e43f9d8bd285234398fb4c7d9b809670c94bc02ac1f0691b37b19',
  'blockNumber': 19,
  'event': u'energy_posted_event',
  'logIndex': 0,
  'transactionHash': u'0x2e529c09f555427067d83213b99db0de0f46d40e6eeee092ad663311d119aa03',
  'transactionIndex': 0},
 {'address': u'0x5e599d37de8bfbc1fb7584debf9ec39b376447a4',
  'args': {u'_target': u'0x3780e31b33ca1c553de442da52c74f9f7c824447',
   u'_value': 600},
  'blockHash': u'0x51ab2f88d679417bc102d1f7146aa10c7d446b0209fd58c7451bef1301ec8161',
  'blockNumber': 20,
  'event': u'energy_posted_event',
  'logIndex': 0,
  'transactionHash': u'0x8f8d582ffae4517541643562c13826fdc7fce76bda78a51f5af25a7cd4c7da94',
  'transactionIndex': 0},
 {'address': u'0x5e599d37de8bfbc1fb7584debf9ec39b376447a4',
  'args': {u'_target': u'0x70ad664a4fb8c2f700ed953e9512087ea6a33b3b',
   u'_value': 200},
  'blockHash': u'0x75599ac67e5cdf000b8547a1babcb4856226d093eb70b4df58b447e6e32e28ee',
  'blockNumber': 21,
  'event': u'energy_posted_event',
  'logIndex': 0,
  'transactionHash': u'0xec6af3cc05cc71707a8b1119b2bae7c07e75ff16c1f597085e2fee8e07b79526',
  'transactionIndex': 0},
 {'address': u'0x5e599d37de8bfbc1fb7584debf9ec39b376447a4',
  'args': {u'_target': u'0x774f7a5ccc108754be2aef1660ca52712c72f6ee',
   u'_value': 300},
  'blockHash': u'0x7ce6d23768b02a1da10f342139c1172a76866234273a5fa4e9ea223946ab9682',
  'blockNumber': 22,
  'event': u'energy_posted_event',
  'logIndex': 0,
  'transactionHash': u'0xc204ddf80b9f0c76a29b488a0595501e10f5ea3221a15ed1645c7b7afd73c3f5',
  'transactionIndex': 0},
 {'address': u'0x5e599d37de8bfbc1fb7584debf9ec39b376447a4',
  'args': {u'_target': u'0xb8cbc9acb0d1c065b86263ec81e6fefd8208c6bf',
   u'_value': -100L},
  'blockHash': u'0xfd088a6cc5a79513103f4e4472d9793373a2f75ece1c7cc66b9e8f937e4bf40c',
  'blockNumber': 23,
  'event': u'energy_posted_event',
  'logIndex': 0,
  'transactionHash': u'0xc6256377113f11398d475f0ab7fdb6dc1fd772060bae0a131f2ec33afe40de2b',
  'transactionIndex': 0},
 {'address': u'0x5e599d37de8bfbc1fb7584debf9ec39b376447a4',
  'args': {u'_target': u'0xe88d286833b88ed2e47d9d5285fe10b135ee470d',
   u'_value': -100L},
  'blockHash': u'0xf38f7c43aaeab5d550ddea98d4625e6e50d9d75ab329966852efb67a98bed828',
  'blockNumber': 24,
  'event': u'energy_posted_event',
  'logIndex': 0,
  'transactionHash': u'0xc6256377113f11398d475f0ab7fdb6dc1fd772060bae0a131f2ec33afe40de2b',
  'transactionIndex': 0},
 {'address': u'0x5e599d37de8bfbc1fb7584debf9ec39b376447a4',
  'args': {u'_target': u'0xfd0af80492ae0b72a353283430bb12a00324764f',
   u'_value': -200L},
  'blockHash': u'0x74f35995ddfce76d34db229fa059b30690a560eef36602bfe1f6227a1b2f5579',
  'blockNumber': 25,
  'event': u'energy_posted_event',
  'logIndex': 0,
  'transactionHash': u'0xaa02fb1e3f13a90296e3792e772b042a1c0f063d064153fca54e7c7e346ef2c2',
  'transactionIndex': 0},
 {'address': u'0x5e599d37de8bfbc1fb7584debf9ec39b376447a4',
  'args': {u'_target': u'0xd6c45ac07d0f05d09fac71e195135c9494036eac',
   u'_value': -25L},
  'blockHash': u'0x7d3de93d3ee3c77c564a4a0e2cf4717eb974957b17ca5cdbbe137cbf8d637c6a',
  'blockNumber': 26,
  'event': u'energy_posted_event',
  'logIndex': 0,
  'transactionHash': u'0x89203b2eddce90d3af01be8afce995502deb5017c2d32263b79676cb08ceef01',
  'transactionIndex': 0},
 {'address': u'0x5e599d37de8bfbc1fb7584debf9ec39b376447a4',
  'args': {u'_target': u'0x74233a417b72613c210abb3e1080d854a0b5d4a2',
   u'_value': -50L},
  'blockHash': u'0xeb0564d45a61585ca4e7214b5db3e8a34c91e211fad59304c05e6a8f1ed8672b',
  'blockNumber': 27,
  'event': u'energy_posted_event',
  'logIndex': 0,
  'transactionHash': u'0x133ed795374c3b9afcbe4628e0f92206de1bdb296477365a7e071909d5546b85',
  'transactionIndex': 0}]

In [80]:
bill_sent_event.get(only_changes=False)


Out[80]:
[{'address': u'0x5e599d37de8bfbc1fb7584debf9ec39b376447a4',
  'args': {u'_target': u'0xa0cddae21dc9bdd024f023e857ebac9b00a36d1f',
   u'_value': 10500},
  'blockHash': u'0xa0f451c5288eb95f82e0bd767a0785d2cb812d3a6213baa4c840b812c4909b67',
  'blockNumber': 28,
  'event': u'bill_sent_event',
  'logIndex': 2,
  'transactionHash': u'0x1753c9c1fdf3cdcc66bd6ffb1c7c9100a8633bcc39ca9162214b1aff1a6b21ad',
  'transactionIndex': 0},
 {'address': u'0x5e599d37de8bfbc1fb7584debf9ec39b376447a4',
  'args': {u'_target': u'0x9d442647c69f925cf9c7162fc2d431a1026d230c',
   u'_value': 52500},
  'blockHash': u'0xa0f451c5288eb95f82e0bd767a0785d2cb812d3a6213baa4c840b812c4909b67',
  'blockNumber': 28,
  'event': u'bill_sent_event',
  'logIndex': 3,
  'transactionHash': u'0x1753c9c1fdf3cdcc66bd6ffb1c7c9100a8633bcc39ca9162214b1aff1a6b21ad',
  'transactionIndex': 0},
 {'address': u'0x5e599d37de8bfbc1fb7584debf9ec39b376447a4',
  'args': {u'_target': u'0x3780e31b33ca1c553de442da52c74f9f7c824447',
   u'_value': 63000},
  'blockHash': u'0xa0f451c5288eb95f82e0bd767a0785d2cb812d3a6213baa4c840b812c4909b67',
  'blockNumber': 28,
  'event': u'bill_sent_event',
  'logIndex': 4,
  'transactionHash': u'0x1753c9c1fdf3cdcc66bd6ffb1c7c9100a8633bcc39ca9162214b1aff1a6b21ad',
  'transactionIndex': 0},
 {'address': u'0x5e599d37de8bfbc1fb7584debf9ec39b376447a4',
  'args': {u'_target': u'0x70ad664a4fb8c2f700ed953e9512087ea6a33b3b',
   u'_value': 21000},
  'blockHash': u'0xa0f451c5288eb95f82e0bd767a0785d2cb812d3a6213baa4c840b812c4909b67',
  'blockNumber': 28,
  'event': u'bill_sent_event',
  'logIndex': 5,
  'transactionHash': u'0x1753c9c1fdf3cdcc66bd6ffb1c7c9100a8633bcc39ca9162214b1aff1a6b21ad',
  'transactionIndex': 0},
 {'address': u'0x5e599d37de8bfbc1fb7584debf9ec39b376447a4',
  'args': {u'_target': u'0x774f7a5ccc108754be2aef1660ca52712c72f6ee',
   u'_value': 31500},
  'blockHash': u'0xa0f451c5288eb95f82e0bd767a0785d2cb812d3a6213baa4c840b812c4909b67',
  'blockNumber': 28,
  'event': u'bill_sent_event',
  'logIndex': 6,
  'transactionHash': u'0x1753c9c1fdf3cdcc66bd6ffb1c7c9100a8633bcc39ca9162214b1aff1a6b21ad',
  'transactionIndex': 0},
 {'address': u'0x5e599d37de8bfbc1fb7584debf9ec39b376447a4',
  'args': {u'_target': u'0xb8cbc9acb0d1c065b86263ec81e6fefd8208c6bf',
   u'_value': -12000L},
  'blockHash': u'0xa0f451c5288eb95f82e0bd767a0785d2cb812d3a6213baa4c840b812c4909b67',
  'blockNumber': 28,
  'event': u'bill_sent_event',
  'logIndex': 7,
  'transactionHash': u'0x1753c9c1fdf3cdcc66bd6ffb1c7c9100a8633bcc39ca9162214b1aff1a6b21ad',
  'transactionIndex': 0},
 {'address': u'0x5e599d37de8bfbc1fb7584debf9ec39b376447a4',
  'args': {u'_target': u'0xe88d286833b88ed2e47d9d5285fe10b135ee470d',
   u'_value': -12000L},
  'blockHash': u'0xa0f451c5288eb95f82e0bd767a0785d2cb812d3a6213baa4c840b812c4909b67',
  'blockNumber': 28,
  'event': u'bill_sent_event',
  'logIndex': 8,
  'transactionHash': u'0x1753c9c1fdf3cdcc66bd6ffb1c7c9100a8633bcc39ca9162214b1aff1a6b21ad',
  'transactionIndex': 0},
 {'address': u'0x5e599d37de8bfbc1fb7584debf9ec39b376447a4',
  'args': {u'_target': u'0xfd0af80492ae0b72a353283430bb12a00324764f',
   u'_value': -24000L},
  'blockHash': u'0xa0f451c5288eb95f82e0bd767a0785d2cb812d3a6213baa4c840b812c4909b67',
  'blockNumber': 28,
  'event': u'bill_sent_event',
  'logIndex': 9,
  'transactionHash': u'0x1753c9c1fdf3cdcc66bd6ffb1c7c9100a8633bcc39ca9162214b1aff1a6b21ad',
  'transactionIndex': 0},
 {'address': u'0x5e599d37de8bfbc1fb7584debf9ec39b376447a4',
  'args': {u'_target': u'0xd6c45ac07d0f05d09fac71e195135c9494036eac',
   u'_value': -3000L},
  'blockHash': u'0xa0f451c5288eb95f82e0bd767a0785d2cb812d3a6213baa4c840b812c4909b67',
  'blockNumber': 28,
  'event': u'bill_sent_event',
  'logIndex': 10,
  'transactionHash': u'0x1753c9c1fdf3cdcc66bd6ffb1c7c9100a8633bcc39ca9162214b1aff1a6b21ad',
  'transactionIndex': 0},
 {'address': u'0x5e599d37de8bfbc1fb7584debf9ec39b376447a4',
  'args': {u'_target': u'0x74233a417b72613c210abb3e1080d854a0b5d4a2',
   u'_value': -6000L},
  'blockHash': u'0xa0f451c5288eb95f82e0bd767a0785d2cb812d3a6213baa4c840b812c4909b67',
  'blockNumber': 28,
  'event': u'bill_sent_event',
  'logIndex': 11,
  'transactionHash': u'0x1753c9c1fdf3cdcc66bd6ffb1c7c9100a8633bcc39ca9162214b1aff1a6b21ad',
  'transactionIndex': 0}]