Remove townhall
This commit is contained in:
parent
5867e34ec9
commit
389f71251c
13
Makefile
13
Makefile
@ -163,19 +163,6 @@ lotus-pond-front:
|
|||||||
lotus-pond-app: lotus-pond-front lotus-pond
|
lotus-pond-app: lotus-pond-front lotus-pond
|
||||||
.PHONY: lotus-pond-app
|
.PHONY: lotus-pond-app
|
||||||
|
|
||||||
lotus-townhall:
|
|
||||||
rm -f lotus-townhall
|
|
||||||
$(GOCC) build -o lotus-townhall ./cmd/lotus-townhall
|
|
||||||
.PHONY: lotus-townhall
|
|
||||||
BINS+=lotus-townhall
|
|
||||||
|
|
||||||
lotus-townhall-front:
|
|
||||||
(cd ./cmd/lotus-townhall/townhall && npm i && npm run build)
|
|
||||||
.PHONY: lotus-townhall-front
|
|
||||||
|
|
||||||
lotus-townhall-app: lotus-touch lotus-townhall-front
|
|
||||||
.PHONY: lotus-townhall-app
|
|
||||||
|
|
||||||
lotus-fountain:
|
lotus-fountain:
|
||||||
rm -f lotus-fountain
|
rm -f lotus-fountain
|
||||||
$(GOCC) build -o lotus-fountain ./cmd/lotus-fountain
|
$(GOCC) build -o lotus-fountain ./cmd/lotus-fountain
|
||||||
|
@ -1,129 +0,0 @@
|
|||||||
package metrics
|
|
||||||
|
|
||||||
import (
|
|
||||||
"context"
|
|
||||||
"encoding/json"
|
|
||||||
|
|
||||||
"github.com/filecoin-project/go-state-types/abi"
|
|
||||||
"github.com/ipfs/go-cid"
|
|
||||||
logging "github.com/ipfs/go-log/v2"
|
|
||||||
pubsub "github.com/libp2p/go-libp2p-pubsub"
|
|
||||||
"go.uber.org/fx"
|
|
||||||
|
|
||||||
"github.com/filecoin-project/lotus/build"
|
|
||||||
"github.com/filecoin-project/lotus/chain/types"
|
|
||||||
"github.com/filecoin-project/lotus/node/impl/full"
|
|
||||||
"github.com/filecoin-project/lotus/node/modules/helpers"
|
|
||||||
)
|
|
||||||
|
|
||||||
var log = logging.Logger("metrics")
|
|
||||||
|
|
||||||
const baseTopic = "/fil/headnotifs/"
|
|
||||||
|
|
||||||
type Update struct {
|
|
||||||
Type string
|
|
||||||
}
|
|
||||||
|
|
||||||
func SendHeadNotifs(nickname string) func(mctx helpers.MetricsCtx, lc fx.Lifecycle, ps *pubsub.PubSub, chain full.ChainAPI) error {
|
|
||||||
return func(mctx helpers.MetricsCtx, lc fx.Lifecycle, ps *pubsub.PubSub, chain full.ChainAPI) error {
|
|
||||||
ctx := helpers.LifecycleCtx(mctx, lc)
|
|
||||||
|
|
||||||
lc.Append(fx.Hook{
|
|
||||||
OnStart: func(_ context.Context) error {
|
|
||||||
gen, err := chain.Chain.GetGenesis()
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
topic := baseTopic + gen.Cid().String()
|
|
||||||
|
|
||||||
go func() {
|
|
||||||
if err := sendHeadNotifs(ctx, ps, topic, chain, nickname); err != nil {
|
|
||||||
log.Error("consensus metrics error", err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
go func() {
|
|
||||||
sub, err := ps.Subscribe(topic) //nolint
|
|
||||||
if err != nil {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
defer sub.Cancel()
|
|
||||||
|
|
||||||
for {
|
|
||||||
if _, err := sub.Next(ctx); err != nil {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}()
|
|
||||||
return nil
|
|
||||||
},
|
|
||||||
})
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
type message struct {
|
|
||||||
// TipSet
|
|
||||||
Cids []cid.Cid
|
|
||||||
Blocks []*types.BlockHeader
|
|
||||||
Height abi.ChainEpoch
|
|
||||||
Weight types.BigInt
|
|
||||||
Time uint64
|
|
||||||
Nonce uint64
|
|
||||||
|
|
||||||
// Meta
|
|
||||||
|
|
||||||
NodeName string
|
|
||||||
}
|
|
||||||
|
|
||||||
func sendHeadNotifs(ctx context.Context, ps *pubsub.PubSub, topic string, chain full.ChainAPI, nickname string) error {
|
|
||||||
ctx, cancel := context.WithCancel(ctx)
|
|
||||||
defer cancel()
|
|
||||||
|
|
||||||
notifs, err := chain.ChainNotify(ctx)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
// using unix nano time makes very sure we pick a nonce higher than previous restart
|
|
||||||
nonce := uint64(build.Clock.Now().UnixNano())
|
|
||||||
|
|
||||||
for {
|
|
||||||
select {
|
|
||||||
case notif := <-notifs:
|
|
||||||
n := notif[len(notif)-1]
|
|
||||||
|
|
||||||
w, err := chain.ChainTipSetWeight(ctx, n.Val.Key())
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
m := message{
|
|
||||||
Cids: n.Val.Cids(),
|
|
||||||
Blocks: n.Val.Blocks(),
|
|
||||||
Height: n.Val.Height(),
|
|
||||||
Weight: w,
|
|
||||||
NodeName: nickname,
|
|
||||||
Time: uint64(build.Clock.Now().UnixNano() / 1000_000),
|
|
||||||
Nonce: nonce,
|
|
||||||
}
|
|
||||||
|
|
||||||
b, err := json.Marshal(m)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
//nolint
|
|
||||||
if err := ps.Publish(topic, b); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
case <-ctx.Done():
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
nonce++
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,134 +0,0 @@
|
|||||||
package main
|
|
||||||
|
|
||||||
import (
|
|
||||||
"bytes"
|
|
||||||
"context"
|
|
||||||
"encoding/json"
|
|
||||||
"fmt"
|
|
||||||
"net/http"
|
|
||||||
"time"
|
|
||||||
|
|
||||||
rice "github.com/GeertJohan/go.rice"
|
|
||||||
"github.com/gorilla/websocket"
|
|
||||||
"github.com/ipld/go-car"
|
|
||||||
"github.com/libp2p/go-libp2p"
|
|
||||||
"github.com/libp2p/go-libp2p-core/peer"
|
|
||||||
pubsub "github.com/libp2p/go-libp2p-pubsub"
|
|
||||||
|
|
||||||
"github.com/filecoin-project/lotus/blockstore"
|
|
||||||
"github.com/filecoin-project/lotus/build"
|
|
||||||
)
|
|
||||||
|
|
||||||
var topic = "/fil/headnotifs/"
|
|
||||||
|
|
||||||
func init() {
|
|
||||||
genBytes := build.MaybeGenesis()
|
|
||||||
if len(genBytes) == 0 {
|
|
||||||
topic = ""
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
bs := blockstore.NewMemory()
|
|
||||||
|
|
||||||
c, err := car.LoadCar(bs, bytes.NewReader(genBytes))
|
|
||||||
if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
if len(c.Roots) != 1 {
|
|
||||||
panic("expected genesis file to have one root")
|
|
||||||
}
|
|
||||||
|
|
||||||
fmt.Printf("Genesis CID: %s\n", c.Roots[0])
|
|
||||||
topic = topic + c.Roots[0].String()
|
|
||||||
}
|
|
||||||
|
|
||||||
var upgrader = websocket.Upgrader{
|
|
||||||
WriteBufferSize: 1024,
|
|
||||||
CheckOrigin: func(r *http.Request) bool {
|
|
||||||
return true
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
func main() {
|
|
||||||
if topic == "" {
|
|
||||||
fmt.Println("FATAL: No genesis found")
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
ctx := context.Background()
|
|
||||||
|
|
||||||
host, err := libp2p.New(
|
|
||||||
ctx,
|
|
||||||
libp2p.Defaults,
|
|
||||||
)
|
|
||||||
if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
ps, err := pubsub.NewGossipSub(ctx, host)
|
|
||||||
if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
pi, err := build.BuiltinBootstrap()
|
|
||||||
if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
if err := host.Connect(ctx, pi[0]); err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
http.HandleFunc("/sub", handler(ps))
|
|
||||||
http.Handle("/", http.FileServer(rice.MustFindBox("townhall/build").HTTPBox()))
|
|
||||||
|
|
||||||
fmt.Println("listening on http://localhost:2975")
|
|
||||||
|
|
||||||
if err := http.ListenAndServe("0.0.0.0:2975", nil); err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
type update struct {
|
|
||||||
From peer.ID
|
|
||||||
Update json.RawMessage
|
|
||||||
Time uint64
|
|
||||||
}
|
|
||||||
|
|
||||||
func handler(ps *pubsub.PubSub) func(w http.ResponseWriter, r *http.Request) {
|
|
||||||
return func(w http.ResponseWriter, r *http.Request) {
|
|
||||||
w.Header().Set("Access-Control-Allow-Origin", "*")
|
|
||||||
if r.Header.Get("Sec-WebSocket-Protocol") != "" {
|
|
||||||
w.Header().Set("Sec-WebSocket-Protocol", r.Header.Get("Sec-WebSocket-Protocol"))
|
|
||||||
}
|
|
||||||
|
|
||||||
conn, err := upgrader.Upgrade(w, r, nil)
|
|
||||||
if err != nil {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
sub, err := ps.Subscribe(topic) //nolint
|
|
||||||
if err != nil {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
defer sub.Cancel() //nolint:errcheck
|
|
||||||
|
|
||||||
fmt.Println("new conn")
|
|
||||||
|
|
||||||
for {
|
|
||||||
msg, err := sub.Next(r.Context())
|
|
||||||
if err != nil {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
//fmt.Println(msg)
|
|
||||||
|
|
||||||
if err := conn.WriteJSON(update{
|
|
||||||
From: peer.ID(msg.From),
|
|
||||||
Update: msg.Data,
|
|
||||||
Time: uint64(time.Now().UnixNano() / 1000_000),
|
|
||||||
}); err != nil {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
23
cmd/lotus-townhall/townhall/.gitignore
vendored
23
cmd/lotus-townhall/townhall/.gitignore
vendored
@ -1,23 +0,0 @@
|
|||||||
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
|
|
||||||
|
|
||||||
# dependencies
|
|
||||||
/node_modules
|
|
||||||
/.pnp
|
|
||||||
.pnp.js
|
|
||||||
|
|
||||||
# testing
|
|
||||||
/coverage
|
|
||||||
|
|
||||||
# production
|
|
||||||
/build
|
|
||||||
|
|
||||||
# misc
|
|
||||||
.DS_Store
|
|
||||||
.env.local
|
|
||||||
.env.development.local
|
|
||||||
.env.test.local
|
|
||||||
.env.production.local
|
|
||||||
|
|
||||||
npm-debug.log*
|
|
||||||
yarn-debug.log*
|
|
||||||
yarn-error.log*
|
|
@ -1,31 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "townhall",
|
|
||||||
"version": "0.1.0",
|
|
||||||
"private": true,
|
|
||||||
"dependencies": {
|
|
||||||
"react": "^16.10.2",
|
|
||||||
"react-dom": "^16.10.2",
|
|
||||||
"react-scripts": "3.2.0"
|
|
||||||
},
|
|
||||||
"scripts": {
|
|
||||||
"start": "react-scripts start",
|
|
||||||
"build": "react-scripts build",
|
|
||||||
"test": "react-scripts test",
|
|
||||||
"eject": "react-scripts eject"
|
|
||||||
},
|
|
||||||
"eslintConfig": {
|
|
||||||
"extends": "react-app"
|
|
||||||
},
|
|
||||||
"browserslist": {
|
|
||||||
"production": [
|
|
||||||
">0.2%",
|
|
||||||
"not dead",
|
|
||||||
"not op_mini all"
|
|
||||||
],
|
|
||||||
"development": [
|
|
||||||
"last 1 chrome version",
|
|
||||||
"last 1 firefox version",
|
|
||||||
"last 1 safari version"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,13 +0,0 @@
|
|||||||
<!DOCTYPE html>
|
|
||||||
<html lang="en">
|
|
||||||
<head>
|
|
||||||
<meta charset="utf-8" />
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
||||||
<meta name="theme-color" content="#1a1a1a" />
|
|
||||||
<title>Lotus TownHall</title>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<noscript>You need to enable JavaScript to run this app.</noscript>
|
|
||||||
<div id="root"></div>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
@ -1,2 +0,0 @@
|
|||||||
# https://www.robotstxt.org/robotstxt.html
|
|
||||||
User-agent: *
|
|
@ -1 +0,0 @@
|
|||||||
|
|
@ -1,87 +0,0 @@
|
|||||||
import React from 'react';
|
|
||||||
import './App.css';
|
|
||||||
|
|
||||||
function colForH(besth, height) {
|
|
||||||
const diff = besth - height
|
|
||||||
if(diff === 0) return '#6f6'
|
|
||||||
if(diff === 1) return '#df4'
|
|
||||||
if(diff < 4) return '#ff0'
|
|
||||||
if(diff < 10) return '#f60'
|
|
||||||
return '#f00'
|
|
||||||
}
|
|
||||||
|
|
||||||
function colLag(lag) {
|
|
||||||
if(lag < 100) return '#6f6'
|
|
||||||
if(lag < 400) return '#df4'
|
|
||||||
if(lag < 1000) return '#ff0'
|
|
||||||
if(lag < 4000) return '#f60'
|
|
||||||
return '#f00'
|
|
||||||
}
|
|
||||||
|
|
||||||
function lagCol(lag, good) {
|
|
||||||
return <span>
|
|
||||||
<span style={{color: colLag(lag)}}>{lag}</span>
|
|
||||||
<span style={{color: good ? '#f0f0f0' : '#f60'}}>ms</span>
|
|
||||||
</span>
|
|
||||||
}
|
|
||||||
|
|
||||||
class App extends React.Component {
|
|
||||||
constructor(props) {
|
|
||||||
super(props);
|
|
||||||
|
|
||||||
let ws = new WebSocket("ws://" + window.location.host + "/sub")
|
|
||||||
//let ws = new WebSocket("ws://127.0.0.1:2975/sub")
|
|
||||||
|
|
||||||
ws.onmessage = (ev) => {
|
|
||||||
console.log(ev)
|
|
||||||
let update = JSON.parse(ev.data)
|
|
||||||
|
|
||||||
update.Update.Weight = Number(update.Update.Weight)
|
|
||||||
|
|
||||||
let wdiff = update.Update.Weight - (this.state[update.From] || {Weight: update.Update.Weight}).Weight
|
|
||||||
wdiff = <span style={{color: wdiff < 0 ? '#f00' : '#f0f0f0'}}>{wdiff}</span>
|
|
||||||
|
|
||||||
let utDiff = update.Time - (this.state[update.From] || {utime: update.Time}).utime
|
|
||||||
utDiff = <span style={{color: utDiff < 0 ? '#f00' : '#f0f0f0'}}>{utDiff}ms</span>
|
|
||||||
|
|
||||||
this.setState( prev => ({
|
|
||||||
...prev, [update.From]: {...update.Update, utime: update.Time, wdiff: wdiff, utDiff: utDiff},
|
|
||||||
}))
|
|
||||||
}
|
|
||||||
|
|
||||||
ws.onclose = () => {
|
|
||||||
this.setState({disconnected: true})
|
|
||||||
}
|
|
||||||
|
|
||||||
this.state = {}
|
|
||||||
}
|
|
||||||
|
|
||||||
render() {
|
|
||||||
if(this.state.disconnected) {
|
|
||||||
return <span>Error: disconnected</span>
|
|
||||||
}
|
|
||||||
|
|
||||||
let besth = Object.keys(this.state).map(k => this.state[k]).reduce((p, n) => p > n.Height ? p : n.Height, -1)
|
|
||||||
let bestw = Object.keys(this.state).map(k => this.state[k]).reduce((p, n) => p > n.Weight ? p : n.Weight, -1)
|
|
||||||
|
|
||||||
return <table>
|
|
||||||
<tr><td>PeerID</td><td>Nickname</td><td>Lag</td><td>Weight(best, prev)</td><td>Height</td><td>Blocks</td></tr>
|
|
||||||
{Object.keys(this.state).map(k => [k, this.state[k]]).map(([k, v]) => {
|
|
||||||
let mnrs = v.Blocks.map(b => <td> m:{b.Miner}({lagCol(v.Time ? v.Time - (b.Timestamp*1000) : v.utime - (b.Timestamp*1000), v.Time)})</td>)
|
|
||||||
let l = [
|
|
||||||
<td>{k}</td>,
|
|
||||||
<td>{v.NodeName}</td>,
|
|
||||||
<td>{v.Time ? lagCol(v.utime - v.Time, true) : ""}(Δ{v.utDiff})</td>,
|
|
||||||
<td style={{color: bestw !== v.Weight ? '#f00' : '#afa'}}>{v.Weight}({bestw - v.Weight}, {v.wdiff})</td>,
|
|
||||||
<td style={{color: colForH(besth, v.Height)}}>{v.Height}({besth - v.Height})</td>,
|
|
||||||
...mnrs,
|
|
||||||
]
|
|
||||||
|
|
||||||
l = <tr>{l}</tr>
|
|
||||||
return l
|
|
||||||
})
|
|
||||||
}
|
|
||||||
</table>
|
|
||||||
}
|
|
||||||
}
|
|
||||||
export default App;
|
|
@ -1,9 +0,0 @@
|
|||||||
import React from 'react';
|
|
||||||
import ReactDOM from 'react-dom';
|
|
||||||
import App from './App';
|
|
||||||
|
|
||||||
it('renders without crashing', () => {
|
|
||||||
const div = document.createElement('div');
|
|
||||||
ReactDOM.render(<App />, div);
|
|
||||||
ReactDOM.unmountComponentAtNode(div);
|
|
||||||
});
|
|
@ -1,6 +0,0 @@
|
|||||||
body {
|
|
||||||
margin: 0;
|
|
||||||
font-family: monospace;
|
|
||||||
background: #1f1f1f;
|
|
||||||
color: #f0f0f0;
|
|
||||||
}
|
|
@ -1,6 +0,0 @@
|
|||||||
import React from 'react';
|
|
||||||
import ReactDOM from 'react-dom';
|
|
||||||
import './index.css';
|
|
||||||
import App from './App';
|
|
||||||
|
|
||||||
ReactDOM.render(<App />, document.getElementById('root'));
|
|
@ -17,7 +17,6 @@ import (
|
|||||||
"github.com/filecoin-project/lotus/chain/market"
|
"github.com/filecoin-project/lotus/chain/market"
|
||||||
"github.com/filecoin-project/lotus/chain/messagepool"
|
"github.com/filecoin-project/lotus/chain/messagepool"
|
||||||
"github.com/filecoin-project/lotus/chain/messagesigner"
|
"github.com/filecoin-project/lotus/chain/messagesigner"
|
||||||
"github.com/filecoin-project/lotus/chain/metrics"
|
|
||||||
"github.com/filecoin-project/lotus/chain/stmgr"
|
"github.com/filecoin-project/lotus/chain/stmgr"
|
||||||
rpcstmgr "github.com/filecoin-project/lotus/chain/stmgr/rpc"
|
rpcstmgr "github.com/filecoin-project/lotus/chain/stmgr/rpc"
|
||||||
"github.com/filecoin-project/lotus/chain/store"
|
"github.com/filecoin-project/lotus/chain/store"
|
||||||
@ -174,10 +173,6 @@ func ConfigFullNode(c interface{}) Option {
|
|||||||
),
|
),
|
||||||
Override(new(dtypes.Graphsync), modules.Graphsync(cfg.Client.SimultaneousTransfers)),
|
Override(new(dtypes.Graphsync), modules.Graphsync(cfg.Client.SimultaneousTransfers)),
|
||||||
|
|
||||||
If(cfg.Metrics.HeadNotifs,
|
|
||||||
Override(HeadMetricsKey, metrics.SendHeadNotifs(cfg.Metrics.Nickname)),
|
|
||||||
),
|
|
||||||
|
|
||||||
If(cfg.Wallet.RemoteBackend != "",
|
If(cfg.Wallet.RemoteBackend != "",
|
||||||
Override(new(*remotewallet.RemoteWallet), remotewallet.SetupRemoteWallet(cfg.Wallet.RemoteBackend)),
|
Override(new(*remotewallet.RemoteWallet), remotewallet.SetupRemoteWallet(cfg.Wallet.RemoteBackend)),
|
||||||
),
|
),
|
||||||
|
@ -245,12 +245,6 @@ see https://docs.filecoin.io/mine/lotus/miner-configuration/#using-filters-for-f
|
|||||||
|
|
||||||
Comment: ``,
|
Comment: ``,
|
||||||
},
|
},
|
||||||
{
|
|
||||||
Name: "Metrics",
|
|
||||||
Type: "Metrics",
|
|
||||||
|
|
||||||
Comment: ``,
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
Name: "Wallet",
|
Name: "Wallet",
|
||||||
Type: "Wallet",
|
Type: "Wallet",
|
||||||
@ -324,20 +318,6 @@ Format: multiaddress`,
|
|||||||
Comment: ``,
|
Comment: ``,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
"Metrics": []DocField{
|
|
||||||
{
|
|
||||||
Name: "Nickname",
|
|
||||||
Type: "string",
|
|
||||||
|
|
||||||
Comment: ``,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
Name: "HeadNotifs",
|
|
||||||
Type: "bool",
|
|
||||||
|
|
||||||
Comment: ``,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
"MinerAddressConfig": []DocField{
|
"MinerAddressConfig": []DocField{
|
||||||
{
|
{
|
||||||
Name: "PreCommitControl",
|
Name: "PreCommitControl",
|
||||||
|
@ -23,7 +23,6 @@ type Common struct {
|
|||||||
type FullNode struct {
|
type FullNode struct {
|
||||||
Common
|
Common
|
||||||
Client Client
|
Client Client
|
||||||
Metrics Metrics
|
|
||||||
Wallet Wallet
|
Wallet Wallet
|
||||||
Fees FeeConfig
|
Fees FeeConfig
|
||||||
Chainstore Chainstore
|
Chainstore Chainstore
|
||||||
@ -298,12 +297,6 @@ type Splitstore struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// // Full Node
|
// // Full Node
|
||||||
|
|
||||||
type Metrics struct {
|
|
||||||
Nickname string
|
|
||||||
HeadNotifs bool
|
|
||||||
}
|
|
||||||
|
|
||||||
type Client struct {
|
type Client struct {
|
||||||
UseIpfs bool
|
UseIpfs bool
|
||||||
IpfsOnlineMode bool
|
IpfsOnlineMode bool
|
||||||
|
Loading…
Reference in New Issue
Block a user