Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
P
plugin
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
JIRA
JIRA
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
link33
plugin
Commits
5d7a8a13
Commit
5d7a8a13
authored
Mar 01, 2021
by
袁兴强
Committed by
vipwzw
Mar 22, 2021
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
support string parameter for wasm contracts
parent
7d52d0f3
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
70 additions
and
29 deletions
+70
-29
wasm.go
plugin/dapp/wasm/commands/wasm.go
+3
-0
README.md
plugin/dapp/wasm/contracts/README.md
+2
-2
common.h
plugin/dapp/wasm/contracts/common.h
+2
-0
callback.go
plugin/dapp/wasm/executor/callback.go
+8
-0
exec.go
plugin/dapp/wasm/executor/exec.go
+4
-0
resolver.go
plugin/dapp/wasm/executor/resolver.go
+15
-0
wasm.go
plugin/dapp/wasm/executor/wasm.go
+2
-0
wasm.proto
plugin/dapp/wasm/proto/wasm.proto
+1
-0
wasm.pb.go
plugin/dapp/wasm/types/wasm.pb.go
+33
-27
No files found.
plugin/dapp/wasm/commands/wasm.go
View file @
5d7a8a13
...
...
@@ -62,6 +62,7 @@ func cmdCallContract() *cobra.Command {
cmd
.
Flags
()
.
StringP
(
"name"
,
"n"
,
""
,
"contract name"
)
cmd
.
Flags
()
.
StringP
(
"method"
,
"m"
,
""
,
"method name"
)
cmd
.
Flags
()
.
IntSliceP
(
"parameters"
,
"p"
,
nil
,
"parameters of the method which should be num"
)
cmd
.
Flags
()
.
StringSliceP
(
"env"
,
"v"
,
nil
,
"string parameters set to environment"
)
_
=
cmd
.
MarkFlagRequired
(
"name"
)
_
=
cmd
.
MarkFlagRequired
(
"method"
)
return
cmd
...
...
@@ -114,6 +115,7 @@ func callContract(cmd *cobra.Command, args []string) {
name
,
_
:=
cmd
.
Flags
()
.
GetString
(
"name"
)
method
,
_
:=
cmd
.
Flags
()
.
GetString
(
"method"
)
parameters
,
_
:=
cmd
.
Flags
()
.
GetIntSlice
(
"parameters"
)
env
,
_
:=
cmd
.
Flags
()
.
GetStringSlice
(
"env"
)
var
parameters2
[]
int64
for
_
,
param
:=
range
parameters
{
parameters2
=
append
(
parameters2
,
int64
(
param
))
...
...
@@ -123,6 +125,7 @@ func callContract(cmd *cobra.Command, args []string) {
Contract
:
name
,
Method
:
method
,
Parameters
:
parameters2
,
Env
:
env
,
}
params
:=
rpctypes
.
CreateTxIn
{
Execer
:
wasmtypes
.
WasmX
,
...
...
plugin/dapp/wasm/contracts/README.md
View file @
5d7a8a13
...
...
@@ -60,8 +60,8 @@ wabt/bin/wasm2wat dice.wasm
### 调用合约
```
bash
#其中参数为用逗号分隔的数字
./chain33-cli send wasm call
-n
发布合约时指定的合约
-m
调用合约方法名
-p
参数
-k
用户私钥
#其中参数为用逗号分隔的数字
列表,字符串参数为逗号分隔的字符串列表
./chain33-cli send wasm call
-n
发布合约时指定的合约
-m
调用合约方法名
-p
参数
-
v
字符串参数
-
k
用户私钥
```
### 转账及提款
...
...
plugin/dapp/wasm/contracts/common.h
View file @
5d7a8a13
...
...
@@ -33,6 +33,8 @@ int64_t getRandom();
void
sha256
(
const
char
*
data
,
size_t
data_len
,
char
*
sum
,
size_t
sum_len
);
void
printlog
(
const
char
*
log
,
size_t
len
);
void
printint
(
int64_t
n
);
size_t
getENVSize
(
int64_t
n
);
size_t
getENV
(
int64_t
n
);
#ifdef __cplusplus
}
...
...
plugin/dapp/wasm/executor/callback.go
View file @
5d7a8a13
...
...
@@ -170,3 +170,11 @@ func printlog(s string) {
func
sha256
(
data
[]
byte
)
[]
byte
{
return
common
.
Sha256
(
data
)
}
func
getENVSize
(
n
int
)
int
{
return
len
(
wasmCB
.
ENV
[
n
])
}
func
getENV
(
n
int
)
string
{
return
wasmCB
.
ENV
[
n
]
}
plugin/dapp/wasm/executor/exec.go
View file @
5d7a8a13
...
...
@@ -113,6 +113,10 @@ func (w *Wasm) Exec_Call(payload *types2.WasmCall, tx *types.Transaction, index
w
.
contractName
=
payload
.
Contract
w
.
tx
=
tx
w
.
execAddr
=
address
.
ExecAddress
(
string
(
types
.
GetRealExecName
(
tx
.
Execer
)))
w
.
ENV
=
make
(
map
[
int
]
string
)
for
i
,
v
:=
range
payload
.
Env
{
w
.
ENV
[
i
]
=
v
}
wasmCB
=
w
defer
func
()
{
wasmCB
=
nil
...
...
plugin/dapp/wasm/executor/resolver.go
View file @
5d7a8a13
...
...
@@ -287,6 +287,21 @@ func (r *Resolver) ResolveFunc(module, field string) exec.FunctionImport {
copy
(
vm
.
Memory
[
sumPtr
:
sumPtr
+
sumLen
],
sha256
(
data
))
return
0
}
case
"getENVSize"
:
return
func
(
vm
*
exec
.
VirtualMachine
)
int64
{
n
:=
vm
.
GetCurrentFrame
()
.
Locals
[
0
]
return
int64
(
getENVSize
(
int
(
n
)))
}
case
"getENV"
:
return
func
(
vm
*
exec
.
VirtualMachine
)
int64
{
n
:=
vm
.
GetCurrentFrame
()
.
Locals
[
0
]
valuePtr
:=
int
(
uint32
(
vm
.
GetCurrentFrame
()
.
Locals
[
1
]))
valueLen
:=
int
(
uint32
(
vm
.
GetCurrentFrame
()
.
Locals
[
2
]))
value
:=
getENV
(
int
(
n
))
copy
(
vm
.
Memory
[
valuePtr
:
valuePtr
+
valueLen
],
value
)
return
int64
(
len
(
value
))
}
default
:
log
.
Error
(
"ResolveFunc"
,
"unknown field"
,
field
)
...
...
plugin/dapp/wasm/executor/wasm.go
View file @
5d7a8a13
...
...
@@ -38,11 +38,13 @@ type Wasm struct {
execAddr
string
contractName
string
VMCache
map
[
string
]
*
exec
.
VirtualMachine
ENV
map
[
int
]
string
}
func
newWasm
()
drivers
.
Driver
{
d
:=
&
Wasm
{
VMCache
:
make
(
map
[
string
]
*
exec
.
VirtualMachine
),
ENV
:
make
(
map
[
int
]
string
),
}
d
.
SetChild
(
d
)
d
.
SetExecutorType
(
types
.
LoadExecutorType
(
driverName
))
...
...
plugin/dapp/wasm/proto/wasm.proto
View file @
5d7a8a13
...
...
@@ -19,6 +19,7 @@ message wasmCall {
string
contract
=
1
;
string
method
=
2
;
repeated
int64
parameters
=
3
;
repeated
string
env
=
4
;
}
message
queryCheckContract
{
...
...
plugin/dapp/wasm/types/wasm.pb.go
View file @
5d7a8a13
...
...
@@ -5,9 +5,8 @@ package types
import
(
fmt
"fmt"
math
"math"
proto
"github.com/golang/protobuf/proto"
math
"math"
)
// Reference imports to suppress errors if they are not otherwise used.
...
...
@@ -160,6 +159,7 @@ type WasmCall struct {
Contract
string
`protobuf:"bytes,1,opt,name=contract,proto3" json:"contract,omitempty"`
Method
string
`protobuf:"bytes,2,opt,name=method,proto3" json:"method,omitempty"`
Parameters
[]
int64
`protobuf:"varint,3,rep,packed,name=parameters,proto3" json:"parameters,omitempty"`
Env
[]
string
`protobuf:"bytes,4,rep,name=env,proto3" json:"env,omitempty"`
XXX_NoUnkeyedLiteral
struct
{}
`json:"-"`
XXX_unrecognized
[]
byte
`json:"-"`
XXX_sizecache
int32
`json:"-"`
...
...
@@ -211,6 +211,13 @@ func (m *WasmCall) GetParameters() []int64 {
return
nil
}
func
(
m
*
WasmCall
)
GetEnv
()
[]
string
{
if
m
!=
nil
{
return
m
.
Env
}
return
nil
}
type
QueryCheckContract
struct
{
Name
string
`protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
XXX_NoUnkeyedLiteral
struct
{}
`json:"-"`
...
...
@@ -449,31 +456,30 @@ func init() {
proto
.
RegisterType
((
*
LocalDataLog
)(
nil
),
"types.localDataLog"
)
}
func
init
()
{
proto
.
RegisterFile
(
"wasm.proto"
,
fileDescriptor_7d78909ad64e3bbb
)
}
func
init
()
{
proto
.
RegisterFile
(
"wasm.proto"
,
fileDescriptor_7d78909ad64e3bbb
)
}
var
fileDescriptor_7d78909ad64e3bbb
=
[]
byte
{
// 327 bytes of a gzipped FileDescriptorProto
0x1f
,
0x8b
,
0x08
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x02
,
0xff
,
0x9c
,
0x92
,
0x4f
,
0x4b
,
0xc3
,
0x40
,
0x10
,
0xc5
,
0x9b
,
0xa6
,
0x8d
,
0xcd
,
0x58
,
0xac
,
0x5d
,
0xa4
,
0x04
,
0x0f
,
0x1a
,
0x16
,
0x84
,
0x80
,
0xd0
,
0x83
,
0x8a
,
0x17
,
0x4f
,
0x5a
,
0x0f
,
0x3d
,
0x78
,
0xda
,
0xbb
,
0xc2
,
0xba
,
0x5d
,
0x6d
,
0xe9
,
0x26
,
0x5b
,
0x37
,
0x13
,
0x25
,
0xdf
,
0x5e
,
0xf6
,
0x4f
,
0x25
,
0x07
,
0xf1
,
0xe0
,
0x6d
,
0x66
,
0xf6
,
0x37
,
0xef
,
0x65
,
0x66
,
0x02
,
0xf0
,
0xc5
,
0xeb
,
0x72
,
0xbe
,
0x33
,
0x1a
,
0x35
,
0x19
,
0x62
,
0xbb
,
0x93
,
0x35
,
0x6d
,
0x7d
,
0xf1
,
0x5e
,
0xe0
,
0x46
,
0x57
,
0xe4
,
0x12
,
0x12
,
0x61
,
0x24
,
0x47
,
0x99
,
0x45
,
0x79
,
0x54
,
0x1c
,
0x5e
,
0x4d
,
0xe7
,
0x8e
,
0x9a
,
0x5b
,
0x64
,
0xe1
,
0x1e
,
0x96
,
0x3d
,
0x16
,
0x10
,
0x72
,
0x01
,
0x03
,
0xc1
,
0x95
,
0xca
,
0xfa
,
0x0e
,
0x9d
,
0x74
,
0x51
,
0xae
,
0xd4
,
0xb2
,
0xc7
,
0xdc
,
0x33
,
0x39
,
0x82
,
0x3e
,
0xb6
,
0x59
,
0x9c
,
0x47
,
0xc5
,
0x90
,
0xf5
,
0xb1
,
0x7d
,
0x38
,
0x80
,
0xe1
,
0x27
,
0x57
,
0x8d
,
0xa4
,
0x37
,
0xde
,
0xda
,
0xeb
,
0x12
,
0x02
,
0x83
,
0x8a
,
0x97
,
0xde
,
0x38
,
0x65
,
0x2e
,
0xb6
,
0x35
,
0xa1
,
0x57
,
0xd2
,
0x39
,
0x8c
,
0x99
,
0x8b
,
0xe9
,
0x0b
,
0x8c
,
0xf6
,
0x16
,
0xe4
,
0x14
,
0x46
,
0x42
,
0x57
,
0x68
,
0xb8
,
0xc0
,
0xd0
,
0xf7
,
0x93
,
0x93
,
0x19
,
0x24
,
0xa5
,
0xc4
,
0xb5
,
0x5e
,
0xb9
,
0xee
,
0x94
,
0x85
,
0x8c
,
0x9c
,
0x01
,
0xec
,
0xb8
,
0xe1
,
0xa5
,
0x44
,
0x69
,
0xea
,
0x2c
,
0xce
,
0xe3
,
0x22
,
0x66
,
0x9d
,
0x0a
,
0x2d
,
0x80
,
0x7c
,
0x34
,
0xd2
,
0xb4
,
0x8b
,
0xb5
,
0x14
,
0xdb
,
0xc5
,
0x5e
,
0xed
,
0x97
,
0xaf
,
0xa3
,
0xe7
,
0x90
,
0x8a
,
0xa6
,
0x46
,
0x5d
,
0x3e
,
0xe9
,
0x77
,
0x0b
,
0x6c
,
0xaa
,
0x37
,
0x9d
,
0x45
,
0x79
,
0x6c
,
0x01
,
0x1b
,
0xd3
,
0x3b
,
0x98
,
0xfa
,
0x55
,
0xed
,
0x65
,
0x02
,
0xf8
,
0xe7
,
0x9c
,
0x69
,
0x98
,
0xf3
,
0x19
,
0x26
,
0x76
,
0x7d
,
0xdd
,
0xd6
,
0xff
,
0x8c
,
0x3b
,
0x83
,
0xc4
,
0xc8
,
0xba
,
0x51
,
0x18
,
0x2e
,
0x10
,
0x32
,
0x7a
,
0x0b
,
0x63
,
0xa5
,
0x05
,
0x57
,
0x8f
,
0x1c
,
0xb9
,
0xd5
,
0x3e
,
0x86
,
0x78
,
0x2b
,
0x5b
,
0x27
,
0x3b
,
0x66
,
0x36
,
0x24
,
0x27
,
0xe1
,
0x4e
,
0x61
,
0xfb
,
0x3e
,
0x79
,
0x4d
,
0xdc
,
0xdf
,
0x73
,
0xfd
,
0x1d
,
0x00
,
0x00
,
0xff
,
0xff
,
0xc3
,
0xc2
,
0x9e
,
0xbb
,
0x4b
,
0x02
,
0x00
,
0x00
,
// 337 bytes of a gzipped FileDescriptorProto
0x1f
,
0x8b
,
0x08
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x02
,
0xff
,
0x9c
,
0x52
,
0x31
,
0x4f
,
0xf3
,
0x30
,
0x10
,
0x6d
,
0xea
,
0x36
,
0x5f
,
0x73
,
0x5f
,
0x45
,
0x5b
,
0x0b
,
0x55
,
0x11
,
0x03
,
0x44
,
0x96
,
0x90
,
0x22
,
0x21
,
0x75
,
0x00
,
0xc4
,
0xc2
,
0x04
,
0x65
,
0xe8
,
0xc0
,
0xe4
,
0x9d
,
0xc1
,
0xb8
,
0x86
,
0x56
,
0x75
,
0xe2
,
0xe0
,
0x5c
,
0x8a
,
0xf2
,
0xef
,
0x91
,
0x1d
,
0x17
,
0x75
,
0x40
,
0x0c
,
0x6c
,
0xef
,
0x9d
,
0xdf
,
0xbd
,
0x97
,
0xbb
,
0x0b
,
0xc0
,
0xa7
,
0xa8
,
0x8b
,
0x45
,
0x65
,
0x0d
,
0x1a
,
0x3a
,
0xc4
,
0xb6
,
0x52
,
0x35
,
0x6b
,
0xbb
,
0xe2
,
0x83
,
0xc4
,
0xad
,
0x29
,
0xe9
,
0x15
,
0xc4
,
0xd2
,
0x2a
,
0x81
,
0x2a
,
0x8d
,
0xb2
,
0x28
,
0xff
,
0x7f
,
0x3d
,
0x5b
,
0x78
,
0xd5
,
0xc2
,
0x49
,
0x96
,
0xfe
,
0x61
,
0xd5
,
0xe3
,
0x41
,
0x42
,
0x2f
,
0x61
,
0x20
,
0x85
,
0xd6
,
0x69
,
0xdf
,
0x4b
,
0x27
,
0xc7
,
0x52
,
0xa1
,
0xf5
,
0xaa
,
0xc7
,
0xfd
,
0x33
,
0x3d
,
0x81
,
0x3e
,
0xb6
,
0x29
,
0xc9
,
0xa2
,
0x7c
,
0xc8
,
0xfb
,
0xd8
,
0x3e
,
0xfe
,
0x83
,
0xe1
,
0x5e
,
0xe8
,
0x46
,
0xb1
,
0xdb
,
0x2e
,
0xba
,
0xf3
,
0xa5
,
0x14
,
0x06
,
0xa5
,
0x28
,
0xba
,
0xe0
,
0x84
,
0x7b
,
0xec
,
0x6a
,
0xd2
,
0xac
,
0x95
,
0x4f
,
0x18
,
0x73
,
0x8f
,
0x59
,
0x05
,
0xa3
,
0x43
,
0x04
,
0x3d
,
0x83
,
0x91
,
0x34
,
0x25
,
0x5a
,
0x21
,
0x31
,
0xf4
,
0x7d
,
0x73
,
0x3a
,
0x87
,
0xb8
,
0x50
,
0xb8
,
0x31
,
0x6b
,
0xdf
,
0x9d
,
0xf0
,
0xc0
,
0xe8
,
0x39
,
0x40
,
0x25
,
0xac
,
0x28
,
0x14
,
0x2a
,
0x5b
,
0xa7
,
0x24
,
0x23
,
0x39
,
0xe1
,
0x47
,
0x15
,
0x3a
,
0x05
,
0xa2
,
0xca
,
0x7d
,
0x3a
,
0xc8
,
0x48
,
0x9e
,
0x70
,
0x07
,
0x59
,
0x0e
,
0xf4
,
0xa3
,
0x51
,
0xb6
,
0x5d
,
0x6e
,
0x94
,
0xdc
,
0x2d
,
0x0f
,
0xfe
,
0x3f
,
0x7c
,
0x2f
,
0xbb
,
0x80
,
0x44
,
0x36
,
0x35
,
0x9a
,
0xe2
,
0xd9
,
0xbc
,
0x3b
,
0xc1
,
0xb6
,
0x7c
,
0x33
,
0x69
,
0xe4
,
0x9d
,
0x3c
,
0x66
,
0xf7
,
0x30
,
0xeb
,
0x96
,
0x77
,
0xb0
,
0x09
,
0xc2
,
0x5f
,
0x27
,
0x4f
,
0xc2
,
0xe4
,
0x2f
,
0x30
,
0x71
,
0x0b
,
0x3d
,
0x6e
,
0xfd
,
0xcb
,
0x02
,
0xe6
,
0x10
,
0x5b
,
0x55
,
0x37
,
0x1a
,
0xc3
,
0x4d
,
0x02
,
0x63
,
0x77
,
0x30
,
0xd6
,
0x46
,
0x0a
,
0xfd
,
0x24
,
0x50
,
0x38
,
0xef
,
0x29
,
0x90
,
0x9d
,
0x6a
,
0xbd
,
0xed
,
0x98
,
0x3b
,
0x48
,
0x4f
,
0xc3
,
0xe5
,
0xc2
,
0x3d
,
0x3a
,
0xf2
,
0x1a
,
0xfb
,
0xff
,
0xe9
,
0xe6
,
0x2b
,
0x00
,
0x00
,
0xff
,
0xff
,
0x62
,
0xf8
,
0x3a
,
0xae
,
0x5d
,
0x02
,
0x00
,
0x00
,
}
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