Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
B
bridge-backend
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
movabridge
bridge-backend
Commits
e0bb6f74
Commit
e0bb6f74
authored
Sep 18, 2025
by
vicotor
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
update backend code
parent
d451f1a1
Changes
3
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
133 additions
and
19 deletions
+133
-19
builder.go
dao/builder.go
+73
-18
dbtx.go
dao/dbtx.go
+34
-0
eth_test.go
dao/eth_test.go
+26
-1
No files found.
dao/builder.go
View file @
e0bb6f74
...
...
@@ -163,6 +163,8 @@ func (s *Dao) filterTransferIn(chain ChainInterface, txLog types.Log, ctx contex
InTimestamp
:
int64
(
blocktime
),
ToChain
:
chain
.
GetChain
()
.
ChainId
,
ToChainTxHash
:
strings
.
ToLower
(
txLog
.
TxHash
.
String
()),
ConfirmedValidators
:
make
([]
string
,
0
),
RejectedValidators
:
make
([]
string
,
0
),
}
if
err
:=
s
.
FillInTransferEventInfo
(
ctx
,
dbEvent
);
err
!=
nil
{
...
...
@@ -179,38 +181,91 @@ func (s *Dao) filterTransferIn(chain ChainInterface, txLog types.Log, ctx contex
log
.
WithField
(
"chain"
,
chain
.
Name
())
.
WithError
(
err
)
.
Error
(
"parse TransferInExecution log"
)
return
err
}
if
err
:=
s
.
UpdateBridgeResult
(
ctx
,
chain
.
GetChain
()
.
ChainId
,
event
.
InId
.
Int64
(),
TransferChainExecuted
,
txLog
.
TxHash
);
err
!=
nil
{
dbevent
,
err
:=
s
.
GetBridgeEventByInId
(
ctx
,
chain
.
GetChain
()
.
ChainId
,
event
.
InId
.
Int64
())
if
err
!=
nil
{
log
.
WithField
(
"chain"
,
chain
.
Name
())
.
WithFields
(
log
.
Fields
{
"in_id"
:
event
.
InId
.
Int64
(),
"error"
:
err
.
Error
(),
})
.
Error
(
"bridge event by in id not found"
)
return
err
}
dbevent
.
ToChainStatus
=
int
(
TransferChainExecuted
)
dbevent
.
ToChainTxHash
=
strings
.
ToLower
(
txLog
.
TxHash
.
String
())
if
err
:=
s
.
UpdateBridgeEventWithId
(
ctx
,
dbevent
);
err
!=
nil
{
log
.
WithField
(
"chain"
,
chain
.
Name
())
.
WithFields
(
log
.
Fields
{
"in_id"
:
event
.
InId
.
Int64
(),
"error"
:
err
.
Error
(),
})
.
Error
(
"db update transfer in execution event"
)
return
err
}
//
//if err := s.UpdateBridgeResult(ctx, chain.GetChain().ChainId, event.InId.Int64(), TransferChainExecuted, txLog.TxHash); err != nil {
// log.WithField("chain", chain.Name()).WithFields(log.Fields{
// "error": err.Error(),
// }).Error("db update transfer in execution event")
// return err
//}
case
TransferInConfirmationEvent
.
ID
.
Hex
()
:
event
,
err
:=
chain
.
ParseTransferInConfirmation
(
txLog
)
if
err
!=
nil
{
log
.
WithField
(
"chain"
,
chain
.
Name
())
.
WithError
(
err
)
.
Error
(
"parse TransferInConfirmation log"
)
return
err
}
if
err
:=
s
.
AddValidatorOp
(
ctx
,
chain
.
GetChain
()
.
ChainId
,
event
.
InId
.
Int64
(),
strings
.
ToLower
(
event
.
Validator
.
String
()),
true
);
err
!=
nil
{
log
.
WithField
(
"chain"
,
chain
.
Name
())
.
WithError
(
err
)
.
Error
(
"add validator op failed"
)
dbevent
,
err
:=
s
.
GetBridgeEventByInId
(
ctx
,
chain
.
GetChain
()
.
ChainId
,
event
.
InId
.
Int64
())
if
err
!=
nil
{
log
.
WithField
(
"chain"
,
chain
.
Name
())
.
WithFields
(
log
.
Fields
{
"in_id"
:
event
.
InId
.
Int64
(),
"error"
:
err
.
Error
(),
})
.
Error
(
"bridge event by in id not found"
)
return
err
}
dbevent
.
ConfirmedValidators
=
append
(
dbevent
.
ConfirmedValidators
,
strings
.
ToLower
(
event
.
Validator
.
String
()))
if
err
:=
s
.
UpdateBridgeEventWithId
(
ctx
,
dbevent
);
err
!=
nil
{
log
.
WithField
(
"chain"
,
chain
.
Name
())
.
WithFields
(
log
.
Fields
{
"in_id"
:
event
.
InId
.
Int64
(),
"error"
:
err
.
Error
(),
})
.
Error
(
"db update transfer in confirmation event"
)
return
err
}
//if err := s.AddValidatorOp(ctx, chain.GetChain().ChainId, event.InId.Int64(), strings.ToLower(event.Validator.String()), true); err != nil {
// log.WithField("chain", chain.Name()).WithError(err).Error("add validator op failed")
// return err
//}
case
TransferInRejectionEvent
.
ID
.
Hex
()
:
event
,
err
:=
chain
.
ParseTransferInRejection
(
txLog
)
if
err
!=
nil
{
log
.
WithField
(
"chain"
,
chain
.
Name
())
.
WithError
(
err
)
.
Error
(
"parse TransferInExecution log"
)
return
err
}
if
err
:=
s
.
AddValidatorOp
(
ctx
,
chain
.
GetChain
()
.
ChainId
,
event
.
InId
.
Int64
(),
strings
.
ToLower
(
event
.
Validator
.
String
()),
false
);
err
!=
nil
{
log
.
WithField
(
"chain"
,
chain
.
Name
())
.
WithError
(
err
)
.
Error
(
"add validator op failed"
)
dbevent
,
err
:=
s
.
GetBridgeEventByInId
(
ctx
,
chain
.
GetChain
()
.
ChainId
,
event
.
InId
.
Int64
())
if
err
!=
nil
{
log
.
WithField
(
"chain"
,
chain
.
Name
())
.
WithFields
(
log
.
Fields
{
"in_id"
:
event
.
InId
.
Int64
(),
"error"
:
err
.
Error
(),
})
.
Error
(
"bridge event by in id not found"
)
return
err
}
if
err
:=
s
.
UpdateBridgeResult
(
ctx
,
chain
.
GetChain
()
.
ChainId
,
event
.
InId
.
Int64
(),
TransferChainRejected
,
txLog
.
TxHash
);
err
!=
nil
{
dbevent
.
ConfirmedValidators
=
append
(
dbevent
.
ConfirmedValidators
,
strings
.
ToLower
(
event
.
Validator
.
String
()))
dbevent
.
ToChainStatus
=
int
(
TransferChainRejected
)
dbevent
.
ToChainTxHash
=
strings
.
ToLower
(
txLog
.
TxHash
.
String
())
if
err
:=
s
.
UpdateBridgeEventWithId
(
ctx
,
dbevent
);
err
!=
nil
{
log
.
WithField
(
"chain"
,
chain
.
Name
())
.
WithFields
(
log
.
Fields
{
"in_id"
:
event
.
InId
.
Int64
(),
"error"
:
err
.
Error
(),
})
.
Error
(
"db update transfer in
execu
tion event"
)
})
.
Error
(
"db update transfer in
rejec
tion event"
)
return
err
}
//if err := s.AddValidatorOp(ctx, chain.GetChain().ChainId, event.InId.Int64(), strings.ToLower(event.Validator.String()), false); err != nil {
// log.WithField("chain", chain.Name()).WithError(err).Error("add validator op failed")
// return err
//}
//if err := s.UpdateBridgeResult(ctx, chain.GetChain().ChainId, event.InId.Int64(), TransferChainRejected, txLog.TxHash); err != nil {
// log.WithField("chain", chain.Name()).WithFields(log.Fields{
// "error": err.Error(),
// }).Error("db update transfer in execution event")
// return err
//}
}
return
nil
}
...
...
dao/dbtx.go
View file @
e0bb6f74
...
...
@@ -115,6 +115,40 @@ func (d *Dao) FillOutTransferEventInfo(ctx context.Context, outEvent *dbModel.Br
return
err
}
func
(
s
*
Dao
)
GetBridgeEventByOutId
(
ctx
context
.
Context
,
fromChainId
int64
,
outId
int64
)
(
event
*
dbModel
.
BridgeEvent
,
err
error
)
{
collection
:=
s
.
db
.
Collection
(
"bridge_events"
)
filter
:=
bson
.
M
{
"from_chain"
:
fromChainId
,
"out_id"
:
outId
}
err
=
collection
.
FindOne
(
ctx
,
filter
)
.
Decode
(
&
event
)
if
err
==
mongo
.
ErrNoDocuments
{
return
event
,
ErrRecordNotFound
}
return
event
,
err
}
func
(
s
*
Dao
)
GetBridgeEventByInId
(
ctx
context
.
Context
,
toChainId
int64
,
inId
int64
)
(
event
*
dbModel
.
BridgeEvent
,
err
error
)
{
collection
:=
s
.
db
.
Collection
(
"bridge_events"
)
filter
:=
bson
.
M
{
"to_chain"
:
toChainId
,
"in_id"
:
inId
}
err
=
collection
.
FindOne
(
ctx
,
filter
)
.
Decode
(
&
event
)
if
err
==
mongo
.
ErrNoDocuments
{
return
event
,
ErrRecordNotFound
}
return
event
,
err
}
func
(
s
*
Dao
)
UpdateBridgeEventWithId
(
ctx
context
.
Context
,
event
*
dbModel
.
BridgeEvent
)
error
{
collection
:=
s
.
db
.
Collection
(
"bridge_events"
)
filter
:=
bson
.
M
{
"_id"
:
event
.
ID
}
update
:=
bson
.
M
{
"$set"
:
event
,
}
opts
:=
options
.
Update
()
.
SetUpsert
(
true
)
_
,
err
:=
collection
.
UpdateOne
(
ctx
,
filter
,
update
,
opts
)
return
err
}
func
(
s
*
Dao
)
AddValidatorOp
(
ctx
context
.
Context
,
toChainId
int64
,
inId
int64
,
validator
string
,
isConfirmed
bool
)
error
{
collection
:=
s
.
db
.
Collection
(
"bridge_events"
)
...
...
dao/eth_test.go
View file @
e0bb6f74
...
...
@@ -11,6 +11,31 @@ import (
"testing"
)
func
TestParseEvent
(
t
*
testing
.
T
)
{
client
,
err
:=
ethclient
.
Dial
(
"https://rpc.hole.bitheart.org"
)
if
err
!=
nil
{
t
.
Fatal
(
err
)
}
receipt
,
err
:=
client
.
TransactionReceipt
(
context
.
Background
(),
common
.
HexToHash
(
"0xe697c2f7f8d2e6083c40730ded79a9a561aecb0d15f87781daa600c6ba4bb62a"
))
if
err
!=
nil
{
t
.
Fatal
(
err
)
}
ct
,
err
:=
bridge
.
NewBridgeContract
(
common
.
HexToAddress
(
"0xceEC8799139C698De532e363DA7395E25F409775"
),
client
)
if
err
!=
nil
{
t
.
Fatal
(
err
)
}
for
_
,
lg
:=
range
receipt
.
Logs
{
if
lg
.
Topics
[
0
]
.
Hex
()
==
"0xe420cc80a898ce7e97248ec8a1dc0a25bbcd41c4ba0c64ce325140a2d8915313"
{
event
,
err
:=
ct
.
ParseTransferInConfirmation
(
*
lg
)
if
err
!=
nil
{
t
.
Fatal
(
err
)
}
else
{
fmt
.
Println
(
event
)
}
}
}
}
func
TestGetBlockTime
(
t
*
testing
.
T
)
{
client
,
_
:=
ethclient
.
Dial
(
"https://bsctest.bitheart.org"
)
height
:=
big
.
NewInt
(
65784850
)
...
...
@@ -18,7 +43,7 @@ func TestGetBlockTime(t *testing.T) {
if
err
!=
nil
{
t
.
Fatal
(
err
)
}
fmt
.
Println
(
block
.
Time
()
)
fmt
.
Println
(
block
.
Time
)
}
func
TestGetReceiveToken
(
t
*
testing
.
T
)
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment