Commit 618e2f2f authored by vipwzw's avatar vipwzw

修改prefix 的策略

parent 5a633ba3
<script src="runtime.js"></script>
<script src="test.js"></script>
<script>
callcode("{}", "execlocal_hello", "{}", [])
//demo database function
var statedb = {}
var localdb = {}
function getlocaldb(key) {
return localdb[key]
}
function setlocaldb(kvs) {
for (var i = 0; i < kvs.length; i++) {
localdb[kvs[i].key] = kvs[i].value
}
}
function listdb(prefix, key, count, direction) {
var i = 0
var data = []
for (k in localdb) {
if (k.startsWith(prefix) && typeof localdb[k] == "string") {
i++
data.push({key: k, value: localdb[k]})
if (i == count) {
break
}
}
}
return data
}
function getstatedb(key) {
return statedb[key]
}
function setstatedb(kvs) {
for (var i = 0; i < kvs.length; i++) {
statedb[kvs[i].key] = kvs[i].value
}
}
var ret = callcode("{}", "execlocal_hello", "{}", [])
console.log(ret)
</script>
\ No newline at end of file
......@@ -26,11 +26,11 @@ func (c *js) Exec_Create(payload *jsproto.Create, tx *types.Transaction, index i
if err != nil {
return nil, err
}
kvs, logs, err := parseJsReturn(jsvalue)
kvs, logs, err := parseJsReturn(c.prefix, jsvalue)
if err != nil {
return nil, err
}
kvc.AddList(kvs)
kvc.AddListNoPrefix(kvs)
r := &types.Receipt{Ty: types.ExecOk, KV: kvc.KVList(), Logs: logs}
return r, nil
}
......@@ -46,11 +46,11 @@ func (c *js) Exec_Call(payload *jsproto.Call, tx *types.Transaction, index int)
if err != nil {
return nil, err
}
kvs, logs, err := parseJsReturn(jsvalue)
kvs, logs, err := parseJsReturn(c.prefix, jsvalue)
if err != nil {
return nil, err
}
kvc.AddList(kvs)
kvc.AddListNoPrefix(kvs)
r := &types.Receipt{Ty: types.ExecOk, KV: kvc.KVList(), Logs: logs}
return r, nil
}
......@@ -20,11 +20,11 @@ func (c *js) ExecLocal_Call(payload *jsproto.Call, tx *types.Transaction, receip
if err != nil {
return nil, err
}
kvs, _, err := parseJsReturn(jsvalue)
kvs, _, err := parseJsReturn(c.prefix, jsvalue)
if err != nil {
return nil, err
}
kvc.AddList(kvs)
kvc.AddListNoPrefix(kvs)
kvc.AddRollbackKV()
r := &types.LocalDBSet{}
r.KV = kvc.KVList()
......
......@@ -25,8 +25,8 @@ func init() {
if err != nil {
panic(err)
}
execaddressFunc(basevm)
registerTableFunc(basevm)
//execaddressFunc(basevm)
//registerTableFunc(basevm)
}
//Init 插件初始化
......
......@@ -24,7 +24,7 @@ type blockContext struct {
Index int64 `json:"index"`
}
func parseJsReturn(jsvalue *otto.Object) (kvlist []*types.KeyValue, logs []*types.ReceiptLog, err error) {
func parseJsReturn(prefix []byte, jsvalue *otto.Object) (kvlist []*types.KeyValue, logs []*types.ReceiptLog, err error) {
//kvs
obj, err := getObject(jsvalue, "kvs")
if err != nil {
......@@ -42,7 +42,7 @@ func parseJsReturn(jsvalue *otto.Object) (kvlist []*types.KeyValue, logs []*type
if err != nil {
return nil, nil, err
}
kv, err := parseKV(data)
kv, err := parseKV(prefix, data)
if err != nil {
return nil, nil, err
}
......@@ -101,6 +101,14 @@ func getString(data *otto.Object, key string) (string, error) {
return v.ToString()
}
func getBool(data *otto.Object, key string) (bool, error) {
v, err := data.Get(key)
if err != nil {
return false, err
}
return v.ToBoolean()
}
func getInt(data *otto.Object, key string) (int64, error) {
v, err := data.Get(key)
if err != nil {
......@@ -120,7 +128,7 @@ func getObject(data *otto.Object, key string) (*otto.Object, error) {
return v.Object(), nil
}
func parseKV(data *otto.Object) (kv *types.KeyValue, err error) {
func parseKV(prefix []byte, data *otto.Object) (kv *types.KeyValue, err error) {
key, err := getString(data, "key")
if err != nil {
return nil, err
......@@ -129,6 +137,13 @@ func parseKV(data *otto.Object) (kv *types.KeyValue, err error) {
if err != nil {
return nil, err
}
hasprefix, err := getBool(data, "prefix")
if err != nil {
return nil, err
}
if !hasprefix {
key = string(prefix) + key
}
return &types.KeyValue{Key: []byte(key), Value: []byte(value)}, nil
}
......
......@@ -138,7 +138,7 @@ func TestBigInt(t *testing.T) {
call, tx := callCodeTx("test", "hello", s)
data, err := e.callVM("exec", call, tx, 0, nil)
assert.Nil(t, err)
kvs, _, err := parseJsReturn(data)
kvs, _, err := parseJsReturn([]byte("user.jsvm.test"), data)
assert.Nil(t, err)
assert.Equal(t, `{"balance":"9223372036854775807","balance1":"-9223372036854775808","balance2":9007199254740990,"balance3":-9007199254740990}`, string(kvs[0].Value))
}
......
......@@ -105,10 +105,10 @@ func (c *KVCreator) AddNoPrefix(key, value []byte) *KVCreator {
return c.addnoprefix(key, value, true)
}
//AddList only add KVList
func (c *KVCreator) AddList(list []*types.KeyValue) *KVCreator {
//AddListNoPrefix only add KVList
func (c *KVCreator) AddListNoPrefix(list []*types.KeyValue) *KVCreator {
for _, kv := range list {
c.add(kv.Key, kv.Value, true)
c.add(kv.Key, kv.Value, false)
}
return c
}
......
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