def cmd_get_current_round(args): print "Getting information about the current player round" instance = api.Api() assert instance.is_contract_at(args.contract), "Contract not found" result = abi_call(instance, args.contract, CONTRACT_TRANSLATOR, 'get_current_round', []) print "Current round:", result
def cmd_create(args): instance = api.Api() contract = compile(open(CONTRACT_FILE).read()).encode('hex') contract_address = instance.create(contract, gas=CONTRACT_GAS) print "Contract will be available at %s" % contract_address if args.wait: instance.wait_for_next_block(verbose=True) print "Is contract?", instance.is_contract_at(contract_address)
def cmd_get_current_round(args): print "Getting information about the current player round" instance = api.Api() assert instance.is_contract_at(args.contract), "Contract not found" result = instance.call(args.contract, fun_name='get_current_round', data=[]) print "Current round:", result[0]
def test_api_exception_status_code(mocker): instance = api.Api(config) mocker.patch('requests.post', return_value=mock_json_response(status_code=404)) with pytest.raises(api.ApiException) as excinfo: instance.coinbase() assert excinfo.value.code == 404 assert excinfo.value.message == 'Error Reason'
def cmd_claim(args): print "Claiming round ", args.round instance = api.Api() assert instance.is_contract_at(args.contract), "Contract not found" instance.transact(args.contract, fun_name='claim', sig='i', data=[int(args.round)])
def cmd_get_stats(args): print "Getting statistics" instance = api.Api() assert instance.is_contract_at(args.contract), "Contract not found" result = instance.call(args.contract, fun_name='get_stats', data=[]) current_round, total_spins, total_coins_won = result print "Current round:", current_round print "Total spins:", total_spins print "Total coins won:", total_coins_won
def cmd_spin(args): print "Spinning the slots with bet", args.bet instance = api.Api() assert instance.is_contract_at(args.contract), "Contract not found" abi_transact(instance, args.contract, CONTRACT_TRANSLATOR, 'spin', [int(args.bet)], value=int(args.bet) * ETHER)
def cmd_spin(args): print "Spinning the slots with bet", args.bet instance = api.Api() assert instance.is_contract_at(args.contract), "Contract not found" instance.transact(args.contract, fun_name='spin', sig='i', data=[int(args.bet)], value=int(args.bet) * ETHER)
def cmd_suicide(args): print "Killing the contract" instance = api.Api() assert instance.is_contract_at(args.contract), "Contract not found" abi_transact(instance, args.contract, CONTRACT_TRANSLATOR, 'suicide', data=[])
def cmd_get_stats(args): print "Getting statistics" instance = api.Api() assert instance.is_contract_at(args.contract), "Contract not found" result = abi_call(instance, args.contract, CONTRACT_TRANSLATOR, 'get_stats', []) current_round, total_spins, total_coins_won = result print "Current round:", current_round print "Total spins:", total_spins print "Total coins won:", total_coins_won
def cmd_inspect(args): instance = api.Api() result = instance.is_contract_at(args.contract) print "Is contract?", result result = instance.balance_at(args.contract) print "Balance", result result = instance.storage_at(args.contract) pprint(result)
def test_api_exception_error_response(mocker): instance = api.Api(config) mocker.patch('requests.post', return_value=mock_json_response(error={ 'code': 31337, 'message': 'Too Elite' })) with pytest.raises(api.ApiException) as excinfo: instance.coinbase() assert excinfo.value.code == 31337 assert excinfo.value.message == 'Too Elite'
def mock_rpc(mocker, rpc_fun, rpc_args, json_result, rpc_method, rpc_params): instance = api.Api(config) mocker.patch('requests.post', return_value=mock_json_response(result=json_result)) mock_rpc_post = mocker.patch.object(instance, '_rpc_post', side_effect=instance._rpc_post) result = getattr(instance, rpc_fun)(*rpc_args) mock_rpc_post.assert_called_with(rpc_method, rpc_params) return result
def cmd_get_round(args): print "Getting information about round", args.round instance = api.Api() assert instance.is_contract_at(args.contract), "Contract not found" result = abi_call(instance, args.contract, CONTRACT_TRANSLATOR, 'get_round', [int(args.round)]) player, block, timestamp, bet, result, entropy, rnd, status = result print "Player:", hex(player) print "Block:", block print "Timestamp:", timestamp print "Bet:", bet print "Result:", result print "Entropy:", hex(entropy) print "RND:", rnd print "Status:", status
def cmd_create(args): instance = api.Api() creator_address = instance.accounts()[0] creator_balance = instance.balance_at(creator_address) if creator_balance < CONTRACT_GAS * 1e+13: print "Insufficient balance to cover gas for contract creation." print "You need at least %d wei in account %s (current balance is %d wei)." % \ (CONTRACT_GAS * 1e+13, creator_address, creator_balance) return contract = compile(open(CONTRACT_FILE).read()).encode('hex') contract_address = instance.create(contract, gas=CONTRACT_GAS) print "Contract will be available at %s" % contract_address if args.wait: instance.wait_for_next_block(verbose=True) print "Is contract?", instance.is_contract_at(contract_address)
def cmd_get_round(args): print "Getting information about round", args.round instance = api.Api() assert instance.is_contract_at(args.contract), "Contract not found" result = instance.call(args.contract, fun_name='get_round', sig='i', data=[int(args.round)]) player, block, timestamp, bet, result, entropy, rnd, status = result print "Player:", hex(player) print "Block:", block print "Timestamp:", timestamp print "Bet:", bet print "Result:", result print "Entropy:", entropy print "RND:", rnd print "Status:", status
def cmd_status(args): instance = api.Api() print "Coinbase: %s" % instance.coinbase() print "Listening? %s" % instance.is_listening() print "Mining? %s" % instance.is_mining() print "Peer count: %d" % instance.peer_count() print "Number: %d" % instance.number() last_block = instance.last_block() print "Last Block:" pprint(last_block) accounts = instance.accounts() print "Accounts:" for address in accounts: balance = instance.balance_at(address) print "- %s %.4e" % (address, balance)
import logging from pyepm import api, config, __version__ from bitcoin import * # NOQA BITCOIN_MAINNET = 'btc' BITCOIN_TESTNET = 'testnet' SLEEP_TIME = 5 * 60 # 5 mins. If changing, check retry logic GAS_FOR_STORE_HEADERS = 1200000 # it should take less than 1M gas, but buffer to avoid running out CHUNK_SIZE = 5 # number of headers to fetch at a time CHUNK_RANGE = range(CHUNK_SIZE) api_config = config.read_config() instance = api.Api(api_config) logging.basicConfig(format='%(message)s', level=logging.INFO) logger = logging.getLogger(__name__) pyepmLogger = logging.getLogger("pyepm") pyepmLogger.setLevel(logging.INFO) # instance.address = "0xcd2a3d9f938e13cd947ec05abc7fe734df8dd826" # instance.relayContract = "0xba164d1e85526bd5e27fd15ad14b0eae91c45a93" # TESTNET relay: 0x142f674e911cc55c226af81ac4d6de0a671d4abf # To use a wallet, deploy and configure https://github.com/ethereum/dapp-bin/blob/69cb5e8c82074b5fbf9c01f75145c3cad5af85e2/wallet/wallet.sol # Update the 4 wallet variables below. Using an instance of the contract wallet # can allow more ETH to be stored in the wallet, while a much smaller amount of # ETH can be stored in the "--sender" unlocked account. The "sender" can request
def main(): api_config = config.read_config() instance = api.Api(api_config) parser = argparse.ArgumentParser() from_address = instance.accounts()[0] parser.add_argument('--from_address', default=from_address, help='address to send transactions from') subparsers = parser.add_subparsers(help='sub-command help') parser_create = subparsers.add_parser('create', help='create the contract') parser_create.set_defaults(func=cmd_create) parser_create.add_argument('--endowment', type=int, default=500, help='value to endow in ether') parser_inspect = subparsers.add_parser('inspect', help='inspect the contract') parser_inspect.set_defaults(func=cmd_inspect) parser_inspect.add_argument('contract', help='sleth contract address') parser_inspect.add_argument( '--pending', action='store_true', help='look in pending transactions instead of mined') parser_status = subparsers.add_parser('status', help='display the eth node status') parser_status.set_defaults(func=cmd_status) parser_transact = subparsers.add_parser( 'transact', help='transact ether to destination (default: 1 ETH)') parser_transact.set_defaults(func=cmd_transact) parser_transact.add_argument('dest', help='destination') parser_transact.add_argument('--value', type=int, default=1, help='value to transfer in ether') parser_spin = subparsers.add_parser('spin', help='make a spin') parser_spin.set_defaults(func=cmd_spin) parser_spin.add_argument('contract', help='sleth contract address') parser_spin.add_argument('bet', help='bet amount') parser_claim = subparsers.add_parser('claim', help='clain a round') parser_claim.set_defaults(func=cmd_claim) parser_claim.add_argument('contract', help='sleth contract address') parser_claim.add_argument('round', help='round number to claim') parser_get_round = subparsers.add_parser('get_round', help='get round information') parser_get_round.set_defaults(func=cmd_get_round) parser_get_round.add_argument('contract', help='sleth contract address') parser_get_round.add_argument('round', help='round number') parser_get_current_round = subparsers.add_parser('get_current_round', help='get current round') parser_get_current_round.set_defaults(func=cmd_get_current_round) parser_get_current_round.add_argument('contract', help='sleth contract address') parser_get_stats = subparsers.add_parser('get_stats', help='get contract statistics') parser_get_stats.set_defaults(func=cmd_get_stats) parser_get_stats.add_argument('contract', help='sleth contract address') parser_suicide = subparsers.add_parser('suicide', help='kills the contract') parser_suicide.set_defaults(func=cmd_suicide) parser_suicide.add_argument('contract', help='sleth contract address') args = parser.parse_args() print "Using from_address = %s" % (args.from_address) instance.address = args.from_address args.func(instance, args)
def cmd_suicide(args): print "Killing the contract" instance = api.Api() assert instance.is_contract_at(args.contract), "Contract not found" instance.transact(args.contract, fun_name='suicide', data=[])
def cmd_claim(args): print "Claiming round ", args.round instance = api.Api() assert instance.is_contract_at(args.contract), "Contract not found" abi_transact(instance, args.contract, CONTRACT_TRANSLATOR, 'claim', [int(args.round)])
def cmd_transact(args): instance = api.Api() instance.transact(args.dest, value=args.value * ETHER) if args.wait: instance.wait_for_next_block(verbose=True)