Commit 4bf72cdd authored by vipwzw's avatar vipwzw Committed by 33cn

update chain33 12.14

parent 520d7cd3
......@@ -6,7 +6,6 @@ package executor
import (
"bytes"
"runtime/debug"
drivers "github.com/33cn/chain33/system/dapp"
"github.com/33cn/chain33/types"
......@@ -62,27 +61,35 @@ func isAllowKeyWrite(key, realExecer []byte, tx *types.Transaction, height int64
}
func isAllowLocalKey(execer []byte, key []byte) error {
execer = types.GetRealExecName(execer)
//println(string(execer), string(key))
if err := isAllowLocalKey2(execer, key); err != nil {
realexec := types.GetRealExecName(execer)
if bytes.Equal(realexec, execer) {
return err
}
return isAllowLocalKey2(realexec, key)
}
return nil
}
func isAllowLocalKey2(execer []byte, key []byte) error {
if len(execer) < 1 {
return types.ErrLocalPrefix
}
minkeylen := len(types.LocalPrefix) + len(execer) + 2
if len(key) <= minkeylen {
debug.PrintStack()
elog.Error("isAllowLocalKey too short", "key", string(key), "exec", string(execer))
return types.ErrLocalKeyLen
}
if key[minkeylen-1] != '-' {
debug.PrintStack()
elog.Error("isAllowLocalKey prefix last char is not '-'", "key", string(key), "exec", string(execer),
"minkeylen", minkeylen)
return types.ErrLocalPrefix
}
if !bytes.HasPrefix(key, types.LocalPrefix) {
debug.PrintStack()
elog.Error("isAllowLocalKey common prefix not match", "key", string(key), "exec", string(execer))
return types.ErrLocalPrefix
}
if !bytes.HasPrefix(key[len(types.LocalPrefix)+1:], execer) {
debug.PrintStack()
elog.Error("isAllowLocalKey key prefix not match", "key", string(key), "exec", string(execer))
return types.ErrLocalPrefix
}
......
......@@ -89,6 +89,9 @@ func New(cfg *types.Exec, sub map[string][]byte) *Executor {
return exec
}
//Wait Executor ready
func (exec *Executor) Wait() {}
// SetQueueClient set client queue, for recv msg
func (exec *Executor) SetQueueClient(qcli queue.Client) {
exec.client = qcli
......
......@@ -10,6 +10,7 @@ import (
"encoding/hex"
"github.com/33cn/chain33/queue"
_ "github.com/33cn/chain33/system"
drivers "github.com/33cn/chain33/system/dapp"
"github.com/33cn/chain33/types"
......@@ -21,6 +22,11 @@ func init() {
types.Init("local", nil)
}
func TestIsModule(t *testing.T) {
var qmodule queue.Module = &Executor{}
assert.NotNil(t, qmodule)
}
func TestExecutorGetTxGroup(t *testing.T) {
exec := &Executor{}
execInit(nil)
......@@ -113,77 +119,21 @@ func TestKeyAllow_evm(t *testing.T) {
//assert.Nil(t, t)
}
/*
func TestKeyAllow_evmallow(t *testing.T) {
execInit(nil)
key := []byte("mavl-evm-xxx")
exec := []byte("user.evm.0xc79c9113a71c0a4244e20f0780e7c13552f40ee30b05998a38edb08fe617aaa5")
tx1 := "0a05636f696e73120e18010a0a1080c2d72f1a036f746520a08d0630f1cdebc8f7efa5e9283a22313271796f6361794e46374c7636433971573461767873324537553431664b536676"
tx11, _ := hex.DecodeString(tx1)
var tx12 types.Transaction
types.Decode(tx11, &tx12)
tx12.Execer = exec
if !isAllowKeyWrite(key, exec, &tx12, int64(1)) {
t.Error("user.evm.hash can modify exec")
}
//assert.Nil(t, t)
}
func TestKeyAllow_paraallow(t *testing.T) {
execInit(nil)
key := []byte("mavl-noexec-xxx")
exec := []byte("user.p.user.noexec.0xc79c9113a71c0a4244e20f0780e7c13552f40ee30b05998a38edb08fe617aaa5")
tx1 := "0a05636f696e73120e18010a0a1080c2d72f1a036f746520a08d0630f1cdebc8f7efa5e9283a22313271796f6361794e46374c7636433971573461767873324537553431664b536676"
tx11, _ := hex.DecodeString(tx1)
var tx12 types.Transaction
types.Decode(tx11, &tx12)
tx12.Execer = exec
if isAllowKeyWrite(key, exec, &tx12, int64(1)) {
t.Error("user.noexec.hash can not modify noexec")
}
//assert.Nil(t, t)
}
func TestKeyAllow_ticket(t *testing.T) {
execInit(nil)
key := []byte("mavl-coins-bty-exec-16htvcBNSEA7fZhAdLJphDwQRQJaHpyHTp")
exec := []byte("ticket")
tx1 := "0a067469636b657412c701501022c20108dcaed4f1011080a4a7da061a70314556474572784d52343565577532386d6f4151616e6b34413864516635623639383a3078356161303431643363623561356230396131333336626536373539356638366461336233616564386531653733373139346561353135313562653336363933333a3030303030303030303022423078336461373533326364373839613330623037633538343564336537383433613731356630393961616566386533646161376134383765613135383135336331631a6e08011221025a317f60e6962b7ce9836a83b775373b614b290bee595f8aecee5499791831c21a473045022100850bb15cdcdaf465af7ad1ffcbc1fd6a86942a1ddec1dc112164f37297e06d2d02204aca9686fd169462be955cef1914a225726280739770ab1c0d29eb953e54c6b620a08d0630e3faecf8ead9f9e1483a22313668747663424e53454137665a6841644c4a706844775152514a61487079485470"
tx11, _ := hex.DecodeString(tx1)
var tx12 types.Transaction
types.Decode(tx11, &tx12)
tx12.Execer = exec
if !isAllowKeyWrite(key, exec, &tx12, int64(1)) {
t.Error("ticket can modify exec")
}
}
func TestKeyAllow_paracross(t *testing.T) {
execInit(nil)
key := []byte("mavl-coins-bty-exec-1HPkPopVe3ERfvaAgedDtJQ792taZFEHCe:19xXg1WHzti5hzBRTUphkM8YmuX6jJkoAA")
exec := []byte("paracross")
tx1 := "0a15757365722e702e746573742e7061726163726f7373124310904e223e1080c2d72f1a1374657374206173736574207472616e736665722222314a524e6a64457170344c4a356671796355426d396179434b536565736b674d4b5220a08d0630f7cba7ec9e8f9bac163a2231367a734d68376d764e444b50473645394e5672506877367a4c3933675773547052"
tx11, _ := hex.DecodeString(tx1)
var tx12 types.Transaction
types.Decode(tx11, &tx12)
tx12.Execer = []byte("user.p.para.paracross")
if !isAllowKeyWrite(key, exec, &tx12, int64(1)) {
t.Error("paracross can modify exec")
}
}
*/
func TestKeyLocalAllow(t *testing.T) {
err := isAllowLocalKey([]byte("token"), []byte("LODB-token-"))
assert.Equal(t, err, types.ErrLocalKeyLen)
err = isAllowLocalKey([]byte("token"), []byte("LODB-token-a"))
assert.Nil(t, err)
err = isAllowLocalKey([]byte(""), []byte("LODB--a"))
assert.Nil(t, err)
assert.Equal(t, err, types.ErrLocalPrefix)
err = isAllowLocalKey([]byte("exec"), []byte("LODB-execaa"))
assert.Equal(t, err, types.ErrLocalPrefix)
err = isAllowLocalKey([]byte("exec"), []byte("-exec------aa"))
assert.Equal(t, err, types.ErrLocalPrefix)
err = isAllowLocalKey([]byte("paracross"), []byte("LODB-user.p.para.paracross-xxxx"))
assert.Equal(t, err, types.ErrLocalPrefix)
err = isAllowLocalKey([]byte("user.p.para.paracross"), []byte("LODB-user.p.para.paracross-xxxx"))
assert.Nil(t, err)
err = isAllowLocalKey([]byte("user.p.para.paracross"), []byte("LODB-paracross-xxxx"))
assert.Nil(t, err)
}
......@@ -184,7 +184,9 @@ func (c *channelClient) GetAllExecBalance(in *types.ReqAddr) (*types.AllExecBala
addr := in.Addr
err := address.CheckAddress(addr)
if err != nil {
return nil, types.ErrInvalidAddress
if err = address.CheckMultiSignAddress(addr); err != nil {
return nil, types.ErrInvalidAddress
}
}
var addrs []string
addrs = append(addrs, addr)
......
......@@ -97,3 +97,19 @@ func TestSendToExec(t *testing.T) {
balance := mocker.GetExecAccount(block.StateHash, "user.f3d", mocker.GetGenesisAddress()).Balance
assert.Equal(t, int64(10), balance)
}
func TestGetAllExecBalance(t *testing.T) {
mocker := testnode.New("--free--", nil)
defer mocker.Close()
mocker.Listen()
jrpcClient := getRPCClient(t, mocker)
addr := "38BRY193Wvy9MkdqMjmuaYeUHnJaFjUxMP"
req := types.ReqAddr{Addr: addr}
var res rpctypes.AllExecBalance
err := jrpcClient.Call("Chain33.GetAllExecBalance", req, &res)
assert.Nil(t, err)
assert.Equal(t, addr, res.Addr)
assert.Nil(t, res.ExecAccount)
assert.Equal(t, 0, len(res.ExecAccount))
}
......@@ -138,8 +138,10 @@ func balance(cmd *cobra.Command, args []string) {
height, _ := cmd.Flags().GetInt("height")
err := address.CheckAddress(addr)
if err != nil {
fmt.Fprintln(os.Stderr, types.ErrInvalidAddress)
return
if err = address.CheckMultiSignAddress(addr); err != nil {
fmt.Fprintln(os.Stderr, types.ErrInvalidAddress)
return
}
}
if execer == "" {
req := types.ReqAddr{Addr: addr}
......
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