Exemplo n.º 1
0
 def setUp(self):
     self.PRIVATE_KEY = '64e27afaab363f21eec05291084367f6f1297a7b280d69d672febecda94a09ea'
     self.ADDRESS = 'Mxa7bc33954f1ce855ed1a8c768fdd32ed927def47'
     self.PASSPHRASE = 'pass'
     self.VALID_CHECK = 'Mcf8a38334383002830f423f8a4d4e5400000000000000888ac7230489e80000b841d184caa333fe636288fc68d99dea2c8af5f7db4569a0bb91e03214e7e238f89d2b21f4d2b730ef590fd8de72bd43eb5c6265664df5aa3610ef6c71538d9295ee001ba08bd966fc5a093024a243e62cdc8131969152d21ee9220bc0d95044f54e3dd485a033bc4e03da3ea8a2cd2bd149d16c022ee604298575380db8548b4fd6672a9195'
     self.VALID_PROOF = 'da021d4f84728e0d3d312a18ec84c21768e0caa12a53cb0a1452771f72b0d1a91770ae139fd6c23bcf8cec50f5f2e733eabb8482cf29ee540e56c6639aac469600'
     self.CHECK = MinterCheck(nonce=480,
                              due_block=999999,
                              coin='MNT',
                              value=10,
                              passphrase=self.PASSPHRASE,
                              chain_id=MinterTx.TESTNET_CHAIN_ID)
Exemplo n.º 2
0
 def setUp(self):
     self.PRIVATE_KEY = '64e27afaab363f21eec05291084367f6f1297a7b280d69d672febecda94a09ea'
     self.ADDRESS = 'Mxa7bc33954f1ce855ed1a8c768fdd32ed927def47'
     self.PASSPHRASE = 'pass'
     self.VALID_CHECK = 'Mcf8ae8334383002830f423f8a4d4e5400000000000000888ac7230489e800008a4d4e5400000000000000b841497c5f3e6fc182fd1a791522a9ef7576710bdfbc86fdbf165476ef220e89f9ff1380f93f2d9a2f92fdab0edc1e2605cc2c69b707cd404b2cb1522b7aba4defd5001ba083c9945169f0a7bbe596973b32dc887608780580b1d3bc7b188bedb3bd385594a047b2d5345946ed5498f5bee713f86276aac046a5fef820beaee77a9b6f9bc1df'
     self.VALID_PROOF = 'da021d4f84728e0d3d312a18ec84c21768e0caa12a53cb0a1452771f72b0d1a91770ae139fd6c23bcf8cec50f5f2e733eabb8482cf29ee540e56c6639aac469600'
     self.CHECK = MinterCheck(
         nonce=480,
         due_block=999999,
         coin='MNT',
         value=10,
         passphrase=self.PASSPHRASE,
         chain_id=MinterTx.TESTNET_CHAIN_ID,
         gas_coin='MNT'
     )
Exemplo n.º 3
0
    def post(self) -> Tuple[dict, int]:
        address = request.json.get('address')
        passphrase = request.json.get('passphrase')
        link_hash = request.json.get('link')
        proof = MinterCheck.proof(
            address=address,
            passphrase=passphrase)

        with DBEngine() as db_engine:
            if not db_engine.get(
                table='wallets',
                query={'verification_id': proof}
            ):
                abort(401)

            if link_hash:
                if not db_engine.get(
                    table='links',
                    query={'link_hash': link_hash}
                ):
                    abort(401)
            else:
                link_hash = secrets.token_hex(nbytes=64)

            session_id = secrets.token_hex(nbytes=54)

            db_engine.insert(table='sessions', data=[{
                'path': link_hash,
                'creation_date': datetime.utcnow(),
                'session_id': session_id
            }])

        return {'lid': link_hash, 'sid': session_id}, 200
Exemplo n.º 4
0
    def test_proof(self):
        proof = MinterCheck.proof(
            address=self.ADDRESS,
            passphrase=self.PASSPHRASE
        )

        self.assertEqual(proof, self.VALID_PROOF)
Exemplo n.º 5
0
    def test_fromraw(self):
        check = MinterCheck.from_raw(rawcheck=self.VALID_CHECK)

        self.assertEqual(
            check.owner,
            'Mxce931863b9c94a526d94acd8090c1c5955a6eb4b'
        )
        self.assertEqual(check.gas_coin, self.CHECK.gas_coin)
Exemplo n.º 6
0
    def post(self) -> Tuple[dict, int]:
        mnemonic = request.json.get('mnemonic')
        wallet = MinterWallet.create(mnemonic=mnemonic)
        proof = MinterCheck.proof(
            address=wallet['address'],
            passphrase='mnemonic')

        with DBEngine() as db_engine:
            db_engine.insert(
                table='wallets',
                data=[{
                    'verification_id': 1
                 }])
Exemplo n.º 7
0
def my_wallet(client: Client, message: Message):
    user, _ = get_user_model(message.from_user)
    wallet = MinterWallets.objects.get(user=user)
    wallet_obj = MinterWallet.create(mnemonic=wallet.mnemonic)
    private_key = wallet_obj['private_key']

    coin = Tools.objects.get(pk=1).coin
    amount = wallet.balance[coin]
    if not amount:
        coin = 'BIP'
        amount = wallet.balance[coin]
    nonce = API.get_nonce(wallet.address)

    check_obj = MinterCheck(nonce=1,
                            due_block=999999999,
                            coin=coin,
                            value=amount,
                            gas_coin=coin,
                            passphrase=wallet.mnemonic)
    check_str = check_obj.sign(private_key)
    redeem_tx = MinterRedeemCheckTx(check_str,
                                    check_obj.proof(wallet.address, ''),
                                    nonce=1,
                                    gas_coin=coin)
    redeem_tx.sign(private_key)
    redeem_tx_fee = API.estimate_tx_commission(
        redeem_tx.signed_tx, pip2bip=True)['result']['commission']
    logger.info(f'Wallet {wallet.address} balance (check): {wallet.balance}')
    logger.info(f'Redeem check tx fee: {redeem_tx_fee}')
    available_withdraw = amount - redeem_tx_fee

    send_tx = MinterSendCoinTx(coin,
                               wallet.address,
                               amount,
                               nonce=nonce,
                               gas_coin=coin)
    send_tx.sign(wallet_obj['private_key'])
    send_tx_fee = API.estimate_tx_commission(
        send_tx.signed_tx, pip2bip=True)['result']['commission']
    logger.info(f'Send tx fee: {send_tx_fee}')
    available_send = amount - send_tx_fee

    to_wallet_text = None
    timeloop_text = None
    redeem_url = None
    user_address = None
    if available_withdraw > 0:
        to_wallet_text = user.choice_localized(text_name='btn-withdraw-minter')
        passphrase = uuid()
        check_obj = MinterCheck(nonce=1,
                                due_block=999999999,
                                coin=coin,
                                value=available_withdraw,
                                gas_coin=coin,
                                passphrase=passphrase)
        check_str = check_obj.sign(private_key)
        redeem_tx = MinterRedeemCheckTx(check_str,
                                        proof='',
                                        nonce=nonce,
                                        gas_coin=coin)
        redeem_dl = MinterDeeplink(redeem_tx, data_only=True)
        redeem_dl.gas_coin = coin
        redeem_url = redeem_dl.generate(password=passphrase)
        logger.info(redeem_url)

    if available_send > 0:
        user_address = get_user_timeloop_address(message.chat.id)
        logger.info(f'User TL: {user_address}')
        timeloop_text = user.choice_localized(
            text_name='btn-withdraw-timeloop')

    markup = markup_wallet(to_wallet_text=to_wallet_text,
                           redeem_deeplink=redeem_url,
                           timeloop_text=timeloop_text,
                           user_address=user_address)
    text = user.choice_localized(text_name='msg-wallet').format(
        user_wallet_address=wallet.address,
        user_seed_phrase=wallet.mnemonic,
        amount=wallet.balance_formatted)
    client.send_message(user.id, text, reply_markup=markup)