Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
V
validator
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Odysseus
validator
Commits
e94c6651
Commit
e94c6651
authored
Mar 01, 2024
by
贾浩@五瓣科技
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
update
parent
5a27a0b6
Changes
19
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
19 changed files
with
904 additions
and
310 deletions
+904
-310
Dockerfile
Dockerfile
+1
-1
grpc.go
api/grpc.go
+1
-0
rpc.go
api/rpc.go
+20
-9
flags.go
cmd/witness/flags.go
+83
-0
main.go
cmd/witness/main.go
+48
-2
config.go
conf/config.go
+2
-0
config.toml
config.toml
+6
-2
chain.go
core/chain.go
+21
-14
statedb.go
core/statedb.go
+27
-10
topic.go
core/topic.go
+14
-0
witness.go
core/witness.go
+275
-69
go.mod
go.mod
+56
-58
go.sum
go.sum
+286
-137
config.go
p2p/config.go
+0
-2
connection_gater.go
p2p/connection_gater.go
+16
-0
log.go
p2p/log.go
+1
-1
service.go
p2p/service.go
+14
-4
readme.md
readme.md
+8
-1
big.go
util/big.go
+25
-0
No files found.
Dockerfile
View file @
e94c6651
FROM
golang:1.
19
-alpine AS base
FROM
golang:1.
21
-alpine AS base
# Set up dependencies
# Set up dependencies
ENV
PACKAGES git openssh-client build-base
ENV
PACKAGES git openssh-client build-base
...
...
api/grpc.go
View file @
e94c6651
...
@@ -73,6 +73,7 @@ func (s *Server) PushProof(ctx context.Context, req *witnessv1.PushProofRequest)
...
@@ -73,6 +73,7 @@ func (s *Server) PushProof(ctx context.Context, req *witnessv1.PushProofRequest)
managerHashPayload
.
Write
(
proof
.
ContainerSignature
)
managerHashPayload
.
Write
(
proof
.
ContainerSignature
)
managerHashPayload
.
Write
(
proof
.
MinerSignature
)
managerHashPayload
.
Write
(
proof
.
MinerSignature
)
managerHashPayload
.
Write
(
big
.
NewInt
(
int64
(
proof
.
Workload
))
.
Bytes
())
managerHashPayload
.
Write
(
big
.
NewInt
(
int64
(
proof
.
Workload
))
.
Bytes
())
managerHashPayload
.
Write
(
big
.
NewInt
(
int64
(
proof
.
Timestamp
))
.
Bytes
())
managerPubKey
,
err
:=
crypto
.
SigToPub
(
crypto
.
Keccak256
(
managerHashPayload
.
Bytes
()),
proof
.
ManagerSignature
)
managerPubKey
,
err
:=
crypto
.
SigToPub
(
crypto
.
Keccak256
(
managerHashPayload
.
Bytes
()),
proof
.
ManagerSignature
)
if
err
!=
nil
{
if
err
!=
nil
{
log
.
WithError
(
err
)
.
Error
(
"failed to verify manager signature"
)
log
.
WithError
(
err
)
.
Error
(
"failed to verify manager signature"
)
...
...
api/rpc.go
View file @
e94c6651
...
@@ -3,10 +3,10 @@ package api
...
@@ -3,10 +3,10 @@ package api
import
(
import
(
"encoding/json"
"encoding/json"
"net/http"
"net/http"
"time"
"witness/core"
"witness/core"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/common"
geth
"github.com/ethereum/go-ethereum/mobile"
log
"github.com/sirupsen/logrus"
log
"github.com/sirupsen/logrus"
)
)
...
@@ -79,9 +79,9 @@ func rpcHandle(w http.ResponseWriter, r *http.Request) {
...
@@ -79,9 +79,9 @@ func rpcHandle(w http.ResponseWriter, r *http.Request) {
}
}
func
getWithdrawProofs
(
params
[]
byte
,
resp
*
jsonrpcMessage
)
{
func
getWithdrawProofs
(
params
[]
byte
,
resp
*
jsonrpcMessage
)
{
address
List
:=
make
([]
string
,
0
)
param
List
:=
make
([]
string
,
0
)
err
:=
json
.
Unmarshal
(
params
,
&
address
List
)
err
:=
json
.
Unmarshal
(
params
,
&
param
List
)
if
err
!=
nil
||
len
(
addressList
)
!=
1
{
if
err
!=
nil
||
len
(
paramList
)
<
1
||
len
(
paramList
)
>
2
{
resp
.
Error
=
&
jsonError
{
resp
.
Error
=
&
jsonError
{
Code
:
-
32602
,
Code
:
-
32602
,
Message
:
"invalid params"
,
Message
:
"invalid params"
,
...
@@ -89,8 +89,7 @@ func getWithdrawProofs(params []byte, resp *jsonrpcMessage) {
...
@@ -89,8 +89,7 @@ func getWithdrawProofs(params []byte, resp *jsonrpcMessage) {
return
return
}
}
_
,
err
=
geth
.
NewAddressFromHex
(
addressList
[
0
])
if
!
common
.
IsHexAddress
(
paramList
[
0
])
{
if
err
!=
nil
{
resp
.
Error
=
&
jsonError
{
resp
.
Error
=
&
jsonError
{
Code
:
-
32602
,
Code
:
-
32602
,
Message
:
"invalid params"
,
Message
:
"invalid params"
,
...
@@ -98,7 +97,20 @@ func getWithdrawProofs(params []byte, resp *jsonrpcMessage) {
...
@@ -98,7 +97,20 @@ func getWithdrawProofs(params []byte, resp *jsonrpcMessage) {
return
return
}
}
workload
,
proofs
:=
witness
.
GetMerkleProof
(
common
.
HexToAddress
(
addressList
[
0
]))
var
date
string
if
len
(
paramList
)
>
1
{
_
,
err
=
time
.
Parse
(
"2006-01-02"
,
paramList
[
1
])
if
err
!=
nil
{
resp
.
Error
=
&
jsonError
{
Code
:
-
32602
,
Message
:
"invalid params"
,
}
return
}
date
=
paramList
[
1
]
}
workload
,
proofs
:=
witness
.
GetMerkleProof
(
common
.
HexToAddress
(
paramList
[
0
]),
date
)
temp
:=
map
[
string
]
interface
{}{
temp
:=
map
[
string
]
interface
{}{
"workload"
:
workload
,
"workload"
:
workload
,
...
@@ -120,8 +132,7 @@ func getPendingWorkload(params []byte, resp *jsonrpcMessage) {
...
@@ -120,8 +132,7 @@ func getPendingWorkload(params []byte, resp *jsonrpcMessage) {
return
return
}
}
_
,
err
=
geth
.
NewAddressFromHex
(
addressList
[
0
])
if
!
common
.
IsHexAddress
(
addressList
[
0
])
{
if
err
!=
nil
{
resp
.
Error
=
&
jsonError
{
resp
.
Error
=
&
jsonError
{
Code
:
-
32602
,
Code
:
-
32602
,
Message
:
"invalid params"
,
Message
:
"invalid params"
,
...
...
cmd/witness/flags.go
View file @
e94c6651
...
@@ -66,6 +66,89 @@ var (
...
@@ -66,6 +66,89 @@ var (
Name
:
"witness-contract"
,
Name
:
"witness-contract"
,
Usage
:
"The address of the reward contract"
,
Usage
:
"The address of the reward contract"
,
}
}
commitTimeFlag
=
&
cli
.
IntFlag
{
Name
:
"commit-time"
,
Usage
:
"The time to commit the proof"
,
}
commitExpireFlag
=
&
cli
.
IntFlag
{
Name
:
"commit-expire"
,
Usage
:
"The time to expire the proof"
,
}
)
// p2p flags
var
(
p2pUseDiscoveryFlag
=
&
cli
.
BoolFlag
{
Name
:
"p2p-use-discovery"
,
Usage
:
"Whether to use discovery"
,
Value
:
true
,
}
p2pStaticPeersFlag
=
&
cli
.
StringSliceFlag
{
Name
:
"p2p-static-peers"
,
Usage
:
"Static peers"
,
}
p2pBootstrapNodeAddrFlag
=
&
cli
.
StringSliceFlag
{
Name
:
"p2p-bootstrap-node-addr"
,
Usage
:
"Bootstrap node address"
,
}
p2pLocalIPFlag
=
&
cli
.
StringFlag
{
Name
:
"p2p-local-ip"
,
Usage
:
"The local ip address to listen for incoming data."
,
Value
:
""
,
}
p2pHostFlag
=
&
cli
.
StringFlag
{
Name
:
"p2p-host-ip"
,
Usage
:
"The IP address advertised by libp2p. This may be used to advertise an external IP."
,
Value
:
""
,
}
p2pPrivKeyFlag
=
&
cli
.
StringFlag
{
Name
:
"p2p-private-key"
,
Usage
:
"The file path of the private key to use in communications with other peers."
,
EnvVars
:
[]
string
{
"P2P_PRIVATE_KEY"
},
}
p2pTCPPortFlag
=
&
cli
.
IntFlag
{
Name
:
"p2p-tcp-port"
,
Usage
:
"The port used by libp2p."
,
Value
:
30333
,
}
p2pUDPPortFlag
=
&
cli
.
IntFlag
{
Name
:
"p2p-udp-port"
,
Usage
:
"The port used by discv5."
,
Value
:
30334
,
}
p2pMaxPeersFlag
=
&
cli
.
IntFlag
{
Name
:
"p2p-max-peers"
,
Usage
:
"The max number of p2p peers to maintain."
,
Value
:
16
,
}
p2pMaxInboundPeersFlag
=
&
cli
.
IntFlag
{
Name
:
"p2p-max-inbound-peers"
,
Usage
:
"The max number of inbound p2p peers to maintain."
,
Value
:
10
,
}
p2pMaxOutboundPeersFlag
=
&
cli
.
IntFlag
{
Name
:
"p2p-max-outbound-peers"
,
Usage
:
"The max number of outbound p2p peers to maintain."
,
Value
:
10
,
}
ignoreLocalIPFlag
=
&
cli
.
BoolFlag
{
Name
:
"ignore-local-ip"
,
Usage
:
"The node is not connected to the local IP address"
,
Value
:
false
,
}
)
)
func
loadFlagsFromConfig
(
cliCtx
*
cli
.
Context
,
flags
[]
cli
.
Flag
)
error
{
func
loadFlagsFromConfig
(
cliCtx
*
cli
.
Context
,
flags
[]
cli
.
Flag
)
error
{
...
...
cmd/witness/main.go
View file @
e94c6651
package
main
package
main
import
(
import
(
"context"
"net/http"
"net/http"
"os"
"os"
"witness/api"
"witness/api"
"witness/conf"
"witness/conf"
"witness/core"
"witness/core"
"witness/p2p"
"witness/version"
"witness/version"
"github.com/prometheus/client_golang/prometheus/promhttp"
"github.com/prometheus/client_golang/prometheus/promhttp"
...
@@ -25,12 +27,29 @@ var (
...
@@ -25,12 +27,29 @@ var (
chainRPCFlag
,
chainRPCFlag
,
storeContractFlag
,
storeContractFlag
,
witnessContractFlag
,
witnessContractFlag
,
commitTimeFlag
,
commitExpireFlag
,
}
p2pFlags
=
[]
cli
.
Flag
{
p2pUseDiscoveryFlag
,
p2pStaticPeersFlag
,
p2pBootstrapNodeAddrFlag
,
p2pLocalIPFlag
,
p2pPrivKeyFlag
,
p2pHostFlag
,
p2pTCPPortFlag
,
p2pUDPPortFlag
,
p2pMaxPeersFlag
,
p2pMaxInboundPeersFlag
,
p2pMaxOutboundPeersFlag
,
ignoreLocalIPFlag
,
}
}
)
)
func
main
()
{
func
main
()
{
app
:=
cli
.
App
{}
app
:=
cli
.
App
{}
app
.
Flags
=
wrapFlags
(
app
Flags
)
app
.
Flags
=
wrapFlags
(
app
end
(
appFlags
,
p2pFlags
...
)
)
app
.
Name
=
"witness"
app
.
Name
=
"witness"
app
.
Usage
=
"this is witness"
app
.
Usage
=
"this is witness"
app
.
Version
=
version
.
Version
app
.
Version
=
version
.
Version
...
@@ -57,10 +76,13 @@ func run(ctx *cli.Context) {
...
@@ -57,10 +76,13 @@ func run(ctx *cli.Context) {
StoreContract
:
ctx
.
String
(
storeContractFlag
.
Name
),
StoreContract
:
ctx
.
String
(
storeContractFlag
.
Name
),
WitnessContract
:
ctx
.
String
(
witnessContractFlag
.
Name
),
WitnessContract
:
ctx
.
String
(
witnessContractFlag
.
Name
),
DataDir
:
ctx
.
String
(
dataDirFlag
.
Name
),
DataDir
:
ctx
.
String
(
dataDirFlag
.
Name
),
CommitTime
:
ctx
.
Int
(
commitTimeFlag
.
Name
),
CommitExpire
:
ctx
.
Int
(
commitExpireFlag
.
Name
),
}
}
p2pSrv
:=
runP2PServer
(
ctx
)
setLogLevel
(
cfg
.
LogLevel
)
setLogLevel
(
cfg
.
LogLevel
)
runMetrics
(
cfg
.
MetricsListenAddr
)
runMetrics
(
cfg
.
MetricsListenAddr
)
w
:=
core
.
NewWitness
(
cfg
)
w
:=
core
.
RunWitness
(
p2pSrv
,
cfg
)
runGrpcServer
(
cfg
.
GRPCListenAddr
,
w
)
runGrpcServer
(
cfg
.
GRPCListenAddr
,
w
)
runJSONRPCServer
(
cfg
.
RPCListenAddr
,
w
)
runJSONRPCServer
(
cfg
.
RPCListenAddr
,
w
)
select
{}
select
{}
...
@@ -93,3 +115,27 @@ func runGrpcServer(listen string, w *core.Witness) {
...
@@ -93,3 +115,27 @@ func runGrpcServer(listen string, w *core.Witness) {
func
runJSONRPCServer
(
listen
string
,
w
*
core
.
Witness
)
{
func
runJSONRPCServer
(
listen
string
,
w
*
core
.
Witness
)
{
go
api
.
StartJSONRPC
(
listen
,
w
)
go
api
.
StartJSONRPC
(
listen
,
w
)
}
}
func
runP2PServer
(
ctx
*
cli
.
Context
)
*
p2p
.
Service
{
p2pCfg
:=
&
p2p
.
Config
{
UseDiscovery
:
ctx
.
Bool
(
p2pUseDiscoveryFlag
.
Name
),
StaticPeers
:
ctx
.
StringSlice
(
p2pStaticPeersFlag
.
Name
),
BootstrapNodeAddr
:
ctx
.
StringSlice
(
p2pBootstrapNodeAddrFlag
.
Name
),
LocalIP
:
ctx
.
String
(
p2pLocalIPFlag
.
Name
),
HostAddress
:
ctx
.
String
(
p2pHostFlag
.
Name
),
PrivateKeyPath
:
ctx
.
String
(
p2pPrivKeyFlag
.
Name
),
TCPPort
:
ctx
.
Uint
(
p2pTCPPortFlag
.
Name
),
UDPPort
:
ctx
.
Uint
(
p2pUDPPortFlag
.
Name
),
MaxPeers
:
ctx
.
Uint
(
p2pMaxPeersFlag
.
Name
),
MaxInboundPeers
:
ctx
.
Uint
(
p2pMaxInboundPeersFlag
.
Name
),
MaxOutboundPeers
:
ctx
.
Uint
(
p2pMaxOutboundPeersFlag
.
Name
),
IgnoreLocalIP
:
ctx
.
Bool
(
ignoreLocalIPFlag
.
Name
),
}
svs
,
err
:=
p2p
.
NewService
(
context
.
Background
(),
p2pCfg
)
if
err
!=
nil
{
log
.
WithError
(
err
)
.
Fatal
(
"failed to create p2p service"
)
}
svs
.
Start
()
return
svs
}
conf/config.go
View file @
e94c6651
...
@@ -11,4 +11,6 @@ type Config struct {
...
@@ -11,4 +11,6 @@ type Config struct {
WitnessContract
string
WitnessContract
string
RewardContract
string
RewardContract
string
DataDir
string
DataDir
string
CommitTime
int
CommitExpire
int
}
}
config.toml
View file @
e94c6651
...
@@ -6,10 +6,14 @@ grpc-listen = "0.0.0.0:20011"
...
@@ -6,10 +6,14 @@ grpc-listen = "0.0.0.0:20011"
rpc-listen
=
"0.0.0.0:20012"
rpc-listen
=
"0.0.0.0:20012"
chain-rpc
=
"https://
1rpc.io/holesky
"
chain-rpc
=
"https://
ethereum-holesky-rpc.publicnode.com
"
private-key
=
"529f4efb80ac534f17d873104c71881c0970dbd5a886f183f63c5c6bb7a1fcd9"
private-key
=
"529f4efb80ac534f17d873104c71881c0970dbd5a886f183f63c5c6bb7a1fcd9"
store-contract
=
"0x7Cd36Bc2a477f60A14f08442179B2f626bE026Ea"
store-contract
=
"0x7Cd36Bc2a477f60A14f08442179B2f626bE026Ea"
witness-contract
=
"0xf49133dD7B7ed75fA0f877413D293c05Bff0D8F0"
witness-contract
=
"0xf49133dD7B7ed75fA0f877413D293c05Bff0D8F0"
\ No newline at end of file
commit-time
=
3600
# utc + n seconds
commit-expire
=
3600
\ No newline at end of file
core/chain.go
View file @
e94c6651
...
@@ -3,6 +3,7 @@ package core
...
@@ -3,6 +3,7 @@ package core
import
(
import
(
"context"
"context"
"crypto/ecdsa"
"crypto/ecdsa"
"errors"
"fmt"
"fmt"
"math/big"
"math/big"
"time"
"time"
...
@@ -75,6 +76,11 @@ func (r *ChainRPC) GetNMAddresses() (addrs []common.Address, err error) {
...
@@ -75,6 +76,11 @@ func (r *ChainRPC) GetNMAddresses() (addrs []common.Address, err error) {
return
r
.
storageContract
.
GetNmAddresses
(
nil
)
return
r
.
storageContract
.
GetNmAddresses
(
nil
)
}
}
func
(
r
*
ChainRPC
)
GetWorkloadThreshold
(
totalWorkload
uint64
)
(
threshold
*
big
.
Int
,
err
error
)
{
// return r.storageContract.GetWorkloadPercent(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
(
date
string
,
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
()
...
@@ -83,21 +89,22 @@ func (r *ChainRPC) SubmitProofs(date string, merkleSumTreeRoot, merkleTreeRoot c
...
@@ -83,21 +89,22 @@ func (r *ChainRPC) SubmitProofs(date string, merkleSumTreeRoot, merkleTreeRoot c
return
return
}
}
opts
.
Context
=
ctx
opts
.
Context
=
ctx
signedTx
,
err
:=
r
.
witnessContract
.
SubmitMerkleRoot
(
opts
,
date
,
merkleSumTreeRoot
,
merkleTreeRoot
)
for
i
:=
0
;
i
<
3
;
i
++
{
if
err
!=
nil
{
signedTx
,
err
:=
r
.
witnessContract
.
SubmitMerkleRoot
(
opts
,
date
,
merkleSumTreeRoot
,
merkleTreeRoot
)
return
if
err
!=
nil
{
}
time
.
Sleep
(
time
.
Second
*
3
)
continue
receipt
,
err
:=
r
.
WaitForReceipt
(
ctx
,
signedTx
.
Hash
())
}
if
err
!=
nil
{
receipt
,
err
:=
r
.
WaitForReceipt
(
ctx
,
signedTx
.
Hash
())
return
if
err
!=
nil
{
}
return
common
.
Hash
{},
err
}
if
receipt
.
Status
!=
types
.
ReceiptStatusSuccessful
{
if
receipt
.
Status
!=
types
.
ReceiptStatusSuccessful
{
return
common
.
Hash
{},
fmt
.
Errorf
(
"tx %s failed"
,
signedTx
.
Hash
()
.
Hex
())
return
common
.
Hash
{},
fmt
.
Errorf
(
"tx %s failed"
,
signedTx
.
Hash
()
.
Hex
())
}
return
signedTx
.
Hash
(),
nil
}
}
return
common
.
Hash
{},
errors
.
New
(
"failed to submit proofs, max retry"
)
return
signedTx
.
Hash
(),
nil
}
}
func
(
r
*
ChainRPC
)
WaitForReceipt
(
ctx
context
.
Context
,
txHash
common
.
Hash
)
(
receipt
*
types
.
Receipt
,
err
error
)
{
func
(
r
*
ChainRPC
)
WaitForReceipt
(
ctx
context
.
Context
,
txHash
common
.
Hash
)
(
receipt
*
types
.
Receipt
,
err
error
)
{
...
...
core/statedb.go
View file @
e94c6651
...
@@ -2,8 +2,11 @@ package core
...
@@ -2,8 +2,11 @@ package core
import
(
import
(
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/core/rawdb"
"github.com/ethereum/go-ethereum/crypto"
"github.com/ethereum/go-ethereum/crypto"
"github.com/ethereum/go-ethereum/ethdb"
"github.com/ethereum/go-ethereum/trie"
"github.com/ethereum/go-ethereum/trie"
"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"
witnessv1
"github.com/odysseus/odysseus-protocol/gen/proto/go/witness/v1"
log
"github.com/sirupsen/logrus"
log
"github.com/sirupsen/logrus"
...
@@ -14,13 +17,15 @@ type StateDB struct {
...
@@ -14,13 +17,15 @@ type StateDB struct {
trie
*
trie
.
Trie
trie
*
trie
.
Trie
}
}
func
NewStateDB
(
db
*
trie
.
Database
,
root
common
.
Hash
)
(
statedb
*
StateDB
,
err
error
)
{
func
NewStateDB
(
lvdb
ethdb
.
KeyValueStore
,
root
common
.
Hash
)
(
statedb
*
StateDB
,
err
error
)
{
t
,
err
:=
trie
.
New
(
common
.
Hash
{},
root
,
db
)
trieDB
:=
trie
.
NewDatabase
(
rawdb
.
NewDatabase
(
lvdb
),
nil
)
// owner 如果是0x0,启用的是用户树,此处并没有使用 stateaccount
t
,
err
:=
trie
.
New
(
trieID
(
root
),
trieDB
)
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
err
return
nil
,
err
}
}
return
&
StateDB
{
return
&
StateDB
{
db
:
db
,
db
:
trieDB
,
trie
:
t
,
trie
:
t
,
},
nil
},
nil
}
}
...
@@ -28,7 +33,7 @@ func NewStateDB(db *trie.Database, root common.Hash) (statedb *StateDB, err erro
...
@@ -28,7 +33,7 @@ func NewStateDB(db *trie.Database, root common.Hash) (statedb *StateDB, err erro
func
(
s
*
StateDB
)
GetMinerObject
(
miner
common
.
Address
)
(
object
*
witnessv1
.
MinerObject
)
{
func
(
s
*
StateDB
)
GetMinerObject
(
miner
common
.
Address
)
(
object
*
witnessv1
.
MinerObject
)
{
object
=
&
witnessv1
.
MinerObject
{}
object
=
&
witnessv1
.
MinerObject
{}
k
:=
crypto
.
Keccak256
(
miner
.
Bytes
())
k
:=
crypto
.
Keccak256
(
miner
.
Bytes
())
v
,
err
:=
s
.
trie
.
Try
Get
(
k
)
v
,
err
:=
s
.
trie
.
Get
(
k
)
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
return
nil
}
}
...
@@ -46,7 +51,7 @@ func (s *StateDB) UpdateMinerObject(miner common.Address, object *witnessv1.Mine
...
@@ -46,7 +51,7 @@ func (s *StateDB) UpdateMinerObject(miner common.Address, object *witnessv1.Mine
return
return
}
}
err
=
s
.
trie
.
Try
Update
(
k
,
v
)
err
=
s
.
trie
.
Update
(
k
,
v
)
return
return
}
}
...
@@ -55,24 +60,28 @@ func (s *StateDB) Commit() (root common.Hash, err error) {
...
@@ -55,24 +60,28 @@ func (s *StateDB) Commit() (root common.Hash, err error) {
if
err
!=
nil
{
if
err
!=
nil
{
return
return
}
}
nodesSet
:=
trie
.
NewMergedNodeSet
()
nodesSet
:=
trie
node
.
NewMergedNodeSet
()
if
nodes
!=
nil
{
if
nodes
!=
nil
{
err
=
nodesSet
.
Merge
(
nodes
)
err
=
nodesSet
.
Merge
(
nodes
)
if
err
!=
nil
{
if
err
!=
nil
{
return
return
}
}
}
}
err
=
s
.
db
.
Update
(
nodesSet
)
// block states 在 hashtrie 中未使用
err
=
s
.
db
.
Update
(
root
,
common
.
Hash
{},
0
,
nodesSet
,
nil
)
if
err
!=
nil
{
if
err
!=
nil
{
return
return
}
}
err
=
s
.
db
.
Commit
(
root
,
true
,
nil
)
err
=
s
.
db
.
Commit
(
root
,
true
)
return
root
,
err
return
root
,
err
}
}
func
(
s
*
StateDB
)
IterAllObject
()
(
objects
[]
*
witnessv1
.
MinerObject
)
{
func
(
s
*
StateDB
)
IterAllObject
()
(
objects
[]
*
witnessv1
.
MinerObject
)
{
iter
:=
s
.
trie
.
NodeIterator
(
nil
)
iter
,
err
:=
s
.
trie
.
NodeIterator
(
nil
)
if
err
!=
nil
{
return
}
for
iter
.
Next
(
true
)
{
for
iter
.
Next
(
true
)
{
if
!
iter
.
Leaf
()
{
if
!
iter
.
Leaf
()
{
continue
continue
...
@@ -83,8 +92,16 @@ func (s *StateDB) IterAllObject() (objects []*witnessv1.MinerObject) {
...
@@ -83,8 +92,16 @@ func (s *StateDB) IterAllObject() (objects []*witnessv1.MinerObject) {
if
err
!=
nil
{
if
err
!=
nil
{
continue
continue
}
}
log
.
WithField
(
"
workload"
,
object
.
Workload
)
.
Debug
(
"miner object"
)
log
.
WithField
(
"
balance"
,
object
.
Balance
)
.
Debug
(
"miner object"
)
objects
=
append
(
objects
,
object
)
objects
=
append
(
objects
,
object
)
}
}
return
return
}
}
func
trieID
(
root
common
.
Hash
)
(
id
*
trie
.
ID
)
{
return
&
trie
.
ID
{
StateRoot
:
root
,
Owner
:
common
.
HexToHash
(
"0x1"
),
Root
:
root
,
}
}
core/topic.go
0 → 100644
View file @
e94c6651
package
core
import
(
pubsub
"github.com/libp2p/go-libp2p-pubsub"
)
var
(
msgTopic
*
pubsub
.
Topic
)
func
(
w
*
Witness
)
JoinTopic
(
topic
string
)
(
err
error
)
{
msgTopic
,
err
=
w
.
p2pSrv
.
JoinTopic
(
"topic"
)
return
err
}
core/witness.go
View file @
e94c6651
This diff is collapsed.
Click to expand it.
go.mod
View file @
e94c6651
This diff is collapsed.
Click to expand it.
go.sum
View file @
e94c6651
This diff is collapsed.
Click to expand it.
p2p/config.go
View file @
e94c6651
...
@@ -17,6 +17,4 @@ type Config struct {
...
@@ -17,6 +17,4 @@ type Config struct {
MaxOutboundPeers
uint
MaxOutboundPeers
uint
IgnoreLocalIP
bool
IgnoreLocalIP
bool
SingleNode
bool
SingleNode
bool
EnableProm
bool
NebulaGrpcAddress
string
}
}
p2p/connection_gater.go
View file @
e94c6651
package
p2p
package
p2p
import
(
import
(
"context"
"runtime"
"runtime"
"github.com/libp2p/go-libp2p/core/control"
"github.com/libp2p/go-libp2p/core/control"
...
@@ -60,3 +61,18 @@ func (s *Service) validateDial(addr multiaddr.Multiaddr) bool {
...
@@ -60,3 +61,18 @@ func (s *Service) validateDial(addr multiaddr.Multiaddr) bool {
_
,
err
:=
manet
.
ToIP
(
addr
)
_
,
err
:=
manet
.
ToIP
(
addr
)
return
err
==
nil
return
err
==
nil
}
}
func
onConnectSuccess
(
ctx
context
.
Context
,
peerID
peer
.
ID
)
error
{
log
.
WithField
(
"peerID"
,
peerID
)
.
Info
(
"on connect success"
)
return
nil
}
func
onConnectFail
(
ctx
context
.
Context
,
peerID
peer
.
ID
)
error
{
log
.
WithField
(
"peerID"
,
peerID
)
.
Info
(
"on connect fail"
)
return
nil
}
func
onDisconnect
(
ctx
context
.
Context
,
peerID
peer
.
ID
)
error
{
log
.
WithField
(
"peerID"
,
peerID
)
.
Info
(
"on disconnect"
)
return
nil
}
p2p/log.go
View file @
e94c6651
...
@@ -22,7 +22,7 @@ func logIPAddr(id peer.ID, addrs ...ma.Multiaddr) {
...
@@ -22,7 +22,7 @@ func logIPAddr(id peer.ID, addrs ...ma.Multiaddr) {
log
.
WithField
(
log
.
WithField
(
"multiAddr"
,
"multiAddr"
,
correctAddr
.
String
()
+
"/p2p/"
+
id
.
String
(),
correctAddr
.
String
()
+
"/p2p/"
+
id
.
String
(),
)
.
Info
(
"
Node started p2p server
"
)
)
.
Info
(
"
p2p node started
"
)
}
}
}
}
...
...
p2p/service.go
View file @
e94c6651
...
@@ -13,18 +13,17 @@ import (
...
@@ -13,18 +13,17 @@ import (
"witness/p2p/peers"
"witness/p2p/peers"
"github.com/libp2p/go-libp2p"
"github.com/multiformats/go-multiaddr"
"github.com/prysmaticlabs/prysm/v3/async/event"
"github.com/ethereum/go-ethereum/p2p/enode"
"github.com/ethereum/go-ethereum/p2p/enode"
"github.com/ethereum/go-ethereum/p2p/enr"
"github.com/ethereum/go-ethereum/p2p/enr"
"github.com/libp2p/go-libp2p"
pubsub
"github.com/libp2p/go-libp2p-pubsub"
pubsub
"github.com/libp2p/go-libp2p-pubsub"
"github.com/libp2p/go-libp2p/core/host"
"github.com/libp2p/go-libp2p/core/host"
"github.com/libp2p/go-libp2p/core/network"
"github.com/libp2p/go-libp2p/core/network"
"github.com/libp2p/go-libp2p/core/peer"
"github.com/libp2p/go-libp2p/core/peer"
"github.com/libp2p/go-libp2p/core/protocol"
"github.com/libp2p/go-libp2p/core/protocol"
"github.com/multiformats/go-multiaddr"
"github.com/pkg/errors"
"github.com/pkg/errors"
"github.com/prysmaticlabs/prysm/v3/async/event"
prysmnetwork
"github.com/prysmaticlabs/prysm/v3/network"
prysmnetwork
"github.com/prysmaticlabs/prysm/v3/network"
)
)
...
@@ -133,6 +132,17 @@ func NewService(ctx context.Context, cfg *Config) (*Service, error) {
...
@@ -133,6 +132,17 @@ func NewService(ctx context.Context, cfg *Config) (*Service, error) {
return
s
,
nil
return
s
,
nil
}
}
func
(
s
*
Service
)
StartP2PNode
(
cfg
*
Config
)
(
err
error
)
{
srv
,
err
:=
NewService
(
context
.
Background
(),
cfg
)
if
err
!=
nil
{
return
err
}
srv
.
AddConnectionHandler
(
onConnectSuccess
,
onConnectFail
)
srv
.
AddDisconnectionHandler
(
onDisconnect
)
srv
.
Start
()
return
nil
}
// Start the p2p service.
// Start the p2p service.
func
(
s
*
Service
)
Start
()
{
func
(
s
*
Service
)
Start
()
{
if
s
.
started
{
if
s
.
started
{
...
...
readme.md
View file @
e94c6651
...
@@ -26,4 +26,11 @@ state:
...
@@ -26,4 +26,11 @@ state:
lastday -> 2023-01-01
lastday -> 2023-01-01
sroot:2020-01-01 -> root
sroot:2020-01-01 -> root(32bytes)
txid:2020-0101 -> txhash(32bytes)
unconfirmed proof:
proof:2020-01-01 -> json(map
[
common.Address
]
*
witnessv1.ValidatedProof)
\ No newline at end of file
util/big.go
0 → 100644
View file @
e94c6651
package
util
import
(
"math/big"
)
func
MustStringToBigInt
(
v
string
)
*
big
.
Int
{
if
len
(
v
)
==
0
{
return
big
.
NewInt
(
0
)
}
b
,
_
:=
big
.
NewInt
(
0
)
.
SetString
(
v
,
10
)
return
b
}
func
MustAddStringToBigInt
(
v1
,
v2
string
)
*
big
.
Int
{
b1
:=
MustStringToBigInt
(
v1
)
b2
:=
MustStringToBigInt
(
v2
)
return
new
(
big
.
Int
)
.
Add
(
b1
,
b2
)
}
func
MustSubStringToBigInt
(
v1
,
v2
string
)
*
big
.
Int
{
b1
:=
MustStringToBigInt
(
v1
)
b2
:=
MustStringToBigInt
(
v2
)
return
new
(
big
.
Int
)
.
Sub
(
b1
,
b2
)
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment