新注册的用户请输入邮箱并保存,随后登录邮箱激活账号。后续可直接使用邮箱登录!

Commit ecc663fc authored by taifu's avatar taifu

Merge branch 'v2.2.0_alpha_qc_taifu' into 'v2.2.0_alpha_qc' (merge request !45)

v2.2.0_alpha_qc_taifu
parents 64f95d01 0b8dcb46
......@@ -4,17 +4,17 @@ VERSION_DEVELOP=develop
gomod:
go get chainmaker.org/chainmaker/pb-go/v2@$(VERSION)
go get chainmaker.org/chainmaker/common/v2@$(VERSION_DEVELOP)
go get chainmaker.org/chainmaker/protocol/v2@$(VERSION_DEVELOP)
go get chainmaker.org/chainmaker/protocol/v2@$(VERSION)
go get chainmaker.org/chainmaker/logger/v2@$(VERSION_DEVELOP)
go get chainmaker.org/chainmaker/utils/v2@$(VERSION)
go get chainmaker.org/chainmaker/localconf/v2@$(VERSION)
go get chainmaker.org/chainmaker/chainconf/v2@$(VERSION_DEVELOP)
go get chainmaker.org/chainmaker/chainconf/v2@$(VERSION)
go mod tidy
lint:
golangci-lint run ./...
ut:
mkdir -p ../vm-native-ut
go test -v -coverprofile=../vm-native-ut/cover.out ./...
go tool cover -html=../vm-native-ut/cover.out -o ../vm-native-ut/coverage.html
\ No newline at end of file
mkdir -p ../ut-vm-native
go test -v -coverprofile=../ut-vm-native/cover.out ./...
go tool cover -html=../ut-vm-native/cover.out -o ../ut-vm-native/coverage.html
\ No newline at end of file
......@@ -12,12 +12,12 @@ import (
"errors"
"fmt"
"chainmaker.org/chainmaker/vm-native/v2/common"
"chainmaker.org/chainmaker/pb-go/v2/accesscontrol"
commonPb "chainmaker.org/chainmaker/pb-go/v2/common"
"chainmaker.org/chainmaker/pb-go/v2/syscontract"
"chainmaker.org/chainmaker/protocol/v2"
"chainmaker.org/chainmaker/utils/v2"
"chainmaker.org/chainmaker/vm-native/v2/common"
)
var (
......@@ -388,16 +388,20 @@ func (r *ContractManagerRuntime) InstallContract(context protocol.TxSimContext,
if len(existContract) > 0 { //exist
return nil, 0, errContractExist
}
creator, err := r.getCreator(context)
if err != nil {
return nil, 0, err
}
contract := &commonPb.Contract{
Name: name,
Version: version,
RuntimeType: runTime,
Status: commonPb.ContractStatus_NORMAL,
Creator: context.GetSender(),
Creator: creator,
}
cdata, _ := contract.Marshal()
err := context.Put(ContractName, key, cdata)
err = context.Put(ContractName, key, cdata)
if err != nil {
return nil, 0, err
}
......@@ -428,6 +432,29 @@ func (r *ContractManagerRuntime) InstallContract(context protocol.TxSimContext,
return contract, result.GasUsed, nil
}
func (r *ContractManagerRuntime) getCreator(context protocol.TxSimContext) (*accesscontrol.MemberFull, error) {
ac, err := context.GetAccessControl()
if err != nil {
r.log.Warn(err)
return nil, err
}
sender := context.GetSender()
member, err := ac.NewMember(sender)
if err != nil {
r.log.Warn(err)
return nil, err
}
creator := &accesscontrol.MemberFull{
OrgId: sender.GetOrgId(),
MemberType: sender.GetMemberType(),
MemberInfo: sender.GetMemberInfo(),
MemberId: member.GetMemberId(),
Role: string(member.GetRole()),
Uid: member.GetUid(),
}
return creator, nil
}
//UpgradeContract 升级现有合约
func (r *ContractManagerRuntime) UpgradeContract(context protocol.TxSimContext, name, version string, byteCode []byte,
runTime commonPb.RuntimeType, upgradeParameters map[string][]byte) (*commonPb.Contract, uint64, error) {
......
......@@ -26,9 +26,10 @@ func TestContractManagerRuntime_InstallContract(t *testing.T) {
ctrl := gomock.NewController(t)
txSimContext := mock.NewMockTxSimContext(ctrl)
defer ctrl.Finish()
//acTest := mock.NewMockAccessControlProvider(ctrl)
//acTest.EXPECT().GetHashAlg().Return("SHA256").AnyTimes()
//txSimContext.EXPECT().GetAccessControl().Return(acTest, nil).AnyTimes()
acTest := mock.NewMockAccessControlProvider(ctrl)
acTest.EXPECT().GetHashAlg().Return("SHA256").AnyTimes()
acTest.EXPECT().NewMember(gomock.Any()).Return(&Mb{}, nil).AnyTimes()
txSimContext.EXPECT().GetAccessControl().Return(acTest, nil).AnyTimes()
txSimContext.EXPECT().Get(gomock.Any(), gomock.Any()).Return([]byte{}, nil).AnyTimes()
txSimContext.EXPECT().GetSender().Return(&pbac.Member{MemberInfo: []byte("user1")}).AnyTimes()
txSimContext.EXPECT().Put(gomock.Any(), gomock.Any(), gomock.Any()).AnyTimes()
......@@ -195,6 +196,10 @@ func TestContractManagerRuntime_InstallContract2(t *testing.T) {
ctrl := gomock.NewController(t)
txSimContext := mock.NewMockTxSimContext(ctrl)
defer ctrl.Finish()
acTest := mock.NewMockAccessControlProvider(ctrl)
acTest.EXPECT().GetHashAlg().Return("SHA256").AnyTimes()
acTest.EXPECT().NewMember(gomock.Any()).Return(&Mb{}, nil).AnyTimes()
txSimContext.EXPECT().GetAccessControl().Return(acTest, nil).AnyTimes()
txSimContext.EXPECT().Get(gomock.Any(), gomock.Any()).Return([]byte{}, nil).AnyTimes()
txSimContext.EXPECT().GetSender().Return(&pbac.Member{MemberInfo: []byte("user1")}).AnyTimes()
txSimContext.EXPECT().Put(gomock.Any(), gomock.Any(), gomock.Any()).AnyTimes()
......@@ -221,3 +226,30 @@ func TestContractManagerRuntime_UpgradeContract2(t *testing.T) {
result := runtime.upgradeContract(txSimContext, initParameters())
assert.EqualValues(t, 0, result.Code)
}
type Mb struct {
}
func (m Mb) GetMemberId() string {
return "memberId"
}
func (m Mb) GetOrgId() string {
return "orgId"
}
func (m Mb) GetRole() protocol.Role {
return "role"
}
func (m Mb) GetUid() string {
return "uid"
}
func (m Mb) Verify(hashType string, msg []byte, sig []byte) error {
panic("implement me")
}
func (m Mb) GetMember() (*pbac.Member, error) {
panic("implement me")
}
......@@ -3,13 +3,13 @@ module chainmaker.org/chainmaker/vm-native/v2
go 1.15
require (
chainmaker.org/chainmaker/chainconf/v2 v2.1.2-0.20220108134151-1a64f9a1c6a1
chainmaker.org/chainmaker/common/v2 v2.1.2-0.20211223085411-e4d0e79b2fb7
chainmaker.org/chainmaker/localconf/v2 v2.1.1-0.20211214124610-bb7620382194
chainmaker.org/chainmaker/chainconf/v2 v2.1.2-0.20220113072252-aecb4f7ffef0
chainmaker.org/chainmaker/common/v2 v2.1.2-0.20220118101118-f256fc9c55e6
chainmaker.org/chainmaker/localconf/v2 v2.1.1-0.20220112085516-908b8478be8f
chainmaker.org/chainmaker/logger/v2 v2.1.1-0.20211214124250-621f11b35ab0
chainmaker.org/chainmaker/pb-go/v2 v2.1.1-0.20220107183321-db2282e902c5
chainmaker.org/chainmaker/protocol/v2 v2.1.2-0.20220107184221-3b7ad20fc480
chainmaker.org/chainmaker/utils/v2 v2.1.1-0.20220107161104-2478c2170e16
chainmaker.org/chainmaker/pb-go/v2 v2.1.1-0.20220119062501-d1b3a201f7fb
chainmaker.org/chainmaker/protocol/v2 v2.1.2-0.20220113081648-bbf6c1946b59
chainmaker.org/chainmaker/utils/v2 v2.1.1-0.20220114120415-8e1af1e262a7
github.com/gogo/protobuf v1.3.2
github.com/golang/mock v1.6.0
github.com/golang/protobuf v1.5.2
......
chainmaker.org/chainmaker/chainconf/v2 v2.1.2-0.20220108134151-1a64f9a1c6a1 h1:hU0RwL4vqGJQtkpYdTtnOmPy9NTvreWdX7dY/7KWojc=
chainmaker.org/chainmaker/chainconf/v2 v2.1.2-0.20220108134151-1a64f9a1c6a1/go.mod h1:VMGqTkTrANqthL6lBpaPt3H68+ZciNApjfSb+K1di7Q=
chainmaker.org/chainmaker/chainconf/v2 v2.1.2-0.20220113072252-aecb4f7ffef0 h1:iCWWSFcQTy/jos6Q3X0QUl3Blp/lyFKFnxKRpWUSmQY=
chainmaker.org/chainmaker/chainconf/v2 v2.1.2-0.20220113072252-aecb4f7ffef0/go.mod h1:AR2MszGq1lxI9sHfqj/80cYQ0TMICMT1cANDeNNxv+s=
chainmaker.org/chainmaker/common/v2 v2.1.1-0.20211214041159-fe0b2240f08c/go.mod h1:mxLliE20J5mML421llb1T8vj9VtULEMGDA88TITgl68=
chainmaker.org/chainmaker/common/v2 v2.1.2-0.20211223085411-e4d0e79b2fb7 h1:x41AJQdhgMSycEvC7HDsWkxjh+3Gw3GCLOjzx2b41LE=
chainmaker.org/chainmaker/common/v2 v2.1.2-0.20211223085411-e4d0e79b2fb7/go.mod h1:mxLliE20J5mML421llb1T8vj9VtULEMGDA88TITgl68=
chainmaker.org/chainmaker/localconf/v2 v2.1.1-0.20211214124610-bb7620382194 h1:dAJ7ZvgbReH7KzzFLkOnN4cbHzijXR2QiqFJzg0Uj4s=
chainmaker.org/chainmaker/localconf/v2 v2.1.1-0.20211214124610-bb7620382194/go.mod h1:ylpW9ir14psujTtKb6qQW81aKhnhjzWW3n9XpjD9S0A=
chainmaker.org/chainmaker/common/v2 v2.1.2-0.20220118101118-f256fc9c55e6 h1:S1cCAfr20W+yV2oiFi64Mm0tCi/amQ01vc6W5fubQwQ=
chainmaker.org/chainmaker/common/v2 v2.1.2-0.20220118101118-f256fc9c55e6/go.mod h1:mxLliE20J5mML421llb1T8vj9VtULEMGDA88TITgl68=
chainmaker.org/chainmaker/localconf/v2 v2.1.1-0.20220112085516-908b8478be8f h1:LrJM1BxZSNuVu4856jIHefku2/0dNGwVoIsvHCgEQi8=
chainmaker.org/chainmaker/localconf/v2 v2.1.1-0.20220112085516-908b8478be8f/go.mod h1:ylpW9ir14psujTtKb6qQW81aKhnhjzWW3n9XpjD9S0A=
chainmaker.org/chainmaker/logger/v2 v2.1.1-0.20211214124250-621f11b35ab0 h1:62Lqj463DA9D9g+B8Ciy9RgVf9KmP+4Ayyu0MHiGIJs=
chainmaker.org/chainmaker/logger/v2 v2.1.1-0.20211214124250-621f11b35ab0/go.mod h1:pGuJzxvh/JywvHX2+ezy+Xts/Pajw4PGspKGc27U1ow=
chainmaker.org/chainmaker/pb-go/v2 v2.1.1-0.20211214073209-1288f39035e8/go.mod h1:gDZodc1Kp6snzGXugS/REqfCqNNizhniQmjeOKUVf64=
chainmaker.org/chainmaker/pb-go/v2 v2.1.1-0.20211215062821-d83f1382c35e/go.mod h1:gDZodc1Kp6snzGXugS/REqfCqNNizhniQmjeOKUVf64=
chainmaker.org/chainmaker/pb-go/v2 v2.1.1-0.20220107183321-db2282e902c5 h1:RqkQa3FdNi1W0crZFSpVRvutSHxJn8U9IQHh7Ym6Vvo=
chainmaker.org/chainmaker/pb-go/v2 v2.1.1-0.20220107183321-db2282e902c5/go.mod h1:b5fg5e93xCjSHU1b5yk/mnslab+z7N08kMkNVDoSpcI=
chainmaker.org/chainmaker/protocol/v2 v2.1.2-0.20211214124103-9512460ad844/go.mod h1:D3B4Ss0Ii1ga1TWBteOuxtOeDZkh4ccExvzZsGK1Mj0=
chainmaker.org/chainmaker/protocol/v2 v2.1.2-0.20220107184221-3b7ad20fc480 h1:zwv574WKHF3dSuyx3t9K6RAl6gEbN30uB/OXlWXFItU=
chainmaker.org/chainmaker/protocol/v2 v2.1.2-0.20220107184221-3b7ad20fc480/go.mod h1:JqzgVT/OlfpK/ng14RLeydbpOI2u3R2n2G6cu4IS9/s=
chainmaker.org/chainmaker/utils/v2 v2.1.1-0.20220107161104-2478c2170e16 h1:wqu3O0/YBPtOXvqu+BHnHy4Abrj0/xodvsE9fMfsNtc=
chainmaker.org/chainmaker/utils/v2 v2.1.1-0.20220107161104-2478c2170e16/go.mod h1:3YX46GuLB9uJtW3aM4NIoY5SilHB0/5xxWktQuyJ0Pg=
chainmaker.org/chainmaker/pb-go/v2 v2.1.1-0.20220110032709-5947499a1a6d/go.mod h1:b5fg5e93xCjSHU1b5yk/mnslab+z7N08kMkNVDoSpcI=
chainmaker.org/chainmaker/pb-go/v2 v2.1.1-0.20220111065457-38aa34ce86a3/go.mod h1:b5fg5e93xCjSHU1b5yk/mnslab+z7N08kMkNVDoSpcI=
chainmaker.org/chainmaker/pb-go/v2 v2.1.1-0.20220119062501-d1b3a201f7fb h1:HmLJvvtUyRmiDc8rCtLdentg0alEXCRgtZB+WSqYs+4=
chainmaker.org/chainmaker/pb-go/v2 v2.1.1-0.20220119062501-d1b3a201f7fb/go.mod h1:b5fg5e93xCjSHU1b5yk/mnslab+z7N08kMkNVDoSpcI=
chainmaker.org/chainmaker/protocol/v2 v2.1.2-0.20220110033503-d6b4e5a065d9/go.mod h1:7VlxwX9MHyHpfAFw7OW+y7hUqawbp/GZKLeQlRDVZdk=
chainmaker.org/chainmaker/protocol/v2 v2.1.2-0.20220113081648-bbf6c1946b59 h1:SR3GsTur2WAsDllkmAWCxFtcWjzVWG9DIWDsYWnzfYs=
chainmaker.org/chainmaker/protocol/v2 v2.1.2-0.20220113081648-bbf6c1946b59/go.mod h1:SYkMoufkVVj4wI1JOU/YpV4Re4Z2i1WXgk+sn0ulWDk=
chainmaker.org/chainmaker/utils/v2 v2.1.1-0.20220110033929-0723ce6bd6ac/go.mod h1:gcBoQ+BL9xodHvb5oh8SLfdo9IEOYzGx+XLsECTj5xk=
chainmaker.org/chainmaker/utils/v2 v2.1.1-0.20220114120415-8e1af1e262a7 h1:RT1NbZf0M7i4p9WmDOoGD59W1FygpEMd5mL8Otzqa4w=
chainmaker.org/chainmaker/utils/v2 v2.1.1-0.20220114120415-8e1af1e262a7/go.mod h1:GeDrATiYzHJ6tdzV3+81kBjCBy5Bb9fCjTQLZLE6kJo=
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU=
......
......@@ -22,6 +22,10 @@ type TxContextMock struct {
cacheMap dataStore
}
func (s *TxContextMock) GetNoRecord(contractName string, key []byte) ([]byte, error) {
panic("implement me")
}
func (s *TxContextMock) GetBlockTimestamp() int64 {
panic("implement me")
}
......
......@@ -12,6 +12,8 @@ import (
"errors"
"fmt"
"chainmaker.org/chainmaker/pb-go/v2/accesscontrol"
"chainmaker.org/chainmaker/vm-native/v2/chainconfigmgr"
"chainmaker.org/chainmaker/vm-native/v2/common"
......@@ -560,16 +562,20 @@ func (r *ContractManagerRuntime) InstallContract(context protocol.TxSimContext,
if len(existContract) > 0 { //exist
return nil, errContractExist
}
creator, err := r.getCreator(context)
if err != nil {
return nil, err
}
contract := &commonPb.Contract{
Name: name,
Version: version,
RuntimeType: runTime,
Status: commonPb.ContractStatus_NORMAL,
Creator: context.GetSender(),
Creator: creator,
}
cdata, _ := contract.Marshal()
err := context.Put(ContractName, key, cdata)
err = context.Put(ContractName, key, cdata)
if err != nil {
return nil, err
}
......@@ -713,3 +719,26 @@ func (r *ContractManagerRuntime) changeContractStatus(context protocol.TxSimCont
}
return contract, nil
}
func (r *ContractManagerRuntime) getCreator(context protocol.TxSimContext) (*accesscontrol.MemberFull, error) {
ac, err := context.GetAccessControl()
if err != nil {
r.log.Warn(err)
return nil, err
}
sender := context.GetSender()
member, err := ac.NewMember(sender)
if err != nil {
r.log.Warn(err)
return nil, err
}
creator := &accesscontrol.MemberFull{
OrgId: sender.GetOrgId(),
MemberType: sender.GetMemberType(),
MemberInfo: sender.GetMemberInfo(),
MemberId: member.GetMemberId(),
Role: string(member.GetRole()),
Uid: member.GetUid(),
}
return creator, nil
}
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