示例#1
0
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
示例#2
0
文件: cli.py 项目: AFDudley/sleth
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)
示例#3
0
文件: cli.py 项目: AFDudley/sleth
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]
示例#4
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'
示例#5
0
文件: cli.py 项目: AFDudley/sleth
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)])
示例#6
0
文件: cli.py 项目: AFDudley/sleth
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
示例#7
0
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)
示例#8
0
文件: cli.py 项目: AFDudley/sleth
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)
示例#9
0
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=[])
示例#10
0
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
示例#11
0
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)
示例#12
0
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'
示例#13
0
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
示例#14
0
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
示例#15
0
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)
示例#16
0
文件: cli.py 项目: AFDudley/sleth
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
示例#17
0
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)
示例#18
0
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
示例#19
0
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)
示例#20
0
文件: cli.py 项目: AFDudley/sleth
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=[])
示例#21
0
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)])
示例#22
0
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)