Support for test-amb bridge
This commit is contained in:
parent
cd6eb2f324
commit
470c781a62
41
config.yml
41
config.yml
|
@ -1,12 +1,20 @@
|
||||||
chains:
|
chains:
|
||||||
mainnet:
|
mainnet:
|
||||||
rpc:
|
rpc:
|
||||||
host: https://mainnet.blockscout.com
|
host: https://mainnet.infura.io/v3/5d7bd94c50ed43fab1cb8e74f58678b0
|
||||||
timeout: 30s
|
timeout: 30s
|
||||||
rps: 10
|
rps: 10
|
||||||
chain_id: 1
|
chain_id: 1
|
||||||
block_time: 15s
|
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:
|
xdai:
|
||||||
rpc:
|
rpc:
|
||||||
host: https://dai.poa.network
|
host: https://dai.poa.network
|
||||||
|
@ -14,7 +22,15 @@ chains:
|
||||||
rps: 10
|
rps: 10
|
||||||
chain_id: 100
|
chain_id: 100
|
||||||
block_time: 5s
|
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:
|
bridges:
|
||||||
xdai-amb:
|
xdai-amb:
|
||||||
home:
|
home:
|
||||||
|
@ -22,16 +38,29 @@ bridges:
|
||||||
address: 0x75Df5AF045d91108662D8080fD1FEFAd6aA0bb59
|
address: 0x75Df5AF045d91108662D8080fD1FEFAd6aA0bb59
|
||||||
start_block: 7408640
|
start_block: 7408640
|
||||||
required_block_confirmations: 12
|
required_block_confirmations: 12
|
||||||
max_block_range_size: 10000
|
max_block_range_size: 2000
|
||||||
foreign:
|
foreign:
|
||||||
chain: mainnet
|
chain: mainnet
|
||||||
address: 0x4C36d2919e407f0Cc2Ee3c993ccF8ac26d9CE64e
|
address: 0x4C36d2919e407f0Cc2Ee3c993ccF8ac26d9CE64e
|
||||||
start_block: 9130277
|
start_block: 9130277
|
||||||
required_block_confirmations: 12
|
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:
|
postgres:
|
||||||
user: postgres
|
user: postgres
|
||||||
password: pass
|
password: pass
|
||||||
host: postgres
|
host: localhost
|
||||||
port: 5432
|
port: 5432
|
||||||
database: db
|
database: db
|
||||||
|
|
|
@ -1112,5 +1112,32 @@
|
||||||
],
|
],
|
||||||
"name": "RelayedMessage",
|
"name": "RelayedMessage",
|
||||||
"type": "event"
|
"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"
|
||||||
}
|
}
|
||||||
]
|
]
|
|
@ -3,6 +3,7 @@ package contract
|
||||||
import (
|
import (
|
||||||
"amb-monitor/entity"
|
"amb-monitor/entity"
|
||||||
"amb-monitor/ethclient"
|
"amb-monitor/ethclient"
|
||||||
|
"bytes"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
"github.com/ethereum/go-ethereum/accounts/abi"
|
"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 {
|
if log.Topic0 == nil {
|
||||||
return "", nil, fmt.Errorf("cannot process event without topics")
|
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)
|
topics := make([]common.Hash, 0, 3)
|
||||||
if log.Topic1 != nil {
|
if log.Topic1 != nil {
|
||||||
topics = append(topics, *log.Topic1)
|
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 {
|
if err != nil {
|
||||||
return "", nil, err
|
return "", nil, err
|
||||||
}
|
}
|
||||||
|
|
|
@ -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) {
|
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 {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("failed to initialize home side monitor: %w", err)
|
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 {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("failed to initialize foreign side monitor: %w", err)
|
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["UserRequestForAffirmation"] = handlers.HandleUserRequestForAffirmation
|
||||||
foreignMonitor.eventHandlers["UserRequestForAffirmation0"] = handlers.HandleLegacyUserRequestForAffirmation
|
foreignMonitor.eventHandlers["UserRequestForAffirmation0"] = handlers.HandleLegacyUserRequestForAffirmation
|
||||||
foreignMonitor.eventHandlers["RelayedMessage"] = handlers.HandleRelayedMessage
|
foreignMonitor.eventHandlers["RelayedMessage"] = handlers.HandleRelayedMessage
|
||||||
|
foreignMonitor.eventHandlers["RelayedMessage0"] = handlers.HandleRelayedMessage
|
||||||
return &Monitor{
|
return &Monitor{
|
||||||
cfg: cfg,
|
cfg: cfg,
|
||||||
logger: logger,
|
logger: logger,
|
||||||
|
|
Loading…
Reference in New Issue