Example #1
0
def test_apply_transaction_raises_if_cant_be_applied_to_sender_wallet(redis, mocker):
    manager = WalletManager()

    block = Block()
    transaction = TransferTransaction()
    transaction.type = TRANSACTION_TYPE_TRANSFER
    transaction.fee = 10000
    transaction.amount = 430000
    transaction.id = "hehe"
    transaction.sender_public_key = (
        "020f5df4d2bc736d12ce43af5b1663885a893fade7ee5e62b3cc59315a63e6a325"
    )
    transaction.recipient_id = "AZYnpgXS3x43nxqhT4q29sZScRwZeNKLpW"

    redis.set(
        "wallets:address:AThM5PNSKdU9pu1ydqQnzRWVeNCGr8HKof",
        Wallet(
            {
                "address": "AThM5PNSKdU9pu1ydqQnzRWVeNCGr8HKof",
                "public_key": (
                    "020f5df4d2bc736d12ce43af5b1663885a893fade7ee5e62b3cc59315a63e6a325"
                ),
                "balance": 5,
            }
        ).to_json(),
    )
    with pytest.raises(Exception) as excinfo:
        manager.apply_transaction(transaction, block)

    assert str(excinfo.value) == (
        "Can't apply transaction hehe from sender AThM5PNSKdU9pu1ydqQnzRWVeNCGr8HKof"
    )
Example #2
0
def test_apply_transaction_force_apply_skips_can_be_applied_check(redis, mocker):
    manager = WalletManager()

    balances_mock = mocker.patch(
        "chain.plugins.database.wallet_manager.WalletManager._update_vote_balances"
    )

    mocker.patch(
        "chain.plugins.database.wallet_manager.is_transaction_exception",
        return_value=True,
    )

    block = Block()
    transaction = TransferTransaction()
    transaction.type = TRANSACTION_TYPE_TRANSFER
    transaction.fee = 10000
    transaction.amount = 430000
    transaction.id = "hehe"
    transaction.sender_public_key = (
        "020f5df4d2bc736d12ce43af5b1663885a893fade7ee5e62b3cc59315a63e6a325"
    )
    transaction.recipient_id = "AZYnpgXS3x43nxqhT4q29sZScRwZeNKLpW"

    redis.set(
        "wallets:address:AThM5PNSKdU9pu1ydqQnzRWVeNCGr8HKof",
        Wallet(
            {
                "address": "AThM5PNSKdU9pu1ydqQnzRWVeNCGr8HKof",
                "public_key": (
                    "020f5df4d2bc736d12ce43af5b1663885a893fade7ee5e62b3cc59315a63e6a325"
                ),
                "balance": 0,
            }
        ).to_json(),
    )

    manager.apply_transaction(transaction, block)

    # updated sender wallet is saved back to redis
    sender = Wallet(
        json.loads(redis.get("wallets:address:AThM5PNSKdU9pu1ydqQnzRWVeNCGr8HKof"))
    )
    assert sender.balance == -440000

    # updated recipient wallet is saved back to redis
    recipient = Wallet(
        json.loads(redis.get("wallets:address:AZYnpgXS3x43nxqhT4q29sZScRwZeNKLpW"))
    )
    assert recipient.balance == 430000

    balances_mock.assert_called_once()
Example #3
0
def test_apply_transaction_raises_if_voted_delegate_doesnt_exist():
    """
    Should raise exception if delegate already exists
    """
    manager = WalletManager()
    public_key = "020f5df4d2bc736d12ce43af5b1663885a893fade7ee5e62b3cc59315a63e6a325"
    block = Block()
    transaction = TransferTransaction()
    transaction.type = TRANSACTION_TYPE_VOTE
    transaction.id = "hehe"
    transaction.asset["votes"] = ["+{}".format(public_key)]

    with pytest.raises(Exception) as excinfo:
        manager.apply_transaction(transaction, block)

    assert str(
        excinfo.value
    ) == "Can't apply transaction hehe: delegate {} does not exist".format(public_key)
Example #4
0
def test_apply_transaction_raises_if_delegate_already_exists_for_delegate_reg(redis):
    """
    Should raise exception if delegate already exists
    """
    manager = WalletManager()

    block = Block()
    transaction = TransferTransaction()
    transaction.type = TRANSACTION_TYPE_DELEGATE_REGISTRATION
    transaction.id = "hehe"
    transaction.asset["delegate"] = {"username": "******"}

    manager = WalletManager()

    redis.set("wallets:username:harambe", "")

    with pytest.raises(Exception) as excinfo:
        manager.apply_transaction(transaction, block)

    assert "Can't apply transaction hehe: delegate name harambe already taken" == str(
        excinfo.value
    )
Example #5
0
def test_update_vote_balances_correctly_for_transaction_revert(redis):
    manager = WalletManager()

    transaction = TransferTransaction()
    transaction.fee = 10000
    transaction.amount = 430000
    transaction.type = TRANSACTION_TYPE_TRANSFER

    redis.set(
        "wallets:address:AZYnpgXS3x43nxqhT4q29sZScRwZeNKLpW",
        json.dumps(
            {
                "address": "AZYnpgXS3x43nxqhT4q29sZScRwZeNKLpW",
                "public_key": (
                    "03b12f99375c3b0e4f5f5c7ea74e723f0b84a6f169b47d9105ed2a179f30c82df2"
                ),
                "vote_balance": 10000000,
            }
        ),
    )
    redis.set(
        "wallets:address:AWoysqF1xm1LXYLQvmRDpfVNKzzaLVwPVM",
        json.dumps(
            {
                "address": "AWoysqF1xm1LXYLQvmRDpfVNKzzaLVwPVM",
                "public_key": (
                    "0316b3dc139c1a35927ecbdcb8d8b628ad06bd4f1869fe3ad0e23c8106678a460f"
                ),
                "vote_balance": 2000000,
            }
        ),
    )

    sender = Wallet(
        {
            "address": "AThM5PNSKdU9pu1ydqQnzRWVeNCGr8HKof",
            "public_key": (
                "020f5df4d2bc736d12ce43af5b1663885a893fade7ee5e62b3cc59315a63e6a325"
            ),
            "balance": 1337000,
            "vote": (
                "03b12f99375c3b0e4f5f5c7ea74e723f0b84a6f169b47d9105ed2a179f30c82df2"
            ),
        }
    )

    recipient = Wallet(
        {
            "address": "ASt5oBHKDW8AeJe2Ybc1RucMLS7mRCiuRe",
            "public_key": (
                "0316510c1409d3307d9f205cac58f1a871499c3ffea3878ddbbb48c821cfbc079a"
            ),
            "balance": 66000,
            "vote": (
                "0316b3dc139c1a35927ecbdcb8d8b628ad06bd4f1869fe3ad0e23c8106678a460f"
            ),
        }
    )

    manager._update_vote_balances(sender, recipient, transaction, revert=True)

    delegate1 = json.loads(
        redis.get("wallets:address:AZYnpgXS3x43nxqhT4q29sZScRwZeNKLpW")
    )
    assert delegate1["vote_balance"] == 10440000

    delegate2 = json.loads(
        redis.get("wallets:address:AWoysqF1xm1LXYLQvmRDpfVNKzzaLVwPVM")
    )
    assert delegate2["vote_balance"] == 1570000