def test_genesis_fail(self): TOTAL_SUPPLY = 10000 self.send_transaction(AccountMethod.GENESIS, AccountClient.get_genesis_payload(TOTAL_SUPPLY), [GENESIS_ADDRESS, self.account_address1]) genesis_status = GenesisStatus() genesis_status.status = True self.expect_get({GENESIS_ADDRESS: genesis_status}) self.expect_invalid_transaction()
def test_account_handler_genesis_already_initialized(): """ Case: send transaction request, to send tokens from genesis address, to the account handler when genesis was already initialized. Expect: invalid transaction error is raised with genesis is already initialized error message. """ genesis_payload = GenesisPayload() genesis_payload.total_supply = TOKENS_AMOUNT_TO_SUPPLY transaction_payload = TransactionPayload() transaction_payload.method = AccountMethod.GENESIS transaction_payload.data = genesis_payload.SerializeToString() serialized_transaction_payload = transaction_payload.SerializeToString() transaction_header = TransactionHeader( signer_public_key=NODE_PUBLIC_KEY, family_name=TRANSACTION_REQUEST_ACCOUNT_HANDLER_PARAMS.get( 'family_name'), family_version=TRANSACTION_REQUEST_ACCOUNT_HANDLER_PARAMS.get( 'family_version'), inputs=INPUTS, outputs=OUTPUTS, dependencies=[], payload_sha512=hash512(data=serialized_transaction_payload), batcher_public_key=NODE_PUBLIC_KEY, nonce=time.time().hex().encode(), ) serialized_header = transaction_header.SerializeToString() transaction_request = TpProcessRequest( header=transaction_header, payload=serialized_transaction_payload, signature=create_signer( private_key=NODE_PRIVATE_KEY).sign(serialized_header), ) genesis_status = GenesisStatus() genesis_status.status = True mock_context = StubContext( inputs=INPUTS, outputs=OUTPUTS, initial_state={GENESIS_ADDRESS: genesis_status.SerializeToString()}) with pytest.raises(InvalidTransaction) as error: AccountHandler().apply(transaction=transaction_request, context=mock_context) assert f'Genesis is already initialized.' == str(error.value)
def _genesis(self, context, pub_key, genesis_payload): signer_key = self.make_address_from_data(pub_key) genesis_status = get_data(context, GenesisStatus, GENESIS_ADDRESS) if not genesis_status: genesis_status = GenesisStatus() elif genesis_status.status: raise InvalidTransaction('Genesis is already initialized.') genesis_status.status = True account = Account() account.balance = genesis_payload.total_supply LOGGER.info( 'Generated genesis transaction. Issued {} tokens to address {}'. format(genesis_payload.total_supply, signer_key)) return {signer_key: account, GENESIS_ADDRESS: genesis_status}
def test_genesis_success(self): TOTAL_SUPPLY = 10000 self.send_transaction(AccountMethod.GENESIS, AccountClient.get_genesis_payload(TOTAL_SUPPLY), [GENESIS_ADDRESS, self.account_address1]) self.expect_get({GENESIS_ADDRESS: None}) genesis_status = GenesisStatus() genesis_status.status = True account = Account() account.balance = TOTAL_SUPPLY self.expect_set({ self.account_address1: account, GENESIS_ADDRESS: genesis_status }) self.expect_ok()
def test_account_handler_genesis_apply(): """ Case: send transaction request, to send tokens from genesis address, to the account handler. Expect: """ account = Account() account.balance = TOKENS_AMOUNT_TO_SUPPLY expected_serialized_account_to_balance = account.SerializeToString() genesis_payload = GenesisPayload() genesis_payload.total_supply = TOKENS_AMOUNT_TO_SUPPLY transaction_payload = TransactionPayload() transaction_payload.method = AccountMethod.GENESIS transaction_payload.data = genesis_payload.SerializeToString() serialized_transaction_payload = transaction_payload.SerializeToString() transaction_header = TransactionHeader( signer_public_key=NODE_PUBLIC_KEY, family_name=TRANSACTION_REQUEST_ACCOUNT_HANDLER_PARAMS.get( 'family_name'), family_version=TRANSACTION_REQUEST_ACCOUNT_HANDLER_PARAMS.get( 'family_version'), inputs=INPUTS, outputs=OUTPUTS, dependencies=[], payload_sha512=hash512(data=serialized_transaction_payload), batcher_public_key=NODE_PUBLIC_KEY, nonce=time.time().hex().encode(), ) serialized_header = transaction_header.SerializeToString() transaction_request = TpProcessRequest( header=transaction_header, payload=serialized_transaction_payload, signature=create_signer( private_key=NODE_PRIVATE_KEY).sign(serialized_header), ) genesis_status = GenesisStatus() genesis_status.status = True expected_state = { GENESIS_ADDRESS: genesis_status.SerializeToString(), ACCOUNT_ADDRESS_TO: expected_serialized_account_to_balance, } mock_context = StubContext(inputs=INPUTS, outputs=OUTPUTS, initial_state={}) AccountHandler().apply(transaction=transaction_request, context=mock_context) state_as_list = mock_context.get_state( addresses=[GENESIS_ADDRESS, ACCOUNT_ADDRESS_TO]) state_as_dict = {entry.address: entry.data for entry in state_as_list} assert expected_state == state_as_dict