Commit 972628b1 authored by 贾浩@五瓣科技's avatar 贾浩@五瓣科技

update

parent 1c20f1db
...@@ -8,7 +8,7 @@ api-listen = "0.0.0.0:20012" ...@@ -8,7 +8,7 @@ api-listen = "0.0.0.0:20012"
private-key = "529f4efb80ac534f17d873104c71881c0970dbd5a886f183f63c5c6bb7a1fcd9" private-key = "529f4efb80ac534f17d873104c71881c0970dbd5a886f183f63c5c6bb7a1fcd9"
chain-rpc = "https://dev.rpc.aonet.ai" chain-rpc = "https://dev.rpc.agicoin.ai"
store-contract = "0xA0ec84eCa14CD23afD5D7ba973390E83F0Cbe89A" store-contract = "0xA0ec84eCa14CD23afD5D7ba973390E83F0Cbe89A"
...@@ -16,7 +16,7 @@ validator-contract = "0x7CBD03ecfA9093F83150E9625A25B00F555c81F7" # 测试版本 ...@@ -16,7 +16,7 @@ validator-contract = "0x7CBD03ecfA9093F83150E9625A25B00F555c81F7" # 测试版本
claim-monitor-server = "http://18.167.203.17:28080" claim-monitor-server = "http://18.167.203.17:28080"
commit-offset = 3600 # utc + n seconds commit-offset = 1800 # utc + n seconds
quest-host = "18.167.203.17" quest-host = "18.167.203.17"
...@@ -26,4 +26,4 @@ quest-user = "admin" ...@@ -26,4 +26,4 @@ quest-user = "admin"
quest-pass = "quest" quest-pass = "quest"
quest-db = "qdb" quest-db = "qdb"
\ No newline at end of file
...@@ -48,10 +48,11 @@ func (v *Validator) LoadMockProofs() { ...@@ -48,10 +48,11 @@ func (v *Validator) LoadMockProofs() {
common.HexToAddress("0x7777777777777777777777777777777777777777"), common.HexToAddress("0x7777777777777777777777777777777777777777"),
common.HexToAddress("0x8888888888888888888888888888888888888888"), common.HexToAddress("0x8888888888888888888888888888888888888888"),
common.HexToAddress("0x9999999999999999999999999999999999999999"), common.HexToAddress("0x9999999999999999999999999999999999999999"),
common.HexToAddress("0x99999999953AF2bC757C30824288A706D45fB44b"),
} }
proof := &validatorv1.ValidatedProof{ proof := &validatorv1.ValidatedProof{
Workload: 100, Workload: 1000,
} }
for _, address := range mockAddresses { for _, address := range mockAddresses {
......
...@@ -38,7 +38,6 @@ func (v *Validator) CommitMST(proofMap map[common.Address]*validatorv1.Validated ...@@ -38,7 +38,6 @@ func (v *Validator) CommitMST(proofMap map[common.Address]*validatorv1.Validated
} }
st := time.Now() st := time.Now()
mstTree := tree.NewMerkleSumTree(keys, vals) mstTree := tree.NewMerkleSumTree(keys, vals)
rootNode := mstTree.GetRoot() rootNode := mstTree.GetRoot()
......
package tree package tree
import ( import (
"bytes"
"math/big" "math/big"
"github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common"
...@@ -8,7 +9,7 @@ import ( ...@@ -8,7 +9,7 @@ import (
) )
type MerkleSumTree struct { type MerkleSumTree struct {
Levels [][]MerkleSumNode Levels [][]*MerkleSumNode
RootNode *MerkleSumNode RootNode *MerkleSumNode
} }
...@@ -25,8 +26,8 @@ type Value struct { ...@@ -25,8 +26,8 @@ type Value struct {
} }
func NewMerkleSumTree(datas [][]byte, vals []*big.Int) *MerkleSumTree { func NewMerkleSumTree(datas [][]byte, vals []*big.Int) *MerkleSumTree {
var nodes []MerkleSumNode var nodes []*MerkleSumNode
var levels [][]MerkleSumNode var levels [][]*MerkleSumNode
if len(datas) == 1 { if len(datas) == 1 {
return &MerkleSumTree{ return &MerkleSumTree{
...@@ -35,12 +36,18 @@ func NewMerkleSumTree(datas [][]byte, vals []*big.Int) *MerkleSumTree { ...@@ -35,12 +36,18 @@ func NewMerkleSumTree(datas [][]byte, vals []*big.Int) *MerkleSumTree {
} }
} }
if len(datas)%2 != 0 { for i := range datas {
datas = append(datas, []byte{}) nodes = append(nodes, buildToNode(datas[i], vals[i]))
} }
for i := range datas { if len(nodes)%2 == 1 {
nodes = append(nodes, *buildToNode(datas[i], vals[i])) // raw = 0x09标识,添加到最后一层
nodes = append(nodes, &MerkleSumNode{
Value: Value{
BigValue: big.NewInt(0),
Raw: []byte{0x09},
},
})
} }
countOfDataNodes := len(nodes) countOfDataNodes := len(nodes)
...@@ -55,38 +62,37 @@ func NewMerkleSumTree(datas [][]byte, vals []*big.Int) *MerkleSumTree { ...@@ -55,38 +62,37 @@ func NewMerkleSumTree(datas [][]byte, vals []*big.Int) *MerkleSumTree {
} }
} }
levels = [][]MerkleSumNode{nodes} levels = [][]*MerkleSumNode{nodes}
for i := 0; i < counterOfLevels; i++ { for i := 0; i < counterOfLevels; i++ {
var level []MerkleSumNode var level []*MerkleSumNode
lastNodeIndex := len(nodes) - 1 lastNodeIndex := len(nodes) - 1
for j := 0; j <= lastNodeIndex; j += 2 { for j := 0; j <= lastNodeIndex; j += 2 {
if j == lastNodeIndex && lastNodeIndex%2 == 0 { if j == lastNodeIndex && lastNodeIndex%2 == 0 {
node := newMerkleSumNode(&nodes[j], nil) node := newMerkleSumNode(nodes[j], nil)
level = append(level, *node) level = append(level, node)
} else { } else {
node := newMerkleSumNode(&nodes[j], &nodes[j+1]) node := newMerkleSumNode(nodes[j], nodes[j+1])
level = append(level, *node) level = append(level, node)
} }
} }
nodes = level nodes = level
levels = append(levels, level) levels = append(levels, level)
} }
tree := MerkleSumTree{levels, &nodes[0]} tree := MerkleSumTree{levels, nodes[0]}
return &tree return &tree
} }
func newMerkleSumNode(left, right *MerkleSumNode) *MerkleSumNode { func newMerkleSumNode(left, right *MerkleSumNode) *MerkleSumNode {
var node MerkleSumNode var node MerkleSumNode
if right == nil { if right == nil || (right != nil && bytes.Equal(right.Value.Raw, []byte{0x09})) {
concatLeftNodeData := append(left.Value.BigValue.Bytes(), left.Value.Hash[:]...) // concatLeftNodeData := append(left.Value.BigValue.Bytes(), left.Value.Hash[:]...)
concatRightNodeData := append(big.NewInt(0).Bytes(), (common.Hash{}).Bytes()...) // concatRightNodeData := append(big.NewInt(0).Bytes(), (common.Hash{}).Bytes()...)
prevHashes := append(concatLeftNodeData, concatRightNodeData...) // prevHashes := append(concatLeftNodeData)
node.Value.Hash = crypto.Keccak256Hash(prevHashes) node.Value.Hash = left.Value.Hash
node.Value.BigValue = left.Value.BigValue node.Value.BigValue = left.Value.BigValue
} else { } else {
concatLeftNodeData := append(left.Value.BigValue.Bytes(), left.Value.Hash[:]...) concatLeftNodeData := append(left.Value.BigValue.Bytes(), left.Value.Hash[:]...)
......
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