From 8a65e73a4fe7f3a9f49e16cdb5767c101723aeda Mon Sep 17 00:00:00 2001 From: Oleg Bondar Date: Thu, 19 Jun 2025 13:24:20 +0100 Subject: [PATCH] define bitcoin utils as a lib --- src/BitcoinUtils.sol | 2 +- test/BitcoinUtils_Mainnet.t.sol | 45 --------------------------------- test/BitcoinUtils_Regtest.t.sol | 36 -------------------------- test/BitcoinUtils_Simnet.t.sol | 36 -------------------------- test/BitcoinUtils_Testnet.t.sol | 37 --------------------------- 5 files changed, 1 insertion(+), 155 deletions(-) delete mode 100644 test/BitcoinUtils_Mainnet.t.sol delete mode 100644 test/BitcoinUtils_Regtest.t.sol delete mode 100644 test/BitcoinUtils_Simnet.t.sol delete mode 100644 test/BitcoinUtils_Testnet.t.sol diff --git a/src/BitcoinUtils.sol b/src/BitcoinUtils.sol index 34c83ca..9d7620b 100644 --- a/src/BitcoinUtils.sol +++ b/src/BitcoinUtils.sol @@ -7,7 +7,7 @@ import "forge-std/console.sol"; import "./Base58.sol"; import "./BitcoinNetworkEncoder.sol"; -library BitcoinUtils { +contract BitcoinUtils { // There are currently three invoice address formats in use: // P2PKH which begin with the number 1, eg: 1BvBMSEYstWetqTFn5Au4m4GFg7xJaNVN2 diff --git a/test/BitcoinUtils_Mainnet.t.sol b/test/BitcoinUtils_Mainnet.t.sol deleted file mode 100644 index ec72855..0000000 --- a/test/BitcoinUtils_Mainnet.t.sol +++ /dev/null @@ -1,45 +0,0 @@ -// SPDX-License-Identifier: MIT - -pragma solidity ^0.8.27; - -import "forge-std/Test.sol"; - -import "../src/BitcoinUtils.sol"; -import "../src/BitcoinNetworkEncoder.sol"; - -// See also https://en.bitcoin.it/wiki/List_of_address_prefixes - -contract BitcoinUtils_Mainnet_Test is Test { - using BitcoinUtils for BitcoinNetworkEncoder.Network; - BitcoinNetworkEncoder.Network private network = BitcoinNetworkEncoder.Network.Mainnet; - - function testValidAddress() public view { - assertTrue(network.validateBitcoinAddress("1BgGZ9tcN4rm9KBzDn7KprQz87SZ26SAMH")); - assertTrue(network.validateBitcoinAddress("15hPYnf4qXCbDBi96DsUPdZ34RyZ5Lou1a")); - } - - function testInvalidAddress() public view { - assertFalse(network.validateBitcoinAddress("")); - assertFalse(network.validateBitcoinAddress("7SeEnXWPaCCALbVrTnszCVGfRU8cGfx")); - assertFalse(network.validateBitcoinAddress("j9ywUkWg2fTQrouxxh5rSZhRvrjMkEUfuiKe")); - } - - function testBech32ValidAddress() public view { - assertTrue(network.validateBitcoinAddress("bc1p0xlxvlhemja6c4dqv22uapctqupfhlxm9h8z3k2e72q4k9hcz7vqzk5jj0")); - assertTrue(network.validateBitcoinAddress("bc1qw508d6qejxtdg4y5r3zarvary0c5xw7kv8f3t4")); - } - - function testBech32InvalidAddress() public view { - assertFalse(network.validateBitcoinAddress("BC1SW50QA3JX3S")); - - // wrong encoding - assertFalse(network.validateBitcoinAddress("bc1zw508d6qejxtdg4y5r3zarvaryvqyzf3du")); - - // invalid checksum - assertFalse(network.validateBitcoinAddress("bc1qw508d6qejxtdg4y5r3zarvary0c5xw7kv8f3t5")); - - assertFalse(network.validateBitcoinAddress("tb1qrp33g0q5c5txsp9arysrx4k6zdkfs4nce4xj0gdcccefvpysxf3q0sL5k7")); - - assertFalse(network.validateBitcoinAddress("tb1pw508d6qejxtdg4y5r3zarquvzkan")); - } -} diff --git a/test/BitcoinUtils_Regtest.t.sol b/test/BitcoinUtils_Regtest.t.sol deleted file mode 100644 index a64cb2f..0000000 --- a/test/BitcoinUtils_Regtest.t.sol +++ /dev/null @@ -1,36 +0,0 @@ -// SPDX-License-Identifier: MIT - -pragma solidity ^0.8.27; - -import "forge-std/Test.sol"; - -import "../src/BitcoinUtils.sol"; -import "../src/BitcoinNetworkEncoder.sol"; - -// See also https://en.bitcoin.it/wiki/List_of_address_prefixes - -contract BitcoinUtils_Regtest_Test is Test { - using BitcoinUtils for BitcoinNetworkEncoder.Network; - BitcoinNetworkEncoder.Network private network = BitcoinNetworkEncoder.Network.Regtest; - - function testValidAddress() public view { - assertTrue(network.validateBitcoinAddress("2NByiBUaEXrhmqAsg7BbLpcQSAQs1EDwt5w")); - assertTrue(network.validateBitcoinAddress("mrCDrCybB6J1vRfbwM5hemdJz73FwDBC8r")); - } - - function testInvalidAddress() public view { - assertFalse(network.validateBitcoinAddress("")); - assertFalse(network.validateBitcoinAddress("7SeEnXWPaCCALbVrTnszCVGfRU8cGfx")); - assertFalse(network.validateBitcoinAddress("j9ywUkWg2fTQrouxxh5rSZhRvrjMkEUfuiKe")); - } - - function testBech32ValidAddress() public view { - assertTrue(network.validateBitcoinAddress("bcrt1qnd2xm45v0uy5nx3qzt28qrhq42w4udrms8sz52")); - assertTrue(network.validateBitcoinAddress("bcrt1pnmrmugapastum8ztvgwcn8hvq2avmcwh2j4ssru7rtyygkpqq98q4wyd6s")); - } - - function testBech32ValidMainnetAddressIsNotValidForRegtest() public view { - assertFalse(network.validateBitcoinAddress("bc1p0xlxvlhemja6c4dqv22uapctqupfhlxm9h8z3k2e72q4k9hcz7vqzk5jj0")); - assertFalse(network.validateBitcoinAddress("bc1qw508d6qejxtdg4y5r3zarvary0c5xw7kv8f3t4")); - } -} diff --git a/test/BitcoinUtils_Simnet.t.sol b/test/BitcoinUtils_Simnet.t.sol deleted file mode 100644 index 844465f..0000000 --- a/test/BitcoinUtils_Simnet.t.sol +++ /dev/null @@ -1,36 +0,0 @@ -// SPDX-License-Identifier: MIT - -pragma solidity ^0.8.0; - -import "forge-std/Test.sol"; - -import "../src/BitcoinUtils.sol"; -import "../src/BitcoinNetworkEncoder.sol"; - -// See also https://en.bitcoin.it/wiki/List_of_address_prefixes - -contract BitcoinUtils_Simnet_Test is Test { - using BitcoinUtils for BitcoinNetworkEncoder.Network; - BitcoinNetworkEncoder.Network private network = BitcoinNetworkEncoder.Network.Simnet; - - function testValidAddress() public view { - assertTrue(network.validateBitcoinAddress("ScuV2eqXfQCPcpxqqVSFtMVwkfqcwnQKB1")); - assertTrue(network.validateBitcoinAddress("SYi7rot5GKoyuRNUnjrfKYRBL7F4e9L8bN")); - } - - function testInvalidAddress() public view { - assertFalse(network.validateBitcoinAddress("")); - assertFalse(network.validateBitcoinAddress("7SeEnXWPaCCALbVrTnszCVGfRU8cGfx")); - assertFalse(network.validateBitcoinAddress("j9ywUkWg2fTQrouxxh5rSZhRvrjMkEUfuiKe")); - } - - function testBech32ValidAddress() public view { - assertTrue(network.validateBitcoinAddress("sb1p5z8wl5tu7m0d79vzqqsl9gu0x4fkjug857fusx4fl4kfgwh5j25sxv5dv3")); - assertTrue(network.validateBitcoinAddress("sb1pfusykjdt46ktwq03d20uqqf94uh9487344wr3q5v9szzsxnjdfkszvtlt8")); - } - - function testBech32ValidMainnetAddressIsNotValidForTestnet() public view { - assertFalse(network.validateBitcoinAddress("bc1p0xlxvlhemja6c4dqv22uapctqupfhlxm9h8z3k2e72q4k9hcz7vqzk5jj0")); - assertFalse(network.validateBitcoinAddress("bc1qw508d6qejxtdg4y5r3zarvary0c5xw7kv8f3t4")); - } -} diff --git a/test/BitcoinUtils_Testnet.t.sol b/test/BitcoinUtils_Testnet.t.sol deleted file mode 100644 index 760c553..0000000 --- a/test/BitcoinUtils_Testnet.t.sol +++ /dev/null @@ -1,37 +0,0 @@ -// SPDX-License-Identifier: MIT - -pragma solidity ^0.8.27; - -import "forge-std/Test.sol"; - -import "../src/BitcoinUtils.sol"; -import "../src/BitcoinNetworkEncoder.sol"; - -// See also https://en.bitcoin.it/wiki/List_of_address_prefixes - -contract BitcoinUtils_Testnet_Test is Test { - using BitcoinUtils for BitcoinNetworkEncoder.Network; - BitcoinNetworkEncoder.Network private network = BitcoinNetworkEncoder.Network.Testnet; - - function testValidAddress() public view { - assertTrue(network.validateBitcoinAddress("2NByiBUaEXrhmqAsg7BbLpcQSAQs1EDwt5w")); - assertTrue(network.validateBitcoinAddress("mrCDrCybB6J1vRfbwM5hemdJz73FwDBC8r")); - assertTrue(network.validateBitcoinAddress("2NFPLS6TQVVvic6Nh85PGfcYesbGdm1fjpo")); - } - - function testInvalidAddress() public view { - assertFalse(network.validateBitcoinAddress("")); - assertFalse(network.validateBitcoinAddress("7SeEnXWPaCCALbVrTnszCVGfRU8cGfx")); - assertFalse(network.validateBitcoinAddress("j9ywUkWg2fTQrouxxh5rSZhRvrjMkEUfuiKe")); - } - - function testBech32ValidAddress() public view { - assertTrue(network.validateBitcoinAddress("tb1qw508d6qejxtdg4y5r3zarvary0c5xw7kxpjzsx")); - assertTrue(network.validateBitcoinAddress("tb1qrp33g0q5c5txsp9arysrx4k6zdkfs4nce4xj0gdcccefvpysxf3q0sl5k7")); - } - - function testBech32ValidMainnetAddressIsNotValidForTestnet() public view { - assertFalse(network.validateBitcoinAddress("bc1p0xlxvlhemja6c4dqv22uapctqupfhlxm9h8z3k2e72q4k9hcz7vqzk5jj0")); - assertFalse(network.validateBitcoinAddress("bc1qw508d6qejxtdg4y5r3zarvary0c5xw7kv8f3t4")); - } -}