Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
新注册的用户请输入邮箱并保存,随后登录邮箱激活账号。后续可直接使用邮箱登录!
Open sidebar
白 鹿
contract-sdk-go
Commits
12c3d53e
Commit
12c3d53e
authored
Feb 06, 2023
by
gh lu
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fix: get empty state returns nil instead of []byte
--bug=1004998
parent
9eff2ad2
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
39 additions
and
119 deletions
+39
-119
sdk/mock_sdk_interface.go
sdk/mock_sdk_interface.go
+16
-0
sdk/sdk.go
sdk/sdk.go
+16
-119
sdk/sdk_interface.go
sdk/sdk_interface.go
+7
-0
No files found.
sdk/mock_sdk_interface.go
View file @
12c3d53e
...
...
@@ -398,6 +398,22 @@ func (mr *MockSDKInterfaceMockRecorder) GetStateFromKeyByte(key interface{}) *go
return
mr
.
mock
.
ctrl
.
RecordCallWithMethodType
(
mr
.
mock
,
"GetStateFromKeyByte"
,
reflect
.
TypeOf
((
*
MockSDKInterface
)(
nil
)
.
GetStateFromKeyByte
),
key
)
}
// GetStateWithExists mocks base method.
func
(
m
*
MockSDKInterface
)
GetStateWithExists
(
key
,
field
string
)
(
string
,
bool
,
error
)
{
m
.
ctrl
.
T
.
Helper
()
ret
:=
m
.
ctrl
.
Call
(
m
,
"GetStateWithExists"
,
key
,
field
)
ret0
,
_
:=
ret
[
0
]
.
(
string
)
ret1
,
_
:=
ret
[
1
]
.
(
bool
)
ret2
,
_
:=
ret
[
2
]
.
(
error
)
return
ret0
,
ret1
,
ret2
}
// GetStateWithExists indicates an expected call of GetStateWithExists.
func
(
mr
*
MockSDKInterfaceMockRecorder
)
GetStateWithExists
(
key
,
field
interface
{})
*
gomock
.
Call
{
mr
.
mock
.
ctrl
.
T
.
Helper
()
return
mr
.
mock
.
ctrl
.
RecordCallWithMethodType
(
mr
.
mock
,
"GetStateWithExists"
,
reflect
.
TypeOf
((
*
MockSDKInterface
)(
nil
)
.
GetStateWithExists
),
key
,
field
)
}
// GetTxId mocks base method.
func
(
m
*
MockSDKInterface
)
GetTxId
()
(
string
,
error
)
{
m
.
ctrl
.
T
.
Helper
()
...
...
sdk/sdk.go
View file @
12c3d53e
...
...
@@ -119,28 +119,24 @@ func (s *SDK) GetArgs() map[string][]byte {
}
func
(
s
*
SDK
)
GetState
(
key
,
field
string
)
(
string
,
error
)
{
s
.
sandboxLogger
.
Debugf
(
"get state for [%s#%s]"
,
key
,
field
)
if
err
:=
protocol
.
CheckKeyFieldStr
(
key
,
field
);
err
!=
nil
{
// get from chain maker
value
,
err
:=
s
.
GetStateByte
(
key
,
field
)
if
err
!=
nil
{
return
""
,
err
}
return
string
(
value
),
nil
}
// get from write set
if
value
,
done
:=
s
.
getFromWriteSet
(
key
,
field
);
done
{
s
.
putIntoReadSet
(
key
,
field
,
value
)
return
string
(
value
),
nil
}
// get from read set
if
value
,
done
:=
s
.
getFromReadSet
(
key
,
field
);
done
{
return
string
(
value
),
nil
}
func
(
s
*
SDK
)
GetStateWithExists
(
key
,
field
string
)
(
string
,
bool
,
error
)
{
// get from chain maker
value
,
err
:=
s
.
g
etState
(
key
,
field
)
value
,
err
:=
s
.
G
etState
Byte
(
key
,
field
)
if
err
!=
nil
{
return
""
,
err
return
""
,
false
,
err
}
return
string
(
value
),
nil
if
value
==
nil
{
return
""
,
false
,
nil
}
return
string
(
value
),
true
,
nil
}
func
(
s
*
SDK
)
GetBatchState
(
batchKeys
[]
*
vmPb
.
BatchKey
)
([]
*
vmPb
.
BatchKey
,
error
)
{
...
...
@@ -207,49 +203,11 @@ func (s *SDK) GetStateByte(key, field string) ([]byte, error) {
}
func
(
s
*
SDK
)
GetStateFromKey
(
key
string
)
(
string
,
error
)
{
s
.
sandboxLogger
.
Debugf
(
"get state for [%s#%s]"
,
key
,
""
)
if
err
:=
protocol
.
CheckKeyFieldStr
(
key
,
""
);
err
!=
nil
{
return
""
,
err
}
// get from write set
if
value
,
done
:=
s
.
getFromWriteSet
(
key
,
""
);
done
{
s
.
putIntoReadSet
(
key
,
""
,
value
)
return
string
(
value
),
nil
}
// get from read set
if
value
,
done
:=
s
.
getFromReadSet
(
key
,
""
);
done
{
return
string
(
value
),
nil
}
// get from chain maker
value
,
err
:=
s
.
getState
(
key
,
""
)
if
err
!=
nil
{
return
""
,
err
}
return
string
(
value
),
nil
return
s
.
GetState
(
key
,
""
)
}
func
(
s
*
SDK
)
GetStateFromKeyByte
(
key
string
)
([]
byte
,
error
)
{
s
.
sandboxLogger
.
Debugf
(
"get state for [%s#%s]"
,
key
,
""
)
if
err
:=
protocol
.
CheckKeyFieldStr
(
key
,
""
);
err
!=
nil
{
return
nil
,
err
}
// get from write set
if
value
,
done
:=
s
.
getFromWriteSet
(
key
,
""
);
done
{
s
.
putIntoReadSet
(
key
,
""
,
value
)
return
value
,
nil
}
// get from read set
if
value
,
done
:=
s
.
getFromReadSet
(
key
,
""
);
done
{
return
value
,
nil
}
// get from chain maker
return
s
.
getState
(
key
,
""
)
return
s
.
GetStateByte
(
key
,
""
)
}
func
(
s
*
SDK
)
getBatchState
(
batchKeys
[]
*
vmPb
.
BatchKey
)
([]
*
vmPb
.
BatchKey
,
error
)
{
...
...
@@ -850,37 +808,7 @@ func (s *SDK) NewHistoryKvIterForKey(key, field string) (KeyHistoryKvIter, error
}
func
(
s
*
SDK
)
GetSenderAddr
()
(
string
,
error
)
{
if
s
.
origin
!=
""
{
return
s
.
origin
,
nil
}
responseCh
:=
make
(
chan
*
protogo
.
DockerVMMessage
,
1
)
respNotify
:=
func
(
msg
*
protogo
.
DockerVMMessage
)
{
responseCh
<-
msg
}
getSenderAddrReq
:=
&
protogo
.
DockerVMMessage
{
ChainId
:
s
.
chainId
,
TxId
:
s
.
txId
,
Type
:
protogo
.
DockerVMType_GET_SENDER_ADDRESS_REQUEST
,
CrossContext
:
s
.
crossCtx
,
SysCallMessage
:
nil
,
Response
:
nil
,
Request
:
nil
,
}
s
.
sendSysCallRequestWithRespNotify
(
getSenderAddrReq
,
respNotify
)
result
:=
<-
responseCh
if
result
.
SysCallMessage
.
Code
==
protocol
.
ContractSdkSignalResultFail
{
return
""
,
errors
.
New
(
result
.
SysCallMessage
.
Message
)
}
origin
:=
string
(
result
.
SysCallMessage
.
Payload
[
KeySenderAddr
])
s
.
origin
=
origin
return
origin
,
nil
return
s
.
Origin
()
}
func
(
s
*
SDK
)
Sender
()
(
string
,
error
)
{
...
...
@@ -891,38 +819,7 @@ func (s *SDK) Sender() (string, error) {
return
s
.
senderAddress
,
nil
}
}
if
s
.
origin
!=
""
{
return
s
.
origin
,
nil
}
responseCh
:=
make
(
chan
*
protogo
.
DockerVMMessage
,
1
)
respNotify
:=
func
(
msg
*
protogo
.
DockerVMMessage
)
{
responseCh
<-
msg
}
getSenderAddrReq
:=
&
protogo
.
DockerVMMessage
{
ChainId
:
s
.
chainId
,
TxId
:
s
.
txId
,
Type
:
protogo
.
DockerVMType_GET_SENDER_ADDRESS_REQUEST
,
CrossContext
:
s
.
crossCtx
,
SysCallMessage
:
nil
,
Response
:
nil
,
Request
:
nil
,
}
s
.
sendSysCallRequestWithRespNotify
(
getSenderAddrReq
,
respNotify
)
result
:=
<-
responseCh
if
result
.
SysCallMessage
.
Code
==
protocol
.
ContractSdkSignalResultFail
{
return
""
,
errors
.
New
(
result
.
SysCallMessage
.
Message
)
}
origin
:=
string
(
result
.
SysCallMessage
.
Payload
[
KeySenderAddr
])
s
.
origin
=
origin
return
origin
,
nil
return
s
.
Origin
()
}
func
(
s
*
SDK
)
Origin
()
(
string
,
error
)
{
...
...
sdk/sdk_interface.go
View file @
12c3d53e
...
...
@@ -35,6 +35,13 @@ type SDKInterface interface {
// @return1: 获取结果,格式为string
// @return2: 获取错误信息
GetState
(
key
,
field
string
)
(
string
,
error
)
// GetStateWithExists get [key, field] from chain and db
// @param key: 获取的参数名
// @param field: 获取的参数名
// @return1: 获取结果,格式为string
// @return2: 是否存在,bool
// @return3: 获取错误信息
GetStateWithExists
(
key
,
field
string
)
(
string
,
bool
,
error
)
// GetBatchState get [BatchKeys] from chain and db
// @param batchKey: 获取的参数名
// @return1: 获取结果
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment