diff --git a/server/app/com/xsn/explorer/data/anorm/dao/BlockPostgresDAO.scala b/server/app/com/xsn/explorer/data/anorm/dao/BlockPostgresDAO.scala index 5b47b4f..1cadc7c 100644 --- a/server/app/com/xsn/explorer/data/anorm/dao/BlockPostgresDAO.scala +++ b/server/app/com/xsn/explorer/data/anorm/dao/BlockPostgresDAO.scala @@ -14,15 +14,15 @@ class BlockPostgresDAO { """ |INSERT INTO blocks | ( - | hash, previous_blockhash, next_blockhash, tpos_contract, merkle_root, size, + | blockhash, previous_blockhash, next_blockhash, tpos_contract, merkle_root, size, | height, version, time, median_time, nonce, bits, chainwork, difficulty | ) |VALUES | ( - | {hash}, {previous_blockhash}, {next_blockhash}, {tpos_contract}, {merkle_root}, {size}, + | {blockhash}, {previous_blockhash}, {next_blockhash}, {tpos_contract}, {merkle_root}, {size}, | {height}, {version}, {time}, {median_time}, {nonce}, {bits}, {chainwork}, {difficulty} | ) - |ON CONFLICT (hash) + |ON CONFLICT (blockhash) |DO UPDATE | SET previous_blockhash = EXCLUDED.previous_blockhash, | next_blockhash = EXCLUDED.next_blockhash, @@ -37,11 +37,11 @@ class BlockPostgresDAO { | bits = EXCLUDED.bits, | chainwork = EXCLUDED.chainwork, | difficulty = EXCLUDED.difficulty - |RETURNING hash, previous_blockhash, next_blockhash, tpos_contract, merkle_root, size, + |RETURNING blockhash, previous_blockhash, next_blockhash, tpos_contract, merkle_root, size, | height, version, time, median_time, nonce, bits, chainwork, difficulty """.stripMargin ).on( - 'hash -> block.hash.string, + 'blockhash -> block.hash.string, 'previous_blockhash -> block.previousBlockhash.map(_.string), 'next_blockhash -> block.nextBlockhash.map(_.string), 'tpos_contract -> block.tposContract.map(_.string), @@ -61,13 +61,13 @@ class BlockPostgresDAO { def getBy(blockhash: Blockhash)(implicit conn: Connection): Option[Block] = { SQL( """ - |SELECT hash, previous_blockhash, next_blockhash, tpos_contract, merkle_root, size, + |SELECT blockhash, previous_blockhash, next_blockhash, tpos_contract, merkle_root, size, | height, version, time, median_time, nonce, bits, chainwork, difficulty |FROM blocks - |WHERE hash = {hash} + |WHERE blockhash = {blockhash} """.stripMargin ).on( - "hash" -> blockhash.string + "blockhash" -> blockhash.string ).as(parseBlock.singleOpt).flatten } @@ -75,19 +75,19 @@ class BlockPostgresDAO { SQL( """ |DELETE FROM blocks - |WHERE hash = {hash} - |RETURNING hash, previous_blockhash, next_blockhash, tpos_contract, merkle_root, size, + |WHERE blockhash = {blockhash} + |RETURNING blockhash, previous_blockhash, next_blockhash, tpos_contract, merkle_root, size, | height, version, time, median_time, nonce, bits, chainwork, difficulty """.stripMargin ).on( - "hash" -> blockhash.string + "blockhash" -> blockhash.string ).as(parseBlock.singleOpt).flatten } def getLatestBlock(implicit conn: Connection): Option[Block] = { SQL( """ - |SELECT hash, previous_blockhash, next_blockhash, tpos_contract, merkle_root, size, + |SELECT blockhash, previous_blockhash, next_blockhash, tpos_contract, merkle_root, size, | height, version, time, median_time, nonce, bits, chainwork, difficulty |FROM blocks |ORDER BY height DESC @@ -99,7 +99,7 @@ class BlockPostgresDAO { def getFirstBlock(implicit conn: Connection): Option[Block] = { SQL( """ - |SELECT hash, previous_blockhash, next_blockhash, tpos_contract, merkle_root, size, + |SELECT blockhash, previous_blockhash, next_blockhash, tpos_contract, merkle_root, size, | height, version, time, median_time, nonce, bits, chainwork, difficulty |FROM blocks |ORDER BY height diff --git a/server/app/com/xsn/explorer/data/anorm/parsers/BlockParsers.scala b/server/app/com/xsn/explorer/data/anorm/parsers/BlockParsers.scala index a10aa55..93403dd 100644 --- a/server/app/com/xsn/explorer/data/anorm/parsers/BlockParsers.scala +++ b/server/app/com/xsn/explorer/data/anorm/parsers/BlockParsers.scala @@ -9,7 +9,6 @@ object BlockParsers { import CommonParsers._ - val parseHash = str("hash").map(Blockhash.from) val parseNextBlockhash = str("next_blockhash").map(Blockhash.from) val parsePreviousBlockhash = str("previous_blockhash").map(Blockhash.from) val parseTposContract = str("tpos_contract").map(TransactionId.from) @@ -24,7 +23,7 @@ object BlockParsers { val parseDifficulty = get[BigDecimal]("difficulty") val parseBlock = ( - parseHash ~ + parseBlockhash ~ parseNextBlockhash.? ~ parsePreviousBlockhash.? ~ parseTposContract.? ~ diff --git a/server/conf/evolutions/default/1.sql b/server/conf/evolutions/default/1.sql index 2b5cf85..5f77220 100644 --- a/server/conf/evolutions/default/1.sql +++ b/server/conf/evolutions/default/1.sql @@ -2,7 +2,7 @@ # --- !Ups CREATE TABLE blocks( - hash VARCHAR(64) NOT NULL, + blockhash VARCHAR(64) NOT NULL, previous_blockhash VARCHAR(64) NULL, next_blockhash VARCHAR(64) NULL, merkle_root VARCHAR(64) NULL, @@ -17,7 +17,11 @@ CREATE TABLE blocks( chainwork VARCHAR(80) NOT NULL, difficulty DECIMAL(30, 20), -- constraints - CONSTRAINT blocks_hash_pk PRIMARY KEY (hash) + CONSTRAINT blocks_blockhash_pk PRIMARY KEY (blockhash), + CONSTRAINT blocks_blockhash_format CHECK (blockhash ~ '^[a-f0-9]{64}$'), + CONSTRAINT blocks_previous_blockhash_format CHECK (previous_blockhash ~ '^[a-f0-9]{64}$'), + CONSTRAINT blocks_next_blockhash_format CHECK (next_blockhash ~ '^[a-f0-9]{64}$'), + CONSTRAINT blocks_tpos_contract_format CHECK (tpos_contract ~ '^[a-f0-9]{64}$') ); CREATE INDEX blocks_height_index ON blocks USING BTREE (height);