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
Registry
Registry
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
fbeb1685
Commit
fbeb1685
authored
Dec 24, 2018
by
linj
Committed by
vipwzw
Dec 25, 2018
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
use rpc to create token asset tx
parent
6f2df77c
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
64 additions
and
64 deletions
+64
-64
token.go
plugin/dapp/token/commands/token.go
+64
-6
utils.go
plugin/dapp/token/commands/utils.go
+0
-58
No files found.
plugin/dapp/token/commands/token.go
View file @
fbeb1685
...
@@ -7,6 +7,7 @@ package commands
...
@@ -7,6 +7,7 @@ package commands
import
(
import
(
"encoding/json"
"encoding/json"
"fmt"
"fmt"
"math"
"os"
"os"
"strconv"
"strconv"
"strings"
"strings"
...
@@ -75,12 +76,27 @@ func createTokenTransfer(cmd *cobra.Command, args []string) {
...
@@ -75,12 +76,27 @@ func createTokenTransfer(cmd *cobra.Command, args []string) {
amount
,
_
:=
cmd
.
Flags
()
.
GetFloat64
(
"amount"
)
amount
,
_
:=
cmd
.
Flags
()
.
GetFloat64
(
"amount"
)
note
,
_
:=
cmd
.
Flags
()
.
GetString
(
"note"
)
note
,
_
:=
cmd
.
Flags
()
.
GetString
(
"note"
)
symbol
,
_
:=
cmd
.
Flags
()
.
GetString
(
"symbol"
)
symbol
,
_
:=
cmd
.
Flags
()
.
GetString
(
"symbol"
)
txHex
,
err
:=
CreateRawTx
(
cmd
,
toAddr
,
amount
,
note
,
false
,
symbol
,
""
)
payload
:=
&
types
.
AssetsTransfer
{
To
:
toAddr
,
Amount
:
int64
(
math
.
Trunc
((
amount
+
0.0000001
)
*
1e4
))
*
1e4
,
Note
:
[]
byte
(
note
),
Cointoken
:
symbol
,
}
data
,
err
:=
json
.
Marshal
(
&
payload
)
if
err
!=
nil
{
if
err
!=
nil
{
fmt
.
Fprintln
(
os
.
Stderr
,
err
)
fmt
.
Fprintln
(
os
.
Stderr
,
err
)
return
return
}
}
fmt
.
Println
(
txHex
)
params
:=
&
rpctypes
.
CreateTxIn
{
Execer
:
types
.
ExecName
(
tokenty
.
TokenX
),
ActionName
:
"Transfer"
,
Payload
:
data
,
}
rpcLaddr
,
_
:=
cmd
.
Flags
()
.
GetString
(
"rpc_laddr"
)
ctx
:=
jsonclient
.
NewRPCCtx
(
rpcLaddr
,
"Chain33.CreateTransaction"
,
params
,
nil
)
ctx
.
RunWithoutMarshal
()
}
}
// CreateTokenTransferCmd create raw transfer tx
// CreateTokenTransferCmd create raw transfer tx
...
@@ -108,16 +124,41 @@ func addCreateTokenSendToExecFlags(cmd *cobra.Command) {
...
@@ -108,16 +124,41 @@ func addCreateTokenSendToExecFlags(cmd *cobra.Command) {
}
}
func
createTokenSendToExec
(
cmd
*
cobra
.
Command
,
args
[]
string
)
{
func
createTokenSendToExec
(
cmd
*
cobra
.
Command
,
args
[]
string
)
{
paraName
,
_
:=
cmd
.
Flags
()
.
GetString
(
"paraName"
)
exec
,
_
:=
cmd
.
Flags
()
.
GetString
(
"exec"
)
exec
,
_
:=
cmd
.
Flags
()
.
GetString
(
"exec"
)
exec
=
getRealExecName
(
paraName
,
exec
)
to
,
err
:=
GetExecAddr
(
exec
)
if
err
!=
nil
{
fmt
.
Fprintln
(
os
.
Stderr
,
err
)
return
}
amount
,
_
:=
cmd
.
Flags
()
.
GetFloat64
(
"amount"
)
amount
,
_
:=
cmd
.
Flags
()
.
GetFloat64
(
"amount"
)
note
,
_
:=
cmd
.
Flags
()
.
GetString
(
"note"
)
note
,
_
:=
cmd
.
Flags
()
.
GetString
(
"note"
)
symbol
,
_
:=
cmd
.
Flags
()
.
GetString
(
"symbol"
)
symbol
,
_
:=
cmd
.
Flags
()
.
GetString
(
"symbol"
)
txHex
,
err
:=
CreateRawTx
(
cmd
,
""
,
amount
,
note
,
false
,
symbol
,
exec
)
payload
:=
&
types
.
AssetsTransferToExec
{
To
:
to
,
Amount
:
int64
(
math
.
Trunc
((
amount
+
0.0000001
)
*
1e4
))
*
1e4
,
Note
:
[]
byte
(
note
),
Cointoken
:
symbol
,
ExecName
:
exec
,
}
data
,
err
:=
json
.
Marshal
(
&
payload
)
if
err
!=
nil
{
if
err
!=
nil
{
fmt
.
Fprintln
(
os
.
Stderr
,
err
)
fmt
.
Fprintln
(
os
.
Stderr
,
err
)
return
return
}
}
fmt
.
Println
(
txHex
)
params
:=
&
rpctypes
.
CreateTxIn
{
Execer
:
types
.
ExecName
(
tokenty
.
TokenX
),
ActionName
:
"TransferToExec"
,
Payload
:
data
,
}
rpcLaddr
,
_
:=
cmd
.
Flags
()
.
GetString
(
"rpc_laddr"
)
ctx
:=
jsonclient
.
NewRPCCtx
(
rpcLaddr
,
"Chain33.CreateTransaction"
,
params
,
nil
)
ctx
.
RunWithoutMarshal
()
}
}
// CreateTokenWithdrawCmd create raw withdraw tx
// CreateTokenWithdrawCmd create raw withdraw tx
...
@@ -151,17 +192,34 @@ func createTokenWithdraw(cmd *cobra.Command, args []string) {
...
@@ -151,17 +192,34 @@ func createTokenWithdraw(cmd *cobra.Command, args []string) {
amount
,
_
:=
cmd
.
Flags
()
.
GetFloat64
(
"amount"
)
amount
,
_
:=
cmd
.
Flags
()
.
GetFloat64
(
"amount"
)
note
,
_
:=
cmd
.
Flags
()
.
GetString
(
"note"
)
note
,
_
:=
cmd
.
Flags
()
.
GetString
(
"note"
)
symbol
,
_
:=
cmd
.
Flags
()
.
GetString
(
"symbol"
)
symbol
,
_
:=
cmd
.
Flags
()
.
GetString
(
"symbol"
)
exec
=
getRealExecName
(
paraName
,
exec
)
execAddr
,
err
:=
GetExecAddr
(
exec
)
execAddr
,
err
:=
GetExecAddr
(
exec
)
if
err
!=
nil
{
if
err
!=
nil
{
fmt
.
Fprintln
(
os
.
Stderr
,
err
)
fmt
.
Fprintln
(
os
.
Stderr
,
err
)
return
return
}
}
txHex
,
err
:=
CreateRawTx
(
cmd
,
execAddr
,
amount
,
note
,
true
,
symbol
,
exec
)
payload
:=
&
types
.
AssetsWithdraw
{
To
:
execAddr
,
Amount
:
int64
(
math
.
Trunc
((
amount
+
0.0000001
)
*
1e4
))
*
1e4
,
Note
:
[]
byte
(
note
),
Cointoken
:
symbol
,
ExecName
:
exec
,
}
data
,
err
:=
json
.
Marshal
(
&
payload
)
if
err
!=
nil
{
if
err
!=
nil
{
fmt
.
Fprintln
(
os
.
Stderr
,
err
)
fmt
.
Fprintln
(
os
.
Stderr
,
err
)
return
return
}
}
fmt
.
Println
(
txHex
)
params
:=
&
rpctypes
.
CreateTxIn
{
Execer
:
types
.
ExecName
(
tokenty
.
TokenX
),
ActionName
:
"Withdraw"
,
Payload
:
data
,
}
rpcLaddr
,
_
:=
cmd
.
Flags
()
.
GetString
(
"rpc_laddr"
)
ctx
:=
jsonclient
.
NewRPCCtx
(
rpcLaddr
,
"Chain33.CreateTransaction"
,
params
,
nil
)
ctx
.
RunWithoutMarshal
()
}
}
// GetTokensPreCreatedCmd get precreated tokens
// GetTokensPreCreatedCmd get precreated tokens
...
...
plugin/dapp/token/commands/utils.go
View file @
fbeb1685
...
@@ -5,70 +5,12 @@
...
@@ -5,70 +5,12 @@
package
commands
package
commands
import
(
import
(
"encoding/hex"
"fmt"
"math"
"os"
"strings"
"strings"
"github.com/33cn/chain33/common/address"
"github.com/33cn/chain33/common/address"
"github.com/33cn/chain33/types"
"github.com/33cn/chain33/types"
tokenty
"github.com/33cn/plugin/plugin/dapp/token/types"
"github.com/spf13/cobra"
)
)
// CreateRawTx 创建交易
// 主链交易使用 Transaction 的 To
// 平行链使用的 payload 的 To, Transaction 的 To 作为执行器的合约地址
// 在执行合约时, 有GetRealTo 用来读取这个项
// 在命令行中, 参数需要加前缀才是对的
// 在平行链上 执行器地址注册不带前缀, withdraw To地址有前缀, 算出来不一致
func
CreateRawTx
(
cmd
*
cobra
.
Command
,
to
string
,
amount
float64
,
note
string
,
isWithdraw
bool
,
tokenSymbol
,
execName
string
)
(
string
,
error
)
{
if
amount
<
0
{
return
""
,
types
.
ErrAmount
}
paraName
,
_
:=
cmd
.
Flags
()
.
GetString
(
"paraName"
)
amountInt64
:=
int64
(
math
.
Trunc
((
amount
+
0.0000001
)
*
1e4
))
*
1e4
var
tx
*
types
.
Transaction
transfer
:=
&
tokenty
.
TokenAction
{}
if
isWithdraw
{
v
:=
&
tokenty
.
TokenAction_Withdraw
{
Withdraw
:
&
types
.
AssetsWithdraw
{
Cointoken
:
tokenSymbol
,
Amount
:
amountInt64
,
Note
:
[]
byte
(
note
),
To
:
to
,
ExecName
:
getRealExecName
(
paraName
,
execName
)}}
transfer
.
Value
=
v
transfer
.
Ty
=
tokenty
.
ActionWithdraw
}
else
if
execName
!=
""
{
execName
=
getRealExecName
(
paraName
,
execName
)
if
execName
!=
""
&&
!
types
.
IsAllowExecName
([]
byte
(
execName
),
[]
byte
(
execName
))
{
return
""
,
types
.
ErrExecNameNotMatch
}
to
,
err
:=
GetExecAddr
(
execName
)
if
err
!=
nil
{
fmt
.
Fprintln
(
os
.
Stderr
,
err
)
return
""
,
err
}
v
:=
&
tokenty
.
TokenAction_TransferToExec
{
TransferToExec
:
&
types
.
AssetsTransferToExec
{
Cointoken
:
tokenSymbol
,
Amount
:
amountInt64
,
Note
:
[]
byte
(
note
),
ExecName
:
execName
,
To
:
to
}}
transfer
.
Value
=
v
transfer
.
Ty
=
tokenty
.
TokenActionTransferToExec
}
else
{
v
:=
&
tokenty
.
TokenAction_Transfer
{
Transfer
:
&
types
.
AssetsTransfer
{
Cointoken
:
tokenSymbol
,
Amount
:
amountInt64
,
Note
:
[]
byte
(
note
),
To
:
to
}}
transfer
.
Value
=
v
transfer
.
Ty
=
tokenty
.
ActionTransfer
}
execer
:=
[]
byte
(
getRealExecName
(
paraName
,
"token"
))
if
paraName
==
""
{
tx
=
&
types
.
Transaction
{
Execer
:
execer
,
Payload
:
types
.
Encode
(
transfer
),
To
:
to
}
}
else
{
tx
=
&
types
.
Transaction
{
Execer
:
execer
,
Payload
:
types
.
Encode
(
transfer
),
To
:
address
.
ExecAddress
(
string
(
execer
))}
}
tx
,
err
:=
types
.
FormatTx
(
string
(
execer
),
tx
)
if
err
!=
nil
{
return
""
,
err
}
txHex
:=
types
.
Encode
(
tx
)
return
hex
.
EncodeToString
(
txHex
),
nil
}
// GetExecAddr 获取执行器地址
// GetExecAddr 获取执行器地址
func
GetExecAddr
(
exec
string
)
(
string
,
error
)
{
func
GetExecAddr
(
exec
string
)
(
string
,
error
)
{
if
ok
:=
types
.
IsAllowExecName
([]
byte
(
exec
),
[]
byte
(
exec
));
!
ok
{
if
ok
:=
types
.
IsAllowExecName
([]
byte
(
exec
),
[]
byte
(
exec
));
!
ok
{
...
...
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