-
Notifications
You must be signed in to change notification settings - Fork 3
/
deleter.go
63 lines (53 loc) · 1.53 KB
/
deleter.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
package service
import (
"github.com/33cn/chain33/common"
"github.com/33cn/externaldb/db"
"github.com/33cn/externaldb/db/proof/api"
"github.com/33cn/externaldb/db/proof/model"
"github.com/33cn/externaldb/db/proof/proofdb"
"github.com/33cn/externaldb/util"
)
type deleter struct {
env *db.TxEnv
arg *api.DeleteProof
txHash string
}
func newDeleter(env *db.TxEnv, hash string, arg *api.DeleteProof) *deleter {
return &deleter{env: env, txHash: hash, arg: arg}
}
func (d *deleter) del(p *model.Proof, ps []*model.Proof, op int, gen proofdb.IProofRecord) ([]db.Record, error) {
tx := d.env.Block.Block.Txs[d.env.TxIndex]
from := util.AddressConvert(tx.From())
hash := common.ToHex(tx.Hash())
var records []db.Record
mp := newProof(p)
ret := mp.del(op, hash, d.arg.Note, d.arg.Force)
if !ret {
// 强制删除, 不能回滚
return nil, nil
}
op2 := db.OpUpdate
if d.arg.Force {
op2 = db.OpDel
}
id := p.Proof["proof_id"].(string)
r1 := gen.Proof((*model.Proof)(mp), id, op2)
records = append(records, r1)
for _, p2 := range ps {
mp := newProof(p2)
mp.del(op, hash, d.arg.Note, d.arg.Force)
id := p2.Proof["proof_id"].(string)
r2 := gen.Proof((*model.Proof)(mp), id, op2)
records = append(records, r2)
}
ml := newProofLog(hash, from)
ml.setBlock(d.env.BlockHash, d.env.Block.Block.BlockTime, d.env.Block.Block.Height, d.env.TxIndex)
ml.del(op, p, d.arg)
op3 := db.OpAdd
if op == db.SeqTypeDel {
op3 = db.OpDel
}
r3 := gen.Log((*model.Log)(ml), hash, op3)
records = append(records, r3)
return records, nil
}