Commit 6ed000d0 authored by 贾浩@五瓣科技's avatar 贾浩@五瓣科技

rename: witness -> validator

parent 82884287
...@@ -9,21 +9,21 @@ BUILDTIME=$(shell git show -s --format=%cd) ...@@ -9,21 +9,21 @@ BUILDTIME=$(shell git show -s --format=%cd)
default: all default: all
all: clean witness all: clean validator
BUILD_FLAGS=-ldflags "\ BUILD_FLAGS=-ldflags "\
-X 'witness/version.GOVersion=$(GOVERSION)' \ -X 'validator/version.GOVersion=$(GOVERSION)' \
-X 'witness/version.GitHash=$(GITHASH)' \ -X 'validator/version.GitHash=$(GITHASH)' \
-X 'witness/version.BuildTime=$(BUILDTIME)' \ -X 'validator/version.BuildTime=$(BUILDTIME)' \
-X 'witness/version.GitBranch=$(GITBRANCH)'" -X 'validator/version.GitBranch=$(GITBRANCH)'"
witness: validator:
go build $(BUILD_FLAGS) -v -o=${GOBIN}/$@ ./cmd/witness go build $(BUILD_FLAGS) -v -o=${GOBIN}/$@ ./cmd/validator
dev: dev:
go build $(BUILD_FLAGS) -v -o=${GOBIN}/$@ -gcflags "all=-N -l" ./cmd/witness go build $(BUILD_FLAGS) -v -o=${GOBIN}/$@ -gcflags "all=-N -l" ./cmd/validator
clean: clean:
......
...@@ -4,13 +4,13 @@ import ( ...@@ -4,13 +4,13 @@ import (
"encoding/json" "encoding/json"
"net/http" "net/http"
"time" "time"
"witness/core" "validator/core"
"github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common"
log "github.com/sirupsen/logrus" log "github.com/sirupsen/logrus"
) )
var witness *core.Witness var validator *core.Validator
func rpcHandle(w http.ResponseWriter, r *http.Request) { func rpcHandle(w http.ResponseWriter, r *http.Request) {
req := &jsonrpcMessage{} req := &jsonrpcMessage{}
...@@ -115,7 +115,7 @@ func getWithdrawProofs(params []byte, resp *jsonrpcMessage) { ...@@ -115,7 +115,7 @@ func getWithdrawProofs(params []byte, resp *jsonrpcMessage) {
date = paramList[1] date = paramList[1]
} }
workload, proofs := witness.GetMerkleProof(common.HexToAddress(paramList[0]), date) workload, proofs := validator.GetMerkleProof(common.HexToAddress(paramList[0]), date)
temp := map[string]interface{}{ temp := map[string]interface{}{
"workload": workload, "workload": workload,
...@@ -145,7 +145,7 @@ func getPendingWorkload(params []byte, resp *jsonrpcMessage) { ...@@ -145,7 +145,7 @@ func getPendingWorkload(params []byte, resp *jsonrpcMessage) {
return return
} }
workload, globalWorkload := witness.GetPendingWorkload(common.HexToAddress(addressList[0])) workload, globalWorkload := validator.GetPendingWorkload(common.HexToAddress(addressList[0]))
temp := map[string]interface{}{ temp := map[string]interface{}{
"workload": workload, "workload": workload,
"global_workload": globalWorkload, "global_workload": globalWorkload,
...@@ -197,7 +197,7 @@ func getDailyMerkleNodes(params []byte, resp *jsonrpcMessage) { ...@@ -197,7 +197,7 @@ func getDailyMerkleNodes(params []byte, resp *jsonrpcMessage) {
rootHash = common.HexToHash(paramList[3].(string)) rootHash = common.HexToHash(paramList[3].(string))
} }
nodes := witness.GetDailyMerkleNodes(date, depth, rootHash) nodes := validator.GetDailyMerkleNodes(date, depth, rootHash)
resp.Result, _ = json.Marshal(nodes) resp.Result, _ = json.Marshal(nodes)
} }
...@@ -243,15 +243,15 @@ func getDailyMerkleSumNodes(params []byte, resp *jsonrpcMessage) { ...@@ -243,15 +243,15 @@ func getDailyMerkleSumNodes(params []byte, resp *jsonrpcMessage) {
rootHash = common.HexToHash(paramList[3].(string)) rootHash = common.HexToHash(paramList[3].(string))
} }
nodes, vals := witness.GetDailyMerkleSumNodes(date, depth, rootHash) nodes, vals := validator.GetDailyMerkleSumNodes(date, depth, rootHash)
resp.Result, _ = json.Marshal(map[string]interface{}{ resp.Result, _ = json.Marshal(map[string]interface{}{
"nodes": nodes, "nodes": nodes,
"values": vals, "values": vals,
}) })
} }
func StartJSONRPC(listenAddress string, w *core.Witness) { func StartJSONRPC(listenAddress string, w *core.Validator) {
witness = w validator = w
http.HandleFunc("/", rpcHandle) http.HandleFunc("/", rpcHandle)
log.WithField("listen", listenAddress).Info("start JSON-RPC server") log.WithField("listen", listenAddress).Info("start JSON-RPC server")
err := http.ListenAndServe(listenAddress, nil) err := http.ListenAndServe(listenAddress, nil)
......
...@@ -62,8 +62,8 @@ var ( ...@@ -62,8 +62,8 @@ var (
Usage: "The address of the store contract", Usage: "The address of the store contract",
} }
witnessContractFlag = &cli.StringFlag{ validatorContractFlag = &cli.StringFlag{
Name: "witness-contract", Name: "validator-contract",
Usage: "The address of the reward contract", Usage: "The address of the reward contract",
} }
......
...@@ -3,11 +3,11 @@ package main ...@@ -3,11 +3,11 @@ package main
import ( import (
"net/http" "net/http"
"os" "os"
"witness/api" "validator/api"
"witness/conf" "validator/conf"
"witness/core" "validator/core"
"witness/quest" "validator/quest"
"witness/version" "validator/version"
"github.com/prometheus/client_golang/prometheus/promhttp" "github.com/prometheus/client_golang/prometheus/promhttp"
log "github.com/sirupsen/logrus" log "github.com/sirupsen/logrus"
...@@ -25,7 +25,7 @@ var ( ...@@ -25,7 +25,7 @@ var (
privateKeyFlag, privateKeyFlag,
chainRPCFlag, chainRPCFlag,
storeContractFlag, storeContractFlag,
witnessContractFlag, validatorContractFlag,
commitTimeFlag, commitTimeFlag,
questHostFlag, questHostFlag,
questPortFlag, questPortFlag,
...@@ -38,8 +38,8 @@ var ( ...@@ -38,8 +38,8 @@ var (
func main() { func main() {
app := cli.App{} app := cli.App{}
app.Flags = wrapFlags(append(appFlags, []cli.Flag{}...)) app.Flags = wrapFlags(append(appFlags, []cli.Flag{}...))
app.Name = "witness" app.Name = "validator"
app.Usage = "this is witness" app.Usage = "this is validator"
app.Version = version.Version app.Version = version.Version
app.Before = func(c *cli.Context) error { app.Before = func(c *cli.Context) error {
return loadFlagsFromConfig(c, app.Flags) return loadFlagsFromConfig(c, app.Flags)
...@@ -62,7 +62,7 @@ func run(ctx *cli.Context) { ...@@ -62,7 +62,7 @@ func run(ctx *cli.Context) {
PrivateKey: ctx.String(privateKeyFlag.Name), PrivateKey: ctx.String(privateKeyFlag.Name),
ChainRPC: ctx.String(chainRPCFlag.Name), ChainRPC: ctx.String(chainRPCFlag.Name),
StoreContract: ctx.String(storeContractFlag.Name), StoreContract: ctx.String(storeContractFlag.Name),
WitnessContract: ctx.String(witnessContractFlag.Name), ValidatorContract: ctx.String(validatorContractFlag.Name),
DataDir: ctx.String(dataDirFlag.Name), DataDir: ctx.String(dataDirFlag.Name),
CommitTime: ctx.Int(commitTimeFlag.Name), CommitTime: ctx.Int(commitTimeFlag.Name),
} }
...@@ -79,7 +79,7 @@ func run(ctx *cli.Context) { ...@@ -79,7 +79,7 @@ func run(ctx *cli.Context) {
} }
q := quest.NewQuest(qCfg) q := quest.NewQuest(qCfg)
w := core.RunWitness(q, cfg) w := core.RunValidator(q, cfg)
// runGrpcServer(cfg.GRPCListenAddr, w) // runGrpcServer(cfg.GRPCListenAddr, w)
runJSONRPCServer(cfg.RPCListenAddr, w) runJSONRPCServer(cfg.RPCListenAddr, w)
select {} select {}
...@@ -105,6 +105,6 @@ func runMetrics(listen string) { ...@@ -105,6 +105,6 @@ func runMetrics(listen string) {
}() }()
} }
func runJSONRPCServer(listen string, w *core.Witness) { func runJSONRPCServer(listen string, w *core.Validator) {
go api.StartJSONRPC(listen, w) go api.StartJSONRPC(listen, w)
} }
...@@ -8,7 +8,7 @@ type Config struct { ...@@ -8,7 +8,7 @@ type Config struct {
ChainRPC string ChainRPC string
PrivateKey string PrivateKey string
StoreContract string StoreContract string
WitnessContract string ValidatorContract string
RewardContract string RewardContract string
DataDir string DataDir string
CommitTime int CommitTime int
......
...@@ -12,7 +12,7 @@ private-key = "529f4efb80ac534f17d873104c71881c0970dbd5a886f183f63c5c6bb7a1fcd9" ...@@ -12,7 +12,7 @@ private-key = "529f4efb80ac534f17d873104c71881c0970dbd5a886f183f63c5c6bb7a1fcd9"
store-contract = "0x7Cd36Bc2a477f60A14f08442179B2f626bE026Ea" store-contract = "0x7Cd36Bc2a477f60A14f08442179B2f626bE026Ea"
witness-contract = "0xf49133dD7B7ed75fA0f877413D293c05Bff0D8F0" witness-contract = "0x60376A7A4F5013CCca347A9B320D0b8dD57D87F4"
commit-time = 3600 # utc + n seconds commit-time = 3600 # utc + n seconds
......
This source diff could not be displayed because it is too large. You can view the blob instead.
...@@ -7,7 +7,7 @@ import ( ...@@ -7,7 +7,7 @@ import (
"fmt" "fmt"
"math/big" "math/big"
"time" "time"
"witness/contract" "validator/contract"
"github.com/btcsuite/btcd/btcec/v2" "github.com/btcsuite/btcd/btcec/v2"
"github.com/ethereum/go-ethereum" "github.com/ethereum/go-ethereum"
...@@ -20,14 +20,14 @@ import ( ...@@ -20,14 +20,14 @@ import (
) )
type ChainRPC struct { type ChainRPC struct {
rpc *ethclient.Client rpc *ethclient.Client
chainID *big.Int chainID *big.Int
privateKey *ecdsa.PrivateKey privateKey *ecdsa.PrivateKey
storageContract *contract.AddressStorage storageContract *contract.AddressStorage
witnessContract *contract.Witness validatorContract *contract.Validator
} }
func newChain(rpc, privateKey, storageCa, witnessCa string) *ChainRPC { func newChain(rpc, privateKey, storageCa, validatorCa string) *ChainRPC {
ethRpc, err := ethclient.Dial(rpc) ethRpc, err := ethclient.Dial(rpc)
if err != nil { if err != nil {
panic(err) panic(err)
...@@ -48,7 +48,7 @@ func newChain(rpc, privateKey, storageCa, witnessCa string) *ChainRPC { ...@@ -48,7 +48,7 @@ func newChain(rpc, privateKey, storageCa, witnessCa string) *ChainRPC {
panic(err) panic(err)
} }
witness, err := contract.NewWitness(common.HexToAddress(witnessCa), ethRpc) validator, err := contract.NewValidator(common.HexToAddress(validatorCa), ethRpc)
if err != nil { if err != nil {
panic(err) panic(err)
} }
...@@ -65,7 +65,7 @@ func newChain(rpc, privateKey, storageCa, witnessCa string) *ChainRPC { ...@@ -65,7 +65,7 @@ func newChain(rpc, privateKey, storageCa, witnessCa string) *ChainRPC {
} }
k, _ := btcec.PrivKeyFromBytes(binPrivateKey) k, _ := btcec.PrivKeyFromBytes(binPrivateKey)
return &ChainRPC{rpc: ethRpc, storageContract: storage, witnessContract: witness, chainID: chainID, privateKey: k.ToECDSA()} return &ChainRPC{rpc: ethRpc, storageContract: storage, validatorContract: validator, chainID: chainID, privateKey: k.ToECDSA()}
} }
func (r *ChainRPC) GetContainerAddresses() (addrs []common.Address, err error) { func (r *ChainRPC) GetContainerAddresses() (addrs []common.Address, err error) {
...@@ -81,7 +81,7 @@ func (r *ChainRPC) GetWorkloadThreshold(totalWorkload uint64) (threshold *big.In ...@@ -81,7 +81,7 @@ func (r *ChainRPC) GetWorkloadThreshold(totalWorkload uint64) (threshold *big.In
return big.NewInt(1), nil return big.NewInt(1), nil
} }
func (r *ChainRPC) SubmitProofs(date string, merkleSumTreeRoot, merkleTreeRoot common.Hash) (txHash common.Hash, err error) { func (r *ChainRPC) SubmitProofs(dateTimestamp int64, merkleSumTreeRoot, merkleTreeRoot common.Hash) (txHash common.Hash, err error) {
ctx, cancel := context.WithTimeout(context.Background(), time.Minute) ctx, cancel := context.WithTimeout(context.Background(), time.Minute)
defer cancel() defer cancel()
opts, err := bind.NewKeyedTransactorWithChainID(r.privateKey, r.chainID) opts, err := bind.NewKeyedTransactorWithChainID(r.privateKey, r.chainID)
...@@ -90,7 +90,7 @@ func (r *ChainRPC) SubmitProofs(date string, merkleSumTreeRoot, merkleTreeRoot c ...@@ -90,7 +90,7 @@ func (r *ChainRPC) SubmitProofs(date string, merkleSumTreeRoot, merkleTreeRoot c
} }
opts.Context = ctx opts.Context = ctx
for i := 0; i < 3; i++ { for i := 0; i < 3; i++ {
signedTx, err := r.witnessContract.SubmitMerkleRoot(opts, date, merkleSumTreeRoot, merkleTreeRoot) signedTx, err := r.validatorContract.SubmitMerkleRoot(opts, big.NewInt(dateTimestamp), merkleSumTreeRoot, merkleTreeRoot)
if err != nil { if err != nil {
time.Sleep(time.Second * 3) time.Sleep(time.Second * 3)
continue continue
......
...@@ -3,43 +3,43 @@ package core ...@@ -3,43 +3,43 @@ package core
import ( import (
"fmt" "fmt"
"math/big" "math/big"
"witness/tree" "validator/tree"
"github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/crypto"
log "github.com/sirupsen/logrus" log "github.com/sirupsen/logrus"
) )
func (w *Witness) GetPendingWorkload(address common.Address) (workload, globalWorkload uint64) { func (v *Validator) GetPendingWorkload(address common.Address) (workload, globalWorkload uint64) {
wl, err := w.q.GetPendingWorkload(w.todayTimestamp(), address.Hex()) wl, err := v.q.GetPendingWorkload(v.todayTimestamp(), address.Hex())
if err != nil { if err != nil {
log.WithError(err).Error("failed to get pending workload") log.WithError(err).Error("failed to get pending workload")
return return
} }
log.WithField("workload", wl).Debug("quest get pending workload") log.WithField("workload", wl).Debug("quest get pending workload")
return wl, w.pendingWorkload return wl, v.pendingWorkload
} }
func (w *Witness) GetMerkleProof(address common.Address, date string) (balance string, proofs []common.Hash) { func (v *Validator) GetMerkleProof(address common.Address, date string) (balance string, proofs []common.Hash) {
if date == "" { if date == "" {
date = w.date date = v.date
} }
w.Lock() v.Lock()
cacheTree, ok := w.mtTreeCache[date] cacheTree, ok := v.mtTreeCache[date]
w.Unlock() v.Unlock()
if !ok { if !ok {
if ok = w.LoadMerkleTree(date); !ok { if ok = v.LoadMerkleTree(date); !ok {
log.WithFields(log.Fields{ log.WithFields(log.Fields{
"date": date, "date": date,
}).Error("load merkle proof empty") }).Error("load merkle proof empty")
return "0", nil return "0", nil
} }
} }
w.Lock() v.Lock()
cacheTree = w.mtTreeCache[date] cacheTree = v.mtTreeCache[date]
w.Unlock() v.Unlock()
dateStateRootKey := fmt.Sprintf("sroot:%s", date) dateStateRootKey := fmt.Sprintf("sroot:%s", date)
dateStateRoot, err := w.lvdb.Get([]byte(dateStateRootKey)) dateStateRoot, err := v.lvdb.Get([]byte(dateStateRootKey))
if err != nil { if err != nil {
log.WithFields(log.Fields{ log.WithFields(log.Fields{
"key": dateStateRootKey, "key": dateStateRootKey,
...@@ -48,10 +48,10 @@ func (w *Witness) GetMerkleProof(address common.Address, date string) (balance s ...@@ -48,10 +48,10 @@ func (w *Witness) GetMerkleProof(address common.Address, date string) (balance s
return "0", nil return "0", nil
} }
var sdb *StateDB var sdb *StateDB
if date == w.date { if date == v.date {
sdb = w.state sdb = v.state
} else { } else {
sdb, err = NewStateDB(w.lvdb, common.BytesToHash(dateStateRoot)) sdb, err = NewStateDB(v.lvdb, common.BytesToHash(dateStateRoot))
if err != nil { if err != nil {
log.WithError(err).Error("failed to create state db") log.WithError(err).Error("failed to create state db")
return "0", nil return "0", nil
...@@ -72,24 +72,24 @@ func (w *Witness) GetMerkleProof(address common.Address, date string) (balance s ...@@ -72,24 +72,24 @@ func (w *Witness) GetMerkleProof(address common.Address, date string) (balance s
return object.Balance, proofs return object.Balance, proofs
} }
func (w *Witness) GetDailyMerkleNodes(date string, depth int, rootHash common.Hash) (nodes [][]common.Hash) { func (v *Validator) GetDailyMerkleNodes(date string, depth int, rootHash common.Hash) (nodes [][]common.Hash) {
if date == "" { if date == "" {
date = w.date date = v.date
} }
w.Lock() v.Lock()
cacheTree, ok := w.mtTreeCache[date] cacheTree, ok := v.mtTreeCache[date]
w.Unlock() v.Unlock()
if !ok { if !ok {
if ok = w.LoadMerkleTree(date); !ok { if ok = v.LoadMerkleTree(date); !ok {
log.WithFields(log.Fields{ log.WithFields(log.Fields{
"date": date, "date": date,
}).Error("load merkle proof empty") }).Error("load merkle proof empty")
return nil return nil
} }
} }
w.Lock() v.Lock()
cacheTree = w.mtTreeCache[date] cacheTree = v.mtTreeCache[date]
w.Unlock() v.Unlock()
rootNode := cacheTree.GetRootNode() rootNode := cacheTree.GetRootNode()
if rootHash.Hex() == (common.Hash{}).Hex() { if rootHash.Hex() == (common.Hash{}).Hex() {
...@@ -100,24 +100,24 @@ func (w *Witness) GetDailyMerkleNodes(date string, depth int, rootHash common.Ha ...@@ -100,24 +100,24 @@ func (w *Witness) GetDailyMerkleNodes(date string, depth int, rootHash common.Ha
return tree.MerkleTreeTraversal(rootNode, depth) return tree.MerkleTreeTraversal(rootNode, depth)
} }
func (w *Witness) GetDailyMerkleSumNodes(date string, depth int, rootHash common.Hash) (nodesHash [][]common.Hash, nodesVal [][]string) { func (v *Validator) GetDailyMerkleSumNodes(date string, depth int, rootHash common.Hash) (nodesHash [][]common.Hash, nodesVal [][]string) {
if date == "" { if date == "" {
date = w.date date = v.date
} }
w.Lock() v.Lock()
cacheTree, ok := w.mstTreeCache[date] cacheTree, ok := v.mstTreeCache[date]
w.Unlock() v.Unlock()
if !ok { if !ok {
if ok = w.LoadMerkleSumTree(date); !ok { if ok = v.LoadMerkleSumTree(date); !ok {
log.WithFields(log.Fields{ log.WithFields(log.Fields{
"date": date, "date": date,
}).Error("load merkle sum proof empty") }).Error("load merkle sum proof empty")
return nil, nil return nil, nil
} }
} }
w.Lock() v.Lock()
cacheTree = w.mstTreeCache[date] cacheTree = v.mstTreeCache[date]
w.Unlock() v.Unlock()
rootNode := cacheTree.GetRoot() rootNode := cacheTree.GetRoot()
if rootHash.Hex() == (common.Hash{}).Hex() { if rootHash.Hex() == (common.Hash{}).Hex() {
......
...@@ -7,40 +7,40 @@ import ( ...@@ -7,40 +7,40 @@ import (
) )
// UpdateContractAddressJob 定时更新合约内的地址 // UpdateContractAddressJob 定时更新合约内的地址
func (w *Witness) UpdateContractAddressJob() { func (v *Validator) UpdateContractAddressJob() {
ticker := time.NewTicker(time.Minute * 10) ticker := time.NewTicker(time.Minute * 10)
defer ticker.Stop() defer ticker.Stop()
log.Info("start update address task") log.Info("start update address task")
for { for {
addrs, err := w.rpc.GetContainerAddresses() addrs, err := v.rpc.GetContainerAddresses()
if err != nil { if err != nil {
log.WithError(err).Error("failed to get container addresses") log.WithError(err).Error("failed to get container addresses")
} else { } else {
w.containerAddresses = addrs v.containerAddresses = addrs
} }
addrs, err = w.rpc.GetNMAddresses() addrs, err = v.rpc.GetNMAddresses()
if err != nil { if err != nil {
log.WithError(err).Error("failed to get NM addresses") log.WithError(err).Error("failed to get NM addresses")
} else { } else {
w.nmAddresses = addrs v.nmAddresses = addrs
} }
log.WithFields(log.Fields{ log.WithFields(log.Fields{
"container_count": len(w.containerAddresses), "container_count": len(v.containerAddresses),
"nm_count": len(w.nmAddresses), "nm_count": len(v.nmAddresses),
}).Info("store contract update address") }).Info("store contract update address")
<-ticker.C <-ticker.C
} }
} }
// UpdateGlobalWorkloadJob 定时从quest更新全局workload // UpdateGlobalWorkloadJob 定时从quest更新全局workload
func (w *Witness) UpdateGlobalWorkloadJob() { func (v *Validator) UpdateGlobalWorkloadJob() {
ticker := time.NewTicker(time.Second * 30) ticker := time.NewTicker(time.Second * 30)
defer ticker.Stop() defer ticker.Stop()
log.Info("start update global workload task") log.Info("start update global workload task")
for { for {
wl := w.GetGlobalWorkload() wl := v.GetGlobalWorkload()
if wl > 0 { if wl > 0 {
w.pendingWorkload = wl v.pendingWorkload = wl
} }
<-ticker.C <-ticker.C
} }
......
package core package core
import ( import (
"witness/quest" "validator/quest"
"github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/crypto"
witnessv1 "github.com/odysseus/odysseus-protocol/gen/proto/go/witness/v1" validatorv1 "github.com/odysseus/odysseus-protocol/gen/proto/go/validator/v1"
log "github.com/sirupsen/logrus" log "github.com/sirupsen/logrus"
) )
func (w *Witness) LoadPendingProofs(startTimestamp, endTimestamp int64) { func (v *Validator) LoadPendingProofs(startTimestamp, endTimestamp int64) {
defaultLimit := 100 defaultLimit := 100
lastTaskID := "" lastTaskID := ""
var dbProofs []*quest.ProofModel var dbProofs []*quest.ProofModel
var err error var err error
for { for {
dbProofs, err = w.q.GetProofs(startTimestamp, endTimestamp, lastTaskID, defaultLimit) dbProofs, err = v.q.GetProofs(startTimestamp, endTimestamp, lastTaskID, defaultLimit)
if err != nil { if err != nil {
log.WithError(err).Error("failed to get proofs") log.WithError(err).Error("failed to get proofs")
return return
...@@ -27,16 +27,16 @@ func (w *Witness) LoadPendingProofs(startTimestamp, endTimestamp int64) { ...@@ -27,16 +27,16 @@ func (w *Witness) LoadPendingProofs(startTimestamp, endTimestamp int64) {
} }
for _, dbProof := range dbProofs { for _, dbProof := range dbProofs {
miner, proof := w.verifyProof(dbProof) miner, proof := v.verifyProof(dbProof)
if proof != nil { if proof != nil {
w.AddPendingProof(miner, proof) v.AddPendingProof(miner, proof)
} }
lastTaskID = dbProof.TaskId lastTaskID = dbProof.TaskId
} }
} }
} }
func (w *Witness) verifyProof(dbProof *quest.ProofModel) (miner common.Address, proof *witnessv1.ValidatedProof) { func (v *Validator) verifyProof(dbProof *quest.ProofModel) (miner common.Address, proof *validatorv1.ValidatedProof) {
if dbProof.TaskWorkload == 0 { if dbProof.TaskWorkload == 0 {
return return
} }
...@@ -46,7 +46,7 @@ func (w *Witness) verifyProof(dbProof *quest.ProofModel) (miner common.Address, ...@@ -46,7 +46,7 @@ func (w *Witness) verifyProof(dbProof *quest.ProofModel) (miner common.Address,
return return
} }
containerSigner := crypto.PubkeyToAddress(*containerPubKey) containerSigner := crypto.PubkeyToAddress(*containerPubKey)
verified := w.IsContainerAddress(containerSigner) verified := v.IsContainerAddress(containerSigner)
if !verified { if !verified {
log.WithFields(log.Fields{"taskid": dbProof.TaskId, "signer": containerSigner.Hex()}).Error("invalid container signature") log.WithFields(log.Fields{"taskid": dbProof.TaskId, "signer": containerSigner.Hex()}).Error("invalid container signature")
return return
...@@ -70,21 +70,21 @@ func (w *Witness) verifyProof(dbProof *quest.ProofModel) (miner common.Address, ...@@ -70,21 +70,21 @@ func (w *Witness) verifyProof(dbProof *quest.ProofModel) (miner common.Address,
} }
nmAddress := crypto.PubkeyToAddress(*nmPubKey) nmAddress := crypto.PubkeyToAddress(*nmPubKey)
verified = w.IsNMAddress(nmAddress) verified = v.IsNMAddress(nmAddress)
if !verified { if !verified {
log.WithFields(log.Fields{"taskid": dbProof.TaskId, "signer": nmAddress.Hex()}).Error("invalid manager signature") log.WithFields(log.Fields{"taskid": dbProof.TaskId, "signer": nmAddress.Hex()}).Error("invalid manager signature")
return return
} }
proof = &witnessv1.ValidatedProof{ proof = &validatorv1.ValidatedProof{
Workload: dbProof.TaskWorkload, Workload: dbProof.TaskWorkload,
Timestamp: uint64(dbProof.TaskFinishTimestamp), Timestamp: uint64(dbProof.TaskFinishTimestamp),
} }
return common.HexToAddress(dbProof.TaskProfitAccount), proof return common.HexToAddress(dbProof.TaskProfitAccount), proof
} }
func (w *Witness) GetGlobalWorkload() uint64 { func (v *Validator) GetGlobalWorkload() uint64 {
workload, err := w.q.GetGlobalWorkload(w.todayTimestamp()) workload, err := v.q.GetGlobalWorkload(v.todayTimestamp())
if err != nil { if err != nil {
log.WithError(err).Error("failed to get global workload") log.WithError(err).Error("failed to get global workload")
return 0 return 0
......
...@@ -8,7 +8,7 @@ import ( ...@@ -8,7 +8,7 @@ import (
"github.com/ethereum/go-ethereum/trie" "github.com/ethereum/go-ethereum/trie"
"github.com/ethereum/go-ethereum/trie/trienode" "github.com/ethereum/go-ethereum/trie/trienode"
"github.com/gogo/protobuf/proto" "github.com/gogo/protobuf/proto"
witnessv1 "github.com/odysseus/odysseus-protocol/gen/proto/go/witness/v1" validatorv1 "github.com/odysseus/odysseus-protocol/gen/proto/go/validator/v1"
log "github.com/sirupsen/logrus" log "github.com/sirupsen/logrus"
) )
...@@ -30,8 +30,8 @@ func NewStateDB(lvdb ethdb.KeyValueStore, root common.Hash) (statedb *StateDB, e ...@@ -30,8 +30,8 @@ func NewStateDB(lvdb ethdb.KeyValueStore, root common.Hash) (statedb *StateDB, e
}, nil }, nil
} }
func (s *StateDB) GetMinerObject(miner common.Address) (object *witnessv1.MinerObject) { func (s *StateDB) GetMinerObject(miner common.Address) (object *validatorv1.MinerObject) {
object = &witnessv1.MinerObject{} object = &validatorv1.MinerObject{}
k := crypto.Keccak256(miner.Bytes()) k := crypto.Keccak256(miner.Bytes())
v, err := s.trie.Get(k) v, err := s.trie.Get(k)
if err != nil { if err != nil {
...@@ -44,7 +44,7 @@ func (s *StateDB) GetMinerObject(miner common.Address) (object *witnessv1.MinerO ...@@ -44,7 +44,7 @@ func (s *StateDB) GetMinerObject(miner common.Address) (object *witnessv1.MinerO
return return
} }
func (s *StateDB) UpdateMinerObject(miner common.Address, object *witnessv1.MinerObject) (err error) { func (s *StateDB) UpdateMinerObject(miner common.Address, object *validatorv1.MinerObject) (err error) {
k := crypto.Keccak256(miner.Bytes()) k := crypto.Keccak256(miner.Bytes())
v, err := proto.Marshal(object) v, err := proto.Marshal(object)
if err != nil { if err != nil {
...@@ -77,7 +77,7 @@ func (s *StateDB) Commit() (root common.Hash, err error) { ...@@ -77,7 +77,7 @@ func (s *StateDB) Commit() (root common.Hash, err error) {
return root, err return root, err
} }
func (s *StateDB) IterAllObject() (objects []*witnessv1.MinerObject) { func (s *StateDB) IterAllObject() (objects []*validatorv1.MinerObject) {
iter, err := s.trie.NodeIterator(nil) iter, err := s.trie.NodeIterator(nil)
if err != nil { if err != nil {
return return
...@@ -87,7 +87,7 @@ func (s *StateDB) IterAllObject() (objects []*witnessv1.MinerObject) { ...@@ -87,7 +87,7 @@ func (s *StateDB) IterAllObject() (objects []*witnessv1.MinerObject) {
continue continue
} }
v := iter.LeafBlob() v := iter.LeafBlob()
object := &witnessv1.MinerObject{} object := &validatorv1.MinerObject{}
err := proto.Unmarshal(v, object) err := proto.Unmarshal(v, object)
if err != nil { if err != nil {
continue continue
......
...@@ -6,18 +6,18 @@ import ( ...@@ -6,18 +6,18 @@ import (
"math/big" "math/big"
"sort" "sort"
"time" "time"
"witness/tree" "validator/tree"
"witness/util" "validator/util"
"github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/crypto"
witnessv1 "github.com/odysseus/odysseus-protocol/gen/proto/go/witness/v1" validatorv1 "github.com/odysseus/odysseus-protocol/gen/proto/go/validator/v1"
log "github.com/sirupsen/logrus" log "github.com/sirupsen/logrus"
"github.com/syndtr/goleveldb/leveldb/errors" "github.com/syndtr/goleveldb/leveldb/errors"
) )
// CommitMST commit workload of per day // CommitMST commit workload of per day
func (w *Witness) CommitMST(proofMap map[common.Address]*witnessv1.ValidatedProof) (root common.Hash, sum *big.Int, err error) { func (v *Validator) CommitMST(proofMap map[common.Address]*validatorv1.ValidatedProof) (root common.Hash, sum *big.Int, err error) {
if len(proofMap) == 0 { if len(proofMap) == 0 {
return common.Hash{}, big.NewInt(0), nil return common.Hash{}, big.NewInt(0), nil
} }
...@@ -43,22 +43,22 @@ func (w *Witness) CommitMST(proofMap map[common.Address]*witnessv1.ValidatedProo ...@@ -43,22 +43,22 @@ func (w *Witness) CommitMST(proofMap map[common.Address]*witnessv1.ValidatedProo
rootNode := mstTree.GetRoot() rootNode := mstTree.GetRoot()
err = w.lvdb.Put([]byte(fmt.Sprintf("mstroot:%s", w.date)), root.Bytes()) err = v.lvdb.Put([]byte(fmt.Sprintf("mstroot:%s", v.date)), root.Bytes())
if err != nil { if err != nil {
log.Error(err) log.Error(err)
return return
} }
err = w.lvdb.Put([]byte(fmt.Sprintf("mstsum:%s", w.date)), sum.Bytes()) err = v.lvdb.Put([]byte(fmt.Sprintf("mstsum:%s", v.date)), sum.Bytes())
if err != nil { if err != nil {
log.Error(err) log.Error(err)
return return
} }
err = w.lvdb.Put([]byte(fmt.Sprintf("mstk:%s", w.date)), dbKey) err = v.lvdb.Put([]byte(fmt.Sprintf("mstk:%s", v.date)), dbKey)
if err != nil { if err != nil {
return return
} }
err = w.lvdb.Put([]byte(fmt.Sprintf("mstv:%s", w.date)), dbVal) err = v.lvdb.Put([]byte(fmt.Sprintf("mstv:%s", v.date)), dbVal)
if err != nil { if err != nil {
return return
} }
...@@ -72,7 +72,7 @@ func (w *Witness) CommitMST(proofMap map[common.Address]*witnessv1.ValidatedProo ...@@ -72,7 +72,7 @@ func (w *Witness) CommitMST(proofMap map[common.Address]*witnessv1.ValidatedProo
} }
// CommitMT commit all workload // CommitMT commit all workload
func (w *Witness) CommitMT(objects []*witnessv1.MinerObject) (root common.Hash, err error) { func (v *Validator) CommitMT(objects []*validatorv1.MinerObject) (root common.Hash, err error) {
if len(objects) == 0 { if len(objects) == 0 {
return common.Hash{}, nil return common.Hash{}, nil
} }
...@@ -93,24 +93,24 @@ func (w *Witness) CommitMT(objects []*witnessv1.MinerObject) (root common.Hash, ...@@ -93,24 +93,24 @@ func (w *Witness) CommitMT(objects []*witnessv1.MinerObject) (root common.Hash,
root = mtTree.GetRoot() root = mtTree.GetRoot()
st := time.Now() st := time.Now()
err = w.lvdb.Put([]byte(fmt.Sprintf("mtroot:%s", w.date)), root.Bytes()) err = v.lvdb.Put([]byte(fmt.Sprintf("mtroot:%s", v.date)), root.Bytes())
if err != nil { if err != nil {
return return
} }
log.WithFields(log.Fields{ log.WithFields(log.Fields{
"k": fmt.Sprintf("mtroot:%s", w.date), "k": fmt.Sprintf("mtroot:%s", v.date),
"v": root.String(), "v": root.String(),
}).Debug() }).Debug()
err = w.lvdb.Put([]byte(fmt.Sprintf("mtk:%s", w.date)), dbProofs) err = v.lvdb.Put([]byte(fmt.Sprintf("mtk:%s", v.date)), dbProofs)
if err != nil { if err != nil {
return return
} }
log.WithFields(log.Fields{ log.WithFields(log.Fields{
"k": fmt.Sprintf("mtk:%s", w.date), "k": fmt.Sprintf("mtk:%s", v.date),
"v_length": len(dbProofs), "v_length": len(dbProofs),
}).Debug() }).Debug()
w.mtTreeCache[w.date] = mtTree v.mtTreeCache[v.date] = mtTree
log.WithFields(log.Fields{ log.WithFields(log.Fields{
"root": root.Hex(), "root": root.Hex(),
...@@ -120,12 +120,12 @@ func (w *Witness) CommitMT(objects []*witnessv1.MinerObject) (root common.Hash, ...@@ -120,12 +120,12 @@ func (w *Witness) CommitMT(objects []*witnessv1.MinerObject) (root common.Hash,
return return
} }
func (w *Witness) LoadMerkleTree(date string) (ok bool) { func (v *Validator) LoadMerkleTree(date string) (ok bool) {
if date == "" { if date == "" {
return false return false
} }
merkleTreeKey := fmt.Sprintf("mtk:%s", date) merkleTreeKey := fmt.Sprintf("mtk:%s", date)
data, err := w.lvdb.Get([]byte(merkleTreeKey)) data, err := v.lvdb.Get([]byte(merkleTreeKey))
if err != nil { if err != nil {
if err == errors.ErrNotFound { if err == errors.ErrNotFound {
return return
...@@ -149,19 +149,19 @@ func (w *Witness) LoadMerkleTree(date string) (ok bool) { ...@@ -149,19 +149,19 @@ func (w *Witness) LoadMerkleTree(date string) (ok bool) {
log.WithError(err).Error("failed to load merkle proof") log.WithError(err).Error("failed to load merkle proof")
return return
} }
w.Lock() v.Lock()
w.mtTreeCache[date] = mTree v.mtTreeCache[date] = mTree
w.Unlock() v.Unlock()
log.WithFields(log.Fields{"date": date, "root": mTree.GetRoot().Hex()}).Info("load merkle tree") log.WithFields(log.Fields{"date": date, "root": mTree.GetRoot().Hex()}).Info("load merkle tree")
return true return true
} }
func (w *Witness) LoadMerkleSumTree(date string) (ok bool) { func (v *Validator) LoadMerkleSumTree(date string) (ok bool) {
if date == "" { if date == "" {
return false return false
} }
merkleSumTreeKey := fmt.Sprintf("mstk:%s", date) merkleSumTreeKey := fmt.Sprintf("mstk:%s", date)
keyData, err := w.lvdb.Get([]byte(merkleSumTreeKey)) keyData, err := v.lvdb.Get([]byte(merkleSumTreeKey))
if err != nil { if err != nil {
if err == errors.ErrNotFound { if err == errors.ErrNotFound {
return return
...@@ -181,7 +181,7 @@ func (w *Witness) LoadMerkleSumTree(date string) (ok bool) { ...@@ -181,7 +181,7 @@ func (w *Witness) LoadMerkleSumTree(date string) (ok bool) {
} }
merkleSumTreeVal := fmt.Sprintf("mstv:%s", date) merkleSumTreeVal := fmt.Sprintf("mstv:%s", date)
valData, err := w.lvdb.Get([]byte(merkleSumTreeVal)) valData, err := v.lvdb.Get([]byte(merkleSumTreeVal))
if err != nil { if err != nil {
if err == errors.ErrNotFound { if err == errors.ErrNotFound {
return return
...@@ -202,9 +202,9 @@ func (w *Witness) LoadMerkleSumTree(date string) (ok bool) { ...@@ -202,9 +202,9 @@ func (w *Witness) LoadMerkleSumTree(date string) (ok bool) {
} }
mstTree := tree.NewMerkleSumTree(datas, bigVals) mstTree := tree.NewMerkleSumTree(datas, bigVals)
w.Lock() v.Lock()
w.mstTreeCache[date] = mstTree v.mstTreeCache[date] = mstTree
w.Unlock() v.Unlock()
log.WithFields(log.Fields{"date": date, "root": mstTree.GetRoot()}).Info("load merkle sum tree") log.WithFields(log.Fields{"date": date, "root": mstTree.GetRoot()}).Info("load merkle sum tree")
return true return true
} }
This diff is collapsed.
module witness module validator
go 1.21 go 1.21
......
...@@ -2,7 +2,7 @@ package quest ...@@ -2,7 +2,7 @@ package quest
import ( import (
"fmt" "fmt"
"witness/conf" "validator/conf"
log "github.com/sirupsen/logrus" log "github.com/sirupsen/logrus"
"gorm.io/driver/postgres" "gorm.io/driver/postgres"
......
...@@ -2,7 +2,7 @@ package quest ...@@ -2,7 +2,7 @@ package quest
import ( import (
"math/big" "math/big"
"witness/util" "validator/util"
"github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/crypto"
......
# witness # Validator for AIGIC
## leveldb kv
merkle sum tree: merkle sum tree:
...@@ -15,7 +14,6 @@ merkle sum tree: ...@@ -15,7 +14,6 @@ merkle sum tree:
mstv:2020-01-01 -> val1:val2 mstv:2020-01-01 -> val1:val2
merkle tree: merkle tree:
mtroot:2020-01-01 -> root mtroot:2020-01-01 -> root
......
...@@ -9,7 +9,7 @@ var ( ...@@ -9,7 +9,7 @@ var (
) )
var mistGauge = prometheus.NewGaugeVec(prometheus.GaugeOpts{ var mistGauge = prometheus.NewGaugeVec(prometheus.GaugeOpts{
Name: "witness_version_gauge", Name: "validator_version_gauge",
}, []string{"gitHash", "gitBranch", "buildTime", "goVersion", "version"}) }, []string{"gitHash", "gitBranch", "buildTime", "goVersion", "version"})
func init() { func init() {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment