Support for test-amb bridge

This commit is contained in:
Kirill Fedoseev 2021-09-21 15:57:07 +03:00
parent cd6eb2f324
commit 470c781a62
4 changed files with 86 additions and 18 deletions

View File

@ -1,12 +1,20 @@
chains:
mainnet:
rpc:
host: https://mainnet.blockscout.com
host: https://mainnet.infura.io/v3/5d7bd94c50ed43fab1cb8e74f58678b0
timeout: 30s
rps: 10
chain_id: 1
block_time: 15s
block_index_interval: 10s
block_index_interval: 60s
kovan:
rpc:
host: https://kovan.poa.network
timeout: 30s
rps: 10
chain_id: 42
block_time: 5s
block_index_interval: 60s
xdai:
rpc:
host: https://dai.poa.network
@ -14,7 +22,15 @@ chains:
rps: 10
chain_id: 100
block_time: 5s
block_index_interval: 5s
block_index_interval: 30s
sokol:
rpc:
host: https://sokol.poa.network
timeout: 20s
rps: 10
chain_id: 77
block_time: 5s
block_index_interval: 30s
bridges:
xdai-amb:
home:
@ -22,16 +38,29 @@ bridges:
address: 0x75Df5AF045d91108662D8080fD1FEFAd6aA0bb59
start_block: 7408640
required_block_confirmations: 12
max_block_range_size: 10000
max_block_range_size: 2000
foreign:
chain: mainnet
address: 0x4C36d2919e407f0Cc2Ee3c993ccF8ac26d9CE64e
start_block: 9130277
required_block_confirmations: 12
max_block_range_size: 5000
max_block_range_size: 1000
test-amb:
home:
chain: sokol
address: 0xFe446bEF1DbF7AFE24E81e05BC8B271C1BA9a560
start_block: 9849619
required_block_confirmations: 12
max_block_range_size: 10000
foreign:
chain: kovan
address: 0xFe446bEF1DbF7AFE24E81e05BC8B271C1BA9a560
start_block: 12372929
required_block_confirmations: 12
max_block_range_size: 10000
postgres:
user: postgres
password: pass
host: postgres
host: localhost
port: 5432
database: db

View File

@ -1112,5 +1112,32 @@
],
"name": "RelayedMessage",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"name": "sender",
"type": "address"
},
{
"indexed": false,
"name": "executor",
"type": "address"
},
{
"indexed": false,
"name": "messageId",
"type": "bytes32"
},
{
"indexed": false,
"name": "status",
"type": "bool"
}
],
"name": "RelayedMessage",
"type": "event"
}
]

View File

@ -3,6 +3,7 @@ package contract
import (
"amb-monitor/entity"
"amb-monitor/ethclient"
"bytes"
"fmt"
"github.com/ethereum/go-ethereum/accounts/abi"
@ -28,15 +29,6 @@ func (c *Contract) ParseLog(log *entity.Log) (string, map[string]interface{}, er
if log.Topic0 == nil {
return "", nil, fmt.Errorf("cannot process event without topics")
}
event, err := c.abi.EventByID(*log.Topic0)
if err != nil {
return "", nil, nil
}
m := make(map[string]interface{})
err = event.Inputs.UnpackIntoMap(m, log.Data)
if err != nil {
return "", nil, err
}
topics := make([]common.Hash, 0, 3)
if log.Topic1 != nil {
topics = append(topics, *log.Topic1)
@ -47,7 +39,26 @@ func (c *Contract) ParseLog(log *entity.Log) (string, map[string]interface{}, er
}
}
}
err = abi.ParseTopicsIntoMap(m, Indexed(event.Inputs), topics)
var event *abi.Event
var indexed abi.Arguments
for _, e := range c.abi.Events {
if bytes.Equal(e.ID.Bytes(), log.Topic0.Bytes()) {
indexed = Indexed(e.Inputs)
if len(indexed) == len(topics) {
event = &e
break
}
}
}
if event == nil {
return "", nil, nil
}
m := make(map[string]interface{})
err := event.Inputs.UnpackIntoMap(m, log.Data)
if err != nil {
return "", nil, err
}
err = abi.ParseTopicsIntoMap(m, indexed, topics)
if err != nil {
return "", nil, err
}

View File

@ -81,11 +81,11 @@ func newContractMonitor(ctx context.Context, logger logging.Logger, repo *reposi
}
func NewMonitor(ctx context.Context, logger logging.Logger, repo *repository.Repo, cfg *config.BridgeConfig) (*Monitor, error) {
homeMonitor, err := newContractMonitor(ctx, logger.WithField("side", "home"), repo, cfg.Home)
homeMonitor, err := newContractMonitor(ctx, logger.WithField("contract", "home"), repo, cfg.Home)
if err != nil {
return nil, fmt.Errorf("failed to initialize home side monitor: %w", err)
}
foreignMonitor, err := newContractMonitor(ctx, logger.WithField("side", "foreign"), repo, cfg.Foreign)
foreignMonitor, err := newContractMonitor(ctx, logger.WithField("contract", "foreign"), repo, cfg.Foreign)
if err != nil {
return nil, fmt.Errorf("failed to initialize foreign side monitor: %w", err)
}
@ -99,6 +99,7 @@ func NewMonitor(ctx context.Context, logger logging.Logger, repo *repository.Rep
foreignMonitor.eventHandlers["UserRequestForAffirmation"] = handlers.HandleUserRequestForAffirmation
foreignMonitor.eventHandlers["UserRequestForAffirmation0"] = handlers.HandleLegacyUserRequestForAffirmation
foreignMonitor.eventHandlers["RelayedMessage"] = handlers.HandleRelayedMessage
foreignMonitor.eventHandlers["RelayedMessage0"] = handlers.HandleRelayedMessage
return &Monitor{
cfg: cfg,
logger: logger,