def test_end_block_return_validator_updates(b): from bigchaindb import App from bigchaindb.backend import query from bigchaindb.core import encode_validator from bigchaindb.backend.query import VALIDATOR_UPDATE_ID app = App(b) app.init_chain(['ignore']) begin_block = RequestBeginBlock() app.begin_block(begin_block) validator = { 'pub_key': { 'type': 'ed25519', 'data': 'B0E42D2589A455EAD339A035D6CE1C8C3E25863F268120AA0162AD7D003A4014' }, 'power': 10 } validator_update = { 'validator': validator, 'update_id': VALIDATOR_UPDATE_ID } query.store_validator_update(b.connection, validator_update) resp = app.end_block(RequestEndBlock(height=99)) assert resp.validator_updates[0] == encode_validator(validator) updates = b.get_validator_update() assert updates == []
def test_upsert_validator(b, alice): from bigchaindb.backend.query import VALIDATOR_UPDATE_ID from bigchaindb.backend import query, connect from bigchaindb.models import Transaction conn = connect() public_key = '1718D2DBFF00158A0852A17A01C78F4DCF3BA8E4FB7B8586807FAC182A535034' power = 1 validator = { 'pub_key': { 'type': 'ed25519', 'data': public_key }, 'power': power } validator_update = { 'validator': validator, 'update_id': VALIDATOR_UPDATE_ID } query.store_validator_update(conn, deepcopy(validator_update)) tx = Transaction.create([alice.public_key], [([alice.public_key], 1)], asset=None)\ .sign([alice.private_key]) code, message = b.write_transaction(tx, 'broadcast_tx_commit') assert code == 202 validators = b.get_validators() validators = [(v['pub_key']['data'], v['voting_power']) for v in validators] assert ((public_key, power) in validators)
def run_upsert_validator(args): """Store validators which should be synced with Tendermint""" b = bigchaindb.Bigchain() validator = {'pub_key': {'type': 'ed25519', 'data': args.public_key}, 'power': args.power} validator_update = {'validator': validator, 'update_id': VALIDATOR_UPDATE_ID} try: query.store_validator_update(b.connection, validator_update) except MultipleValidatorOperationError: logger.error('A validator update is pending to be applied. ' 'Please re-try after the current update has ' 'been processed.')
def test_validator_updates(b, validator_pub_key): from bigchaindb.backend import query from bigchaindb.backend.query import VALIDATOR_UPDATE_ID # create a validator update object validator = {'pub_key': {'type': 'ed25519', 'data': validator_pub_key}, 'power': 10} validator_update = {'validator': validator, 'update_id': VALIDATOR_UPDATE_ID} query.store_validator_update(b.connection, validator_update) updates = b.get_validator_update() assert updates == [validator_update['validator']] b.delete_validator_update() assert b.get_validator_update() == []
def test_store_validator_update(): from bigchaindb.backend import connect, query from bigchaindb.backend.query import VALIDATOR_UPDATE_ID from bigchaindb.common.exceptions import MultipleValidatorOperationError conn = connect() validator_update = {'validator': {'key': 'value'}, 'update_id': VALIDATOR_UPDATE_ID} query.store_validator_update(conn, deepcopy(validator_update)) with pytest.raises(MultipleValidatorOperationError): query.store_validator_update(conn, deepcopy(validator_update)) resp = query.get_validator_update(conn, VALIDATOR_UPDATE_ID) assert resp == validator_update assert query.delete_validator_update(conn, VALIDATOR_UPDATE_ID) assert not query.get_validator_update(conn, VALIDATOR_UPDATE_ID)
def test_upsert_validator(b, alice): from bigchaindb.backend.query import VALIDATOR_UPDATE_ID from bigchaindb.backend import query, connect from bigchaindb.models import Transaction from bigchaindb.tendermint_utils import public_key_to_base64 import time conn = connect() power = 1 public_key = '9B3119650DF82B9A5D8A12E38953EA47475C09F0C48A4E6A0ECE182944B24403' validator = { 'pub_key': { 'type': 'AC26791624DE60', 'data': public_key }, 'power': power } validator_update = { 'validator': validator, 'update_id': VALIDATOR_UPDATE_ID } query.store_validator_update(conn, deepcopy(validator_update)) tx = Transaction.create([alice.public_key], [([alice.public_key], 1)], asset=None)\ .sign([alice.private_key]) code, message = b.write_transaction(tx, 'broadcast_tx_commit') assert code == 202 time.sleep(5) validators = b.get_validators() validators = [(v['pub_key']['value'], v['voting_power']) for v in validators] public_key64 = public_key_to_base64(public_key) assert ((public_key64, str(power)) in validators)