plugeth/plugins/ptp/shutdown.go
2023-07-12 18:17:18 -07:00

132 lines
2.9 KiB
Go

package main
import (
"bytes"
"context"
"encoding/json"
"net"
"net/http"
"time"
"sync/atomic"
"github.com/openrelayxyz/plugeth-utils/core"
)
var globalId int64
var client = &http.Client{Transport: &http.Transport{
Proxy: http.ProxyFromEnvironment,
DialContext: (&net.Dialer{
Timeout: 30 * time.Second,
KeepAlive: 30 * time.Second,
}).DialContext,
MaxIdleConnsPerHost: 16,
MaxIdleConns: 16,
IdleConnTimeout: 90 * time.Second,
TLSHandshakeTimeout: 10 * time.Second,
ExpectContinueTimeout: 1 * time.Second,
}}
type Call struct {
Version string `json:"jsonrpc"`
ID json.RawMessage `json:"id"`
Method string `json:"method"`
Params []json.RawMessage `json:"params"`
}
func toRawMessages(items ...interface{}) ([]json.RawMessage, error) {
result := make([]json.RawMessage, len(items))
for i, item := range items {
d, err := json.Marshal(item)
if err != nil { return nil, err }
result[i] = (json.RawMessage)(d)
}
return result, nil
}
func PreTrieCommit(node core.Hash) {
id, err := toRawMessages(atomic.AddInt64(&globalId, 1))
if err != nil {
log.Error("json marshalling error, id", "err", err)
}
call := &Call{
Version: "2.0",
ID : id[0],
Method: "plugeth_capturePreTrieCommit",
Params: []json.RawMessage{},
}
backendURL := "http://127.0.0.1:9546"
callBytes, _ := json.Marshal(call)
request, _ := http.NewRequestWithContext(context.Background(), "POST", backendURL, bytes.NewReader(callBytes))
request.Header.Add("Content-Type", "application/json")
_, err = client.Do(request)
if err != nil {
log.Error("Error calling passive node from PreTrieCommit", "err", err)
}
}
func PostTrieCommit(node core.Hash) {
id, err := toRawMessages(atomic.AddInt64(&globalId, 1))
if err != nil {
log.Error("json marshalling error, id", "err", err)
}
call := &Call{
Version: "2.0",
ID : id[0],
Method: "plugeth_capturePostTrieCommit",
Params: []json.RawMessage{},
}
backendURL := "http://127.0.0.1:9546"
callBytes, _ := json.Marshal(call)
request, _ := http.NewRequestWithContext(context.Background(), "POST", backendURL, bytes.NewReader(callBytes))
request.Header.Add("Content-Type", "application/json")
_, err = client.Do(request)
if err != nil {
log.Error("Error calling passive node from PostTrieCommit", "err", err)
}
}
func OnShutdown() {
id, err := toRawMessages(atomic.AddInt64(&globalId, 1))
if err != nil {
log.Error("json marshalling error, id", "err", err)
}
call := &Call{
Version: "2.0",
ID : id[0],
Method: "plugeth_captureShutdown",
Params: []json.RawMessage{},
}
backendURL := "http://127.0.0.1:9546"
callBytes, _ := json.Marshal(call)
request, _ := http.NewRequestWithContext(context.Background(), "POST", backendURL, bytes.NewReader(callBytes))
request.Header.Add("Content-Type", "application/json")
_, err = client.Do(request)
if err != nil {
log.Error("Error calling passive node from OnShutdown", "err", err)
}
}