diff --git a/apps/blockchain-node/src/aitbc_chain/consensus/poa.py b/apps/blockchain-node/src/aitbc_chain/consensus/poa.py index dc8d3bda..6d9c4366 100755 --- a/apps/blockchain-node/src/aitbc_chain/consensus/poa.py +++ b/apps/blockchain-node/src/aitbc_chain/consensus/poa.py @@ -283,9 +283,13 @@ class PoAProposer: ) if not success: - self._logger.warning(f"[PROPOSE] Failed to apply transaction {tx.tx_hash}: {error_msg}") + self._logger.error(f"[PROPOSE] Failed to apply transaction {tx.tx_hash}: {error_msg}") continue + # Commit the balance changes immediately after successful state transition + session.commit() + self._logger.info(f"[PROPOSE] Committed balance changes for tx {tx.tx_hash}") + # Check if transaction already exists in database existing_tx = session.exec( select(Transaction).where( diff --git a/apps/blockchain-node/src/aitbc_chain/rpc/router.py b/apps/blockchain-node/src/aitbc_chain/rpc/router.py index 12a521ce..2d710400 100755 --- a/apps/blockchain-node/src/aitbc_chain/rpc/router.py +++ b/apps/blockchain-node/src/aitbc_chain/rpc/router.py @@ -299,7 +299,7 @@ async def submit_transaction(tx_data: TransactionRequest) -> Dict[str, Any]: # _normalize_transaction_data expects "from", not "sender" tx_data_dict = { "from": tx_data.sender, - "to": tx_data.payload.get("to", tx_data.sender), # Get to from payload or default to sender + "to": tx_data.payload.get("to"), # Get to from payload (required field) "amount": tx_data.payload.get("amount", 0), # Get amount from payload "fee": tx_data.fee, "nonce": tx_data.nonce,