diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -4,12 +4,18 @@
 The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
 and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
 
+## [2.1.0] - 2026-11-03
+
+- Update to haskoin-core-1.5.0.
+
 ## [2.0.0] - 2026-10-31
 
 ### Changed
 
 - Replace monad-logger with fast-logger. Configuration records take a `Logger`,
   and functions need only `MonadIO` or `MonadUnliftIO`.
+- Require haskoin-core 1.5.0, whose `buildMerkleRoot` returns
+  `Either String MerkleRoot`.
 
 ## [1.4.4] - 2026-08-31
 
diff --git a/haskoin-node.cabal b/haskoin-node.cabal
--- a/haskoin-node.cabal
+++ b/haskoin-node.cabal
@@ -5,7 +5,7 @@
 -- see: https://github.com/sol/hpack
 
 name:           haskoin-node
-version:        2.0.0
+version:        2.1.0
 synopsis:       P2P library for Bitcoin and Bitcoin Cash
 description:    Please see the README on GitHub at <https://github.com/jprupp/haskoin-node#readme>
 category:       Bitcoin, Finance, Network
@@ -47,7 +47,7 @@
     , data-default
     , fast-logger
     , hashable
-    , haskoin-core >=1.3.0
+    , haskoin-core >=1.5.0
     , mtl
     , network
     , nqe >=0.6.3
@@ -84,7 +84,7 @@
     , data-default
     , fast-logger
     , hashable
-    , haskoin-core >=1.3.0
+    , haskoin-core >=1.5.0
     , haskoin-node
     , hspec
     , mtl
diff --git a/test/Haskoin/NodeSpec.hs b/test/Haskoin/NodeSpec.hs
--- a/test/Haskoin/NodeSpec.hs
+++ b/test/Haskoin/NodeSpec.hs
@@ -136,7 +136,7 @@
         headerHash b1.header `shouldBe` h1
         headerHash b2.header `shouldBe` h2
         let ths b = map txHash b.txs
-            testMerkle b = b.header.merkle `shouldBe` buildMerkleRoot (ths b)
+            testMerkle b = buildMerkleRoot (ths b) `shouldBe` Right b.header.merkle
         testMerkle b1
         testMerkle b2
   describe "chain on test network" $ do
