Skip to content

Commit f4a297b

Browse files
committed
add hash to transaction
1 parent 6978adc commit f4a297b

6 files changed

Lines changed: 16 additions & 2 deletions

File tree

src/main/kotlin/io/openfuture/api/component/web3/TransactionHandler.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,10 @@ class TransactionHandler(
2929
@Transactional
3030
fun handle(transactionLog: Log) {
3131
val contract = repository.findByAddressIgnoreCase(transactionLog.address) ?: return
32+
if (null != service.find(transactionLog.transactionHash)) return
33+
val transaction = service.save(Transaction.of(contract, transactionLog))
3234

3335
try {
34-
val transaction = service.save(Transaction.of(contract, transactionLog))
3536
val event = eventDecoder.getEvent(contract.address, transaction.data)
3637
val transactionDto = TransactionDto(transaction, event)
3738
contract.webHook?.let { RestTemplate().postForLocation(it, transactionDto) }

src/main/kotlin/io/openfuture/api/entity/scaffold/Transaction.kt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,9 @@ import javax.persistence.*
99
@Table(name = "transactions")
1010
class Transaction(
1111

12+
@Column(name = "hash", nullable = false, unique = true)
13+
val hash: String,
14+
1215
@ManyToOne
1316
@JoinColumn(name = "scaffold_id", nullable = false)
1417
val scaffold: Scaffold,
@@ -22,7 +25,7 @@ class Transaction(
2225
) : BaseModel() {
2326

2427
companion object {
25-
fun of(scaffold: Scaffold, log: Log): Transaction = Transaction(scaffold, log.data)
28+
fun of(scaffold: Scaffold, log: Log): Transaction = Transaction(log.transactionHash, scaffold, log.data)
2629
}
2730

2831
}

src/main/kotlin/io/openfuture/api/repository/Repository.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,8 @@ interface TransactionRepository : BaseRepository<Transaction> {
5151

5252
fun findAllByScaffoldOrderByDateDesc(scaffold: Scaffold, pageable: Pageable): Page<Transaction>
5353

54+
fun findByHash(hash: String): Transaction?
55+
5456
}
5557

5658
@Repository

src/main/kotlin/io/openfuture/api/service/DefaultTransactionService.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,9 @@ class DefaultTransactionService(
1717
override fun getAll(scaffold: Scaffold, pageRequest: Pageable): Page<Transaction> =
1818
repository.findAllByScaffoldOrderByDateDesc(scaffold, pageRequest)
1919

20+
@Transactional(readOnly = true)
21+
override fun find(hash: String): Transaction? = repository.findByHash(hash)
22+
2023
@Transactional
2124
override fun save(transaction: Transaction): Transaction = repository.save(transaction)
2225

src/main/kotlin/io/openfuture/api/service/Service.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,8 @@ interface TransactionService {
8383

8484
fun getAll(scaffold: Scaffold, pageRequest: Pageable): Page<Transaction>
8585

86+
fun find(hash: String): Transaction?
87+
8688
fun save(transaction: Transaction): Transaction
8789

8890
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
TRUNCATE transactions;
2+
3+
ALTER TABLE transactions ADD COLUMN hash VARCHAR NOT NULL UNIQUE;

0 commit comments

Comments
 (0)