Commit e3397343 authored by harrylee's avatar harrylee Committed by vipwzw

add fork

parent d34b1c84
......@@ -11,6 +11,7 @@ import (
*/
func (s *storage) Exec_ContentStorage(payload *storagetypes.ContentOnlyNotaryStorage, tx *types.Transaction, index int) (*types.Receipt, error) {
s.GetAPI()
action := newStorageAction(s, tx, index)
return action.ContentStorage(payload)
}
......
......@@ -12,6 +12,8 @@ import (
func (s *storage) ExecLocal_ContentStorage(payload *ety.ContentOnlyNotaryStorage, tx *types.Transaction, receiptData *types.ReceiptData, index int) (*types.LocalDBSet, error) {
dbSet := &types.LocalDBSet{}
cfg := s.GetAPI().GetConfig()
if cfg.IsDappFork(s.GetHeight(), ety.StorageX, ety.ForkStorageLocalDB) {
if receiptData.Ty == types.ExecOk {
for _, log := range receiptData.Logs {
switch log.Ty {
......@@ -25,11 +27,14 @@ func (s *storage) ExecLocal_ContentStorage(payload *ety.ContentOnlyNotaryStorage
}
}
}
}
return s.addAutoRollBack(tx, dbSet.KV), nil
}
func (s *storage) ExecLocal_HashStorage(payload *ety.HashOnlyNotaryStorage, tx *types.Transaction, receiptData *types.ReceiptData, index int) (*types.LocalDBSet, error) {
dbSet := &types.LocalDBSet{}
cfg := s.GetAPI().GetConfig()
if cfg.IsDappFork(s.GetHeight(), ety.StorageX, ety.ForkStorageLocalDB) {
if receiptData.Ty == types.ExecOk {
for _, log := range receiptData.Logs {
switch log.Ty {
......@@ -43,11 +48,14 @@ func (s *storage) ExecLocal_HashStorage(payload *ety.HashOnlyNotaryStorage, tx *
}
}
}
}
return s.addAutoRollBack(tx, dbSet.KV), nil
}
func (s *storage) ExecLocal_LinkStorage(payload *ety.LinkNotaryStorage, tx *types.Transaction, receiptData *types.ReceiptData, index int) (*types.LocalDBSet, error) {
dbSet := &types.LocalDBSet{}
cfg := s.GetAPI().GetConfig()
if cfg.IsDappFork(s.GetHeight(), ety.StorageX, ety.ForkStorageLocalDB) {
if receiptData.Ty == types.ExecOk {
for _, log := range receiptData.Logs {
switch log.Ty {
......@@ -61,11 +69,14 @@ func (s *storage) ExecLocal_LinkStorage(payload *ety.LinkNotaryStorage, tx *type
}
}
}
}
return s.addAutoRollBack(tx, dbSet.KV), nil
}
func (s *storage) ExecLocal_EncryptStorage(payload *ety.EncryptNotaryStorage, tx *types.Transaction, receiptData *types.ReceiptData, index int) (*types.LocalDBSet, error) {
dbSet := &types.LocalDBSet{}
cfg := s.GetAPI().GetConfig()
if cfg.IsDappFork(s.GetHeight(), ety.StorageX, ety.ForkStorageLocalDB) {
if receiptData.Ty == types.ExecOk {
for _, log := range receiptData.Logs {
switch log.Ty {
......@@ -79,11 +90,14 @@ func (s *storage) ExecLocal_EncryptStorage(payload *ety.EncryptNotaryStorage, tx
}
}
}
}
return s.addAutoRollBack(tx, dbSet.KV), nil
}
func (s *storage) ExecLocal_EncryptShareStorage(payload *ety.EncryptShareNotaryStorage, tx *types.Transaction, receiptData *types.ReceiptData, index int) (*types.LocalDBSet, error) {
dbSet := &types.LocalDBSet{}
cfg := s.GetAPI().GetConfig()
if cfg.IsDappFork(s.GetHeight(), ety.StorageX, ety.ForkStorageLocalDB) {
if receiptData.Ty == types.ExecOk {
for _, log := range receiptData.Logs {
switch log.Ty {
......@@ -97,6 +111,7 @@ func (s *storage) ExecLocal_EncryptShareStorage(payload *ety.EncryptShareNotaryS
}
}
}
}
return s.addAutoRollBack(tx, dbSet.KV), nil
}
......
......@@ -53,7 +53,11 @@ func (s *storage) GetDriverName() string {
//ExecutorOrder Exec 的时候 同时执行 ExecLocal
func (s *storage) ExecutorOrder() int64 {
cfg := s.GetAPI().GetConfig()
if cfg.IsDappFork(s.GetHeight(), storagetypes.StorageX, storagetypes.ForkStorageLocalDB) {
return drivers.ExecLocalSameTime
}
return s.DriverBase.ExecutorOrder()
}
// CheckTx 实现自定义检验交易接口,供框架调用
......
......@@ -4,6 +4,8 @@ import (
"math/rand"
"testing"
"github.com/gogo/protobuf/proto"
"github.com/33cn/chain33/account"
"github.com/33cn/chain33/client"
"github.com/33cn/chain33/common/address"
......@@ -64,6 +66,7 @@ func init() {
func TestStorage(t *testing.T) {
cfg := types.NewChain33Config(strings.Replace(types.GetDefaultCfgstring(), "Title=\"local\"", "Title=\"chain33\"", 1))
Init(oty.StorageX, cfg, nil)
cfg.RegisterDappFork(oty.StorageX, oty.ForkStorageLocalDB, 0)
total := 100 * types.Coin
accountA := types.Account{
Balance: total,
......@@ -162,7 +165,6 @@ func TestStorage(t *testing.T) {
assert.Equal(t, common.Sha256(contents[0]), reply.GetEncryptStorage().ContentHash)
assert.Equal(t, crypted, reply.GetEncryptStorage().EncryptContent)
assert.Equal(t, ivs[0], reply.GetEncryptStorage().Nonce)
}
func signTx(tx *types.Transaction, hexPrivKey string) (*types.Transaction, error) {
......@@ -201,7 +203,7 @@ func QueryStorageByKey(stateDB dbm.KV, kvdb dbm.KVDB, key string, cfg *types.Cha
}
return msg.(*oty.Storage), nil
}
func QueryBatchStorageByKey(stateDB dbm.KV, kvdb dbm.KVDB, para *oty.BatchQueryStorage, cfg *types.Chain33Config) (*oty.BatchReplyStorage, error) {
func QueryBatchStorageByKey(stateDB dbm.KV, kvdb dbm.KVDB, para proto.Message, cfg *types.Chain33Config) (*oty.BatchReplyStorage, error) {
exec := newStorage()
q := queue.New("channel")
q.SetConfig(cfg)
......@@ -233,6 +235,7 @@ func CreateTx(action string, message types.Message, priv string, cfg *types.Chai
//模拟区块中交易得执行过程
func Exec_Block(t *testing.T, stateDB dbm.DB, kvdb dbm.KVDB, env *execEnv, txs ...*types.Transaction) error {
cfg := types.NewChain33Config(types.GetDefaultCfgstring())
cfg.RegisterDappFork(oty.StorageX, oty.ForkStorageLocalDB, 0)
cfg.SetTitleOnlyForTest("chain33")
exec := newStorage()
e := exec.(*storage)
......@@ -242,7 +245,6 @@ func Exec_Block(t *testing.T, stateDB dbm.DB, kvdb dbm.KVDB, env *execEnv, txs .
t.Log(err.Error())
return err
}
}
q := queue.New("channel")
q.SetConfig(cfg)
......
......@@ -2,7 +2,7 @@ package executor
import (
"fmt"
"github.com/33cn/chain33/client"
"github.com/33cn/chain33/common"
dbm "github.com/33cn/chain33/common/db"
"github.com/33cn/chain33/types"
......@@ -11,6 +11,7 @@ import (
)
type StorageAction struct {
api client.QueueProtocolAPI
db dbm.KV
localdb dbm.KV
txhash []byte
......@@ -23,7 +24,7 @@ type StorageAction struct {
func newStorageAction(s *storage, tx *types.Transaction, index int) *StorageAction {
hash := tx.Hash()
fromaddr := tx.From()
return &StorageAction{s.GetStateDB(), s.GetLocalDB(), hash, fromaddr,
return &StorageAction{s.GetAPI(), s.GetStateDB(), s.GetLocalDB(), hash, fromaddr,
s.GetBlockTime(), s.GetHeight(), index}
}
func (s *StorageAction) GetKVSet(payload proto.Message) (kvset []*types.KeyValue) {
......@@ -36,6 +37,8 @@ func (s *StorageAction) ContentStorage(payload *ety.ContentOnlyNotaryStorage) (*
//TODO 这里可以加具体得文本内容限制,超过指定大小的数据不容许写到状态数据库中
var logs []*types.ReceiptLog
var kvs []*types.KeyValue
cfg := s.api.GetConfig()
if cfg.IsDappFork(s.height, ety.StorageX, ety.ForkStorageLocalDB) {
key := payload.Key
op := payload.Op
if key == "" {
......@@ -57,12 +60,19 @@ func (s *StorageAction) ContentStorage(payload *ety.ContentOnlyNotaryStorage) (*
stg := &ety.Storage{Value: &ety.Storage_ContentStorage{ContentStorage: payload}, Ty: ety.TyContentStorageAction}
log := &types.ReceiptLog{Ty: ety.TyContentStorageLog, Log: types.Encode(stg)}
logs = append(logs, log)
} else {
log := &types.ReceiptLog{Ty: ety.TyContentStorageLog}
logs = append(logs, log)
kvs = s.GetKVSet(&ety.Storage{Value: &ety.Storage_ContentStorage{ContentStorage: payload}})
}
receipt := &types.Receipt{Ty: types.ExecOk, KV: kvs, Logs: logs}
return receipt, nil
}
func (s *StorageAction) HashStorage(payload *ety.HashOnlyNotaryStorage) (*types.Receipt, error) {
var logs []*types.ReceiptLog
var kvs []*types.KeyValue
cfg := s.api.GetConfig()
if cfg.IsDappFork(s.height, ety.StorageX, ety.ForkStorageLocalDB) {
key := payload.Key
if key == "" {
key = common.ToHex(s.txhash)
......@@ -75,12 +85,20 @@ func (s *StorageAction) HashStorage(payload *ety.HashOnlyNotaryStorage) (*types.
stg := &ety.Storage{Value: &ety.Storage_HashStorage{HashStorage: payload}, Ty: ety.TyHashStorageAction}
log := &types.ReceiptLog{Ty: ety.TyHashStorageLog, Log: types.Encode(stg)}
logs = append(logs, log)
} else {
log := &types.ReceiptLog{Ty: ety.TyHashStorageLog}
logs = append(logs, log)
kvs = s.GetKVSet(&ety.Storage{Value: &ety.Storage_HashStorage{HashStorage: payload}})
}
receipt := &types.Receipt{Ty: types.ExecOk, KV: kvs, Logs: logs}
return receipt, nil
}
func (s *StorageAction) LinkStorage(payload *ety.LinkNotaryStorage) (*types.Receipt, error) {
var logs []*types.ReceiptLog
var kvs []*types.KeyValue
cfg := s.api.GetConfig()
if cfg.IsDappFork(s.height, ety.StorageX, ety.ForkStorageLocalDB) {
key := payload.Key
if key == "" {
key = common.ToHex(s.txhash)
......@@ -93,12 +111,19 @@ func (s *StorageAction) LinkStorage(payload *ety.LinkNotaryStorage) (*types.Rece
stg := &ety.Storage{Value: &ety.Storage_LinkStorage{LinkStorage: payload}, Ty: ety.TyLinkStorageAction}
log := &types.ReceiptLog{Ty: ety.TyLinkStorageLog, Log: types.Encode(stg)}
logs = append(logs, log)
} else {
log := &types.ReceiptLog{Ty: ety.TyLinkStorageLog}
logs = append(logs, log)
kvs = s.GetKVSet(&ety.Storage{Value: &ety.Storage_LinkStorage{LinkStorage: payload}})
}
receipt := &types.Receipt{Ty: types.ExecOk, KV: kvs, Logs: logs}
return receipt, nil
}
func (s *StorageAction) EncryptStorage(payload *ety.EncryptNotaryStorage) (*types.Receipt, error) {
var logs []*types.ReceiptLog
var kvs []*types.KeyValue
cfg := s.api.GetConfig()
if cfg.IsDappFork(s.height, ety.StorageX, ety.ForkStorageLocalDB) {
key := payload.Key
if key == "" {
key = common.ToHex(s.txhash)
......@@ -111,12 +136,19 @@ func (s *StorageAction) EncryptStorage(payload *ety.EncryptNotaryStorage) (*type
stg := &ety.Storage{Value: &ety.Storage_EncryptStorage{EncryptStorage: payload}, Ty: ety.TyEncryptStorageAction}
log := &types.ReceiptLog{Ty: ety.TyEncryptStorageLog, Log: types.Encode(stg)}
logs = append(logs, log)
} else {
log := &types.ReceiptLog{Ty: ety.TyEncryptStorageLog}
logs = append(logs, log)
kvs = s.GetKVSet(&ety.Storage{Value: &ety.Storage_EncryptStorage{EncryptStorage: payload}})
}
receipt := &types.Receipt{Ty: types.ExecOk, KV: kvs, Logs: logs}
return receipt, nil
}
func (s *StorageAction) EncryptShareStorage(payload *ety.EncryptShareNotaryStorage) (*types.Receipt, error) {
var logs []*types.ReceiptLog
var kvs []*types.KeyValue
cfg := s.api.GetConfig()
if cfg.IsDappFork(s.height, ety.StorageX, ety.ForkStorageLocalDB) {
key := payload.Key
if key == "" {
key = common.ToHex(s.txhash)
......@@ -129,6 +161,11 @@ func (s *StorageAction) EncryptShareStorage(payload *ety.EncryptShareNotaryStora
stg := &ety.Storage{Value: &ety.Storage_EncryptShareStorage{EncryptShareStorage: payload}, Ty: ety.TyEncryptStorageAction}
log := &types.ReceiptLog{Ty: ety.TyEncryptShareStorageLog, Log: types.Encode(stg)}
logs = append(logs, log)
} else {
log := &types.ReceiptLog{Ty: ety.TyEncryptShareStorageLog}
logs = append(logs, log)
kvs = s.GetKVSet(&ety.Storage{Value: &ety.Storage_EncryptShareStorage{EncryptShareStorage: payload}})
}
receipt := &types.Receipt{Ty: types.ExecOk, KV: kvs, Logs: logs}
return receipt, nil
}
......@@ -186,13 +223,3 @@ func QueryStorageFromLocalDB(localdb dbm.KV, key string) (*ety.Storage, error) {
}
return &storage, nil
}
//func QueryStorageFromLocalDB(localdb dbm.KV, key string) (*ety.Storage, error) {
// storageTable := NewStorageTable(localdb)
// row, err := storageTable.GetData([]byte(key))
// if err != nil {
// return nil, err
// }
// fmt.Println(row)
// return row.Data.(*ety.Storage), nil
//}
......@@ -47,6 +47,9 @@ const (
)
var (
ForkStorageLocalDB = "ForkStorageLocalDB"
)
var (
//StorageX 执行器名称定义
StorageX = "storage"
//定义actionMap
......@@ -78,6 +81,7 @@ func init() {
// InitFork defines register fork
func InitFork(cfg *types.Chain33Config) {
cfg.RegisterDappFork(StorageX, "Enable", 0)
cfg.RegisterDappFork(StorageX, ForkStorageLocalDB, 0)
}
// InitExecutor defines register executor
......
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