Commit ce15f935 authored by madengji's avatar madengji Committed by vipwzw

add role

parent 6e5bf601
......@@ -38,7 +38,7 @@ func (a *action) authParamCheck(input *mixTy.AuthorizePublicInput) error {
//authorize pubkey hash should be configured already
var found bool
for _, k := range authPubKeys.Data {
for _, k := range authPubKeys.Pks {
if input.AuthorizePubKey == k {
found = true
break
......
......@@ -87,7 +87,7 @@ func getNewTree() *merkletree.Tree {
func calcTreeRoot(leaves *mixTy.CommitTreeLeaves) []byte {
tree := getNewTree()
for _, leaf := range leaves.Data {
for _, leaf := range leaves.Leaves {
tree.Push(leaf)
}
return tree.Root()
......@@ -100,8 +100,8 @@ func getNewCommitLeaves() (*mixTy.CommitTreeLeaves, *mixTy.CommitTreeRoots) {
//第一个叶子节点都是固定的"00"字节
leaf := []byte("00")
leaves.Data = append(leaves.Data, leaf)
roots.Data = append(roots.Data, calcTreeRoot(leaves))
leaves.Leaves = append(leaves.Leaves, leaf)
roots.Roots = append(roots.Roots, calcTreeRoot(leaves))
return leaves, roots
}
......@@ -109,8 +109,8 @@ func getNewCommitLeaves() (*mixTy.CommitTreeLeaves, *mixTy.CommitTreeRoots) {
func initNewLeaves(leaf [][]byte) *types.Receipt {
leaves, roots := getNewCommitLeaves()
if len(leaf) > 0 {
leaves.Data = append(leaves.Data, leaf...)
roots.Data = append(roots.Data, calcTreeRoot(leaves))
leaves.Leaves = append(leaves.Leaves, leaf...)
roots.Roots = append(roots.Roots, calcTreeRoot(leaves))
}
return makeCurrentTreeReceipt(leaves, roots)
......@@ -127,7 +127,7 @@ func archiveRoots(db dbm.KV, root []byte, leaves *mixTy.CommitTreeLeaves) (*type
if err != nil {
return nil, err
}
archiveRoots.Data = append(archiveRoots.Data, root)
archiveRoots.Roots = append(archiveRoots.Roots, root)
receiptArch := makeTreeArchiveRootsReceipt(archiveRoots)
return mergeReceipt(receiptRootLeaves, receiptArch), nil
}
......@@ -158,13 +158,13 @@ func pushTree(db dbm.KV, leaf [][]byte) (*types.Receipt, error) {
return nil, err
}
leaves.Data = append(leaves.Data, leaf...)
leaves.Leaves = append(leaves.Leaves, leaf...)
currentRoot := calcTreeRoot(leaves)
roots.Data = append(roots.Data, currentRoot)
roots.Roots = append(roots.Roots, currentRoot)
r := makeCurrentTreeReceipt(leaves, roots)
//归档
if len(leaves.Data) >= mixTy.MaxTreeLeaves {
if len(leaves.Leaves) >= mixTy.MaxTreeLeaves {
receiptArch, err := archiveRoots(db, currentRoot, leaves)
if err != nil {
return nil, err
......@@ -184,12 +184,12 @@ func checkTreeRootHashExist(db dbm.KV, hash []byte) bool {
var roots [][]byte
currentRoots, err := getCurrentCommitTreeRoots(db)
if err == nil {
roots = append(roots, currentRoots.Data...)
roots = append(roots, currentRoots.Roots...)
}
archiveRoots, err := getArchiveCommitRoots(db)
if err == nil {
roots = append(roots, archiveRoots.Data...)
roots = append(roots, archiveRoots.Roots...)
}
for _, k := range roots {
......@@ -250,7 +250,7 @@ func CalcTreeProve(db dbm.KV, rootHash, leaf string) (*mixTy.CommitTreeProve, er
}
leaves, err := getCurrentCommitTreeLeaves(db)
if err == nil {
p, err := getProveData(transferFr2Bytes(leaf), leaves.Data)
p, err := getProveData(transferFr2Bytes(leaf), leaves.Leaves)
if err == nil {
return p, nil
}
......@@ -261,7 +261,7 @@ func CalcTreeProve(db dbm.KV, rootHash, leaf string) (*mixTy.CommitTreeProve, er
if err != nil {
return nil, err
}
p, err := getProveData(transferFr2Bytes(leaf), leaves.Data)
p, err := getProveData(transferFr2Bytes(leaf), leaves.Leaves)
if err != nil {
return nil, errors.Wrapf(err, "hash=%s,leaf=%s", rootHash, leaf)
}
......@@ -270,10 +270,10 @@ func CalcTreeProve(db dbm.KV, rootHash, leaf string) (*mixTy.CommitTreeProve, er
roots, err := getArchiveCommitRoots(db)
if err == nil {
for _, root := range roots.Data {
for _, root := range roots.Roots {
leaves, err := getCommitRootLeaves(db, transferFr2String(root))
if err == nil {
p, err := getProveData(transferFr2Bytes(leaf), leaves.Data)
p, err := getProveData(transferFr2Bytes(leaf), leaves.Leaves)
if err == nil {
return p, nil
}
......
......@@ -129,14 +129,14 @@ func (a *action) ConfigAddAuthPubKey(key string) (*types.Receipt, error) {
keys, err := a.getAuthKeys()
if isNotFound(errors.Cause(err)) {
keys := &mixTy.AuthPubKeys{}
keys.Data = append(keys.Data, key)
keys.Pks = append(keys.Pks, key)
return makeConfigAuthKeyReceipt(keys), nil
}
if err != nil {
return nil, err
}
keys.Data = append(keys.Data, key)
keys.Pks = append(keys.Pks, key)
return makeConfigAuthKeyReceipt(keys), nil
}
......@@ -147,11 +147,11 @@ func (a *action) ConfigDeleteAuthPubKey(key string) (*types.Receipt, error) {
}
var newKeys mixTy.AuthPubKeys
for _, v := range keys.Data {
for _, v := range keys.Pks {
if key == v {
continue
}
newKeys.Data = append(newKeys.Data, v)
newKeys.Pks = append(newKeys.Pks, v)
}
return makeConfigAuthKeyReceipt(&newKeys), nil
......
......@@ -34,8 +34,8 @@ func (m *Mix) Query_GetLeavesList(in *mixTy.TreeInfoReq) (types.Message, error)
return nil, err
}
var resp mixTy.TreeListResp
for _, k := range leaves.Data {
resp.Datas = append(resp.Datas, transferFr2String(k))
for _, k := range leaves.Leaves {
resp.Leaves = append(resp.Leaves, transferFr2String(k))
}
return &resp, nil
......@@ -49,8 +49,8 @@ func (m *Mix) Query_GetRootList(in *types.ReqNil) (types.Message, error) {
return nil, err
}
var resp mixTy.TreeListResp
for _, k := range roots.Data {
resp.Datas = append(resp.Datas, transferFr2String(k))
for _, k := range roots.Roots {
resp.Leaves = append(resp.Leaves, transferFr2String(k))
}
return &resp, nil
......
......@@ -27,7 +27,7 @@ message ZkVerifyKeys{
}
message AuthPubKeys{
repeated string data = 1;
repeated string pks = 1;
}
message PaymentKey{
......@@ -167,11 +167,11 @@ message ExistValue {
}
message CommitTreeLeaves {
repeated bytes data = 1;
repeated bytes leaves = 1;
}
message CommitTreeRoots {
repeated bytes data = 1;
repeated bytes roots = 1;
}
......@@ -189,7 +189,7 @@ message TreeInfoReq{
}
message TreeListResp{
repeated string datas = 1;
repeated string leaves = 1;
}
// mix wallet part
......@@ -289,8 +289,8 @@ message WithdrawProofResp{
string authorizeSpendHash = 3;
string noteHash = 4;
string spendPrivKey = 5;
uint32 spendFlag = 6;
uint32 authorizeFlag = 7;
string spendFlag = 6;
string authorizeFlag = 7;
TreePathProof treeProof = 8;
}
......@@ -306,7 +306,7 @@ message AuthProofResp{
string authHash = 4;
string authorizeSpendHash = 5;
string noteHash = 6;
uint32 spendFlag = 7;
string spendFlag = 7;
TreePathProof treeProof = 8;
}
......@@ -331,8 +331,8 @@ message TransferInputProof{
string authorizeSpendHash = 3;
string noteHash = 4;
string spendPrivKey = 5;
uint32 spendFlag = 6;
uint32 authorizeFlag = 7;
string spendFlag = 6;
string authorizeFlag = 7;
TreePathProof treeProof = 8;
ShieldAmount shieldAmount = 9;
string amountRandom = 10;
......@@ -372,14 +372,20 @@ enum NoteStatus{
USED = 3; //已使用
}
enum Role{
SPENDER = 0;
RETURNER = 1;
AUTHORIZER = 2;
}
message WalletIndexInfo {
string noteHash = 1;
string nullifier = 2;
string authorizeSpendHash = 3;
bool isReturner = 4;
string account = 5; //账户地址
NoteStatus status = 6;
SecretData secret = 7;
string noteHash = 1;
string nullifier = 2;
string authorizeSpendHash = 3;
Role role = 4;
string account = 5; //账户地址
NoteStatus status = 6;
SecretData secret = 7;
}
......
This diff is collapsed.
......@@ -350,11 +350,15 @@ func (p *mixPolicy) decodeSecret(noteHash string, secretData string, privacyKeys
//如果授权为returnerAuthHash,则returner更新本地为VALID,spender侧仍为FROZEN,
info.AuthorizeSpendHash = "0"
if len(rawData.AuthorizePubKey) > LENNULLKEY {
if rawData.ReceiverPubKey == key.Privacy.PaymentKey.ReceiverPubKey {
switch key.Privacy.PaymentKey.ReceiverPubKey {
case rawData.ReceiverPubKey:
info.Role = mixTy.Role_SPENDER
info.AuthorizeSpendHash = getFrString(mimcHashString([]string{rawData.ReceiverPubKey, rawData.Amount, rawData.NoteRandom}))
} else if rawData.ReturnPubKey == key.Privacy.PaymentKey.ReceiverPubKey {
info.IsReturner = true
case rawData.ReturnPubKey:
info.Role = mixTy.Role_RETURNER
info.AuthorizeSpendHash = getFrString(mimcHashString([]string{rawData.ReturnPubKey, rawData.Amount, rawData.NoteRandom}))
case rawData.AuthorizePubKey:
info.Role = mixTy.Role_AUTHORIZER
}
}
......
......@@ -210,12 +210,12 @@ func (policy *mixPolicy) withdrawProof(req *mixTy.WithdrawProofReq) (*mixTy.With
resp.NullifierHash = note.Nullifier
resp.AuthorizeSpendHash = note.AuthorizeSpendHash
resp.NoteHash = note.NoteHash
resp.SpendFlag = 1
if note.IsReturner {
resp.SpendFlag = 0
resp.SpendFlag = "1"
if note.Role == mixTy.Role_RETURNER {
resp.SpendFlag = "0"
}
if len(resp.AuthorizeSpendHash) > LENNULLKEY {
resp.AuthorizeFlag = 1
resp.AuthorizeFlag = "1"
}
//get spend privacy key
......@@ -260,10 +260,10 @@ func (policy *mixPolicy) authProof(req *mixTy.AuthProofReq) (*mixTy.AuthProofRes
resp.AuthHash = getFrString(mimcHashString([]string{resp.AuthPubKey, note.Secret.NoteRandom}))
//default auto to paymenter
resp.SpendFlag = 1
resp.SpendFlag = "1"
resp.AuthorizeSpendHash = getFrString(mimcHashString([]string{note.Secret.ReceiverPubKey, note.Secret.Amount, note.Secret.NoteRandom}))
if req.ToReturn != 0 {
resp.SpendFlag = 0
resp.SpendFlag = "0"
//auth to returner
resp.AuthorizeSpendHash = getFrString(mimcHashString([]string{note.Secret.ReturnPubKey, note.Secret.Amount, note.Secret.NoteRandom}))
}
......@@ -313,12 +313,12 @@ func (policy *mixPolicy) getTransferInputPart(note *mixTy.WalletIndexInfo) (*mix
return nil, errors.Wrapf(types.ErrInvalidParam, "payment pubkey from note=%s not match from privacyKey=%s,for account =%s",
note.Secret.ReceiverPubKey, privacyKey.Privacy.PaymentKey.ReceiverPubKey, note.Account)
}
input.SpendFlag = 1
if note.IsReturner {
input.SpendFlag = 0
input.SpendFlag = "1"
if note.Role == mixTy.Role_RETURNER {
input.SpendFlag = "0"
}
if len(input.AuthorizeSpendHash) > LENNULLKEY {
input.AuthorizeFlag = 1
input.AuthorizeFlag = "1"
}
treeProof, err := policy.getTreeProof(note.NoteHash)
......
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