def test_encode_decode_transaction(b): from bigchaindb.tendermint.utils import (encode_transaction, decode_transaction) asset = {'value': 'key'} encode_tx = encode_transaction(asset) new_encode_tx = base64.b64encode( json.dumps(asset).encode('utf8')).decode('utf8') assert encode_tx == new_encode_tx de64 = base64.b64decode(encode_tx) assert asset == decode_transaction(de64)
def post_transaction(self, transaction, mode): """Submit a valid transaction to the mempool.""" if not mode or mode not in MODE_LIST: raise ValidationError(('Mode must be one of the following {}.') .format(', '.join(MODE_LIST))) payload = { 'method': mode, 'jsonrpc': '2.0', 'params': [encode_transaction(transaction.to_dict())], 'id': str(uuid4()) } # TODO: handle connection errors! requests.post(ENDPOINT, json=payload)
def test_write_and_post_transaction(mock_post, b): from bigchaindb.models import Transaction from bigchaindb.common.crypto import generate_key_pair from bigchaindb.tendermint.utils import encode_transaction alice = generate_key_pair() tx = Transaction.create([alice.public_key], [([alice.public_key], 1)], asset=None)\ .sign([alice.private_key]).to_dict() tx = b.validate_transaction(tx) b.write_transaction(tx, 'broadcast_tx_async') assert mock_post.called args, kwargs = mock_post.call_args assert 'broadcast_tx_async' == kwargs['json']['method'] encoded_tx = [encode_transaction(tx.to_dict())] assert encoded_tx == kwargs['json']['params']