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