Skip to content

Commit b4ac238

Browse files
committed
splite plain & table modes for publishing and bltKey generation
1 parent d3d5303 commit b4ac238

File tree

4 files changed

+95
-33
lines changed

4 files changed

+95
-33
lines changed

api.go

+20-4
Original file line numberDiff line numberDiff line change
@@ -379,13 +379,29 @@ func PublishDataAPIHandler(w http.ResponseWriter, r *http.Request) {
379379

380380
Log.Debugf("start send transaction to contract for publishing data...merkle root=%v, mode=%v, size=%v, n=%v, s=%v", b.SigmaMKLRoot, b.Mode, b.Size, b.N, b.S)
381381
t := time.Now()
382-
txid, err := publishDataToContract(b, valueInt)
383-
if err != nil {
384-
Log.Errorf("publish data to contract error! err=%v", err)
382+
if b.Mode == TRANSACTION_MODE_PLAIN_POD {
383+
txid, err := publishPlainDataToContract(b, valueInt)
384+
if err != nil {
385+
Log.Errorf("publish data to contract error! err=%v", err)
386+
fmt.Fprintf(w, RESPONSE_PUBLISH_TO_CONTRACT_FAILED)
387+
return
388+
}
389+
Log.Debugf("send publish data to contract successfully. txid=%v, merkle root=%v, time cost=%v", txid, b.SigmaMKLRoot, time.Since(t))
390+
391+
} else if b.Mode == TRANSACTION_MODE_TABLE_POD {
392+
txid, err := publishTableDataToContract(b, valueInt)
393+
if err != nil {
394+
Log.Errorf("publish data to contract error! err=%v", err)
395+
fmt.Fprintf(w, RESPONSE_PUBLISH_TO_CONTRACT_FAILED)
396+
return
397+
}
398+
Log.Debugf("send publish data to contract successfully. txid=%v, merkle root=%v, time cost=%v", txid, b.SigmaMKLRoot, time.Since(t))
399+
400+
} else {
401+
Log.Warnf("invalid mode = %v", b.Mode)
385402
fmt.Fprintf(w, RESPONSE_PUBLISH_TO_CONTRACT_FAILED)
386403
return
387404
}
388-
Log.Debugf("send publish data to contract successfully. txid=%v, merkle root=%v, time cost=%v", txid, b.SigmaMKLRoot, time.Since(t))
389405

390406
extra.ContractAddr = BConf.ContractAddr
391407
err = savePublishExtraInfo(extra, dataFile+"/extra.json")

cmd.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ func AliceInitDataNode(filepath string, Log ILogger) {
9090
Log.Warnf("read config file error! filepath=%s, err=%v", filepath, err)
9191
panic(err.Error())
9292
}
93-
Log.Debugf("data=%v", string(data))
93+
// Log.Debugf("data=%v", string(data))
9494

9595
urlStr := REQUEST_URL_LOCAL_HOST + ":" + BConf.Port + "/s/publish/init"
9696
body := make(url.Values)

contract.go

+68-23
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ func ConnectToProvider(key *keystore.Key, zkPODEXAddr string, Log ILogger) error
5353
return nil
5454
}
5555

56-
func publishDataToContract(b Bulletin, value int64) (string, error) {
56+
func publishPlainDataToContract(b Bulletin, value int64) (string, error) {
5757

5858
size, _ := strconv.ParseUint(b.Size, 10, 64)
5959
s, _ := strconv.ParseUint(b.S, 10, 64)
@@ -76,6 +76,34 @@ func publishDataToContract(b Bulletin, value int64) (string, error) {
7676
return ctx.Hash().Hex(), nil
7777
}
7878

79+
func publishTableDataToContract(b Bulletin, value int64) (string, error) {
80+
81+
s, _ := strconv.ParseUint(b.S, 10, 64)
82+
n, _ := strconv.ParseUint(b.N, 10, 64)
83+
mklrootInt := new(big.Int)
84+
mklroot, rs := mklrootInt.SetString(b.SigmaMKLRoot, 16)
85+
if !rs {
86+
return "", errors.New("failed to convert sessionId")
87+
}
88+
89+
digestInt := new(big.Int)
90+
digest, rs := digestInt.SetString(b.VRFMetaDigest, 16)
91+
if !rs {
92+
return "", errors.New("failed to convert VRFMetaDigest")
93+
}
94+
95+
GAdminAuth.Value = big.NewInt(value)
96+
defer func() {
97+
GAdminAuth.Value = big.NewInt(0)
98+
}()
99+
100+
ctx, err := ZkPoDExchangeClient.ZkPoDExchangeTransactor.Publish(GAdminAuth, 0, s, n, mklroot, digest, big.NewInt(1))
101+
if err != nil {
102+
return "", fmt.Errorf("failed to Publish: %v", err)
103+
}
104+
return ctx.Hash().Hex(), nil
105+
}
106+
79107
func closeDataAtContract(bltByte [32]byte) (string, bool, error) {
80108

81109
ctx, err := ZkPoDExchangeClient.ZkPoDExchangeTransactor.UnPublish(GAdminAuth, bltByte)
@@ -799,29 +827,46 @@ func checkDeposit(AliceAddr string, BobAddr string, value int64) (bool, error) {
799827
}
800828

801829
func calcuBltKey(b Bulletin) ([32]byte, error) {
802-
size, _ := strconv.ParseUint(b.Size, 10, 64)
803-
s, _ := strconv.ParseUint(b.S, 10, 64)
804-
n, _ := strconv.ParseUint(b.N, 10, 64)
805-
mklrootInt := new(big.Int)
806-
mklroot, rs := mklrootInt.SetString(fmt.Sprintf("%x", b.SigmaMKLRoot), 10)
807-
if !rs {
808-
return *byte32(nil), fmt.Errorf("failed to convert sessionId. b.SigmaMKLRoot=%v", b.SigmaMKLRoot)
809-
}
810-
811-
bltByte := solsha3.SoliditySHA3(
812-
// types
813-
[]string{"uint64", "uint64", "uint64", "bytes32"},
814830

815-
// values
816-
[]interface{}{
817-
size,
818-
s,
819-
n,
820-
mklroot,
821-
},
822-
)
823-
824-
return *byte32(bltByte), nil
831+
if b.Mode == TRANSACTION_MODE_PLAIN_POD {
832+
size, _ := strconv.ParseUint(b.Size, 10, 64)
833+
s, _ := strconv.ParseUint(b.S, 10, 64)
834+
n, _ := strconv.ParseUint(b.N, 10, 64)
835+
836+
bltByte := solsha3.SoliditySHA3(
837+
// types
838+
[]string{"uint64", "uint64", "uint64", "bytes32"},
839+
840+
// values
841+
[]interface{}{
842+
size,
843+
s,
844+
n,
845+
"0x" + b.SigmaMKLRoot,
846+
},
847+
)
848+
return *byte32(bltByte), nil
849+
850+
} else if b.Mode == TRANSACTION_MODE_TABLE_POD {
851+
s, _ := strconv.ParseUint(b.S, 10, 64)
852+
n, _ := strconv.ParseUint(b.N, 10, 64)
853+
854+
bltByte := solsha3.SoliditySHA3(
855+
// types
856+
[]string{"uint64", "uint64", "bytes32", "bytes32"},
857+
858+
// values
859+
[]interface{}{
860+
s,
861+
n,
862+
"0x" + b.SigmaMKLRoot,
863+
"0x" + b.VRFMetaDigest,
864+
},
865+
)
866+
return *byte32(bltByte), nil
867+
868+
}
869+
return *byte32(nil), fmt.Errorf("invalid mode=%v", b.Mode)
825870
}
826871

827872
func byte32(s []byte) (a *[32]byte) {

file.go

+6-5
Original file line numberDiff line numberDiff line change
@@ -98,11 +98,12 @@ type VRFReceipt struct {
9898

9999
//Bulletin is the struct of bulletin.
100100
type Bulletin struct {
101-
Mode string `json:"mode"`
102-
Size string `json:"size"`
103-
S string `json:"s"`
104-
N string `json:"n"`
105-
SigmaMKLRoot string `json:"sigma_mkl_root"`
101+
Mode string `json:"mode"`
102+
Size string `json:"size"` //plain
103+
S string `json:"s"`
104+
N string `json:"n"`
105+
SigmaMKLRoot string `json:"sigma_mkl_root"`
106+
VRFMetaDigest string `json:"vrf_meta_digest"` // table
106107
}
107108

108109
func pathExists(path string) (bool, error) {

0 commit comments

Comments
 (0)