def test_transfer_success(self):
        ACCOUNT_AMOUNT1 = 1000
        ACCOUNT_AMOUNT2 = 500
        TRANSFER_VALUE = ACCOUNT_AMOUNT1
        self.send_transaction(
            TokenMethod.TRANSFER,
            TokenClient.get_transfer_payload(self.account_address2,
                                             TRANSFER_VALUE),
            [self.account_address1, self.account_address2])
        self.expect_get({
            self.account_address1:
            TokenClient.get_account_model(ACCOUNT_AMOUNT1)
        })
        self.expect_get({
            self.account_address2:
            TokenClient.get_account_model(ACCOUNT_AMOUNT2)
        })

        self.expect_set({
            self.account_address1:
            TokenClient.get_account_model(ACCOUNT_AMOUNT1 - TRANSFER_VALUE),
            self.account_address2:
            TokenClient.get_account_model(ACCOUNT_AMOUNT2 + TRANSFER_VALUE)
        })

        self.expect_ok()
Exemple #2
0
def certificate_already_exist(cert):
    token_client = TokenClient()
    address = token_client.make_address_from_data(cert.public_bytes(serialization.Encoding.DER).hex())
    try:
        value = token_client.get_value(address)
    except KeyNotFound:
        return False
    return True
    def test_transfer_fail_to_zeroaddress(self):
        ACCOUNT_AMOUNT1 = 500
        TRANSFER_VALUE = 200
        self.send_transaction(
            TokenMethod.TRANSFER,
            TokenClient.get_transfer_payload(
                self.handler.make_address(ZERO_ADDRESS), TRANSFER_VALUE),
            [self.account_address1, self.account_address2])
        self.expect_get({
            self.account_address1:
            TokenClient.get_account_model(ACCOUNT_AMOUNT1)
        })

        self.expect_invalid_transaction()
    def test_transfer_fail_no_state_address1(self):
        ACCOUNT_AMOUNT2 = 500
        TRANSFER_VALUE = 200
        self.send_transaction(
            TokenMethod.TRANSFER,
            TokenClient.get_transfer_payload(self.account_address2,
                                             TRANSFER_VALUE),
            [self.account_address1, self.account_address2])
        self.expect_get({self.account_address1: None})
        self.expect_get({
            self.account_address2:
            TokenClient.get_account_model(ACCOUNT_AMOUNT2)
        })

        self.expect_invalid_transaction()
    def test_genesis_fail(self):
        TOTAL_SUPPLY = 10000
        zero_address = self.handler.make_address(ZERO_ADDRESS)

        self.send_transaction(TokenMethod.GENESIS,
                              TokenClient.get_genesis_payload(TOTAL_SUPPLY),
                              [zero_address, self.account_address1])

        genesis_status = GenesisStatus()
        genesis_status.status = True

        self.expect_get({self.account_address1: None})
        self.expect_get({zero_address: genesis_status})

        self.expect_invalid_transaction()
    def test_genesis_empty(self):
        TOTAL_SUPPLY = 10000
        zero_address = self.handler.make_address(ZERO_ADDRESS)

        self.send_transaction(TokenMethod.GENESIS,
                              TokenClient.get_genesis_payload(TOTAL_SUPPLY),
                              [zero_address, self.account_address1])

        self.expect_get({self.account_address1: None})
        self.expect_get({zero_address: None})

        genesis_status = GenesisStatus()
        genesis_status.status = True
        account = Account()
        account.balance = TOTAL_SUPPLY

        self.expect_set({
            self.account_address1: account,
            zero_address: genesis_status
        })

        self.expect_ok()
Exemple #7
0
# limitations under the License.
# ------------------------------------------------------------------------

import argparse
from remme.protos.token_pb2 import TokenMethod
from remme.token.token_client import TokenClient
from remme.token.token_handler import TokenHandler, TransactionPayload

OUTPUT_BATCH = '/genesis/batch/token-proposal.batch'

if __name__ == '__main__':
    parser = argparse.ArgumentParser(description='File with a public key to assign initial supply.')
    parser.add_argument('token_supply')
    args = parser.parse_args()

    token_client = TokenClient()

    zero_address = TokenHandler.make_address('0' * 64)
    target_address = TokenHandler.make_address_from_data(token_client.get_signer().get_public_key().as_hex())
    
    print('Issuing {} tokens to address {}'.format(args.token_supply, target_address))

    addresses_input_output = [zero_address, target_address]

    payload = TransactionPayload()
    payload.method = TokenMethod.GENESIS
    payload.data = token_client.get_genesis_payload(args.token_supply).SerializeToString()

    batch_list = TokenClient().make_batch_list(payload, addresses_input_output)

    batch_file = open(OUTPUT_BATCH, 'wb')
Exemple #8
0
def is_valid_token_balance():
    token_client = TokenClient()
    signer_pub_key = token_client.get_signer().get_public_key().as_hex()
    signer_balance = token_client.get_balance(TokenHandler.make_address_from_data(signer_pub_key))
    return signer_balance >= CERT_STORE_PRICE
Exemple #9
0
 def __init__(self):
     self.client = TokenClient()
Exemple #10
0
class TokenCli(BasicCli):
    def __init__(self):
        self.client = TokenClient()

    def parser_transfer(self, subparsers, parent_parser):
        message = 'Send REMME token transfer transaction.'

        parser = subparsers.add_parser(
            METHOD_TRANSFER,
            parents=[parent_parser],
            description=message,
            help='Transfers <amount> of tokens to <address>.')

        parser.add_argument('address_to',
                            type=str,
                            help='REMME account address.')

        parser.add_argument(
            'value',
            type=int,
            help='Amount of REMME tokens to transfer with 4 decimals.')

    def parser_balance(self, subparsers, parent_parser):
        message = 'Show address balance.'

        parser = subparsers.add_parser(METHOD_BALANCE,
                                       parents=[parent_parser],
                                       description=message,
                                       help='Balance of <address>.')

        parser.add_argument(
            'address',
            type=str,
            help='Check address. Specify "me" to use your address.')

    def parser_address(self, subparsers, parent_parser):
        message = 'Show current address or make one from public key.'

        parser = subparsers.add_parser(
            METHOD_ADDRESS,
            parents=[parent_parser],
            description=message,
            help='You may specify "me" instead of a public key.')

        parser.add_argument(
            'pub_key',
            type=str,
            help=
            'Type "me" or public address from which to show address in REMME network'
        )

    def do_address(self, args):
        public_key = args.pub_key
        if public_key == 'me':
            public_key = self.client._signer.get_public_key().as_hex()
        if not int(public_key, 16) or len(public_key) != 66:
            raise CliException(
                'Please, make sure public key is a 66 digit hex number: {}'.
                format(public_key))
        print(self.client.make_address_from_data(public_key))

    def do_transfer(self, args):
        status = self.client.transfer(address_to=args.address_to,
                                      value=args.value)
        print('Transfer status check: {}'.format(status['link']))

    def do_balance(self, args):
        if args.address == 'me':
            args.address = self.client.make_address_from_data(
                self.client._signer.get_public_key().as_hex())
        try:
            account = self.client.get_account(address=args.address)
            print("Balance: {}\n".format(account.balance))
        except KeyNotFound:
            print('Balance: 0 REM')
        except Exception as e:
            print(e)

    def init(self):
        commands = []
        commands += [{
            'name': METHOD_TRANSFER,
            'parser': self.parser_transfer,
            'action': self.do_transfer
        }, {
            'name': METHOD_BALANCE,
            'parser': self.parser_balance,
            'action': self.do_balance
        }, {
            'name': METHOD_ADDRESS,
            'parser': self.parser_address,
            'action': self.do_address
        }]
        self.main_wrapper(commands)