Commit 5d7a4b17 authored by hezhengjun's avatar hezhengjun

fix linter issue

parent 91f9d67f
...@@ -51,7 +51,7 @@ func importPrivatekey(cmd *cobra.Command, args []string) { ...@@ -51,7 +51,7 @@ func importPrivatekey(cmd *cobra.Command, args []string) {
} }
var res rpctypes.Reply var res rpctypes.Reply
ctx := jsonclient.NewRPCCtx(rpcLaddr, "RelayerManager.ImportChain33RelayerPrivateKey", importKeyReq, &res) ctx := jsonclient.NewRPCCtx(rpcLaddr, "Manager.ImportChain33RelayerPrivateKey", importKeyReq, &res)
ctx.Run() ctx.Run()
} }
...@@ -67,7 +67,7 @@ func ShowValidatorAddrCmd() *cobra.Command { ...@@ -67,7 +67,7 @@ func ShowValidatorAddrCmd() *cobra.Command {
func showValidatorAddr(cmd *cobra.Command, args []string) { func showValidatorAddr(cmd *cobra.Command, args []string) {
rpcLaddr, _ := cmd.Flags().GetString("rpc_laddr") rpcLaddr, _ := cmd.Flags().GetString("rpc_laddr")
var res string var res string
ctx := jsonclient.NewRPCCtx(rpcLaddr, "RelayerManager.ShowChain33RelayerValidator", nil, &res) ctx := jsonclient.NewRPCCtx(rpcLaddr, "Manager.ShowChain33RelayerValidator", nil, &res)
ctx.Run() ctx.Run()
} }
...@@ -84,7 +84,7 @@ func showChain33Relayer2EthTxs(cmd *cobra.Command, args []string) { ...@@ -84,7 +84,7 @@ func showChain33Relayer2EthTxs(cmd *cobra.Command, args []string) {
rpcLaddr, _ := cmd.Flags().GetString("rpc_laddr") rpcLaddr, _ := cmd.Flags().GetString("rpc_laddr")
var res ebTypes.Txhashes var res ebTypes.Txhashes
ctx := jsonclient.NewRPCCtx(rpcLaddr, "RelayerManager.ShowChain33Relayer2EthTxs", nil, &res) ctx := jsonclient.NewRPCCtx(rpcLaddr, "Manager.ShowChain33Relayer2EthTxs", nil, &res)
if _, err := ctx.RunResult(); nil != err { if _, err := ctx.RunResult(); nil != err {
errInfo := err.Error() errInfo := err.Error()
fmt.Println("errinfo:" + errInfo) fmt.Println("errinfo:" + errInfo)
...@@ -108,6 +108,6 @@ func showChain33RelayerStatus(cmd *cobra.Command, args []string) { ...@@ -108,6 +108,6 @@ func showChain33RelayerStatus(cmd *cobra.Command, args []string) {
rpcLaddr, _ := cmd.Flags().GetString("rpc_laddr") rpcLaddr, _ := cmd.Flags().GetString("rpc_laddr")
var res ebTypes.RelayerRunStatus var res ebTypes.RelayerRunStatus
ctx := jsonclient.NewRPCCtx(rpcLaddr, "RelayerManager.ShowChain33RelayerStatus", nil, &res) ctx := jsonclient.NewRPCCtx(rpcLaddr, "Manager.ShowChain33RelayerStatus", nil, &res)
ctx.Run() ctx.Run()
} }
...@@ -57,7 +57,7 @@ func setPwd(cmd *cobra.Command, args []string) { ...@@ -57,7 +57,7 @@ func setPwd(cmd *cobra.Command, args []string) {
NewPassphase: newPwd, NewPassphase: newPwd,
} }
var res rpctypes.Reply var res rpctypes.Reply
ctx := jsonclient.NewRPCCtx(rpcLaddr, "RelayerManager.SetPassphase", params, &res) ctx := jsonclient.NewRPCCtx(rpcLaddr, "Manager.SetPassphase", params, &res)
ctx.Run() ctx.Run()
} }
...@@ -74,7 +74,7 @@ func LockCmd() *cobra.Command { ...@@ -74,7 +74,7 @@ func LockCmd() *cobra.Command {
func lock(cmd *cobra.Command, args []string) { func lock(cmd *cobra.Command, args []string) {
rpcLaddr, _ := cmd.Flags().GetString("rpc_laddr") rpcLaddr, _ := cmd.Flags().GetString("rpc_laddr")
var res rpctypes.Reply var res rpctypes.Reply
ctx := jsonclient.NewRPCCtx(rpcLaddr, "RelayerManager.Lock", nil, &res) ctx := jsonclient.NewRPCCtx(rpcLaddr, "Manager.Lock", nil, &res)
ctx.Run() ctx.Run()
} }
...@@ -100,6 +100,6 @@ func unLock(cmd *cobra.Command, args []string) { ...@@ -100,6 +100,6 @@ func unLock(cmd *cobra.Command, args []string) {
params := pwd params := pwd
var res rpctypes.Reply var res rpctypes.Reply
ctx := jsonclient.NewRPCCtx(rpcLaddr, "RelayerManager.Unlock", params, &res) ctx := jsonclient.NewRPCCtx(rpcLaddr, "Manager.Unlock", params, &res)
ctx.Run() ctx.Run()
} }
...@@ -76,7 +76,7 @@ func importChain33Privatekey(cmd *cobra.Command, args []string) { ...@@ -76,7 +76,7 @@ func importChain33Privatekey(cmd *cobra.Command, args []string) {
params := privateKey params := privateKey
var res rpctypes.Reply var res rpctypes.Reply
ctx := jsonclient.NewRPCCtx(rpcLaddr, "RelayerManager.ImportChain33PrivateKey4EthRelayer", params, &res) ctx := jsonclient.NewRPCCtx(rpcLaddr, "Manager.ImportChain33PrivateKey4EthRelayer", params, &res)
ctx.Run() ctx.Run()
} }
...@@ -96,7 +96,7 @@ func importEthValidtorPrivatekey(cmd *cobra.Command, args []string) { ...@@ -96,7 +96,7 @@ func importEthValidtorPrivatekey(cmd *cobra.Command, args []string) {
params := privateKey params := privateKey
var res rpctypes.Reply var res rpctypes.Reply
ctx := jsonclient.NewRPCCtx(rpcLaddr, "RelayerManager.ImportEthValidatorPrivateKey", params, &res) ctx := jsonclient.NewRPCCtx(rpcLaddr, "Manager.ImportEthValidatorPrivateKey", params, &res)
ctx.Run() ctx.Run()
} }
...@@ -113,7 +113,7 @@ func generateEthereumPrivateKey(cmd *cobra.Command, args []string) { ...@@ -113,7 +113,7 @@ func generateEthereumPrivateKey(cmd *cobra.Command, args []string) {
rpcLaddr, _ := cmd.Flags().GetString("rpc_laddr") rpcLaddr, _ := cmd.Flags().GetString("rpc_laddr")
var res ebTypes.Account4Show var res ebTypes.Account4Show
ctx := jsonclient.NewRPCCtx(rpcLaddr, "RelayerManager.GenerateEthereumPrivateKey", nil, &res) ctx := jsonclient.NewRPCCtx(rpcLaddr, "Manager.GenerateEthereumPrivateKey", nil, &res)
ctx.Run() ctx.Run()
} }
...@@ -129,7 +129,7 @@ func ShowValidatorsAddrCmd() *cobra.Command { ...@@ -129,7 +129,7 @@ func ShowValidatorsAddrCmd() *cobra.Command {
func showValidatorsAddr(cmd *cobra.Command, args []string) { func showValidatorsAddr(cmd *cobra.Command, args []string) {
rpcLaddr, _ := cmd.Flags().GetString("rpc_laddr") rpcLaddr, _ := cmd.Flags().GetString("rpc_laddr")
var res ebTypes.ValidatorAddr4EthRelayer var res ebTypes.ValidatorAddr4EthRelayer
ctx := jsonclient.NewRPCCtx(rpcLaddr, "RelayerManager.ShowEthRelayerValidator", nil, &res) ctx := jsonclient.NewRPCCtx(rpcLaddr, "Manager.ShowEthRelayerValidator", nil, &res)
ctx.Run() ctx.Run()
} }
...@@ -146,7 +146,7 @@ func showChain33Txs(cmd *cobra.Command, args []string) { ...@@ -146,7 +146,7 @@ func showChain33Txs(cmd *cobra.Command, args []string) {
rpcLaddr, _ := cmd.Flags().GetString("rpc_laddr") rpcLaddr, _ := cmd.Flags().GetString("rpc_laddr")
var res ebTypes.Txhashes var res ebTypes.Txhashes
ctx := jsonclient.NewRPCCtx(rpcLaddr, "RelayerManager.ShowEthRelayer2Chain33Txs", nil, &res) ctx := jsonclient.NewRPCCtx(rpcLaddr, "Manager.ShowEthRelayer2Chain33Txs", nil, &res)
if _, err := ctx.RunResult(); nil != err { if _, err := ctx.RunResult(); nil != err {
errInfo := err.Error() errInfo := err.Error()
fmt.Println("errinfo:" + errInfo) fmt.Println("errinfo:" + errInfo)
...@@ -170,7 +170,7 @@ func showEthTxs(cmd *cobra.Command, args []string) { ...@@ -170,7 +170,7 @@ func showEthTxs(cmd *cobra.Command, args []string) {
rpcLaddr, _ := cmd.Flags().GetString("rpc_laddr") rpcLaddr, _ := cmd.Flags().GetString("rpc_laddr")
var res ebTypes.Txhashes var res ebTypes.Txhashes
ctx := jsonclient.NewRPCCtx(rpcLaddr, "RelayerManager.ShowEthRelayer2Chain33Txs", nil, &res) ctx := jsonclient.NewRPCCtx(rpcLaddr, "Manager.ShowEthRelayer2Chain33Txs", nil, &res)
if _, err := ctx.RunResult(); nil != err { if _, err := ctx.RunResult(); nil != err {
errInfo := err.Error() errInfo := err.Error()
fmt.Println("errinfo:" + errInfo) fmt.Println("errinfo:" + errInfo)
...@@ -194,7 +194,7 @@ func showEthRelayerStatus(cmd *cobra.Command, args []string) { ...@@ -194,7 +194,7 @@ func showEthRelayerStatus(cmd *cobra.Command, args []string) {
rpcLaddr, _ := cmd.Flags().GetString("rpc_laddr") rpcLaddr, _ := cmd.Flags().GetString("rpc_laddr")
var res ebTypes.RelayerRunStatus var res ebTypes.RelayerRunStatus
ctx := jsonclient.NewRPCCtx(rpcLaddr, "RelayerManager.ShowEthRelayerStatus", nil, &res) ctx := jsonclient.NewRPCCtx(rpcLaddr, "Manager.ShowEthRelayerStatus", nil, &res)
ctx.Run() ctx.Run()
} }
...@@ -219,7 +219,7 @@ func IsValidatorActive(cmd *cobra.Command, args []string) { ...@@ -219,7 +219,7 @@ func IsValidatorActive(cmd *cobra.Command, args []string) {
params := addr params := addr
var res rpctypes.Reply var res rpctypes.Reply
ctx := jsonclient.NewRPCCtx(rpcLaddr, "RelayerManager.IsValidatorActive", params, &res) ctx := jsonclient.NewRPCCtx(rpcLaddr, "Manager.IsValidatorActive", params, &res)
ctx.Run() ctx.Run()
} }
...@@ -235,7 +235,7 @@ func ShowOperatorCmd() *cobra.Command { ...@@ -235,7 +235,7 @@ func ShowOperatorCmd() *cobra.Command {
func ShowOperator(cmd *cobra.Command, args []string) { func ShowOperator(cmd *cobra.Command, args []string) {
rpcLaddr, _ := cmd.Flags().GetString("rpc_laddr") rpcLaddr, _ := cmd.Flags().GetString("rpc_laddr")
var res string var res string
ctx := jsonclient.NewRPCCtx(rpcLaddr, "RelayerManager.ShowOperator", nil, &res) ctx := jsonclient.NewRPCCtx(rpcLaddr, "Manager.ShowOperator", nil, &res)
ctx.Run() ctx.Run()
} }
...@@ -251,7 +251,7 @@ func DeployContrctsCmd() *cobra.Command { ...@@ -251,7 +251,7 @@ func DeployContrctsCmd() *cobra.Command {
func DeployContrcts(cmd *cobra.Command, args []string) { func DeployContrcts(cmd *cobra.Command, args []string) {
rpcLaddr, _ := cmd.Flags().GetString("rpc_laddr") rpcLaddr, _ := cmd.Flags().GetString("rpc_laddr")
var res rpctypes.Reply var res rpctypes.Reply
ctx := jsonclient.NewRPCCtx(rpcLaddr, "RelayerManager.DeployContrcts", nil, &res) ctx := jsonclient.NewRPCCtx(rpcLaddr, "Manager.DeployContrcts", nil, &res)
ctx.Run() ctx.Run()
} }
...@@ -275,7 +275,7 @@ func ShowTxReceipt(cmd *cobra.Command, args []string) { ...@@ -275,7 +275,7 @@ func ShowTxReceipt(cmd *cobra.Command, args []string) {
txhash, _ := cmd.Flags().GetString("hash") txhash, _ := cmd.Flags().GetString("hash")
para := txhash para := txhash
var res ethTypes.Receipt var res ethTypes.Receipt
ctx := jsonclient.NewRPCCtx(rpcLaddr, "RelayerManager.ShowTxReceipt", para, &res) ctx := jsonclient.NewRPCCtx(rpcLaddr, "Manager.ShowTxReceipt", para, &res)
ctx.Run() ctx.Run()
} }
...@@ -299,7 +299,7 @@ func CreateBridgeToken(cmd *cobra.Command, args []string) { ...@@ -299,7 +299,7 @@ func CreateBridgeToken(cmd *cobra.Command, args []string) {
token, _ := cmd.Flags().GetString("symbol") token, _ := cmd.Flags().GetString("symbol")
para := token para := token
var res ebTypes.ReplyAddr var res ebTypes.ReplyAddr
ctx := jsonclient.NewRPCCtx(rpcLaddr, "RelayerManager.CreateBridgeToken", para, &res) ctx := jsonclient.NewRPCCtx(rpcLaddr, "Manager.CreateBridgeToken", para, &res)
ctx.Run() ctx.Run()
} }
...@@ -323,7 +323,7 @@ func CreateEthereumTokenToken(cmd *cobra.Command, args []string) { ...@@ -323,7 +323,7 @@ func CreateEthereumTokenToken(cmd *cobra.Command, args []string) {
token, _ := cmd.Flags().GetString("symbol") token, _ := cmd.Flags().GetString("symbol")
para := token para := token
var res ebTypes.ReplyAddr var res ebTypes.ReplyAddr
ctx := jsonclient.NewRPCCtx(rpcLaddr, "RelayerManager.CreateERC20Token", para, &res) ctx := jsonclient.NewRPCCtx(rpcLaddr, "Manager.CreateERC20Token", para, &res)
ctx.Run() ctx.Run()
} }
...@@ -365,7 +365,7 @@ func MintErc20(cmd *cobra.Command, args []string) { ...@@ -365,7 +365,7 @@ func MintErc20(cmd *cobra.Command, args []string) {
Amount: realAmount.String(), Amount: realAmount.String(),
} }
var res rpctypes.Reply var res rpctypes.Reply
ctx := jsonclient.NewRPCCtx(rpcLaddr, "RelayerManager.MintErc20", para, &res) ctx := jsonclient.NewRPCCtx(rpcLaddr, "Manager.MintErc20", para, &res)
ctx.Run() ctx.Run()
} }
...@@ -408,7 +408,7 @@ func ApproveAllowance(cmd *cobra.Command, args []string) { ...@@ -408,7 +408,7 @@ func ApproveAllowance(cmd *cobra.Command, args []string) {
Amount: realAmount.String(), Amount: realAmount.String(),
} }
var res rpctypes.Reply var res rpctypes.Reply
ctx := jsonclient.NewRPCCtx(rpcLaddr, "RelayerManager.ApproveAllowance", para, &res) ctx := jsonclient.NewRPCCtx(rpcLaddr, "Manager.ApproveAllowance", para, &res)
ctx.Run() ctx.Run()
} }
...@@ -463,7 +463,7 @@ func Burn(cmd *cobra.Command, args []string) { ...@@ -463,7 +463,7 @@ func Burn(cmd *cobra.Command, args []string) {
Chain33Receiver: receiver, Chain33Receiver: receiver,
} }
var res rpctypes.Reply var res rpctypes.Reply
ctx := jsonclient.NewRPCCtx(rpcLaddr, "RelayerManager.Burn", para, &res) ctx := jsonclient.NewRPCCtx(rpcLaddr, "Manager.Burn", para, &res)
ctx.Run() ctx.Run()
} }
...@@ -487,7 +487,7 @@ func BurnAsync(cmd *cobra.Command, args []string) { ...@@ -487,7 +487,7 @@ func BurnAsync(cmd *cobra.Command, args []string) {
Chain33Receiver: receiver, Chain33Receiver: receiver,
} }
var res rpctypes.Reply var res rpctypes.Reply
ctx := jsonclient.NewRPCCtx(rpcLaddr, "RelayerManager.BurnAsync", para, &res) ctx := jsonclient.NewRPCCtx(rpcLaddr, "Manager.BurnAsync", para, &res)
ctx.Run() ctx.Run()
} }
...@@ -544,7 +544,7 @@ func LockEthErc20Asset(cmd *cobra.Command, args []string) { ...@@ -544,7 +544,7 @@ func LockEthErc20Asset(cmd *cobra.Command, args []string) {
Chain33Receiver: receiver, Chain33Receiver: receiver,
} }
var res rpctypes.Reply var res rpctypes.Reply
ctx := jsonclient.NewRPCCtx(rpcLaddr, "RelayerManager.LockEthErc20Asset", para, &res) ctx := jsonclient.NewRPCCtx(rpcLaddr, "Manager.LockEthErc20Asset", para, &res)
ctx.Run() ctx.Run()
} }
...@@ -571,7 +571,7 @@ func LockEthErc20AssetAsync(cmd *cobra.Command, args []string) { ...@@ -571,7 +571,7 @@ func LockEthErc20AssetAsync(cmd *cobra.Command, args []string) {
Chain33Receiver: receiver, Chain33Receiver: receiver,
} }
var res rpctypes.Reply var res rpctypes.Reply
ctx := jsonclient.NewRPCCtx(rpcLaddr, "RelayerManager.LockEthErc20AssetAsync", para, &res) ctx := jsonclient.NewRPCCtx(rpcLaddr, "Manager.LockEthErc20AssetAsync", para, &res)
ctx.Run() ctx.Run()
} }
...@@ -587,7 +587,7 @@ func ShowBridgeBankAddrCmd() *cobra.Command { ...@@ -587,7 +587,7 @@ func ShowBridgeBankAddrCmd() *cobra.Command {
func ShowBridgeBankAddr(cmd *cobra.Command, args []string) { func ShowBridgeBankAddr(cmd *cobra.Command, args []string) {
rpcLaddr, _ := cmd.Flags().GetString("rpc_laddr") rpcLaddr, _ := cmd.Flags().GetString("rpc_laddr")
var res ebTypes.ReplyAddr var res ebTypes.ReplyAddr
ctx := jsonclient.NewRPCCtx(rpcLaddr, "RelayerManager.ShowBridgeBankAddr", nil, &res) ctx := jsonclient.NewRPCCtx(rpcLaddr, "Manager.ShowBridgeBankAddr", nil, &res)
ctx.Run() ctx.Run()
} }
...@@ -603,7 +603,7 @@ func ShowBridgeRegistryAddrCmd() *cobra.Command { ...@@ -603,7 +603,7 @@ func ShowBridgeRegistryAddrCmd() *cobra.Command {
func ShowBridgeRegistryAddr(cmd *cobra.Command, args []string) { func ShowBridgeRegistryAddr(cmd *cobra.Command, args []string) {
rpcLaddr, _ := cmd.Flags().GetString("rpc_laddr") rpcLaddr, _ := cmd.Flags().GetString("rpc_laddr")
var res ebTypes.ReplyAddr var res ebTypes.ReplyAddr
ctx := jsonclient.NewRPCCtx(rpcLaddr, "RelayerManager.ShowBridgeRegistryAddr", nil, &res) ctx := jsonclient.NewRPCCtx(rpcLaddr, "Manager.ShowBridgeRegistryAddr", nil, &res)
ctx.Run() ctx.Run()
} }
...@@ -667,7 +667,7 @@ func MakeNewProphecyClaim(cmd *cobra.Command, args []string) { ...@@ -667,7 +667,7 @@ func MakeNewProphecyClaim(cmd *cobra.Command, args []string) {
TxHash: txhash, TxHash: txhash,
} }
var res rpctypes.Reply var res rpctypes.Reply
ctx := jsonclient.NewRPCCtx(rpcLaddr, "RelayerManager.MakeNewProphecyClaim", para, &res) ctx := jsonclient.NewRPCCtx(rpcLaddr, "Manager.MakeNewProphecyClaim", para, &res)
ctx.Run() ctx.Run()
} }
...@@ -697,7 +697,7 @@ func GetBalance(cmd *cobra.Command, args []string) { ...@@ -697,7 +697,7 @@ func GetBalance(cmd *cobra.Command, args []string) {
TokenAddr: tokenAddr, TokenAddr: tokenAddr,
} }
var res ebTypes.ReplyBalance var res ebTypes.ReplyBalance
ctx := jsonclient.NewRPCCtx(rpcLaddr, "RelayerManager.GetBalance", para, &res) ctx := jsonclient.NewRPCCtx(rpcLaddr, "Manager.GetBalance", para, &res)
ctx.Run() ctx.Run()
} }
...@@ -722,7 +722,7 @@ func IsProphecyPending(cmd *cobra.Command, args []string) { ...@@ -722,7 +722,7 @@ func IsProphecyPending(cmd *cobra.Command, args []string) {
para := common.HexToHash(id) para := common.HexToHash(id)
var res rpctypes.Reply var res rpctypes.Reply
ctx := jsonclient.NewRPCCtx(rpcLaddr, "RelayerManager.IsProphecyPending", para, &res) ctx := jsonclient.NewRPCCtx(rpcLaddr, "Manager.IsProphecyPending", para, &res)
ctx.Run() ctx.Run()
} }
...@@ -770,7 +770,7 @@ func TransferToken(cmd *cobra.Command, args []string) { ...@@ -770,7 +770,7 @@ func TransferToken(cmd *cobra.Command, args []string) {
Amount: realAmount.String(), Amount: realAmount.String(),
} }
var res rpctypes.Reply var res rpctypes.Reply
ctx := jsonclient.NewRPCCtx(rpcLaddr, "RelayerManager.TransferToken", para, &res) ctx := jsonclient.NewRPCCtx(rpcLaddr, "Manager.TransferToken", para, &res)
ctx.Run() ctx.Run()
} }
...@@ -798,6 +798,6 @@ func GetToken2address(cmd *cobra.Command, args []string) { ...@@ -798,6 +798,6 @@ func GetToken2address(cmd *cobra.Command, args []string) {
TokenAddr: tokenSymbol, TokenAddr: tokenSymbol,
} }
var res ebTypes.ReplyAddr var res ebTypes.ReplyAddr
ctx := jsonclient.NewRPCCtx(rpcLaddr, "RelayerManager.ShowTokenAddrBySymbol", para, &res) ctx := jsonclient.NewRPCCtx(rpcLaddr, "Manager.ShowTokenAddrBySymbol", para, &res)
ctx.Run() ctx.Run()
} }
...@@ -2,7 +2,6 @@ package main ...@@ -2,7 +2,6 @@ package main
import ( import (
"github.com/33cn/chain33/rpc/jsonclient" "github.com/33cn/chain33/rpc/jsonclient"
rpctypes "github.com/33cn/chain33/rpc/types"
ebTypes "github.com/33cn/plugin/plugin/dapp/x2Ethereum/ebrelayer/types" ebTypes "github.com/33cn/plugin/plugin/dapp/x2Ethereum/ebrelayer/types"
"github.com/spf13/cobra" "github.com/spf13/cobra"
) )
...@@ -16,8 +15,6 @@ func StaticsCmd() *cobra.Command { ...@@ -16,8 +15,6 @@ func StaticsCmd() *cobra.Command {
cmd.AddCommand( cmd.AddCommand(
ShowLockStaticsCmd(), ShowLockStaticsCmd(),
//ShowUnlockStaticsCmd(),
//ShowBurnStaticsCmd(),
ShowDepositStaticsCmd(), ShowDepositStaticsCmd(),
) )
...@@ -46,66 +43,7 @@ func ShowLockStatics(cmd *cobra.Command, args []string) { ...@@ -46,66 +43,7 @@ func ShowLockStatics(cmd *cobra.Command, args []string) {
TokenAddr: tokenAddr, TokenAddr: tokenAddr,
} }
var res ebTypes.StaticsLock var res ebTypes.StaticsLock
ctx := jsonclient.NewRPCCtx(rpcLaddr, "RelayerManager.ShowLockStatics", para, &res) ctx := jsonclient.NewRPCCtx(rpcLaddr, "Manager.ShowLockStatics", para, &res)
ctx.Run()
}
func ShowUnlockStaticsCmd() *cobra.Command {
cmd := &cobra.Command{
Use: "unlock",
Short: "show the unlock statics of ETH or ERC20",
Run: ShowUnlockStatics,
}
ShowUnlockStaticsFlags(cmd)
return cmd
}
func ShowUnlockStaticsFlags(cmd *cobra.Command) {
cmd.Flags().StringP("token", "t", "", "token address, optional, nil for ETH")
cmd.Flags().StringP("owner", "o", "", "owner address, optional, nil for all")
}
func ShowUnlockStatics(cmd *cobra.Command, args []string) {
rpcLaddr, _ := cmd.Flags().GetString("rpc_laddr")
tokenAddr, _ := cmd.Flags().GetString("token")
owner, _ := cmd.Flags().GetString("owner")
para := ebTypes.StaticsRequest{
Owner: owner,
TokenAddr: tokenAddr,
}
var res rpctypes.Reply
ctx := jsonclient.NewRPCCtx(rpcLaddr, "RelayerManager.ShowUnlockStatics", para, &res)
ctx.Run()
}
func ShowBurnStaticsCmd() *cobra.Command {
cmd := &cobra.Command{
Use: "burn",
Short: "show the burn statics of chain33 asset",
Run: ShowBurnStatics,
}
ShowBurnStaticsFlags(cmd)
return cmd
}
func ShowBurnStaticsFlags(cmd *cobra.Command) {
cmd.Flags().StringP("token", "t", "", "token address, optional, nil for ETH")
cmd.Flags().StringP("owner", "o", "", "owner address, optional, nil for all")
}
func ShowBurnStatics(cmd *cobra.Command, args []string) {
rpcLaddr, _ := cmd.Flags().GetString("rpc_laddr")
tokenAddr, _ := cmd.Flags().GetString("token")
owner, _ := cmd.Flags().GetString("owner")
para := ebTypes.StaticsRequest{
Owner: owner,
TokenAddr: tokenAddr,
}
var res ebTypes.StaticsResponse
ctx := jsonclient.NewRPCCtx(rpcLaddr, "RelayerManager.ShowLockStaticsCmd", para, &res)
ctx.Run() ctx.Run()
} }
...@@ -132,6 +70,6 @@ func ShowDepositStatics(cmd *cobra.Command, args []string) { ...@@ -132,6 +70,6 @@ func ShowDepositStatics(cmd *cobra.Command, args []string) {
TokenAddr: tokenAddr, TokenAddr: tokenAddr,
} }
var res ebTypes.StaticsDeposit var res ebTypes.StaticsDeposit
ctx := jsonclient.NewRPCCtx(rpcLaddr, "RelayerManager.ShowDepositStatics", para, &res) ctx := jsonclient.NewRPCCtx(rpcLaddr, "Manager.ShowDepositStatics", para, &res)
ctx.Run() ctx.Run()
} }
...@@ -245,7 +245,7 @@ func TestBrigeTokenMint(t *testing.T) { ...@@ -245,7 +245,7 @@ func TestBrigeTokenMint(t *testing.T) {
_, err = x2EthContracts.Oracle.NewOracleClaim( _, err = x2EthContracts.Oracle.NewOracleClaim(
authOracle, authOracle,
events.CLAIM_TYPE_LOCK, events.ClaimTypeLock,
chain33Sender, chain33Sender,
ethReceiver, ethReceiver,
logEvent.Token, logEvent.Token,
...@@ -501,7 +501,7 @@ func TestBridgeBankUnlock(t *testing.T) { ...@@ -501,7 +501,7 @@ func TestBridgeBankUnlock(t *testing.T) {
_, err = x2EthContracts.Oracle.NewOracleClaim( _, err = x2EthContracts.Oracle.NewOracleClaim(
authOracle, authOracle,
events.CLAIM_TYPE_BURN, events.ClaimTypeBurn,
chain33Sender, chain33Sender,
ethReceiver, ethReceiver,
ethAddr, ethAddr,
...@@ -535,7 +535,7 @@ func TestBridgeBankUnlock(t *testing.T) { ...@@ -535,7 +535,7 @@ func TestBridgeBankUnlock(t *testing.T) {
_, err = x2EthContracts.Oracle.NewOracleClaim( _, err = x2EthContracts.Oracle.NewOracleClaim(
authOracle, authOracle,
events.CLAIM_TYPE_BURN, events.ClaimTypeBurn,
chain33Sender, chain33Sender,
ethReceiver, ethReceiver,
bridgeTokenAddr, bridgeTokenAddr,
...@@ -666,7 +666,7 @@ func TestBridgeBankSecondUnlockEth(t *testing.T) { ...@@ -666,7 +666,7 @@ func TestBridgeBankSecondUnlockEth(t *testing.T) {
_, err = x2EthContracts.Oracle.NewOracleClaim( _, err = x2EthContracts.Oracle.NewOracleClaim(
authOracle, authOracle,
events.CLAIM_TYPE_BURN, events.ClaimTypeBurn,
chain33Sender, chain33Sender,
ethReceiver, ethReceiver,
ethAddr, ethAddr,
...@@ -696,7 +696,7 @@ func TestBridgeBankSecondUnlockEth(t *testing.T) { ...@@ -696,7 +696,7 @@ func TestBridgeBankSecondUnlockEth(t *testing.T) {
_, err = x2EthContracts.Oracle.NewOracleClaim( _, err = x2EthContracts.Oracle.NewOracleClaim(
authOracle, authOracle,
events.CLAIM_TYPE_BURN, events.ClaimTypeBurn,
chain33Sender, chain33Sender,
ethReceiver, ethReceiver,
ethAddr, ethAddr,
...@@ -828,7 +828,7 @@ func TestBridgeBankSedondUnlockErc20(t *testing.T) { ...@@ -828,7 +828,7 @@ func TestBridgeBankSedondUnlockErc20(t *testing.T) {
require.Nil(t, err) require.Nil(t, err)
_, err = x2EthContracts.Oracle.NewOracleClaim( _, err = x2EthContracts.Oracle.NewOracleClaim(
authOracle, authOracle,
events.CLAIM_TYPE_BURN, events.ClaimTypeBurn,
chain33Sender, chain33Sender,
ethReceiver, ethReceiver,
bridgeTokenAddr, bridgeTokenAddr,
...@@ -852,7 +852,7 @@ func TestBridgeBankSedondUnlockErc20(t *testing.T) { ...@@ -852,7 +852,7 @@ func TestBridgeBankSedondUnlockErc20(t *testing.T) {
require.Nil(t, err) require.Nil(t, err)
_, err = x2EthContracts.Oracle.NewOracleClaim( _, err = x2EthContracts.Oracle.NewOracleClaim(
authOracle, authOracle,
events.CLAIM_TYPE_BURN, events.ClaimTypeBurn,
chain33Sender, chain33Sender,
ethReceiver, ethReceiver,
bridgeTokenAddr, bridgeTokenAddr,
......
package setup
import (
"context"
"fmt"
"log"
"math/big"
"github.com/33cn/plugin/plugin/dapp/x2Ethereum/ebrelayer/ethcontract/generated"
"github.com/ethereum/go-ethereum/accounts/abi/bind"
"github.com/ethereum/go-ethereum/accounts/abi/bind/backends"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/core"
"github.com/ethereum/go-ethereum/crypto"
)
func main() {
// Generate a new random account and a funded simulator
key, _ := crypto.GenerateKey()
alloc := make(core.GenesisAlloc)
addr := crypto.PubkeyToAddress(key.PublicKey)
genesisAccount := core.GenesisAccount{
Balance: big.NewInt(10000000000),
PrivateKey: crypto.FromECDSA(key),
}
alloc[addr] = genesisAccount
gasLimit := uint64(100000000)
sim := backends.NewSimulatedBackend(alloc, gasLimit)
ctx := context.Background()
gasPrice, err := sim.SuggestGasPrice(ctx)
if err != nil {
panic("Failed to SuggestGasPrice due to:" + err.Error())
}
auth := bind.NewKeyedTransactor(key)
//auth.Nonce = big.NewInt(int64(nonce))
auth.Value = big.NewInt(0) // in wei
auth.GasLimit = gasLimit
auth.GasPrice = gasPrice
// Deploy a token contract on the simulated blockchain
cosmosBridgeAddr := common.HexToAddress("0x8afdadfc88a1087c9a1d6c0f5dd04634b87f303a")
bridgeBankAddr := common.HexToAddress("0x0df9a824699bc5878232c9e612fe1a5346a5a368")
oracleAddr := common.HexToAddress("0x92c8b16afd6d423652559c6e266cbe1c29bfd84f")
valsetAddr := common.HexToAddress("0xcb074cb21cdddf3ce9c3c0a7ac4497d633c9d9f1")
_, _, bridgeRegistry, err := generated.DeployBridgeRegistry(auth, sim, cosmosBridgeAddr, bridgeBankAddr, oracleAddr, valsetAddr)
if err != nil {
log.Fatalf("Failed to deploy BridgeRegistry contract: %v", err)
}
balance, _ := sim.BalanceAt(ctx, addr, nil)
fmt.Println("balance before:", balance.String())
// Print the current (non existent) and pending name of the contract
cosmosBridgeAddrRetrive, _ := bridgeRegistry.Chain33Bridge(nil)
fmt.Println("Pre-mining cosmosBridgeAddr:", cosmosBridgeAddrRetrive.String())
cosmosBridgeAddrRetrive, _ = bridgeRegistry.Chain33Bridge(&bind.CallOpts{Pending: true})
fmt.Println("Pre-mining pending cosmosBridgeAddr:", cosmosBridgeAddrRetrive.String())
balance, _ = sim.BalanceAt(ctx, addr, nil)
fmt.Println("balance after:", balance.String())
// Commit all pending transactions in the simulator and print the names again
sim.Commit()
balance, _ = sim.BalanceAt(ctx, addr, nil)
fmt.Println("balance after:", balance.String())
cosmosBridgeAddrRetrive, _ = bridgeRegistry.Chain33Bridge(nil)
fmt.Println("Post-mining cosmosBridgeAddr:", cosmosBridgeAddrRetrive.String())
cosmosBridgeAddrRetrive, _ = bridgeRegistry.Chain33Bridge(&bind.CallOpts{Pending: true})
fmt.Println("Post-mining pending cosmosBridgeAddr:", cosmosBridgeAddrRetrive.String())
cosmosBridgeAddrRetrive, _ = bridgeRegistry.Chain33Bridge(nil)
fmt.Println("Post-mining cosmosBridgeAddr:", cosmosBridgeAddrRetrive.String())
balance, _ = sim.BalanceAt(ctx, addr, nil)
fmt.Println("balance after:", balance.String())
}
...@@ -15,22 +15,22 @@ const ( ...@@ -15,22 +15,22 @@ const (
) )
func LoadABI(contractName string) abi.ABI { func LoadABI(contractName string) abi.ABI {
var abiJson string var abiJSON string
switch contractName { switch contractName {
case BridgeBankABI: case BridgeBankABI:
abiJson = generated.BridgeBankABI abiJSON = generated.BridgeBankABI
case Chain33BankABI: case Chain33BankABI:
abiJson = generated.Chain33BankABI abiJSON = generated.Chain33BankABI
case Chain33BridgeABI: case Chain33BridgeABI:
abiJson = generated.Chain33BridgeABI abiJSON = generated.Chain33BridgeABI
case EthereumBankABI: case EthereumBankABI:
abiJson = generated.EthereumBankABI abiJSON = generated.EthereumBankABI
default: default:
panic("No abi matched") panic("No abi matched")
} }
// Convert the raw abi into a usable format // Convert the raw abi into a usable format
contractABI, err := abi.JSON(strings.NewReader(abiJson)) contractABI, err := abi.JSON(strings.NewReader(abiJSON))
if err != nil { if err != nil {
panic(err) panic(err)
} }
......
...@@ -6,6 +6,8 @@ import ( ...@@ -6,6 +6,8 @@ import (
"errors" "errors"
"math/big" "math/big"
"github.com/ethereum/go-ethereum/accounts/abi/bind"
"github.com/33cn/plugin/plugin/dapp/x2Ethereum/ebrelayer/ethcontract/generated" "github.com/33cn/plugin/plugin/dapp/x2Ethereum/ebrelayer/ethcontract/generated"
"github.com/33cn/plugin/plugin/dapp/x2Ethereum/ebrelayer/events" "github.com/33cn/plugin/plugin/dapp/x2Ethereum/ebrelayer/events"
"github.com/ethereum/go-ethereum" "github.com/ethereum/go-ethereum"
...@@ -25,7 +27,7 @@ type NewProphecyClaimPara struct { ...@@ -25,7 +27,7 @@ type NewProphecyClaimPara struct {
Txhash []byte Txhash []byte
} }
func CreateBridgeToken(symbol string, client *ethclient.Client, para *OperatorInfo, x2EthDeployInfo *X2EthDeployInfo, x2EthContracts *X2EthContracts) (string, error) { func CreateBridgeToken(symbol string, backend bind.ContractBackend, para *OperatorInfo, x2EthDeployInfo *X2EthDeployInfo, x2EthContracts *X2EthContracts) (string, error) {
if nil == para { if nil == para {
return "", errors.New("No operator private key configured") return "", errors.New("No operator private key configured")
} }
...@@ -39,6 +41,7 @@ func CreateBridgeToken(symbol string, client *ethclient.Client, para *OperatorIn ...@@ -39,6 +41,7 @@ func CreateBridgeToken(symbol string, client *ethclient.Client, para *OperatorIn
// We will check logs for new events // We will check logs for new events
logs := make(chan types.Log) logs := make(chan types.Log)
// Filter by contract and event, write results to logs // Filter by contract and event, write results to logs
client := backend.(*ethclient.Client)
sub, err := client.SubscribeFilterLogs(context.Background(), query, logs) sub, err := client.SubscribeFilterLogs(context.Background(), query, logs)
if nil != err { if nil != err {
txslog.Error("CreateBrigeToken", "failed to SubscribeFilterLogs", err.Error()) txslog.Error("CreateBrigeToken", "failed to SubscribeFilterLogs", err.Error())
...@@ -54,7 +57,7 @@ func CreateBridgeToken(symbol string, client *ethclient.Client, para *OperatorIn ...@@ -54,7 +57,7 @@ func CreateBridgeToken(symbol string, client *ethclient.Client, para *OperatorIn
}() }()
//创建token //创建token
auth, err := PrepareAuth(client, para.PrivateKey, para.Address) auth, err := PrepareAuth(backend, para.PrivateKey, para.Address)
if nil != err { if nil != err {
return "", err return "", err
} }
...@@ -95,7 +98,7 @@ func CreateBridgeToken(symbol string, client *ethclient.Client, para *OperatorIn ...@@ -95,7 +98,7 @@ func CreateBridgeToken(symbol string, client *ethclient.Client, para *OperatorIn
return logEvent.Token.String(), nil return logEvent.Token.String(), nil
} }
func CreateERC20Token(symbol string, client *ethclient.Client, para *OperatorInfo, x2EthDeployInfo *X2EthDeployInfo, x2EthContracts *X2EthContracts) (string, error) { func CreateERC20Token(symbol string, backend bind.ContractBackend, para *OperatorInfo, x2EthDeployInfo *X2EthDeployInfo, x2EthContracts *X2EthContracts) (string, error) {
if nil == para { if nil == para {
return "", errors.New("No operator private key configured") return "", errors.New("No operator private key configured")
} }
...@@ -109,19 +112,19 @@ func CreateERC20Token(symbol string, client *ethclient.Client, para *OperatorInf ...@@ -109,19 +112,19 @@ func CreateERC20Token(symbol string, client *ethclient.Client, para *OperatorInf
} }
}() }()
auth, err := PrepareAuth(client, para.PrivateKey, para.Address) auth, err := PrepareAuth(backend, para.PrivateKey, para.Address)
if nil != err { if nil != err {
return "", err return "", err
} }
prepareDone = true prepareDone = true
tokenAddr, tx, _, err := generated.DeployBridgeToken(auth, client, symbol) tokenAddr, tx, _, err := generated.DeployBridgeToken(auth, backend, symbol)
if nil != err { if nil != err {
return "", err return "", err
} }
err = waitEthTxFinished(client, tx.Hash(), "CreateERC20Token") err = waitEthTxFinished(backend.(*ethclient.Client), tx.Hash(), "CreateERC20Token")
if nil != err { if nil != err {
return "", err return "", err
} }
...@@ -129,7 +132,7 @@ func CreateERC20Token(symbol string, client *ethclient.Client, para *OperatorInf ...@@ -129,7 +132,7 @@ func CreateERC20Token(symbol string, client *ethclient.Client, para *OperatorInf
return tokenAddr.String(), nil return tokenAddr.String(), nil
} }
func MintERC20Token(tokenAddr, ownerAddr string, amount *big.Int, client *ethclient.Client, para *OperatorInfo) (string, error) { func MintERC20Token(tokenAddr, ownerAddr string, amount *big.Int, backend bind.ContractBackend, para *OperatorInfo) (string, error) {
if nil == para { if nil == para {
return "", errors.New("No operator private key configured") return "", errors.New("No operator private key configured")
} }
...@@ -143,14 +146,14 @@ func MintERC20Token(tokenAddr, ownerAddr string, amount *big.Int, client *ethcli ...@@ -143,14 +146,14 @@ func MintERC20Token(tokenAddr, ownerAddr string, amount *big.Int, client *ethcli
} }
}() }()
operatorAuth, err := PrepareAuth(client, para.PrivateKey, para.Address) operatorAuth, err := PrepareAuth(backend, para.PrivateKey, para.Address)
if nil != err { if nil != err {
return "", err return "", err
} }
prepareDone = true prepareDone = true
erc20TokenInstance, err := generated.NewBridgeToken(common.HexToAddress(tokenAddr), client) erc20TokenInstance, err := generated.NewBridgeToken(common.HexToAddress(tokenAddr), backend)
if nil != err { if nil != err {
return "", err return "", err
} }
...@@ -159,7 +162,7 @@ func MintERC20Token(tokenAddr, ownerAddr string, amount *big.Int, client *ethcli ...@@ -159,7 +162,7 @@ func MintERC20Token(tokenAddr, ownerAddr string, amount *big.Int, client *ethcli
return "", err return "", err
} }
err = waitEthTxFinished(client, tx.Hash(), "MintERC20Token") err = waitEthTxFinished(backend.(*ethclient.Client), tx.Hash(), "MintERC20Token")
if nil != err { if nil != err {
return "", err return "", err
} }
...@@ -167,7 +170,7 @@ func MintERC20Token(tokenAddr, ownerAddr string, amount *big.Int, client *ethcli ...@@ -167,7 +170,7 @@ func MintERC20Token(tokenAddr, ownerAddr string, amount *big.Int, client *ethcli
return tx.Hash().String(), nil return tx.Hash().String(), nil
} }
func ApproveAllowance(ownerPrivateKeyStr, tokenAddr string, bridgeBank common.Address, amount *big.Int, client *ethclient.Client) (string, error) { func ApproveAllowance(ownerPrivateKeyStr, tokenAddr string, bridgeBank common.Address, amount *big.Int, backend bind.ContractBackend) (string, error) {
ownerPrivateKey, err := crypto.ToECDSA(common.FromHex(ownerPrivateKeyStr)) ownerPrivateKey, err := crypto.ToECDSA(common.FromHex(ownerPrivateKeyStr))
if nil != err { if nil != err {
return "", err return "", err
...@@ -182,14 +185,14 @@ func ApproveAllowance(ownerPrivateKeyStr, tokenAddr string, bridgeBank common.Ad ...@@ -182,14 +185,14 @@ func ApproveAllowance(ownerPrivateKeyStr, tokenAddr string, bridgeBank common.Ad
} }
}() }()
auth, err := PrepareAuth(client, ownerPrivateKey, ownerAddr) auth, err := PrepareAuth(backend, ownerPrivateKey, ownerAddr)
if nil != err { if nil != err {
return "", err return "", err
} }
prepareDone = true prepareDone = true
erc20TokenInstance, err := generated.NewBridgeToken(common.HexToAddress(tokenAddr), client) erc20TokenInstance, err := generated.NewBridgeToken(common.HexToAddress(tokenAddr), backend)
if nil != err { if nil != err {
return "", err return "", err
} }
...@@ -199,7 +202,7 @@ func ApproveAllowance(ownerPrivateKeyStr, tokenAddr string, bridgeBank common.Ad ...@@ -199,7 +202,7 @@ func ApproveAllowance(ownerPrivateKeyStr, tokenAddr string, bridgeBank common.Ad
return "", err return "", err
} }
err = waitEthTxFinished(client, tx.Hash(), "ApproveAllowance") err = waitEthTxFinished(backend.(*ethclient.Client), tx.Hash(), "ApproveAllowance")
if nil != err { if nil != err {
return "", err return "", err
} }
...@@ -207,7 +210,7 @@ func ApproveAllowance(ownerPrivateKeyStr, tokenAddr string, bridgeBank common.Ad ...@@ -207,7 +210,7 @@ func ApproveAllowance(ownerPrivateKeyStr, tokenAddr string, bridgeBank common.Ad
return tx.Hash().String(), nil return tx.Hash().String(), nil
} }
func Burn(ownerPrivateKeyStr, tokenAddrstr, chain33Receiver string, bridgeBank common.Address, amount *big.Int, bridgeBankIns *generated.BridgeBank, client *ethclient.Client) (string, error) { func Burn(ownerPrivateKeyStr, tokenAddrstr, chain33Receiver string, bridgeBank common.Address, amount *big.Int, bridgeBankIns *generated.BridgeBank, backend bind.ContractBackend) (string, error) {
ownerPrivateKey, err := crypto.ToECDSA(common.FromHex(ownerPrivateKeyStr)) ownerPrivateKey, err := crypto.ToECDSA(common.FromHex(ownerPrivateKeyStr))
if nil != err { if nil != err {
return "", err return "", err
...@@ -220,7 +223,7 @@ func Burn(ownerPrivateKeyStr, tokenAddrstr, chain33Receiver string, bridgeBank c ...@@ -220,7 +223,7 @@ func Burn(ownerPrivateKeyStr, tokenAddrstr, chain33Receiver string, bridgeBank c
_, _ = revokeNonce(ownerAddr) _, _ = revokeNonce(ownerAddr)
} }
}() }()
auth, err := PrepareAuth(client, ownerPrivateKey, ownerAddr) auth, err := PrepareAuth(backend, ownerPrivateKey, ownerAddr)
if nil != err { if nil != err {
return "", err return "", err
} }
...@@ -228,7 +231,7 @@ func Burn(ownerPrivateKeyStr, tokenAddrstr, chain33Receiver string, bridgeBank c ...@@ -228,7 +231,7 @@ func Burn(ownerPrivateKeyStr, tokenAddrstr, chain33Receiver string, bridgeBank c
prepareDone = true prepareDone = true
tokenAddr := common.HexToAddress(tokenAddrstr) tokenAddr := common.HexToAddress(tokenAddrstr)
tokenInstance, err := generated.NewBridgeToken(tokenAddr, client) tokenInstance, err := generated.NewBridgeToken(tokenAddr, backend)
if nil != err { if nil != err {
return "", err return "", err
} }
...@@ -237,6 +240,7 @@ func Burn(ownerPrivateKeyStr, tokenAddrstr, chain33Receiver string, bridgeBank c ...@@ -237,6 +240,7 @@ func Burn(ownerPrivateKeyStr, tokenAddrstr, chain33Receiver string, bridgeBank c
if nil != err { if nil != err {
return "", err return "", err
} }
client := backend.(*ethclient.Client)
err = waitEthTxFinished(client, tx.Hash(), "Approve") err = waitEthTxFinished(client, tx.Hash(), "Approve")
if nil != err { if nil != err {
return "", err return "", err
...@@ -245,7 +249,7 @@ func Burn(ownerPrivateKeyStr, tokenAddrstr, chain33Receiver string, bridgeBank c ...@@ -245,7 +249,7 @@ func Burn(ownerPrivateKeyStr, tokenAddrstr, chain33Receiver string, bridgeBank c
prepareDone = false prepareDone = false
auth, err = PrepareAuth(client, ownerPrivateKey, ownerAddr) auth, err = PrepareAuth(backend, ownerPrivateKey, ownerAddr)
if nil != err { if nil != err {
return "", err return "", err
} }
...@@ -264,7 +268,7 @@ func Burn(ownerPrivateKeyStr, tokenAddrstr, chain33Receiver string, bridgeBank c ...@@ -264,7 +268,7 @@ func Burn(ownerPrivateKeyStr, tokenAddrstr, chain33Receiver string, bridgeBank c
return tx.Hash().String(), nil return tx.Hash().String(), nil
} }
func BurnAsync(ownerPrivateKeyStr, tokenAddrstr, chain33Receiver string, bridgeBank common.Address, amount *big.Int, bridgeBankIns *generated.BridgeBank, client *ethclient.Client) (string, error) { func BurnAsync(ownerPrivateKeyStr, tokenAddrstr, chain33Receiver string, bridgeBank common.Address, amount *big.Int, bridgeBankIns *generated.BridgeBank, backend bind.ContractBackend) (string, error) {
ownerPrivateKey, err := crypto.ToECDSA(common.FromHex(ownerPrivateKeyStr)) ownerPrivateKey, err := crypto.ToECDSA(common.FromHex(ownerPrivateKeyStr))
if nil != err { if nil != err {
return "", err return "", err
...@@ -278,7 +282,7 @@ func BurnAsync(ownerPrivateKeyStr, tokenAddrstr, chain33Receiver string, bridgeB ...@@ -278,7 +282,7 @@ func BurnAsync(ownerPrivateKeyStr, tokenAddrstr, chain33Receiver string, bridgeB
_, _ = revokeNonce(ownerAddr) _, _ = revokeNonce(ownerAddr)
} }
}() }()
auth, err := PrepareAuth(client, ownerPrivateKey, ownerAddr) auth, err := PrepareAuth(backend, ownerPrivateKey, ownerAddr)
if nil != err { if nil != err {
return "", err return "", err
} }
...@@ -294,8 +298,8 @@ func BurnAsync(ownerPrivateKeyStr, tokenAddrstr, chain33Receiver string, bridgeB ...@@ -294,8 +298,8 @@ func BurnAsync(ownerPrivateKeyStr, tokenAddrstr, chain33Receiver string, bridgeB
return tx.Hash().String(), nil return tx.Hash().String(), nil
} }
func TransferToken(tokenAddr, fromPrivateKeyStr, toAddr string, amount *big.Int, client *ethclient.Client) (string, error) { func TransferToken(tokenAddr, fromPrivateKeyStr, toAddr string, amount *big.Int, backend bind.ContractBackend) (string, error) {
tokenInstance, err := generated.NewBridgeToken(common.HexToAddress(tokenAddr), client) tokenInstance, err := generated.NewBridgeToken(common.HexToAddress(tokenAddr), backend)
if nil != err { if nil != err {
return "", err return "", err
} }
...@@ -314,7 +318,7 @@ func TransferToken(tokenAddr, fromPrivateKeyStr, toAddr string, amount *big.Int, ...@@ -314,7 +318,7 @@ func TransferToken(tokenAddr, fromPrivateKeyStr, toAddr string, amount *big.Int,
} }
}() }()
auth, err := PrepareAuth(client, fromPrivateKey, fromAddr) auth, err := PrepareAuth(backend, fromPrivateKey, fromAddr)
if nil != err { if nil != err {
return "", err return "", err
} }
...@@ -326,14 +330,14 @@ func TransferToken(tokenAddr, fromPrivateKeyStr, toAddr string, amount *big.Int, ...@@ -326,14 +330,14 @@ func TransferToken(tokenAddr, fromPrivateKeyStr, toAddr string, amount *big.Int,
return "", err return "", err
} }
err = waitEthTxFinished(client, tx.Hash(), "TransferFromToken") err = waitEthTxFinished(backend.(*ethclient.Client), tx.Hash(), "TransferFromToken")
if nil != err { if nil != err {
return "", err return "", err
} }
return tx.Hash().String(), nil return tx.Hash().String(), nil
} }
func LockEthErc20Asset(ownerPrivateKeyStr, tokenAddrStr, chain33Receiver string, amount *big.Int, client *ethclient.Client, bridgeBank *generated.BridgeBank, bridgeBankAddr common.Address) (string, error) { func LockEthErc20Asset(ownerPrivateKeyStr, tokenAddrStr, chain33Receiver string, amount *big.Int, backend bind.ContractBackend, bridgeBank *generated.BridgeBank, bridgeBankAddr common.Address) (string, error) {
var prepareDone bool var prepareDone bool
txslog.Info("LockEthErc20Asset", "ownerPrivateKeyStr", ownerPrivateKeyStr, "tokenAddrStr", tokenAddrStr, "chain33Receiver", chain33Receiver, "amount", amount.String()) txslog.Info("LockEthErc20Asset", "ownerPrivateKeyStr", ownerPrivateKeyStr, "tokenAddrStr", tokenAddrStr, "chain33Receiver", chain33Receiver, "amount", amount.String())
ownerPrivateKey, err := crypto.ToECDSA(common.FromHex(ownerPrivateKeyStr)) ownerPrivateKey, err := crypto.ToECDSA(common.FromHex(ownerPrivateKeyStr))
...@@ -353,11 +357,11 @@ func LockEthErc20Asset(ownerPrivateKeyStr, tokenAddrStr, chain33Receiver string, ...@@ -353,11 +357,11 @@ func LockEthErc20Asset(ownerPrivateKeyStr, tokenAddrStr, chain33Receiver string,
if "" != tokenAddrStr { if "" != tokenAddrStr {
//如果是eth以外的erc20,则需要先进行approve操作 //如果是eth以外的erc20,则需要先进行approve操作
tokenAddr = common.HexToAddress(tokenAddrStr) tokenAddr = common.HexToAddress(tokenAddrStr)
tokenInstance, err := generated.NewBridgeToken(tokenAddr, client) tokenInstance, err := generated.NewBridgeToken(tokenAddr, backend)
if nil != err { if nil != err {
return "", err return "", err
} }
auth, err := PrepareAuth(client, ownerPrivateKey, ownerAddr) auth, err := PrepareAuth(backend, ownerPrivateKey, ownerAddr)
if nil != err { if nil != err {
txslog.Error("LockEthErc20Asset", "PrepareAuth err", err.Error()) txslog.Error("LockEthErc20Asset", "PrepareAuth err", err.Error())
return "", err return "", err
...@@ -370,7 +374,7 @@ func LockEthErc20Asset(ownerPrivateKeyStr, tokenAddrStr, chain33Receiver string, ...@@ -370,7 +374,7 @@ func LockEthErc20Asset(ownerPrivateKeyStr, tokenAddrStr, chain33Receiver string,
if nil != err { if nil != err {
return "", err return "", err
} }
err = waitEthTxFinished(client, tx.Hash(), "Approve") err = waitEthTxFinished(backend.(*ethclient.Client), tx.Hash(), "Approve")
if nil != err { if nil != err {
return "", err return "", err
} }
...@@ -379,7 +383,7 @@ func LockEthErc20Asset(ownerPrivateKeyStr, tokenAddrStr, chain33Receiver string, ...@@ -379,7 +383,7 @@ func LockEthErc20Asset(ownerPrivateKeyStr, tokenAddrStr, chain33Receiver string,
prepareDone = false prepareDone = false
auth, err := PrepareAuth(client, ownerPrivateKey, ownerAddr) auth, err := PrepareAuth(backend, ownerPrivateKey, ownerAddr)
if nil != err { if nil != err {
txslog.Error("LockEthErc20Asset", "PrepareAuth err", err.Error()) txslog.Error("LockEthErc20Asset", "PrepareAuth err", err.Error())
return "", err return "", err
...@@ -396,7 +400,7 @@ func LockEthErc20Asset(ownerPrivateKeyStr, tokenAddrStr, chain33Receiver string, ...@@ -396,7 +400,7 @@ func LockEthErc20Asset(ownerPrivateKeyStr, tokenAddrStr, chain33Receiver string,
txslog.Error("LockEthErc20Asset", "lock err", err.Error()) txslog.Error("LockEthErc20Asset", "lock err", err.Error())
return "", err return "", err
} }
err = waitEthTxFinished(client, tx.Hash(), "LockEthErc20Asset") err = waitEthTxFinished(backend.(*ethclient.Client), tx.Hash(), "LockEthErc20Asset")
if nil != err { if nil != err {
txslog.Error("LockEthErc20Asset", "waitEthTxFinished err", err.Error()) txslog.Error("LockEthErc20Asset", "waitEthTxFinished err", err.Error())
return "", err return "", err
...@@ -405,7 +409,7 @@ func LockEthErc20Asset(ownerPrivateKeyStr, tokenAddrStr, chain33Receiver string, ...@@ -405,7 +409,7 @@ func LockEthErc20Asset(ownerPrivateKeyStr, tokenAddrStr, chain33Receiver string,
return tx.Hash().String(), nil return tx.Hash().String(), nil
} }
func LockEthErc20AssetAsync(ownerPrivateKeyStr, tokenAddrStr, chain33Receiver string, amount *big.Int, client *ethclient.Client, bridgeBank *generated.BridgeBank) (string, error) { func LockEthErc20AssetAsync(ownerPrivateKeyStr, tokenAddrStr, chain33Receiver string, amount *big.Int, backend bind.ContractBackend, bridgeBank *generated.BridgeBank) (string, error) {
txslog.Info("LockEthErc20Asset", "ownerPrivateKeyStr", ownerPrivateKeyStr, "tokenAddrStr", tokenAddrStr, "chain33Receiver", chain33Receiver, "amount", amount.String()) txslog.Info("LockEthErc20Asset", "ownerPrivateKeyStr", ownerPrivateKeyStr, "tokenAddrStr", tokenAddrStr, "chain33Receiver", chain33Receiver, "amount", amount.String())
ownerPrivateKey, err := crypto.ToECDSA(common.FromHex(ownerPrivateKeyStr)) ownerPrivateKey, err := crypto.ToECDSA(common.FromHex(ownerPrivateKeyStr))
if nil != err { if nil != err {
...@@ -413,7 +417,7 @@ func LockEthErc20AssetAsync(ownerPrivateKeyStr, tokenAddrStr, chain33Receiver st ...@@ -413,7 +417,7 @@ func LockEthErc20AssetAsync(ownerPrivateKeyStr, tokenAddrStr, chain33Receiver st
} }
ownerAddr := crypto.PubkeyToAddress(ownerPrivateKey.PublicKey) ownerAddr := crypto.PubkeyToAddress(ownerPrivateKey.PublicKey)
auth, err := PrepareAuth(client, ownerPrivateKey, ownerAddr) auth, err := PrepareAuth(backend, ownerPrivateKey, ownerAddr)
if nil != err { if nil != err {
txslog.Error("LockEthErc20Asset", "PrepareAuth err", err.Error()) txslog.Error("LockEthErc20Asset", "PrepareAuth err", err.Error())
return "", err return "", err
...@@ -440,9 +444,9 @@ func LockEthErc20AssetAsync(ownerPrivateKeyStr, tokenAddrStr, chain33Receiver st ...@@ -440,9 +444,9 @@ func LockEthErc20AssetAsync(ownerPrivateKeyStr, tokenAddrStr, chain33Receiver st
} }
/////////////////NewProphecyClaim//////////////// /////////////////NewProphecyClaim////////////////
func MakeNewProphecyClaim(newProphecyClaimPara *NewProphecyClaimPara, client *ethclient.Client, privateKey *ecdsa.PrivateKey, transactor common.Address, x2EthContracts *X2EthContracts) (string, error) { func MakeNewProphecyClaim(newProphecyClaimPara *NewProphecyClaimPara, backend bind.ContractBackend, privateKey *ecdsa.PrivateKey, transactor common.Address, x2EthContracts *X2EthContracts) (string, error) {
var prepareDone bool var prepareDone bool
authVali, err := PrepareAuth(client, privateKey, transactor) authVali, err := PrepareAuth(backend, privateKey, transactor)
if nil != err { if nil != err {
return "", err return "", err
} }
...@@ -471,7 +475,7 @@ func MakeNewProphecyClaim(newProphecyClaimPara *NewProphecyClaimPara, client *et ...@@ -471,7 +475,7 @@ func MakeNewProphecyClaim(newProphecyClaimPara *NewProphecyClaimPara, client *et
if nil != err { if nil != err {
return "", err return "", err
} }
err = waitEthTxFinished(client, tx.Hash(), "MakeNewProphecyClaim") err = waitEthTxFinished(backend.(*ethclient.Client), tx.Hash(), "MakeNewProphecyClaim")
if nil != err { if nil != err {
return "", err return "", err
} }
......
...@@ -12,7 +12,6 @@ package ethtxs ...@@ -12,7 +12,6 @@ package ethtxs
import ( import (
"crypto/ecdsa" "crypto/ecdsa"
"math/big" "math/big"
"regexp"
"strings" "strings"
chain33Types "github.com/33cn/chain33/types" chain33Types "github.com/33cn/chain33/types"
...@@ -166,30 +165,3 @@ func Chain33MsgToProphecyClaim(event events.Chain33Msg) ProphecyClaim { ...@@ -166,30 +165,3 @@ func Chain33MsgToProphecyClaim(event events.Chain33Msg) ProphecyClaim {
return prophecyClaim return prophecyClaim
} }
// getSymbolAmountFromCoin : Parse (symbol, amount) from coin string
func getSymbolAmountFromCoin(coin string) (string, *big.Int) {
coinRune := []rune(coin)
amount := new(big.Int)
var symbol string
// Set up regex
isLetter := regexp.MustCompile(`[a-z]`)
// Iterate over each rune in the coin string
for i, char := range coinRune {
// Regex will match first letter [a-z] (lowercase)
matched := isLetter.MatchString(string(char))
// On first match, split the coin into (amount, symbol)
if matched {
amount, _ = amount.SetString(string(coinRune[0:i]), 10)
symbol = string(coinRune[i:])
break
}
}
return symbol, amount
}
...@@ -113,13 +113,13 @@ func GetLockedFunds(bridgeBank *generated.BridgeBank, tokenAddrStr string) (stri ...@@ -113,13 +113,13 @@ func GetLockedFunds(bridgeBank *generated.BridgeBank, tokenAddrStr string) (stri
return balance.String(), nil return balance.String(), nil
} }
func GetDepositFunds(client *ethclient.Client, tokenAddrStr string) (string, error) { func GetDepositFunds(backend bind.ContractBackend, tokenAddrStr string) (string, error) {
if tokenAddrStr == "" { if tokenAddrStr == "" {
return "", errors.New("nil token address") return "", errors.New("nil token address")
} }
tokenAddr := common.HexToAddress(tokenAddrStr) tokenAddr := common.HexToAddress(tokenAddrStr)
bridgeToken, err := generated.NewBridgeToken(tokenAddr, client) bridgeToken, err := generated.NewBridgeToken(tokenAddr, backend)
if nil != err { if nil != err {
return "", err return "", err
} }
......
...@@ -4,39 +4,39 @@ import ( ...@@ -4,39 +4,39 @@ import (
"errors" "errors"
"github.com/33cn/plugin/plugin/dapp/x2Ethereum/ebrelayer/ethcontract/generated" "github.com/33cn/plugin/plugin/dapp/x2Ethereum/ebrelayer/ethcontract/generated"
"github.com/ethereum/go-ethereum/accounts/abi/bind"
"github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/ethclient"
) )
func RecoverContractHandler(client *ethclient.Client, sender, registry common.Address) (*X2EthContracts, *X2EthDeployInfo, error) { func RecoverContractHandler(backend bind.ContractBackend, sender, registry common.Address) (*X2EthContracts, *X2EthDeployInfo, error) {
bridgeBankAddr, err := GetAddressFromBridgeRegistry(client, sender, registry, BridgeBank) bridgeBankAddr, err := GetAddressFromBridgeRegistry(backend, sender, registry, BridgeBank)
if nil != err { if nil != err {
return nil, nil, errors.New("Failed to get addr for bridgeBank from registry") return nil, nil, errors.New("Failed to get addr for bridgeBank from registry")
} }
bridgeBank, err := generated.NewBridgeBank(*bridgeBankAddr, client) bridgeBank, err := generated.NewBridgeBank(*bridgeBankAddr, backend)
if nil != err { if nil != err {
return nil, nil, errors.New("Failed to NewBridgeBank") return nil, nil, errors.New("Failed to NewBridgeBank")
} }
chain33BridgeAddr, err := GetAddressFromBridgeRegistry(client, sender, registry, Chain33Bridge) chain33BridgeAddr, err := GetAddressFromBridgeRegistry(backend, sender, registry, Chain33Bridge)
if nil != err { if nil != err {
return nil, nil, errors.New("Failed to get addr for chain33BridgeAddr from registry") return nil, nil, errors.New("Failed to get addr for chain33BridgeAddr from registry")
} }
chain33Bridge, err := generated.NewChain33Bridge(*chain33BridgeAddr, client) chain33Bridge, err := generated.NewChain33Bridge(*chain33BridgeAddr, backend)
if nil != err { if nil != err {
return nil, nil, errors.New("Failed to NewChain33Bridge") return nil, nil, errors.New("Failed to NewChain33Bridge")
} }
oracleAddr, err := GetAddressFromBridgeRegistry(client, sender, registry, Oracle) oracleAddr, err := GetAddressFromBridgeRegistry(backend, sender, registry, Oracle)
if nil != err { if nil != err {
return nil, nil, errors.New("Failed to get addr for oracleBridgeAddr from registry") return nil, nil, errors.New("Failed to get addr for oracleBridgeAddr from registry")
} }
oracle, err := generated.NewOracle(*oracleAddr, client) oracle, err := generated.NewOracle(*oracleAddr, backend)
if nil != err { if nil != err {
return nil, nil, errors.New("Failed to NewOracle") return nil, nil, errors.New("Failed to NewOracle")
} }
registryInstance, _ := generated.NewBridgeRegistry(registry, client) registryInstance, _ := generated.NewBridgeRegistry(registry, backend)
x2EthContracts := &X2EthContracts{ x2EthContracts := &X2EthContracts{
BridgeRegistry: registryInstance, BridgeRegistry: registryInstance,
BridgeBank: bridgeBank, BridgeBank: bridgeBank,
...@@ -54,12 +54,12 @@ func RecoverContractHandler(client *ethclient.Client, sender, registry common.Ad ...@@ -54,12 +54,12 @@ func RecoverContractHandler(client *ethclient.Client, sender, registry common.Ad
return x2EthContracts, x2EthDeployInfo, nil return x2EthContracts, x2EthDeployInfo, nil
} }
func RecoverOracleInstance(client *ethclient.Client, sender, registry common.Address) (*generated.Oracle, error) { func RecoverOracleInstance(backend bind.ContractBackend, sender, registry common.Address) (*generated.Oracle, error) {
oracleAddr, err := GetAddressFromBridgeRegistry(client, sender, registry, Oracle) oracleAddr, err := GetAddressFromBridgeRegistry(backend, sender, registry, Oracle)
if nil != err { if nil != err {
return nil, errors.New("Failed to get addr for oracleBridgeAddr from registry") return nil, errors.New("Failed to get addr for oracleBridgeAddr from registry")
} }
oracle, err := generated.NewOracle(*oracleAddr, client) oracle, err := generated.NewOracle(*oracleAddr, backend)
if nil != err { if nil != err {
return nil, errors.New("Failed to NewOracle") return nil, errors.New("Failed to NewOracle")
} }
......
...@@ -32,8 +32,8 @@ func (d ContractRegistry) String() string { ...@@ -32,8 +32,8 @@ func (d ContractRegistry) String() string {
} }
// GetAddressFromBridgeRegistry : utility method which queries the requested contract address from the BridgeRegistry // GetAddressFromBridgeRegistry : utility method which queries the requested contract address from the BridgeRegistry
func GetAddressFromBridgeRegistry(client *ethclient.Client, sender, registry common.Address, target ContractRegistry) (address *common.Address, err error) { func GetAddressFromBridgeRegistry(backend bind.ContractBackend, sender, registry common.Address, target ContractRegistry) (address *common.Address, err error) {
header, err := client.HeaderByNumber(context.Background(), nil) header, err := backend.(*ethclient.Client).HeaderByNumber(context.Background(), nil)
if err != nil { if err != nil {
txslog.Error("GetAddressFromBridgeRegistry", "Failed to get HeaderByNumber due to:", err.Error()) txslog.Error("GetAddressFromBridgeRegistry", "Failed to get HeaderByNumber due to:", err.Error())
return nil, err return nil, err
...@@ -48,7 +48,7 @@ func GetAddressFromBridgeRegistry(client *ethclient.Client, sender, registry com ...@@ -48,7 +48,7 @@ func GetAddressFromBridgeRegistry(client *ethclient.Client, sender, registry com
} }
// Initialize BridgeRegistry instance // Initialize BridgeRegistry instance
registryInstance, err := bridgeRegistry.NewBridgeRegistry(registry, client) registryInstance, err := bridgeRegistry.NewBridgeRegistry(registry, backend)
if err != nil { if err != nil {
txslog.Error("GetAddressFromBridgeRegistry", "Failed to NewBridgeRegistry to:", err.Error()) txslog.Error("GetAddressFromBridgeRegistry", "Failed to NewBridgeRegistry to:", err.Error())
return nil, err return nil, err
......
...@@ -20,7 +20,7 @@ import ( ...@@ -20,7 +20,7 @@ import (
// RelayLockToChain33 : RelayLockToChain33 applies validator's signature to an EthBridgeClaim message // RelayLockToChain33 : RelayLockToChain33 applies validator's signature to an EthBridgeClaim message
// containing information about an event on the Ethereum blockchain before relaying to the Bridge // containing information about an event on the Ethereum blockchain before relaying to the Bridge
func RelayLockToChain33(privateKey chain33Crypto.PrivKey, claim *ebrelayerTypes.EthBridgeClaim, rpcUrl string) (string, error) { func RelayLockToChain33(privateKey chain33Crypto.PrivKey, claim *ebrelayerTypes.EthBridgeClaim, rpcURL string) (string, error) {
var res string var res string
params := &types.Eth2Chain33{ params := &types.Eth2Chain33{
...@@ -41,7 +41,7 @@ func RelayLockToChain33(privateKey chain33Crypto.PrivKey, claim *ebrelayerTypes. ...@@ -41,7 +41,7 @@ func RelayLockToChain33(privateKey chain33Crypto.PrivKey, claim *ebrelayerTypes.
ActionName: types.NameEth2Chain33Action, ActionName: types.NameEth2Chain33Action,
Payload: chain33Types.MustPBToJSON(params), Payload: chain33Types.MustPBToJSON(params),
} }
ctx := jsonclient.NewRPCCtx(rpcUrl, "Chain33.CreateTransaction", pm, &res) ctx := jsonclient.NewRPCCtx(rpcURL, "Chain33.CreateTransaction", pm, &res)
_, _ = ctx.RunResult() _, _ = ctx.RunResult()
data, err := common.FromHex(res) data, err := common.FromHex(res)
...@@ -71,12 +71,12 @@ func RelayLockToChain33(privateKey chain33Crypto.PrivKey, claim *ebrelayerTypes. ...@@ -71,12 +71,12 @@ func RelayLockToChain33(privateKey chain33Crypto.PrivKey, claim *ebrelayerTypes.
} }
var txhash string var txhash string
ctx = jsonclient.NewRPCCtx(rpcUrl, "Chain33.SendTransaction", pms, &txhash) ctx = jsonclient.NewRPCCtx(rpcURL, "Chain33.SendTransaction", pms, &txhash)
_, err = ctx.RunResult() _, err = ctx.RunResult()
return txhash, err return txhash, err
} }
func RelayBurnToChain33(privateKey chain33Crypto.PrivKey, claim *ebrelayerTypes.EthBridgeClaim, rpcUrl string) (string, error) { func RelayBurnToChain33(privateKey chain33Crypto.PrivKey, claim *ebrelayerTypes.EthBridgeClaim, rpcURL string) (string, error) {
var res string var res string
params := &types.Eth2Chain33{ params := &types.Eth2Chain33{
...@@ -97,7 +97,7 @@ func RelayBurnToChain33(privateKey chain33Crypto.PrivKey, claim *ebrelayerTypes. ...@@ -97,7 +97,7 @@ func RelayBurnToChain33(privateKey chain33Crypto.PrivKey, claim *ebrelayerTypes.
ActionName: types.NameWithdrawEthAction, ActionName: types.NameWithdrawEthAction,
Payload: chain33Types.MustPBToJSON(params), Payload: chain33Types.MustPBToJSON(params),
} }
ctx := jsonclient.NewRPCCtx(rpcUrl, "Chain33.CreateTransaction", pm, &res) ctx := jsonclient.NewRPCCtx(rpcURL, "Chain33.CreateTransaction", pm, &res)
_, _ = ctx.RunResult() _, _ = ctx.RunResult()
data, err := common.FromHex(res) data, err := common.FromHex(res)
...@@ -127,7 +127,7 @@ func RelayBurnToChain33(privateKey chain33Crypto.PrivKey, claim *ebrelayerTypes. ...@@ -127,7 +127,7 @@ func RelayBurnToChain33(privateKey chain33Crypto.PrivKey, claim *ebrelayerTypes.
} }
var txhash string var txhash string
ctx = jsonclient.NewRPCCtx(rpcUrl, "Chain33.SendTransaction", pms, &txhash) ctx = jsonclient.NewRPCCtx(rpcURL, "Chain33.SendTransaction", pms, &txhash)
_, err = ctx.RunResult() _, err = ctx.RunResult()
return txhash, err return txhash, err
} }
...@@ -3,12 +3,13 @@ package ethtxs ...@@ -3,12 +3,13 @@ package ethtxs
import ( import (
"crypto/ecdsa" "crypto/ecdsa"
"github.com/ethereum/go-ethereum/accounts/abi/bind"
"github.com/33cn/chain33/common/log/log15" "github.com/33cn/chain33/common/log/log15"
"github.com/33cn/plugin/plugin/dapp/x2Ethereum/ebrelayer/ethcontract/generated" "github.com/33cn/plugin/plugin/dapp/x2Ethereum/ebrelayer/ethcontract/generated"
"github.com/33cn/plugin/plugin/dapp/x2Ethereum/ebrelayer/events" "github.com/33cn/plugin/plugin/dapp/x2Ethereum/ebrelayer/events"
"github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/crypto"
"github.com/ethereum/go-ethereum/ethclient"
) )
var ( var (
...@@ -22,10 +23,10 @@ const ( ...@@ -22,10 +23,10 @@ const (
) )
// RelayOracleClaimToEthereum : relays the provided burn or lock to Chain33Bridge contract on the Ethereum network // RelayOracleClaimToEthereum : relays the provided burn or lock to Chain33Bridge contract on the Ethereum network
func RelayOracleClaimToEthereum(oracleInstance *generated.Oracle, client *ethclient.Client, sender common.Address, event events.Event, claim ProphecyClaim, privateKey *ecdsa.PrivateKey, chain33TxHash []byte) (txhash string, err error) { func RelayOracleClaimToEthereum(oracleInstance *generated.Oracle, backend bind.ContractBackend, sender common.Address, event events.Event, claim ProphecyClaim, privateKey *ecdsa.PrivateKey, chain33TxHash []byte) (txhash string, err error) {
txslog.Info("RelayProphecyClaimToEthereum", "sender", sender.String(), "event", event, "chain33Sender", common.ToHex(claim.Chain33Sender), "ethereumReceiver", claim.EthereumReceiver.String(), "TokenAddress", claim.TokenContractAddress.String(), "symbol", claim.Symbol, "Amount", claim.Amount.String(), "claimType", claim.ClaimType.String()) txslog.Info("RelayProphecyClaimToEthereum", "sender", sender.String(), "event", event, "chain33Sender", common.ToHex(claim.Chain33Sender), "ethereumReceiver", claim.EthereumReceiver.String(), "TokenAddress", claim.TokenContractAddress.String(), "symbol", claim.Symbol, "Amount", claim.Amount.String(), "claimType", claim.ClaimType.String())
auth, err := PrepareAuth(client, privateKey, sender) auth, err := PrepareAuth(backend, privateKey, sender)
if nil != err { if nil != err {
txslog.Error("RelayProphecyClaimToEthereum", "PrepareAuth err", err.Error()) txslog.Error("RelayProphecyClaimToEthereum", "PrepareAuth err", err.Error())
return "", err return "", err
......
...@@ -8,17 +8,16 @@ import ( ...@@ -8,17 +8,16 @@ import (
"sync" "sync"
"time" "time"
ebrelayerTypes "github.com/33cn/plugin/plugin/dapp/x2Ethereum/ebrelayer/types"
"github.com/ethereum/go-ethereum" "github.com/ethereum/go-ethereum"
"github.com/ethereum/go-ethereum/accounts/abi/bind" "github.com/ethereum/go-ethereum/accounts/abi/bind"
"github.com/ethereum/go-ethereum/ethclient"
solsha3 "github.com/miguelmota/go-solidity-sha3"
ebrelayerTypes "github.com/33cn/plugin/plugin/dapp/x2Ethereum/ebrelayer/types"
"github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/common/hexutil" "github.com/ethereum/go-ethereum/common/hexutil"
"github.com/ethereum/go-ethereum/common/math" "github.com/ethereum/go-ethereum/common/math"
"github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/crypto"
"github.com/ethereum/go-ethereum/crypto/secp256k1" "github.com/ethereum/go-ethereum/crypto/secp256k1"
"github.com/ethereum/go-ethereum/ethclient"
solsha3 "github.com/miguelmota/go-solidity-sha3"
) )
type EthTxStatus int32 type EthTxStatus int32
...@@ -66,14 +65,6 @@ func prefixMessage(message common.Hash, key *ecdsa.PrivateKey) ([]byte, []byte) ...@@ -66,14 +65,6 @@ func prefixMessage(message common.Hash, key *ecdsa.PrivateKey) ([]byte, []byte)
return sig, prefixed return sig, prefixed
} }
func loadPrivateKey(privateKey []byte) (key *ecdsa.PrivateKey, err error) {
key, err = crypto.ToECDSA(privateKey)
if nil != err {
return nil, err
}
return
}
// LoadSender : uses the validator's private key to load the validator's address // LoadSender : uses the validator's private key to load the validator's address
func LoadSender(privateKey *ecdsa.PrivateKey) (address common.Address, err error) { func LoadSender(privateKey *ecdsa.PrivateKey) (address common.Address, err error) {
// Parse public key // Parse public key
...@@ -91,7 +82,7 @@ func getNonce(sender common.Address, backend bind.ContractBackend) (*big.Int, er ...@@ -91,7 +82,7 @@ func getNonce(sender common.Address, backend bind.ContractBackend) (*big.Int, er
if nonceMutex, exist := addr2Nonce[sender]; exist { if nonceMutex, exist := addr2Nonce[sender]; exist {
nonceMutex.rw.Lock() nonceMutex.rw.Lock()
defer nonceMutex.rw.Unlock() defer nonceMutex.rw.Unlock()
nonceMutex.nonce += 1 nonceMutex.nonce++
addr2Nonce[sender] = nonceMutex addr2Nonce[sender] = nonceMutex
txslog.Debug("getNonce from cache", "address", sender.String(), "nonce", nonceMutex.nonce) txslog.Debug("getNonce from cache", "address", sender.String(), "nonce", nonceMutex.nonce)
return big.NewInt(nonceMutex.nonce), nil return big.NewInt(nonceMutex.nonce), nil
...@@ -113,7 +104,7 @@ func revokeNonce(sender common.Address) (*big.Int, error) { ...@@ -113,7 +104,7 @@ func revokeNonce(sender common.Address) (*big.Int, error) {
if nonceMutex, exist := addr2Nonce[sender]; exist { if nonceMutex, exist := addr2Nonce[sender]; exist {
nonceMutex.rw.Lock() nonceMutex.rw.Lock()
defer nonceMutex.rw.Unlock() defer nonceMutex.rw.Unlock()
nonceMutex.nonce -= 1 nonceMutex.nonce--
addr2Nonce[sender] = nonceMutex addr2Nonce[sender] = nonceMutex
txslog.Debug("revokeNonce", "address", sender.String(), "nonce", nonceMutex.nonce) txslog.Debug("revokeNonce", "address", sender.String(), "nonce", nonceMutex.nonce)
return big.NewInt(nonceMutex.nonce), nil return big.NewInt(nonceMutex.nonce), nil
...@@ -122,6 +113,8 @@ func revokeNonce(sender common.Address) (*big.Int, error) { ...@@ -122,6 +113,8 @@ func revokeNonce(sender common.Address) (*big.Int, error) {
} }
func PrepareAuth(backend bind.ContractBackend, privateKey *ecdsa.PrivateKey, transactor common.Address) (*bind.TransactOpts, error) { func PrepareAuth(backend bind.ContractBackend, privateKey *ecdsa.PrivateKey, transactor common.Address) (*bind.TransactOpts, error) {
//var backend bind.ContractBackend = client
//client *ethclient.Client
if nil == privateKey || nil == backend { if nil == privateKey || nil == backend {
txslog.Error("PrepareAuth", "nil input parameter", "backend", backend, "privateKey", privateKey) txslog.Error("PrepareAuth", "nil input parameter", "backend", backend, "privateKey", privateKey)
return nil, errors.New("nil input parameter") return nil, errors.New("nil input parameter")
......
...@@ -25,8 +25,8 @@ const ( ...@@ -25,8 +25,8 @@ const (
) )
const ( const (
CLAIM_TYPE_BURN = uint8(1) ClaimTypeBurn = uint8(1)
CLAIM_TYPE_LOCK = uint8(2) ClaimTypeLock = uint8(2)
) )
// String : returns the event type as a string // String : returns the event type as a string
......
...@@ -69,13 +69,13 @@ func main() { ...@@ -69,13 +69,13 @@ func main() {
mainlog.Info("db info:", " Dbdriver = ", cfg.SyncTxConfig.Dbdriver, ", DbPath = ", cfg.SyncTxConfig.DbPath, ", DbCache = ", cfg.SyncTxConfig.DbCache) mainlog.Info("db info:", " Dbdriver = ", cfg.SyncTxConfig.Dbdriver, ", DbPath = ", cfg.SyncTxConfig.DbPath, ", DbCache = ", cfg.SyncTxConfig.DbCache)
db := dbm.NewDB("relayer_db_service", cfg.SyncTxConfig.Dbdriver, cfg.SyncTxConfig.DbPath, cfg.SyncTxConfig.DbCache) db := dbm.NewDB("relayer_db_service", cfg.SyncTxConfig.Dbdriver, cfg.SyncTxConfig.DbPath, cfg.SyncTxConfig.DbCache)
chain33RelayerService := chain33Relayer.StartChain33Relayer(cfg.SyncTxConfig, cfg.BridgeRegistry, cfg.EthProvider, db, ctx) chain33RelayerService := chain33Relayer.StartChain33Relayer(ctx, cfg.SyncTxConfig, cfg.BridgeRegistry, cfg.EthProvider, db)
ethRelayerService := ethRelayer.StartEthereumRelayer(cfg.SyncTxConfig.Chain33Host, db, cfg.EthProvider, cfg.BridgeRegistry, cfg.Deploy, cfg.EthMaturityDegree, cfg.EthBlockFetchPeriod) ethRelayerService := ethRelayer.StartEthereumRelayer(cfg.SyncTxConfig.Chain33Host, db, cfg.EthProvider, cfg.BridgeRegistry, cfg.Deploy, cfg.EthMaturityDegree, cfg.EthBlockFetchPeriod)
relayerManager := relayer.NewRelayerManager(chain33RelayerService, ethRelayerService, db) relayerManager := relayer.NewRelayerManager(chain33RelayerService, ethRelayerService, db)
log.Info("cfg.JrpcBindAddr = ", cfg.JrpcBindAddr) log.Info("cfg.JrpcBindAddr = ", cfg.JrpcBindAddr)
startRpcServer(cfg.JrpcBindAddr, relayerManager) startRPCServer(cfg.JrpcBindAddr, relayerManager)
ch := make(chan os.Signal, 1) ch := make(chan os.Signal, 1)
signal.Notify(ch, syscall.SIGTERM) signal.Notify(ch, syscall.SIGTERM)
...@@ -160,16 +160,16 @@ func (r *RPCServer) HandleHTTP(rpcPath, debugPath string) { ...@@ -160,16 +160,16 @@ func (r *RPCServer) HandleHTTP(rpcPath, debugPath string) {
http.Handle(rpcPath, r) http.Handle(rpcPath, r)
} }
type HttpConn struct { type HTTPConn struct {
in io.Reader in io.Reader
out io.Writer out io.Writer
} }
func (c *HttpConn) Read(p []byte) (n int, err error) { return c.in.Read(p) } func (c *HTTPConn) Read(p []byte) (n int, err error) { return c.in.Read(p) }
func (c *HttpConn) Write(d []byte) (n int, err error) { return c.out.Write(d) } func (c *HTTPConn) Write(d []byte) (n int, err error) { return c.out.Write(d) }
func (c *HttpConn) Close() error { return nil } func (c *HTTPConn) Close() error { return nil }
func startRpcServer(address string, api interface{}) { func startRPCServer(address string, api interface{}) {
listener, err := net.Listen("tcp", address) listener, err := net.Listen("tcp", address)
if err != nil { if err != nil {
fmt.Println("监听失败,端口可能已经被占用") fmt.Println("监听失败,端口可能已经被占用")
...@@ -180,7 +180,7 @@ func startRpcServer(address string, api interface{}) { ...@@ -180,7 +180,7 @@ func startRpcServer(address string, api interface{}) {
srv.HandleHTTP(rpc.DefaultRPCPath, rpc.DefaultDebugPath) srv.HandleHTTP(rpc.DefaultRPCPath, rpc.DefaultDebugPath)
var handler http.Handler = http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { var handler http.Handler = http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
if r.URL.Path == "/" { if r.URL.Path == "/" {
serverCodec := jsonrpc.NewServerCodec(&HttpConn{in: r.Body, out: w}) serverCodec := jsonrpc.NewServerCodec(&HTTPConn{in: r.Body, out: w})
w.Header().Set("Content-type", "application/json") w.Header().Set("Content-type", "application/json")
w.WriteHeader(200) w.WriteHeader(200)
err := srv.ServeRequest(serverCodec) err := srv.ServeRequest(serverCodec)
......
...@@ -15,7 +15,7 @@ var ( ...@@ -15,7 +15,7 @@ var (
start = int(1) start = int(1)
) )
func (chain33Relayer *Chain33Relayer) GetAccount(passphrase string) (privateKey, addr string, err error) { func (chain33Relayer *Relayer4Chain33) GetAccount(passphrase string) (privateKey, addr string, err error) {
accountInfo, err := chain33Relayer.db.Get(chain33AccountKey) accountInfo, err := chain33Relayer.db.Get(chain33AccountKey)
if nil != err { if nil != err {
return "", "", err return "", "", err
...@@ -29,7 +29,7 @@ func (chain33Relayer *Chain33Relayer) GetAccount(passphrase string) (privateKey, ...@@ -29,7 +29,7 @@ func (chain33Relayer *Chain33Relayer) GetAccount(passphrase string) (privateKey,
addr = ethAccount.Addr addr = ethAccount.Addr
return return
} }
func (chain33Relayer *Chain33Relayer) GetAccountAddr() (addr string, err error) { func (chain33Relayer *Relayer4Chain33) GetAccountAddr() (addr string, err error) {
accountInfo, err := chain33Relayer.db.Get(chain33AccountKey) accountInfo, err := chain33Relayer.db.Get(chain33AccountKey)
if nil != err { if nil != err {
relayerLog.Info("GetValidatorAddr", "Failed to get account from db due to:", err.Error()) relayerLog.Info("GetValidatorAddr", "Failed to get account from db due to:", err.Error())
...@@ -44,7 +44,7 @@ func (chain33Relayer *Chain33Relayer) GetAccountAddr() (addr string, err error) ...@@ -44,7 +44,7 @@ func (chain33Relayer *Chain33Relayer) GetAccountAddr() (addr string, err error)
return return
} }
func (chain33Relayer *Chain33Relayer) ImportPrivateKey(passphrase, privateKeyStr string) (addr string, err error) { func (chain33Relayer *Relayer4Chain33) ImportPrivateKey(passphrase, privateKeyStr string) (addr string, err error) {
privateKeySlice, err := chain33Common.FromHex(privateKeyStr) privateKeySlice, err := chain33Common.FromHex(privateKeyStr)
if nil != err { if nil != err {
return "", err return "", err
...@@ -71,7 +71,7 @@ func (chain33Relayer *Chain33Relayer) ImportPrivateKey(passphrase, privateKeyStr ...@@ -71,7 +71,7 @@ func (chain33Relayer *Chain33Relayer) ImportPrivateKey(passphrase, privateKeyStr
return return
} }
func (chain33Relayer *Chain33Relayer) StoreAccountWithNewPassphase(newPassphrase, oldPassphrase string) error { func (chain33Relayer *Relayer4Chain33) StoreAccountWithNewPassphase(newPassphrase, oldPassphrase string) error {
accountInfo, err := chain33Relayer.db.Get(chain33AccountKey) accountInfo, err := chain33Relayer.db.Get(chain33AccountKey)
if nil != err { if nil != err {
relayerLog.Info("StoreAccountWithNewPassphase", "pls check account is created already, err", err) relayerLog.Info("StoreAccountWithNewPassphase", "pls check account is created already, err", err)
...@@ -88,10 +88,10 @@ func (chain33Relayer *Chain33Relayer) StoreAccountWithNewPassphase(newPassphrase ...@@ -88,10 +88,10 @@ func (chain33Relayer *Chain33Relayer) StoreAccountWithNewPassphase(newPassphrase
return chain33Relayer.db.SetSync(chain33AccountKey, encodedInfo) return chain33Relayer.db.SetSync(chain33AccountKey, encodedInfo)
} }
func (chain33Relayer *Chain33Relayer) RestorePrivateKeys(passphrase string) error { func (chain33Relayer *Relayer4Chain33) RestorePrivateKeys(passphrase string) error {
accountInfo, err := chain33Relayer.db.Get(chain33AccountKey) accountInfo, err := chain33Relayer.db.Get(chain33AccountKey)
if nil != err { if nil != err {
relayerLog.Info("No private key saved for Chain33Relayer") relayerLog.Info("No private key saved for Relayer4Chain33")
return nil return nil
} }
ethAccount := &x2ethTypes.Account4Relayer{} ethAccount := &x2ethTypes.Account4Relayer{}
...@@ -114,7 +114,7 @@ func (chain33Relayer *Chain33Relayer) RestorePrivateKeys(passphrase string) erro ...@@ -114,7 +114,7 @@ func (chain33Relayer *Chain33Relayer) RestorePrivateKeys(passphrase string) erro
return nil return nil
} }
func (chain33Relayer *Chain33Relayer) UpdatePrivateKey(Passphrase, privateKey string) error { func (chain33Relayer *Relayer4Chain33) UpdatePrivateKey(Passphrase, privateKey string) error {
return nil return nil
} }
...@@ -11,6 +11,9 @@ import ( ...@@ -11,6 +11,9 @@ import (
"sync/atomic" "sync/atomic"
"time" "time"
"github.com/ethereum/go-ethereum/accounts/abi/bind"
"github.com/ethereum/go-ethereum/ethclient"
dbm "github.com/33cn/chain33/common/db" dbm "github.com/33cn/chain33/common/db"
log "github.com/33cn/chain33/common/log/log15" log "github.com/33cn/chain33/common/log/log15"
"github.com/33cn/chain33/rpc/jsonclient" "github.com/33cn/chain33/rpc/jsonclient"
...@@ -24,20 +27,16 @@ import ( ...@@ -24,20 +27,16 @@ import (
"github.com/33cn/plugin/plugin/dapp/x2Ethereum/ebrelayer/utils" "github.com/33cn/plugin/plugin/dapp/x2Ethereum/ebrelayer/utils"
"github.com/33cn/plugin/plugin/dapp/x2Ethereum/types" "github.com/33cn/plugin/plugin/dapp/x2Ethereum/types"
ethCommon "github.com/ethereum/go-ethereum/common" ethCommon "github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/ethclient"
) )
var relayerLog = log.New("module", "chain33_relayer") var relayerLog = log.New("module", "chain33_relayer")
type Chain33Relayer struct { type Relayer4Chain33 struct {
syncTxReceipts *syncTx.SyncTxReceipts syncTxReceipts *syncTx.TxReceipts
client *ethclient.Client ethBackend bind.ContractBackend
rpcLaddr string //用户向指定的blockchain节点进行rpc调用 rpcLaddr string //用户向指定的blockchain节点进行rpc调用
fetchHeightPeriodMs int64 fetchHeightPeriodMs int64
db dbm.DB db dbm.DB
syncTxChan <-chan int64
//height int64 //当前区块高度 +++++++++||++++++++++++||++++++++++||
//heightSync2App int64 //已经同步高度 ^ ^ ^
lastHeight4Tx int64 //等待被处理的具有相应的交易回执的高度 lastHeight4Tx int64 //等待被处理的具有相应的交易回执的高度
matDegree int32 //成熟度 heightSync2App matDegress height matDegree int32 //成熟度 heightSync2App matDegress height
passphase string passphase string
...@@ -48,15 +47,14 @@ type Chain33Relayer struct { ...@@ -48,15 +47,14 @@ type Chain33Relayer struct {
totalTx4Chain33ToEth int64 totalTx4Chain33ToEth int64
statusCheckedIndex int64 statusCheckedIndex int64
ctx context.Context ctx context.Context
wg sync.WaitGroup
rwLock sync.RWMutex rwLock sync.RWMutex
unlock chan int unlock chan int
status int32 status int32
} }
// StartChain33Relayer : initializes a relayer which witnesses events on the chain33 network and relays them to Ethereum // StartChain33Relayer : initializes a relayer which witnesses events on the chain33 network and relays them to Ethereum
func StartChain33Relayer(syncTxConfig *ebTypes.SyncTxConfig, registryAddr, provider string, db dbm.DB, ctx context.Context) *Chain33Relayer { func StartChain33Relayer(ctx context.Context, syncTxConfig *ebTypes.SyncTxConfig, registryAddr, provider string, db dbm.DB) *Relayer4Chain33 {
relayer := &Chain33Relayer{ relayer := &Relayer4Chain33{
rpcLaddr: syncTxConfig.Chain33Host, rpcLaddr: syncTxConfig.Chain33Host,
fetchHeightPeriodMs: syncTxConfig.FetchHeightPeriodMs, fetchHeightPeriodMs: syncTxConfig.FetchHeightPeriodMs,
unlock: make(chan int), unlock: make(chan int),
...@@ -79,7 +77,7 @@ func StartChain33Relayer(syncTxConfig *ebTypes.SyncTxConfig, registryAddr, provi ...@@ -79,7 +77,7 @@ func StartChain33Relayer(syncTxConfig *ebTypes.SyncTxConfig, registryAddr, provi
if err != nil { if err != nil {
panic(err) panic(err)
} }
relayer.client = client relayer.ethBackend = client
relayer.totalTx4Chain33ToEth = relayer.getTotalTxAmount2Eth() relayer.totalTx4Chain33ToEth = relayer.getTotalTxAmount2Eth()
relayer.statusCheckedIndex = relayer.getStatusCheckedIndex() relayer.statusCheckedIndex = relayer.getStatusCheckedIndex()
...@@ -87,18 +85,18 @@ func StartChain33Relayer(syncTxConfig *ebTypes.SyncTxConfig, registryAddr, provi ...@@ -87,18 +85,18 @@ func StartChain33Relayer(syncTxConfig *ebTypes.SyncTxConfig, registryAddr, provi
return relayer return relayer
} }
func (chain33Relayer *Chain33Relayer) SetPassphase(passphase string) { func (chain33Relayer *Relayer4Chain33) SetPassphase(passphase string) {
chain33Relayer.rwLock.Lock() chain33Relayer.rwLock.Lock()
chain33Relayer.passphase = passphase chain33Relayer.passphase = passphase
chain33Relayer.rwLock.Unlock() chain33Relayer.rwLock.Unlock()
} }
func (chain33Relayer *Chain33Relayer) QueryTxhashRelay2Eth() ebTypes.Txhashes { func (chain33Relayer *Relayer4Chain33) QueryTxhashRelay2Eth() ebTypes.Txhashes {
txhashs := utils.QueryTxhashes([]byte(chain33ToEthBurnLockTxHashPrefix), chain33Relayer.db) txhashs := utils.QueryTxhashes([]byte(chain33ToEthBurnLockTxHashPrefix), chain33Relayer.db)
return ebTypes.Txhashes{Txhash: txhashs} return ebTypes.Txhashes{Txhash: txhashs}
} }
func (chain33Relayer *Chain33Relayer) GetRunningStatus() (relayerRunStatus *ebTypes.RelayerRunStatus) { func (chain33Relayer *Relayer4Chain33) GetRunningStatus() (relayerRunStatus *ebTypes.RelayerRunStatus) {
relayerRunStatus = &ebTypes.RelayerRunStatus{} relayerRunStatus = &ebTypes.RelayerRunStatus{}
chain33Relayer.rwLock.RLock() chain33Relayer.rwLock.RLock()
relayerRunStatus.Status = chain33Relayer.status relayerRunStatus.Status = chain33Relayer.status
...@@ -113,7 +111,7 @@ func (chain33Relayer *Chain33Relayer) GetRunningStatus() (relayerRunStatus *ebTy ...@@ -113,7 +111,7 @@ func (chain33Relayer *Chain33Relayer) GetRunningStatus() (relayerRunStatus *ebTy
return return
} }
func (chain33Relayer *Chain33Relayer) syncProc(syncCfg *ebTypes.SyncTxReceiptConfig) { func (chain33Relayer *Relayer4Chain33) syncProc(syncCfg *ebTypes.SyncTxReceiptConfig) {
_, _ = fmt.Fprintln(os.Stdout, "Pls unlock or import private key for Chain33 relayer") _, _ = fmt.Fprintln(os.Stdout, "Pls unlock or import private key for Chain33 relayer")
<-chain33Relayer.unlock <-chain33Relayer.unlock
_, _ = fmt.Fprintln(os.Stdout, "Chain33 relayer starts to run...") _, _ = fmt.Fprintln(os.Stdout, "Chain33 relayer starts to run...")
...@@ -121,7 +119,7 @@ func (chain33Relayer *Chain33Relayer) syncProc(syncCfg *ebTypes.SyncTxReceiptCon ...@@ -121,7 +119,7 @@ func (chain33Relayer *Chain33Relayer) syncProc(syncCfg *ebTypes.SyncTxReceiptCon
chain33Relayer.syncTxReceipts = syncTx.StartSyncTxReceipt(syncCfg, chain33Relayer.db) chain33Relayer.syncTxReceipts = syncTx.StartSyncTxReceipt(syncCfg, chain33Relayer.db)
chain33Relayer.lastHeight4Tx = chain33Relayer.loadLastSyncHeight() chain33Relayer.lastHeight4Tx = chain33Relayer.loadLastSyncHeight()
oracleInstance, err := relayerTx.RecoverOracleInstance(chain33Relayer.client, chain33Relayer.bridgeRegistryAddr, chain33Relayer.bridgeRegistryAddr) oracleInstance, err := relayerTx.RecoverOracleInstance(chain33Relayer.ethBackend, chain33Relayer.bridgeRegistryAddr, chain33Relayer.bridgeRegistryAddr)
if err != nil { if err != nil {
panic(err.Error()) panic(err.Error())
} }
...@@ -142,7 +140,7 @@ func (chain33Relayer *Chain33Relayer) syncProc(syncCfg *ebTypes.SyncTxReceiptCon ...@@ -142,7 +140,7 @@ func (chain33Relayer *Chain33Relayer) syncProc(syncCfg *ebTypes.SyncTxReceiptCon
} }
} }
func (chain33Relayer *Chain33Relayer) getCurrentHeight() int64 { func (chain33Relayer *Relayer4Chain33) getCurrentHeight() int64 {
var res rpctypes.Header var res rpctypes.Header
ctx := jsonclient.NewRPCCtx(chain33Relayer.rpcLaddr, "Chain33.GetLastHeader", nil, &res) ctx := jsonclient.NewRPCCtx(chain33Relayer.rpcLaddr, "Chain33.GetLastHeader", nil, &res)
_, err := ctx.RunResult() _, err := ctx.RunResult()
...@@ -152,7 +150,7 @@ func (chain33Relayer *Chain33Relayer) getCurrentHeight() int64 { ...@@ -152,7 +150,7 @@ func (chain33Relayer *Chain33Relayer) getCurrentHeight() int64 {
return res.Height return res.Height
} }
func (chain33Relayer *Chain33Relayer) onNewHeightProc(currentHeight int64) { func (chain33Relayer *Relayer4Chain33) onNewHeightProc(currentHeight int64) {
//检查已经提交的交易结果 //检查已经提交的交易结果
for chain33Relayer.statusCheckedIndex < chain33Relayer.totalTx4Chain33ToEth { for chain33Relayer.statusCheckedIndex < chain33Relayer.totalTx4Chain33ToEth {
index := chain33Relayer.statusCheckedIndex + 1 index := chain33Relayer.statusCheckedIndex + 1
...@@ -161,7 +159,7 @@ func (chain33Relayer *Chain33Relayer) onNewHeightProc(currentHeight int64) { ...@@ -161,7 +159,7 @@ func (chain33Relayer *Chain33Relayer) onNewHeightProc(currentHeight int64) {
relayerLog.Error("onNewHeightProc", "getEthTxhash for index ", index, "error", err.Error()) relayerLog.Error("onNewHeightProc", "getEthTxhash for index ", index, "error", err.Error())
break break
} }
status := relayerTx.GetEthTxStatus(chain33Relayer.client, txhash) status := relayerTx.GetEthTxStatus(chain33Relayer.ethBackend.(*ethclient.Client), txhash)
//按照提交交易的先后顺序检查交易,只要出现当前交易还在pending状态,就不再检查后续交易,等到下个区块再从该交易进行检查 //按照提交交易的先后顺序检查交易,只要出现当前交易还在pending状态,就不再检查后续交易,等到下个区块再从该交易进行检查
//TODO:可能会由于网络和打包挖矿的原因,使得交易执行顺序和提交顺序有差别,后续完善该检查逻辑 //TODO:可能会由于网络和打包挖矿的原因,使得交易执行顺序和提交顺序有差别,后续完善该检查逻辑
if status == relayerTx.EthTxPending.String() { if status == relayerTx.EthTxPending.String() {
...@@ -219,9 +217,9 @@ func getOracleClaimType(eventType string) events.Event { ...@@ -219,9 +217,9 @@ func getOracleClaimType(eventType string) events.Event {
switch eventType { switch eventType {
case events.MsgBurn.String(): case events.MsgBurn.String():
claimType = events.Event(events.CLAIM_TYPE_BURN) claimType = events.Event(events.ClaimTypeBurn)
case events.MsgLock.String(): case events.MsgLock.String():
claimType = events.Event(events.CLAIM_TYPE_LOCK) claimType = events.Event(events.ClaimTypeLock)
default: default:
panic(errors.New("eventType invalid")) panic(errors.New("eventType invalid"))
} }
...@@ -230,7 +228,7 @@ func getOracleClaimType(eventType string) events.Event { ...@@ -230,7 +228,7 @@ func getOracleClaimType(eventType string) events.Event {
} }
// handleBurnLockMsg : parse event data as a Chain33Msg, package it into a ProphecyClaim, then relay tx to the Ethereum Network // handleBurnLockMsg : parse event data as a Chain33Msg, package it into a ProphecyClaim, then relay tx to the Ethereum Network
func (chain33Relayer *Chain33Relayer) handleBurnLockMsg(claimEvent events.Event, receipt *chain33Types.ReceiptData, chain33TxHash []byte) error { func (chain33Relayer *Relayer4Chain33) handleBurnLockMsg(claimEvent events.Event, receipt *chain33Types.ReceiptData, chain33TxHash []byte) error {
relayerLog.Info("handleBurnLockMsg", "Received tx with hash", ethCommon.Bytes2Hex(chain33TxHash)) relayerLog.Info("handleBurnLockMsg", "Received tx with hash", ethCommon.Bytes2Hex(chain33TxHash))
// Parse the witnessed event's data into a new Chain33Msg // Parse the witnessed event's data into a new Chain33Msg
...@@ -245,7 +243,7 @@ func (chain33Relayer *Chain33Relayer) handleBurnLockMsg(claimEvent events.Event, ...@@ -245,7 +243,7 @@ func (chain33Relayer *Chain33Relayer) handleBurnLockMsg(claimEvent events.Event,
prophecyClaim := relayerTx.Chain33MsgToProphecyClaim(*chain33Msg) prophecyClaim := relayerTx.Chain33MsgToProphecyClaim(*chain33Msg)
// Relay the Chain33Msg to the Ethereum network // Relay the Chain33Msg to the Ethereum network
txhash, err := relayerTx.RelayOracleClaimToEthereum(chain33Relayer.oracleInstance, chain33Relayer.client, chain33Relayer.ethSender, claimEvent, prophecyClaim, chain33Relayer.privateKey4Ethereum, chain33TxHash) txhash, err := relayerTx.RelayOracleClaimToEthereum(chain33Relayer.oracleInstance, chain33Relayer.ethBackend, chain33Relayer.ethSender, claimEvent, prophecyClaim, chain33Relayer.privateKey4Ethereum, chain33TxHash)
if nil != err { if nil != err {
return err return err
} }
......
...@@ -21,7 +21,7 @@ func calcRelay2EthTxhash(txindex int64) []byte { ...@@ -21,7 +21,7 @@ func calcRelay2EthTxhash(txindex int64) []byte {
return []byte(fmt.Sprintf("%s-%012d", chain33ToEthBurnLockTxHashPrefix, txindex)) return []byte(fmt.Sprintf("%s-%012d", chain33ToEthBurnLockTxHashPrefix, txindex))
} }
func (chain33Relayer *Chain33Relayer) updateTotalTxAmount2Eth(total int64) error { func (chain33Relayer *Relayer4Chain33) updateTotalTxAmount2Eth(total int64) error {
totalTx := &types.Int64{ totalTx := &types.Int64{
Data: atomic.LoadInt64(&chain33Relayer.totalTx4Chain33ToEth), Data: atomic.LoadInt64(&chain33Relayer.totalTx4Chain33ToEth),
} }
...@@ -29,12 +29,12 @@ func (chain33Relayer *Chain33Relayer) updateTotalTxAmount2Eth(total int64) error ...@@ -29,12 +29,12 @@ func (chain33Relayer *Chain33Relayer) updateTotalTxAmount2Eth(total int64) error
return chain33Relayer.db.Set(chain33ToEthBurnLockTxTotalAmount, types.Encode(totalTx)) return chain33Relayer.db.Set(chain33ToEthBurnLockTxTotalAmount, types.Encode(totalTx))
} }
func (chain33Relayer *Chain33Relayer) getTotalTxAmount2Eth() int64 { func (chain33Relayer *Relayer4Chain33) getTotalTxAmount2Eth() int64 {
totalTx, _ := utils.LoadInt64FromDB(chain33ToEthBurnLockTxTotalAmount, chain33Relayer.db) totalTx, _ := utils.LoadInt64FromDB(chain33ToEthBurnLockTxTotalAmount, chain33Relayer.db)
return totalTx return totalTx
} }
func (chain33Relayer *Chain33Relayer) setLastestRelay2EthTxhash(status, txhash string, txIndex int64) error { func (chain33Relayer *Relayer4Chain33) setLastestRelay2EthTxhash(status, txhash string, txIndex int64) error {
key := calcRelay2EthTxhash(txIndex) key := calcRelay2EthTxhash(txIndex)
ethTxStatus := &ebTypes.EthTxStatus{ ethTxStatus := &ebTypes.EthTxStatus{
Status: status, Status: status,
...@@ -44,7 +44,7 @@ func (chain33Relayer *Chain33Relayer) setLastestRelay2EthTxhash(status, txhash s ...@@ -44,7 +44,7 @@ func (chain33Relayer *Chain33Relayer) setLastestRelay2EthTxhash(status, txhash s
return chain33Relayer.db.Set(key, data) return chain33Relayer.db.Set(key, data)
} }
func (chain33Relayer *Chain33Relayer) getEthTxhash(txIndex int64) (common.Hash, error) { func (chain33Relayer *Relayer4Chain33) getEthTxhash(txIndex int64) (common.Hash, error) {
key := calcRelay2EthTxhash(txIndex) key := calcRelay2EthTxhash(txIndex)
ethTxStatus := &ebTypes.EthTxStatus{} ethTxStatus := &ebTypes.EthTxStatus{}
data, err := chain33Relayer.db.Get(key) data, err := chain33Relayer.db.Get(key)
...@@ -58,7 +58,7 @@ func (chain33Relayer *Chain33Relayer) getEthTxhash(txIndex int64) (common.Hash, ...@@ -58,7 +58,7 @@ func (chain33Relayer *Chain33Relayer) getEthTxhash(txIndex int64) (common.Hash,
return common.HexToHash(ethTxStatus.Txhash), nil return common.HexToHash(ethTxStatus.Txhash), nil
} }
func (chain33Relayer *Chain33Relayer) setStatusCheckedIndex(txIndex int64) error { func (chain33Relayer *Relayer4Chain33) setStatusCheckedIndex(txIndex int64) error {
index := &types.Int64{ index := &types.Int64{
Data: txIndex, Data: txIndex,
} }
...@@ -66,13 +66,13 @@ func (chain33Relayer *Chain33Relayer) setStatusCheckedIndex(txIndex int64) error ...@@ -66,13 +66,13 @@ func (chain33Relayer *Chain33Relayer) setStatusCheckedIndex(txIndex int64) error
return chain33Relayer.db.Set(EthTxStatusCheckedIndex, data) return chain33Relayer.db.Set(EthTxStatusCheckedIndex, data)
} }
func (chain33Relayer *Chain33Relayer) getStatusCheckedIndex() int64 { func (chain33Relayer *Relayer4Chain33) getStatusCheckedIndex() int64 {
index, _ := utils.LoadInt64FromDB(EthTxStatusCheckedIndex, chain33Relayer.db) index, _ := utils.LoadInt64FromDB(EthTxStatusCheckedIndex, chain33Relayer.db)
return index return index
} }
//获取上次同步到app的高度 //获取上次同步到app的高度
func (chain33Relayer *Chain33Relayer) loadLastSyncHeight() int64 { func (chain33Relayer *Relayer4Chain33) loadLastSyncHeight() int64 {
height, err := utils.LoadInt64FromDB(lastSyncHeightPrefix, chain33Relayer.db) height, err := utils.LoadInt64FromDB(lastSyncHeightPrefix, chain33Relayer.db)
if nil != err && err != types.ErrHeightNotExist { if nil != err && err != types.ErrHeightNotExist {
relayerLog.Error("loadLastSyncHeight", "err:", err.Error()) relayerLog.Error("loadLastSyncHeight", "err:", err.Error())
...@@ -81,7 +81,7 @@ func (chain33Relayer *Chain33Relayer) loadLastSyncHeight() int64 { ...@@ -81,7 +81,7 @@ func (chain33Relayer *Chain33Relayer) loadLastSyncHeight() int64 {
return height return height
} }
func (chain33Relayer *Chain33Relayer) setLastSyncHeight(syncHeight int64) { func (chain33Relayer *Relayer4Chain33) setLastSyncHeight(syncHeight int64) {
bytes := types.Encode(&types.Int64{Data: syncHeight}) bytes := types.Encode(&types.Int64{Data: syncHeight})
_ = chain33Relayer.db.Set(lastSyncHeightPrefix, bytes) _ = chain33Relayer.db.Set(lastSyncHeightPrefix, bytes)
} }
...@@ -21,7 +21,6 @@ var ( ...@@ -21,7 +21,6 @@ var (
syncLastHeight = []byte("syncLastHeight:") syncLastHeight = []byte("syncLastHeight:")
txReceiptPrefix = []byte("txReceiptPrefix:") txReceiptPrefix = []byte("txReceiptPrefix:")
lastSequences = []byte("lastSequences:") lastSequences = []byte("lastSequences:")
lastSyncHeight = []byte("lastSyncHeight:")
seqOperationType = []string{"SeqTypeAdd", "SeqTypeDel"} seqOperationType = []string{"SeqTypeAdd", "SeqTypeDel"}
) )
...@@ -44,15 +43,15 @@ func pushTxReceipts(txReceipts *types.TxReceipts4Subscribe) error { ...@@ -44,15 +43,15 @@ func pushTxReceipts(txReceipts *types.TxReceipts4Subscribe) error {
return err return err
} }
type SyncTxReceipts struct { type TxReceipts struct {
db dbm.DB db dbm.DB
seqNum int64 //当前同步的序列号 seqNum int64 //当前同步的序列号
height int64 //当前区块高度 height int64 //当前区块高度
quit chan struct{} quit chan struct{}
} }
func NewSyncTxReceipts(db dbm.DB) *SyncTxReceipts { func NewSyncTxReceipts(db dbm.DB) *TxReceipts {
sync := &SyncTxReceipts{ sync := &TxReceipts{
db: db, db: db,
} }
sync.seqNum, _ = sync.loadBlockLastSequence() sync.seqNum, _ = sync.loadBlockLastSequence()
...@@ -64,7 +63,7 @@ func NewSyncTxReceipts(db dbm.DB) *SyncTxReceipts { ...@@ -64,7 +63,7 @@ func NewSyncTxReceipts(db dbm.DB) *SyncTxReceipts {
} }
//此处添加一个高度为0的空块,只是为了查找下一个比较方便,并不需要使用其信息 //此处添加一个高度为0的空块,只是为了查找下一个比较方便,并不需要使用其信息
func (syncTx *SyncTxReceipts) initSyncReceiptDataBase() { func (syncTx *TxReceipts) initSyncReceiptDataBase() {
txblock0, _ := syncTx.GetTxReceipts(0) txblock0, _ := syncTx.GetTxReceipts(0)
if nil != txblock0 { if nil != txblock0 {
return return
...@@ -75,12 +74,12 @@ func (syncTx *SyncTxReceipts) initSyncReceiptDataBase() { ...@@ -75,12 +74,12 @@ func (syncTx *SyncTxReceipts) initSyncReceiptDataBase() {
syncTx.setTxReceiptsPerBlock(txsPerBlock) syncTx.setTxReceiptsPerBlock(txsPerBlock)
} }
func (syncTx *SyncTxReceipts) Stop() { func (syncTx *TxReceipts) Stop() {
close(syncTx.quit) close(syncTx.quit)
} }
// SaveAndSyncTxs2Relayer save block to db // SaveAndSyncTxs2Relayer save block to db
func (syncTx *SyncTxReceipts) SaveAndSyncTxs2Relayer() { func (syncTx *TxReceipts) SaveAndSyncTxs2Relayer() {
for { for {
select { select {
case txReceipts := <-txReceiptCh: case txReceipts := <-txReceiptCh:
...@@ -103,7 +102,7 @@ func (syncTx *SyncTxReceipts) SaveAndSyncTxs2Relayer() { ...@@ -103,7 +102,7 @@ func (syncTx *SyncTxReceipts) SaveAndSyncTxs2Relayer() {
// 所以不需要恢复过程, 读出高度即可 // 所以不需要恢复过程, 读出高度即可
// 处理输入流程 // 处理输入流程
func (syncTx *SyncTxReceipts) dealTxReceipts(txReceipts *types.TxReceipts4Subscribe) { func (syncTx *TxReceipts) dealTxReceipts(txReceipts *types.TxReceipts4Subscribe) {
count, start, txReceiptsParsed, err := parseTxReceipts(txReceipts) count, start, txReceiptsParsed, err := parseTxReceipts(txReceipts)
if err != nil { if err != nil {
resultCh <- err resultCh <- err
...@@ -136,35 +135,34 @@ func (syncTx *SyncTxReceipts) dealTxReceipts(txReceipts *types.TxReceipts4Subscr ...@@ -136,35 +135,34 @@ func (syncTx *SyncTxReceipts) dealTxReceipts(txReceipts *types.TxReceipts4Subscr
//发送回复,确认接收成功 //发送回复,确认接收成功
resultCh <- nil resultCh <- nil
log.Debug("dealTxReceipts", "seqStart", start, "count", count, "maxBlockHeight", height) log.Debug("dealTxReceipts", "seqStart", start, "count", count, "maxBlockHeight", height)
return
} }
func (syncTx *SyncTxReceipts) loadBlockLastSequence() (int64, error) { func (syncTx *TxReceipts) loadBlockLastSequence() (int64, error) {
return utils.LoadInt64FromDB(lastSequences, syncTx.db) return utils.LoadInt64FromDB(lastSequences, syncTx.db)
} }
func (syncTx *SyncTxReceipts) LoadLastBlockHeight() (int64, error) { func (syncTx *TxReceipts) LoadLastBlockHeight() (int64, error) {
return utils.LoadInt64FromDB(syncLastHeight, syncTx.db) return utils.LoadInt64FromDB(syncLastHeight, syncTx.db)
} }
func (syncTx *SyncTxReceipts) setBlockLastSequence(newSequence int64) { func (syncTx *TxReceipts) setBlockLastSequence(newSequence int64) {
Sequencebytes := types.Encode(&types.Int64{Data: newSequence}) Sequencebytes := types.Encode(&types.Int64{Data: newSequence})
syncTx.db.Set(lastSequences, Sequencebytes) syncTx.db.Set(lastSequences, Sequencebytes)
//同时更新内存中的seq //同时更新内存中的seq
syncTx.updateSequence(newSequence) syncTx.updateSequence(newSequence)
} }
func (syncTx *SyncTxReceipts) setBlockHeight(height int64) { func (syncTx *TxReceipts) setBlockHeight(height int64) {
bytes := types.Encode(&types.Int64{Data: height}) bytes := types.Encode(&types.Int64{Data: height})
syncTx.db.Set(syncLastHeight, bytes) syncTx.db.Set(syncLastHeight, bytes)
atomic.StoreInt64(&syncTx.height, height) atomic.StoreInt64(&syncTx.height, height)
} }
func (syncTx *SyncTxReceipts) updateSequence(newSequence int64) { func (syncTx *TxReceipts) updateSequence(newSequence int64) {
atomic.StoreInt64(&syncTx.seqNum, newSequence) atomic.StoreInt64(&syncTx.seqNum, newSequence)
} }
func (syncTx *SyncTxReceipts) setTxReceiptsPerBlock(txReceipts *types.TxReceipts4SubscribePerBlk) { func (syncTx *TxReceipts) setTxReceiptsPerBlock(txReceipts *types.TxReceipts4SubscribePerBlk) {
key := txReceiptsKey4Height(txReceipts.Height) key := txReceiptsKey4Height(txReceipts.Height)
value := types.Encode(txReceipts) value := types.Encode(txReceipts)
if err := syncTx.db.Set(key, value); nil != err { if err := syncTx.db.Set(key, value); nil != err {
...@@ -172,7 +170,7 @@ func (syncTx *SyncTxReceipts) setTxReceiptsPerBlock(txReceipts *types.TxReceipts ...@@ -172,7 +170,7 @@ func (syncTx *SyncTxReceipts) setTxReceiptsPerBlock(txReceipts *types.TxReceipts
} }
} }
func (syncTx *SyncTxReceipts) GetTxReceipts(height int64) (*types.TxReceipts4SubscribePerBlk, error) { func (syncTx *TxReceipts) GetTxReceipts(height int64) (*types.TxReceipts4SubscribePerBlk, error) {
key := txReceiptsKey4Height(height) key := txReceiptsKey4Height(height)
value, err := syncTx.db.Get(key) value, err := syncTx.db.Get(key)
if err != nil { if err != nil {
...@@ -186,7 +184,7 @@ func (syncTx *SyncTxReceipts) GetTxReceipts(height int64) (*types.TxReceipts4Sub ...@@ -186,7 +184,7 @@ func (syncTx *SyncTxReceipts) GetTxReceipts(height int64) (*types.TxReceipts4Sub
return detail, nil return detail, nil
} }
func (syncTx *SyncTxReceipts) GetNextValidTxReceipts(height int64) (*types.TxReceipts4SubscribePerBlk, error) { func (syncTx *TxReceipts) GetNextValidTxReceipts(height int64) (*types.TxReceipts4SubscribePerBlk, error) {
key := txReceiptsKey4Height(height) key := txReceiptsKey4Height(height)
helper := dbm.NewListHelper(syncTx.db) helper := dbm.NewListHelper(syncTx.db)
TxReceipts := helper.List(txReceiptPrefix, key, 1, dbm.ListASC) TxReceipts := helper.List(txReceiptPrefix, key, 1, dbm.ListASC)
...@@ -201,7 +199,7 @@ func (syncTx *SyncTxReceipts) GetNextValidTxReceipts(height int64) (*types.TxRec ...@@ -201,7 +199,7 @@ func (syncTx *SyncTxReceipts) GetNextValidTxReceipts(height int64) (*types.TxRec
return detail, nil return detail, nil
} }
func (syncTx *SyncTxReceipts) delTxReceipts(height int64) { func (syncTx *TxReceipts) delTxReceipts(height int64) {
key := txReceiptsKey4Height(height) key := txReceiptsKey4Height(height)
_ = syncTx.db.Set(key, nil) _ = syncTx.db.Set(key, nil)
} }
......
...@@ -22,12 +22,12 @@ import ( ...@@ -22,12 +22,12 @@ import (
var ( var (
log = l.New("module", "sync.tx_receipts") log = l.New("module", "sync.tx_receipts")
syncTxReceipts *SyncTxReceipts syncTxReceipts *TxReceipts
) )
func StartSyncTxReceipt(cfg *relayerTypes.SyncTxReceiptConfig, db dbm.DB) *SyncTxReceipts { func StartSyncTxReceipt(cfg *relayerTypes.SyncTxReceiptConfig, db dbm.DB) *TxReceipts {
log.Debug("StartSyncTxReceipt, load config", "para:", cfg) log.Debug("StartSyncTxReceipt, load config", "para:", cfg)
log.Debug("SyncTxReceipts started ") log.Debug("TxReceipts started ")
bindOrResumePush(cfg) bindOrResumePush(cfg)
syncTxReceipts = NewSyncTxReceipts(db) syncTxReceipts = NewSyncTxReceipts(db)
......
...@@ -29,7 +29,7 @@ var ( ...@@ -29,7 +29,7 @@ var (
) )
type Key struct { type Key struct {
Id uuid.UUID // Version 4 "random" for unique id not derived from key data ID uuid.UUID // Version 4 "random" for unique id not derived from key data
// to simplify lookups we also store the address // to simplify lookups we also store the address
Address common.Address Address common.Address
// we only store privkey as pubkey/address can be derived from it // we only store privkey as pubkey/address can be derived from it
...@@ -37,7 +37,7 @@ type Key struct { ...@@ -37,7 +37,7 @@ type Key struct {
PrivateKey *ecdsa.PrivateKey PrivateKey *ecdsa.PrivateKey
} }
func (ethRelayer *EthereumRelayer) NewAccount(passphrase string) (privateKeystr, addr string, err error) { func (ethRelayer *Relayer4Ethereum) NewAccount(passphrase string) (privateKeystr, addr string, err error) {
var privateKey *ecdsa.PrivateKey var privateKey *ecdsa.PrivateKey
privateKey, privateKeystr, addr, err = newKeyAndStore(ethRelayer.db, crand.Reader, passphrase) privateKey, privateKeystr, addr, err = newKeyAndStore(ethRelayer.db, crand.Reader, passphrase)
if err != nil { if err != nil {
...@@ -47,7 +47,7 @@ func (ethRelayer *EthereumRelayer) NewAccount(passphrase string) (privateKeystr, ...@@ -47,7 +47,7 @@ func (ethRelayer *EthereumRelayer) NewAccount(passphrase string) (privateKeystr,
return return
} }
func (ethRelayer *EthereumRelayer) GetAccount(passphrase string) (privateKey, addr string, err error) { func (ethRelayer *Relayer4Ethereum) GetAccount(passphrase string) (privateKey, addr string, err error) {
accountInfo, err := ethRelayer.db.Get(ethAccountKey) accountInfo, err := ethRelayer.db.Get(ethAccountKey)
if nil != err { if nil != err {
return "", "", err return "", "", err
...@@ -62,7 +62,7 @@ func (ethRelayer *EthereumRelayer) GetAccount(passphrase string) (privateKey, ad ...@@ -62,7 +62,7 @@ func (ethRelayer *EthereumRelayer) GetAccount(passphrase string) (privateKey, ad
return return
} }
func (ethRelayer *EthereumRelayer) GetValidatorAddr() (validators x2ethTypes.ValidatorAddr4EthRelayer, err error) { func (ethRelayer *Relayer4Ethereum) GetValidatorAddr() (validators x2ethTypes.ValidatorAddr4EthRelayer, err error) {
var ethAccountAddr string var ethAccountAddr string
var chain33AccountAddr string var chain33AccountAddr string
accountInfo, err := ethRelayer.db.Get(ethAccountKey) accountInfo, err := ethRelayer.db.Get(ethAccountKey)
...@@ -92,7 +92,7 @@ func (ethRelayer *EthereumRelayer) GetValidatorAddr() (validators x2ethTypes.Val ...@@ -92,7 +92,7 @@ func (ethRelayer *EthereumRelayer) GetValidatorAddr() (validators x2ethTypes.Val
return return
} }
func (ethRelayer *EthereumRelayer) RestorePrivateKeys(passPhase string) (err error) { func (ethRelayer *Relayer4Ethereum) RestorePrivateKeys(passPhase string) (err error) {
accountInfo, err := ethRelayer.db.Get(ethAccountKey) accountInfo, err := ethRelayer.db.Get(ethAccountKey)
if nil == err { if nil == err {
ethAccount := &x2ethTypes.Account4Relayer{} ethAccount := &x2ethTypes.Account4Relayer{}
...@@ -135,7 +135,7 @@ func (ethRelayer *EthereumRelayer) RestorePrivateKeys(passPhase string) (err err ...@@ -135,7 +135,7 @@ func (ethRelayer *EthereumRelayer) RestorePrivateKeys(passPhase string) (err err
return nil return nil
} }
func (ethRelayer *EthereumRelayer) StoreAccountWithNewPassphase(newPassphrase, oldPassphrase string) error { func (ethRelayer *Relayer4Ethereum) StoreAccountWithNewPassphase(newPassphrase, oldPassphrase string) error {
accountInfo, err := ethRelayer.db.Get(ethAccountKey) accountInfo, err := ethRelayer.db.Get(ethAccountKey)
if nil != err { if nil != err {
relayerLog.Info("StoreAccountWithNewPassphase", "pls check account is created already, err", err) relayerLog.Info("StoreAccountWithNewPassphase", "pls check account is created already, err", err)
...@@ -152,7 +152,7 @@ func (ethRelayer *EthereumRelayer) StoreAccountWithNewPassphase(newPassphrase, o ...@@ -152,7 +152,7 @@ func (ethRelayer *EthereumRelayer) StoreAccountWithNewPassphase(newPassphrase, o
return ethRelayer.db.SetSync(ethAccountKey, encodedInfo) return ethRelayer.db.SetSync(ethAccountKey, encodedInfo)
} }
func (ethRelayer *EthereumRelayer) ImportChain33PrivateKey(passphrase, privateKeyStr string) error { func (ethRelayer *Relayer4Ethereum) ImportChain33PrivateKey(passphrase, privateKeyStr string) error {
var driver secp256k1.Driver var driver secp256k1.Driver
privateKeySli, err := chain33Common.FromHex(privateKeyStr) privateKeySli, err := chain33Common.FromHex(privateKeyStr)
if nil != err { if nil != err {
...@@ -181,7 +181,7 @@ func (ethRelayer *EthereumRelayer) ImportChain33PrivateKey(passphrase, privateKe ...@@ -181,7 +181,7 @@ func (ethRelayer *EthereumRelayer) ImportChain33PrivateKey(passphrase, privateKe
return ethRelayer.db.SetSync(chain33AccountKey, encodedInfo) return ethRelayer.db.SetSync(chain33AccountKey, encodedInfo)
} }
func (ethRelayer *EthereumRelayer) ImportEthValidatorPrivateKey(passphrase, privateKeyStr string) error { func (ethRelayer *Relayer4Ethereum) ImportEthValidatorPrivateKey(passphrase, privateKeyStr string) error {
privateKeySli, err := chain33Common.FromHex(privateKeyStr) privateKeySli, err := chain33Common.FromHex(privateKeyStr)
if nil != err { if nil != err {
return err return err
...@@ -285,7 +285,7 @@ func newKey(rand io.Reader) (*Key, error) { ...@@ -285,7 +285,7 @@ func newKey(rand io.Reader) (*Key, error) {
func newKeyFromECDSA(privateKeyECDSA *ecdsa.PrivateKey) *Key { func newKeyFromECDSA(privateKeyECDSA *ecdsa.PrivateKey) *Key {
id := uuid.NewRandom() id := uuid.NewRandom()
key := &Key{ key := &Key{
Id: id, ID: id,
Address: crypto.PubkeyToAddress(privateKeyECDSA.PublicKey), Address: crypto.PubkeyToAddress(privateKeyECDSA.PublicKey),
PrivateKey: privateKeyECDSA, PrivateKey: privateKeyECDSA,
} }
......
...@@ -38,7 +38,7 @@ import ( ...@@ -38,7 +38,7 @@ import (
ebTypes "github.com/33cn/plugin/plugin/dapp/x2Ethereum/ebrelayer/types" ebTypes "github.com/33cn/plugin/plugin/dapp/x2Ethereum/ebrelayer/types"
) )
type EthereumRelayer struct { type Relayer4Ethereum struct {
provider string provider string
clientChainID *big.Int clientChainID *big.Int
bridgeRegistryAddr common.Address bridgeRegistryAddr common.Address
...@@ -57,16 +57,13 @@ type EthereumRelayer struct { ...@@ -57,16 +57,13 @@ type EthereumRelayer struct {
fetchHeightPeriodMs int32 fetchHeightPeriodMs int32
eventLogIndex ebTypes.EventLogIndex eventLogIndex ebTypes.EventLogIndex
status int32 status int32
client *ethclient.Client backend bind.ContractBackend
bridgeBankAddr common.Address bridgeBankAddr common.Address
//chain33BridgeAddr common.Address
bridgeBankSub ethereum.Subscription bridgeBankSub ethereum.Subscription
bridgeBankLog chan types.Log bridgeBankLog chan types.Log
bridgeBankEventLockSig string bridgeBankEventLockSig string
bridgeBankEventBurnSig string bridgeBankEventBurnSig string
//chain33BridgeEventSig string
bridgeBankAbi abi.ABI bridgeBankAbi abi.ABI
//chain33BridgeAbi abi.ABI
deployInfo *ebTypes.Deploy deployInfo *ebTypes.Deploy
x2EthDeployInfo *ethtxs.X2EthDeployInfo x2EthDeployInfo *ethtxs.X2EthDeployInfo
deployPara *ethtxs.DeployPara deployPara *ethtxs.DeployPara
...@@ -82,11 +79,11 @@ const ( ...@@ -82,11 +79,11 @@ const (
DefaultBlockPeriod = 5000 DefaultBlockPeriod = 5000
) )
func StartEthereumRelayer(rpcURL2Chain33 string, db dbm.DB, provider, registryAddress string, deploy *ebTypes.Deploy, degree, blockInterval int32) *EthereumRelayer { func StartEthereumRelayer(rpcURL2Chain33 string, db dbm.DB, provider, registryAddress string, deploy *ebTypes.Deploy, degree, blockInterval int32) *Relayer4Ethereum {
if 0 == blockInterval { if 0 == blockInterval {
blockInterval = DefaultBlockPeriod blockInterval = DefaultBlockPeriod
} }
relayer := &EthereumRelayer{ relayer := &Relayer4Ethereum{
provider: provider, provider: provider,
db: db, db: db,
unlockchan: make(chan int, 2), unlockchan: make(chan int, 2),
...@@ -115,7 +112,7 @@ func StartEthereumRelayer(rpcURL2Chain33 string, db dbm.DB, provider, registryAd ...@@ -115,7 +112,7 @@ func StartEthereumRelayer(rpcURL2Chain33 string, db dbm.DB, provider, registryAd
return relayer return relayer
} }
func (ethRelayer *EthereumRelayer) SetPrivateKey4Ethereum(privateKey4Ethereum *ecdsa.PrivateKey) { func (ethRelayer *Relayer4Ethereum) SetPrivateKey4Ethereum(privateKey4Ethereum *ecdsa.PrivateKey) {
ethRelayer.rwLock.Lock() ethRelayer.rwLock.Lock()
defer ethRelayer.rwLock.Unlock() defer ethRelayer.rwLock.Unlock()
ethRelayer.privateKey4Ethereum = privateKey4Ethereum ethRelayer.privateKey4Ethereum = privateKey4Ethereum
...@@ -124,7 +121,7 @@ func (ethRelayer *EthereumRelayer) SetPrivateKey4Ethereum(privateKey4Ethereum *e ...@@ -124,7 +121,7 @@ func (ethRelayer *EthereumRelayer) SetPrivateKey4Ethereum(privateKey4Ethereum *e
} }
} }
func (ethRelayer *EthereumRelayer) GetRunningStatus() (relayerRunStatus *ebTypes.RelayerRunStatus) { func (ethRelayer *Relayer4Ethereum) GetRunningStatus() (relayerRunStatus *ebTypes.RelayerRunStatus) {
relayerRunStatus = &ebTypes.RelayerRunStatus{} relayerRunStatus = &ebTypes.RelayerRunStatus{}
ethRelayer.rwLock.RLock() ethRelayer.rwLock.RLock()
relayerRunStatus.Status = ethRelayer.status relayerRunStatus.Status = ethRelayer.status
...@@ -143,7 +140,7 @@ func (ethRelayer *EthereumRelayer) GetRunningStatus() (relayerRunStatus *ebTypes ...@@ -143,7 +140,7 @@ func (ethRelayer *EthereumRelayer) GetRunningStatus() (relayerRunStatus *ebTypes
return return
} }
func (ethRelayer *EthereumRelayer) recoverDeployPara() (err error) { func (ethRelayer *Relayer4Ethereum) recoverDeployPara() (err error) {
if nil == ethRelayer.deployInfo { if nil == ethRelayer.deployInfo {
return nil return nil
} }
...@@ -162,7 +159,7 @@ func (ethRelayer *EthereumRelayer) recoverDeployPara() (err error) { ...@@ -162,7 +159,7 @@ func (ethRelayer *EthereumRelayer) recoverDeployPara() (err error) {
} }
//部署以太坊合约 //部署以太坊合约
func (ethRelayer *EthereumRelayer) DeployContrcts() (bridgeRegistry string, err error) { func (ethRelayer *Relayer4Ethereum) DeployContrcts() (bridgeRegistry string, err error) {
bridgeRegistry = "" bridgeRegistry = ""
if nil == ethRelayer.deployInfo { if nil == ethRelayer.deployInfo {
return bridgeRegistry, errors.New("No deploy info configured yet") return bridgeRegistry, errors.New("No deploy info configured yet")
...@@ -207,7 +204,7 @@ func (ethRelayer *EthereumRelayer) DeployContrcts() (bridgeRegistry string, err ...@@ -207,7 +204,7 @@ func (ethRelayer *EthereumRelayer) DeployContrcts() (bridgeRegistry string, err
"power", power.String()) "power", power.String())
} }
x2EthContracts, x2EthDeployInfo, err := ethtxs.DeployAndInit(ethRelayer.client, para) x2EthContracts, x2EthDeployInfo, err := ethtxs.DeployAndInit(ethRelayer.backend, para)
if err != nil { if err != nil {
return bridgeRegistry, err return bridgeRegistry, err
} }
...@@ -229,11 +226,11 @@ func (ethRelayer *EthereumRelayer) DeployContrcts() (bridgeRegistry string, err ...@@ -229,11 +226,11 @@ func (ethRelayer *EthereumRelayer) DeployContrcts() (bridgeRegistry string, err
} }
//GetBalance:获取某一个币种的余额 //GetBalance:获取某一个币种的余额
func (ethRelayer *EthereumRelayer) GetBalance(tokenAddr, owner string) (string, error) { func (ethRelayer *Relayer4Ethereum) GetBalance(tokenAddr, owner string) (string, error) {
return ethtxs.GetBalance(ethRelayer.client, tokenAddr, owner) return ethtxs.GetBalance(ethRelayer.backend.(*ethclient.Client), tokenAddr, owner)
} }
func (ethRelayer *EthereumRelayer) ShowBridgeBankAddr() (string, error) { func (ethRelayer *Relayer4Ethereum) ShowBridgeBankAddr() (string, error) {
if nil == ethRelayer.x2EthDeployInfo { if nil == ethRelayer.x2EthDeployInfo {
return "", errors.New("The relayer is not started yes") return "", errors.New("The relayer is not started yes")
} }
...@@ -241,7 +238,7 @@ func (ethRelayer *EthereumRelayer) ShowBridgeBankAddr() (string, error) { ...@@ -241,7 +238,7 @@ func (ethRelayer *EthereumRelayer) ShowBridgeBankAddr() (string, error) {
return ethRelayer.x2EthDeployInfo.BridgeBank.Address.String(), nil return ethRelayer.x2EthDeployInfo.BridgeBank.Address.String(), nil
} }
func (ethRelayer *EthereumRelayer) ShowBridgeRegistryAddr() (string, error) { func (ethRelayer *Relayer4Ethereum) ShowBridgeRegistryAddr() (string, error) {
if nil == ethRelayer.x2EthDeployInfo { if nil == ethRelayer.x2EthDeployInfo {
return "", errors.New("The relayer is not started yes") return "", errors.New("The relayer is not started yes")
} }
...@@ -249,100 +246,101 @@ func (ethRelayer *EthereumRelayer) ShowBridgeRegistryAddr() (string, error) { ...@@ -249,100 +246,101 @@ func (ethRelayer *EthereumRelayer) ShowBridgeRegistryAddr() (string, error) {
return ethRelayer.x2EthDeployInfo.BridgeRegistry.Address.String(), nil return ethRelayer.x2EthDeployInfo.BridgeRegistry.Address.String(), nil
} }
func (ethRelayer *EthereumRelayer) ShowLockStatics(tokenAddr string) (string, error) { func (ethRelayer *Relayer4Ethereum) ShowLockStatics(tokenAddr string) (string, error) {
return ethtxs.GetLockedFunds(ethRelayer.x2EthContracts.BridgeBank, tokenAddr) return ethtxs.GetLockedFunds(ethRelayer.x2EthContracts.BridgeBank, tokenAddr)
} }
func (ethRelayer *EthereumRelayer) ShowDepositStatics(tokenAddr string) (string, error) { func (ethRelayer *Relayer4Ethereum) ShowDepositStatics(tokenAddr string) (string, error) {
return ethtxs.GetDepositFunds(ethRelayer.client, tokenAddr) return ethtxs.GetDepositFunds(ethRelayer.backend, tokenAddr)
} }
func (ethRelayer *EthereumRelayer) ShowTokenAddrBySymbol(tokenSymbol string) (string, error) { func (ethRelayer *Relayer4Ethereum) ShowTokenAddrBySymbol(tokenSymbol string) (string, error) {
return ethtxs.GetToken2address(ethRelayer.x2EthContracts.BridgeBank, tokenSymbol) return ethtxs.GetToken2address(ethRelayer.x2EthContracts.BridgeBank, tokenSymbol)
} }
func (ethRelayer *EthereumRelayer) IsProphecyPending(claimID [32]byte) (bool, error) { func (ethRelayer *Relayer4Ethereum) IsProphecyPending(claimID [32]byte) (bool, error) {
return ethtxs.IsProphecyPending(claimID, ethRelayer.ethValidator, ethRelayer.x2EthContracts.Chain33Bridge) return ethtxs.IsProphecyPending(claimID, ethRelayer.ethValidator, ethRelayer.x2EthContracts.Chain33Bridge)
} }
func (ethRelayer *EthereumRelayer) MakeNewProphecyClaim(newProphecyClaimPara *ethtxs.NewProphecyClaimPara) (string, error) { func (ethRelayer *Relayer4Ethereum) MakeNewProphecyClaim(newProphecyClaimPara *ethtxs.NewProphecyClaimPara) (string, error) {
return ethtxs.MakeNewProphecyClaim(newProphecyClaimPara, ethRelayer.client, ethRelayer.privateKey4Ethereum, ethRelayer.ethValidator, ethRelayer.x2EthContracts) return ethtxs.MakeNewProphecyClaim(newProphecyClaimPara, ethRelayer.backend, ethRelayer.privateKey4Ethereum, ethRelayer.ethValidator, ethRelayer.x2EthContracts)
} }
func (ethRelayer *EthereumRelayer) CreateBridgeToken(symbol string) (string, error) { func (ethRelayer *Relayer4Ethereum) CreateBridgeToken(symbol string) (string, error) {
return ethtxs.CreateBridgeToken(symbol, ethRelayer.client, ethRelayer.operatorInfo, ethRelayer.x2EthDeployInfo, ethRelayer.x2EthContracts) return ethtxs.CreateBridgeToken(symbol, ethRelayer.backend, ethRelayer.operatorInfo, ethRelayer.x2EthDeployInfo, ethRelayer.x2EthContracts)
} }
func (ethRelayer *EthereumRelayer) CreateERC20Token(symbol string) (string, error) { func (ethRelayer *Relayer4Ethereum) CreateERC20Token(symbol string) (string, error) {
return ethtxs.CreateERC20Token(symbol, ethRelayer.client, ethRelayer.operatorInfo, ethRelayer.x2EthDeployInfo, ethRelayer.x2EthContracts) return ethtxs.CreateERC20Token(symbol, ethRelayer.backend, ethRelayer.operatorInfo, ethRelayer.x2EthDeployInfo, ethRelayer.x2EthContracts)
} }
func (ethRelayer *EthereumRelayer) MintERC20Token(tokenAddr, ownerAddr, amount string) (string, error) { func (ethRelayer *Relayer4Ethereum) MintERC20Token(tokenAddr, ownerAddr, amount string) (string, error) {
bn := big.NewInt(1) bn := big.NewInt(1)
bn, _ = bn.SetString(x2ethTypes.TrimZeroAndDot(amount), 10) bn, _ = bn.SetString(x2ethTypes.TrimZeroAndDot(amount), 10)
return ethtxs.MintERC20Token(tokenAddr, ownerAddr, bn, ethRelayer.client, ethRelayer.operatorInfo) return ethtxs.MintERC20Token(tokenAddr, ownerAddr, bn, ethRelayer.backend, ethRelayer.operatorInfo)
} }
func (ethRelayer *EthereumRelayer) ApproveAllowance(ownerPrivateKey, tokenAddr, amount string) (string, error) { func (ethRelayer *Relayer4Ethereum) ApproveAllowance(ownerPrivateKey, tokenAddr, amount string) (string, error) {
bn := big.NewInt(1) bn := big.NewInt(1)
bn, _ = bn.SetString(x2ethTypes.TrimZeroAndDot(amount), 10) bn, _ = bn.SetString(x2ethTypes.TrimZeroAndDot(amount), 10)
return ethtxs.ApproveAllowance(ownerPrivateKey, tokenAddr, ethRelayer.x2EthDeployInfo.BridgeBank.Address, bn, ethRelayer.client) return ethtxs.ApproveAllowance(ownerPrivateKey, tokenAddr, ethRelayer.x2EthDeployInfo.BridgeBank.Address, bn, ethRelayer.backend)
} }
func (ethRelayer *EthereumRelayer) Burn(ownerPrivateKey, tokenAddr, chain33Receiver, amount string) (string, error) { func (ethRelayer *Relayer4Ethereum) Burn(ownerPrivateKey, tokenAddr, chain33Receiver, amount string) (string, error) {
bn := big.NewInt(1) bn := big.NewInt(1)
bn, _ = bn.SetString(x2ethTypes.TrimZeroAndDot(amount), 10) bn, _ = bn.SetString(x2ethTypes.TrimZeroAndDot(amount), 10)
return ethtxs.Burn(ownerPrivateKey, tokenAddr, chain33Receiver, ethRelayer.x2EthDeployInfo.BridgeBank.Address, bn, ethRelayer.x2EthContracts.BridgeBank, ethRelayer.client) return ethtxs.Burn(ownerPrivateKey, tokenAddr, chain33Receiver, ethRelayer.x2EthDeployInfo.BridgeBank.Address, bn, ethRelayer.x2EthContracts.BridgeBank, ethRelayer.backend)
} }
func (ethRelayer *EthereumRelayer) BurnAsync(ownerPrivateKey, tokenAddr, chain33Receiver, amount string) (string, error) { func (ethRelayer *Relayer4Ethereum) BurnAsync(ownerPrivateKey, tokenAddr, chain33Receiver, amount string) (string, error) {
bn := big.NewInt(1) bn := big.NewInt(1)
bn, _ = bn.SetString(x2ethTypes.TrimZeroAndDot(amount), 10) bn, _ = bn.SetString(x2ethTypes.TrimZeroAndDot(amount), 10)
return ethtxs.BurnAsync(ownerPrivateKey, tokenAddr, chain33Receiver, ethRelayer.x2EthDeployInfo.BridgeBank.Address, bn, ethRelayer.x2EthContracts.BridgeBank, ethRelayer.client) return ethtxs.BurnAsync(ownerPrivateKey, tokenAddr, chain33Receiver, ethRelayer.x2EthDeployInfo.BridgeBank.Address, bn, ethRelayer.x2EthContracts.BridgeBank, ethRelayer.backend)
} }
func (ethRelayer *EthereumRelayer) TransferToken(tokenAddr, fromKey, toAddr, amount string) (string, error) { func (ethRelayer *Relayer4Ethereum) TransferToken(tokenAddr, fromKey, toAddr, amount string) (string, error) {
bn := big.NewInt(1) bn := big.NewInt(1)
bn, _ = bn.SetString(x2ethTypes.TrimZeroAndDot(amount), 10) bn, _ = bn.SetString(x2ethTypes.TrimZeroAndDot(amount), 10)
return ethtxs.TransferToken(tokenAddr, fromKey, toAddr, bn, ethRelayer.client) return ethtxs.TransferToken(tokenAddr, fromKey, toAddr, bn, ethRelayer.backend)
} }
func (ethRelayer *EthereumRelayer) GetDecimals(tokenAddr string) (uint8, error) { func (ethRelayer *Relayer4Ethereum) GetDecimals(tokenAddr string) (uint8, error) {
opts := &bind.CallOpts{ opts := &bind.CallOpts{
Pending: true, Pending: true,
From: common.HexToAddress(tokenAddr), From: common.HexToAddress(tokenAddr),
Context: context.Background(), Context: context.Background(),
} }
bridgeToken, _ := generated.NewBridgeToken(common.HexToAddress(tokenAddr), ethRelayer.client) bridgeToken, _ := generated.NewBridgeToken(common.HexToAddress(tokenAddr), ethRelayer.backend)
return bridgeToken.Decimals(opts) return bridgeToken.Decimals(opts)
} }
func (ethRelayer *EthereumRelayer) LockEthErc20Asset(ownerPrivateKey, tokenAddr, amount string, chain33Receiver string) (string, error) { func (ethRelayer *Relayer4Ethereum) LockEthErc20Asset(ownerPrivateKey, tokenAddr, amount string, chain33Receiver string) (string, error) {
bn := big.NewInt(1) bn := big.NewInt(1)
bn, _ = bn.SetString(x2ethTypes.TrimZeroAndDot(amount), 10) bn, _ = bn.SetString(x2ethTypes.TrimZeroAndDot(amount), 10)
return ethtxs.LockEthErc20Asset(ownerPrivateKey, tokenAddr, chain33Receiver, bn, ethRelayer.client, ethRelayer.x2EthContracts.BridgeBank, ethRelayer.x2EthDeployInfo.BridgeBank.Address) return ethtxs.LockEthErc20Asset(ownerPrivateKey, tokenAddr, chain33Receiver, bn, ethRelayer.backend, ethRelayer.x2EthContracts.BridgeBank, ethRelayer.x2EthDeployInfo.BridgeBank.Address)
} }
func (ethRelayer *EthereumRelayer) LockEthErc20AssetAsync(ownerPrivateKey, tokenAddr, amount string, chain33Receiver string) (string, error) { func (ethRelayer *Relayer4Ethereum) LockEthErc20AssetAsync(ownerPrivateKey, tokenAddr, amount string, chain33Receiver string) (string, error) {
bn := big.NewInt(1) bn := big.NewInt(1)
bn, _ = bn.SetString(x2ethTypes.TrimZeroAndDot(amount), 10) bn, _ = bn.SetString(x2ethTypes.TrimZeroAndDot(amount), 10)
return ethtxs.LockEthErc20AssetAsync(ownerPrivateKey, tokenAddr, chain33Receiver, bn, ethRelayer.client, ethRelayer.x2EthContracts.BridgeBank) return ethtxs.LockEthErc20AssetAsync(ownerPrivateKey, tokenAddr, chain33Receiver, bn, ethRelayer.backend, ethRelayer.x2EthContracts.BridgeBank)
} }
func (ethRelayer *EthereumRelayer) ShowTxReceipt(hash string) (*types.Receipt, error) { func (ethRelayer *Relayer4Ethereum) ShowTxReceipt(hash string) (*types.Receipt, error) {
txhash := common.HexToHash(hash) txhash := common.HexToHash(hash)
return ethRelayer.client.TransactionReceipt(context.Background(), txhash) client := ethRelayer.backend.(*ethclient.Client)
return client.TransactionReceipt(context.Background(), txhash)
} }
func (ethRelayer *EthereumRelayer) proc() { func (ethRelayer *Relayer4Ethereum) proc() {
// Start client with infura ropsten provider // Start backend with infura ropsten provider
relayerLog.Info("EthereumRelayer proc", "Started Ethereum websocket with provider:", ethRelayer.provider, relayerLog.Info("Relayer4Ethereum proc", "Started Ethereum websocket with provider:", ethRelayer.provider,
"rpcURL2Chain33:", ethRelayer.rpcURL2Chain33) "rpcURL2Chain33:", ethRelayer.rpcURL2Chain33)
client, err := ethtxs.SetupWebsocketEthClient(ethRelayer.provider) client, err := ethtxs.SetupWebsocketEthClient(ethRelayer.provider)
if err != nil { if err != nil {
panic(err) panic(err)
} }
ethRelayer.client = client ethRelayer.backend = client
ctx := context.Background() ctx := context.Background()
clientChainID, err := client.NetworkID(ctx) clientChainID, err := client.NetworkID(ctx)
...@@ -370,9 +368,7 @@ func (ethRelayer *EthereumRelayer) proc() { ...@@ -370,9 +368,7 @@ func (ethRelayer *EthereumRelayer) proc() {
var timer *time.Ticker var timer *time.Ticker
continueFailCount := int32(0) continueFailCount := int32(0)
for { for range ethRelayer.unlockchan {
select {
case <-ethRelayer.unlockchan:
relayerLog.Info("Received ethRelayer.unlockchan") relayerLog.Info("Received ethRelayer.unlockchan")
if nil != ethRelayer.privateKey4Ethereum && nil != ethRelayer.privateKey4Chain33 && nilAddr != ethRelayer.bridgeRegistryAddr { if nil != ethRelayer.privateKey4Ethereum && nil != ethRelayer.privateKey4Chain33 && nilAddr != ethRelayer.bridgeRegistryAddr {
ethRelayer.ethValidator, err = ethtxs.LoadSender(ethRelayer.privateKey4Ethereum) ethRelayer.ethValidator, err = ethtxs.LoadSender(ethRelayer.privateKey4Ethereum)
...@@ -390,13 +386,12 @@ func (ethRelayer *EthereumRelayer) proc() { ...@@ -390,13 +386,12 @@ func (ethRelayer *EthereumRelayer) proc() {
goto latter goto latter
} }
} }
}
latter: latter:
for { for {
select { select {
case <-timer.C: case <-timer.C:
ethRelayer.procNewHeight(&continueFailCount, ctx) ethRelayer.procNewHeight(ctx, &continueFailCount)
case err := <-ethRelayer.bridgeBankSub.Err(): case err := <-ethRelayer.bridgeBankSub.Err():
panic("bridgeBankSub" + err.Error()) panic("bridgeBankSub" + err.Error())
case vLog := <-ethRelayer.bridgeBankLog: case vLog := <-ethRelayer.bridgeBankLog:
...@@ -405,10 +400,10 @@ latter: ...@@ -405,10 +400,10 @@ latter:
} }
} }
func (ethRelayer *EthereumRelayer) procNewHeight(continueFailCount *int32, ctx context.Context) { func (ethRelayer *Relayer4Ethereum) procNewHeight(ctx context.Context, continueFailCount *int32) {
head, err := ethRelayer.client.HeaderByNumber(ctx, nil) head, err := ethRelayer.backend.(*ethclient.Client).HeaderByNumber(ctx, nil)
if nil != err { if nil != err {
*continueFailCount += 1 *continueFailCount++
if *continueFailCount >= (12 * 5) { if *continueFailCount >= (12 * 5) {
panic(err.Error()) panic(err.Error())
} }
...@@ -455,18 +450,18 @@ func (ethRelayer *EthereumRelayer) procNewHeight(continueFailCount *int32, ctx c ...@@ -455,18 +450,18 @@ func (ethRelayer *EthereumRelayer) procNewHeight(continueFailCount *int32, ctx c
} }
} }
func (ethRelayer *EthereumRelayer) storeBridgeBankLogs(vLog types.Log, setBlockNumber bool) { func (ethRelayer *Relayer4Ethereum) storeBridgeBankLogs(vLog types.Log, setBlockNumber bool) {
//lock,用于捕捉 (ETH/ERC20----->chain33) 跨链转移 //lock,用于捕捉 (ETH/ERC20----->chain33) 跨链转移
//burn,用于捕捉 (chain33 token----->chain33) 实现chain33资产withdraw操作,之后在chain33上实现unlock操作 //burn,用于捕捉 (chain33 token----->chain33) 实现chain33资产withdraw操作,之后在chain33上实现unlock操作
if vLog.Topics[0].Hex() == ethRelayer.bridgeBankEventLockSig { if vLog.Topics[0].Hex() == ethRelayer.bridgeBankEventLockSig {
//先进行数据的持久化,等到一定的高度成熟度之后再进行处理 //先进行数据的持久化,等到一定的高度成熟度之后再进行处理
relayerLog.Info("EthereumRelayer storeBridgeBankLogs", "^_^ ^_^ Received bridgeBankLog for event", "lock", relayerLog.Info("Relayer4Ethereum storeBridgeBankLogs", "^_^ ^_^ Received bridgeBankLog for event", "lock",
"Block number:", vLog.BlockNumber, "tx Index", vLog.TxIndex, "log Index", vLog.Index, "Tx hash:", vLog.TxHash.Hex()) "Block number:", vLog.BlockNumber, "tx Index", vLog.TxIndex, "log Index", vLog.Index, "Tx hash:", vLog.TxHash.Hex())
if err := ethRelayer.setEthTxEvent(vLog); nil != err { if err := ethRelayer.setEthTxEvent(vLog); nil != err {
panic(err.Error()) panic(err.Error())
} }
} else if vLog.Topics[0].Hex() == ethRelayer.bridgeBankEventBurnSig { } else if vLog.Topics[0].Hex() == ethRelayer.bridgeBankEventBurnSig {
relayerLog.Info("EthereumRelayer storeBridgeBankLogs", "^_^ ^_^ Received bridgeBankLog for event", "burn", relayerLog.Info("Relayer4Ethereum storeBridgeBankLogs", "^_^ ^_^ Received bridgeBankLog for event", "burn",
"Block number:", vLog.BlockNumber, "tx Index", vLog.TxIndex, "log Index", vLog.Index, "Tx hash:", vLog.TxHash.Hex()) "Block number:", vLog.BlockNumber, "tx Index", vLog.TxIndex, "log Index", vLog.Index, "Tx hash:", vLog.TxHash.Hex())
if err := ethRelayer.setEthTxEvent(vLog); nil != err { if err := ethRelayer.setEthTxEvent(vLog); nil != err {
panic(err.Error()) panic(err.Error())
...@@ -479,11 +474,9 @@ func (ethRelayer *EthereumRelayer) storeBridgeBankLogs(vLog types.Log, setBlockN ...@@ -479,11 +474,9 @@ func (ethRelayer *EthereumRelayer) storeBridgeBankLogs(vLog types.Log, setBlockN
panic(err.Error()) panic(err.Error())
} }
} }
return
} }
func (ethRelayer *EthereumRelayer) procBridgeBankLogs(vLog types.Log) { func (ethRelayer *Relayer4Ethereum) procBridgeBankLogs(vLog types.Log) {
if ethRelayer.checkTxProcessed(vLog.TxHash.Bytes()) { if ethRelayer.checkTxProcessed(vLog.TxHash.Bytes()) {
relayerLog.Info("procBridgeBankLogs", "Tx has been already Processed with hash:", vLog.TxHash.Hex(), relayerLog.Info("procBridgeBankLogs", "Tx has been already Processed with hash:", vLog.TxHash.Hex(),
"height", vLog.BlockNumber, "index", vLog.Index) "height", vLog.BlockNumber, "index", vLog.Index)
...@@ -497,7 +490,7 @@ func (ethRelayer *EthereumRelayer) procBridgeBankLogs(vLog types.Log) { ...@@ -497,7 +490,7 @@ func (ethRelayer *EthereumRelayer) procBridgeBankLogs(vLog types.Log) {
}() }()
//检查当前交易是否因为区块回退而导致交易丢失 //检查当前交易是否因为区块回退而导致交易丢失
receipt, err := ethRelayer.client.TransactionReceipt(context.Background(), vLog.TxHash) receipt, err := ethRelayer.backend.(*ethclient.Client).TransactionReceipt(context.Background(), vLog.TxHash)
if nil != err { if nil != err {
relayerLog.Error("procBridgeBankLogs", "Failed to get tx receipt with hash", vLog.TxHash.String()) relayerLog.Error("procBridgeBankLogs", "Failed to get tx receipt with hash", vLog.TxHash.String())
return return
...@@ -512,38 +505,37 @@ func (ethRelayer *EthereumRelayer) procBridgeBankLogs(vLog types.Log) { ...@@ -512,38 +505,37 @@ func (ethRelayer *EthereumRelayer) procBridgeBankLogs(vLog types.Log) {
//lock,用于捕捉 (ETH/ERC20----->chain33) 跨链转移 //lock,用于捕捉 (ETH/ERC20----->chain33) 跨链转移
if vLog.Topics[0].Hex() == ethRelayer.bridgeBankEventLockSig { if vLog.Topics[0].Hex() == ethRelayer.bridgeBankEventLockSig {
eventName := events.LogLock.String() eventName := events.LogLock.String()
relayerLog.Info("EthereumRelayer proc", "Going to process", eventName, relayerLog.Info("Relayer4Ethereum proc", "Going to process", eventName,
"Block number:", vLog.BlockNumber, "Tx hash:", vLog.TxHash.Hex()) "Block number:", vLog.BlockNumber, "Tx hash:", vLog.TxHash.Hex())
err := ethRelayer.handleLogLockEvent(ethRelayer.clientChainID, ethRelayer.bridgeBankAbi, eventName, vLog) err := ethRelayer.handleLogLockEvent(ethRelayer.clientChainID, ethRelayer.bridgeBankAbi, eventName, vLog)
if err != nil { if err != nil {
errinfo := fmt.Sprintf("Failed to handleLogLockEvent due to:%s", err.Error()) errinfo := fmt.Sprintf("Failed to handleLogLockEvent due to:%s", err.Error())
relayerLog.Info("EthereumRelayer procBridgeBankLogs", "errinfo", errinfo) relayerLog.Info("Relayer4Ethereum procBridgeBankLogs", "errinfo", errinfo)
panic(errinfo) panic(errinfo)
} }
} else if vLog.Topics[0].Hex() == ethRelayer.bridgeBankEventBurnSig { } else if vLog.Topics[0].Hex() == ethRelayer.bridgeBankEventBurnSig {
//burn,用于捕捉 (chain33 token----->chain33) 实现chain33资产withdraw操作,之后在chain33上实现unlock操作 //burn,用于捕捉 (chain33 token----->chain33) 实现chain33资产withdraw操作,之后在chain33上实现unlock操作
eventName := events.LogChain33TokenBurn.String() eventName := events.LogChain33TokenBurn.String()
relayerLog.Info("EthereumRelayer proc", "Going to process", eventName, relayerLog.Info("Relayer4Ethereum proc", "Going to process", eventName,
"Block number:", vLog.BlockNumber, "Tx hash:", vLog.TxHash.Hex()) "Block number:", vLog.BlockNumber, "Tx hash:", vLog.TxHash.Hex())
err := ethRelayer.handleLogBurnEvent(ethRelayer.clientChainID, ethRelayer.bridgeBankAbi, eventName, vLog) err := ethRelayer.handleLogBurnEvent(ethRelayer.clientChainID, ethRelayer.bridgeBankAbi, eventName, vLog)
if err != nil { if err != nil {
errinfo := fmt.Sprintf("Failed to handleLogBurnEvent due to:%s", err.Error()) errinfo := fmt.Sprintf("Failed to handleLogBurnEvent due to:%s", err.Error())
relayerLog.Info("EthereumRelayer procBridgeBankLogs", "errinfo", errinfo) relayerLog.Info("Relayer4Ethereum procBridgeBankLogs", "errinfo", errinfo)
panic(errinfo) panic(errinfo)
} }
} }
return
} }
func (ethRelayer *EthereumRelayer) filterLogEvents() { func (ethRelayer *Relayer4Ethereum) filterLogEvents() {
deployHeight, _ := ethtxs.GetDeployHeight(ethRelayer.client, ethRelayer.x2EthDeployInfo.BridgeRegistry.Address, ethRelayer.x2EthDeployInfo.BridgeRegistry.Address) deployHeight, _ := ethtxs.GetDeployHeight(ethRelayer.backend.(*ethclient.Client), ethRelayer.x2EthDeployInfo.BridgeRegistry.Address, ethRelayer.x2EthDeployInfo.BridgeRegistry.Address)
height4BridgeBankLogAt := int64(ethRelayer.getHeight4BridgeBankLogAt()) height4BridgeBankLogAt := int64(ethRelayer.getHeight4BridgeBankLogAt())
if height4BridgeBankLogAt < deployHeight { if height4BridgeBankLogAt < deployHeight {
height4BridgeBankLogAt = deployHeight height4BridgeBankLogAt = deployHeight
} }
header, err := ethRelayer.client.HeaderByNumber(context.Background(), nil) header, err := ethRelayer.backend.(*ethclient.Client).HeaderByNumber(context.Background(), nil)
if err != nil { if err != nil {
errinfo := fmt.Sprintf("Failed to get HeaderByNumbers due to:%s", err.Error()) errinfo := fmt.Sprintf("Failed to get HeaderByNumbers due to:%s", err.Error())
panic(errinfo) panic(errinfo)
...@@ -572,7 +564,7 @@ func (ethRelayer *EthereumRelayer) filterLogEvents() { ...@@ -572,7 +564,7 @@ func (ethRelayer *EthereumRelayer) filterLogEvents() {
} }
} }
func (ethRelayer *EthereumRelayer) filterLogEventsProc(logchan chan<- types.Log, done chan<- int, title string, curHeight, heightLogProcAt int64, contractAddr common.Address, eventSig map[string]bool) { func (ethRelayer *Relayer4Ethereum) filterLogEventsProc(logchan chan<- types.Log, done chan<- int, title string, curHeight, heightLogProcAt int64, contractAddr common.Address, eventSig map[string]bool) {
relayerLog.Info(title, "eventSig", eventSig) relayerLog.Info(title, "eventSig", eventSig)
startHeight := heightLogProcAt startHeight := heightLogProcAt
...@@ -592,7 +584,7 @@ func (ethRelayer *EthereumRelayer) filterLogEventsProc(logchan chan<- types.Log, ...@@ -592,7 +584,7 @@ func (ethRelayer *EthereumRelayer) filterLogEventsProc(logchan chan<- types.Log,
} }
// Filter by contract and event, write results to logs // Filter by contract and event, write results to logs
logs, err := ethRelayer.client.FilterLogs(context.Background(), query) logs, err := ethRelayer.backend.FilterLogs(context.Background(), query)
if err != nil { if err != nil {
errinfo := fmt.Sprintf("Failed to filterLogEvents due to:%s", err.Error()) errinfo := fmt.Sprintf("Failed to filterLogEvents due to:%s", err.Error())
panic(errinfo) panic(errinfo)
...@@ -619,7 +611,7 @@ func (ethRelayer *EthereumRelayer) filterLogEventsProc(logchan chan<- types.Log, ...@@ -619,7 +611,7 @@ func (ethRelayer *EthereumRelayer) filterLogEventsProc(logchan chan<- types.Log,
} }
} }
func (ethRelayer *EthereumRelayer) prePareSubscribeEvent() { func (ethRelayer *Relayer4Ethereum) prePareSubscribeEvent() {
var eventName string var eventName string
//bridgeBank处理 //bridgeBank处理
contactAbi := ethtxs.LoadABI(ethtxs.BridgeBankABI) contactAbi := ethtxs.LoadABI(ethtxs.BridgeBankABI)
...@@ -631,9 +623,8 @@ func (ethRelayer *EthereumRelayer) prePareSubscribeEvent() { ...@@ -631,9 +623,8 @@ func (ethRelayer *EthereumRelayer) prePareSubscribeEvent() {
ethRelayer.bridgeBankAddr = ethRelayer.x2EthDeployInfo.BridgeBank.Address ethRelayer.bridgeBankAddr = ethRelayer.x2EthDeployInfo.BridgeBank.Address
} }
func (ethRelayer *EthereumRelayer) subscribeEvent() { func (ethRelayer *Relayer4Ethereum) subscribeEvent() {
var targetAddress common.Address targetAddress := ethRelayer.bridgeBankAddr
targetAddress = ethRelayer.bridgeBankAddr
// We need the target address in bytes[] for the query // We need the target address in bytes[] for the query
query := ethereum.FilterQuery{ query := ethereum.FilterQuery{
...@@ -643,7 +634,7 @@ func (ethRelayer *EthereumRelayer) subscribeEvent() { ...@@ -643,7 +634,7 @@ func (ethRelayer *EthereumRelayer) subscribeEvent() {
// We will check logs for new events // We will check logs for new events
logs := make(chan types.Log, 10) logs := make(chan types.Log, 10)
// Filter by contract and event, write results to logs // Filter by contract and event, write results to logs
sub, err := ethRelayer.client.SubscribeFilterLogs(context.Background(), query, logs) sub, err := ethRelayer.backend.SubscribeFilterLogs(context.Background(), query, logs)
if err != nil { if err != nil {
errinfo := fmt.Sprintf("Failed to SubscribeFilterLogs due to:%s", err.Error()) errinfo := fmt.Sprintf("Failed to SubscribeFilterLogs due to:%s", err.Error())
panic(errinfo) panic(errinfo)
...@@ -651,33 +642,32 @@ func (ethRelayer *EthereumRelayer) subscribeEvent() { ...@@ -651,33 +642,32 @@ func (ethRelayer *EthereumRelayer) subscribeEvent() {
relayerLog.Info("subscribeEvent", "Subscribed to contract at address:", targetAddress.Hex()) relayerLog.Info("subscribeEvent", "Subscribed to contract at address:", targetAddress.Hex())
ethRelayer.bridgeBankLog = logs ethRelayer.bridgeBankLog = logs
ethRelayer.bridgeBankSub = sub ethRelayer.bridgeBankSub = sub
return
} }
func (ethRelayer *EthereumRelayer) IsValidatorActive(addr string) (bool, error) { func (ethRelayer *Relayer4Ethereum) IsValidatorActive(addr string) (bool, error) {
return ethtxs.IsActiveValidator(common.HexToAddress(addr), ethRelayer.x2EthContracts.Valset) return ethtxs.IsActiveValidator(common.HexToAddress(addr), ethRelayer.x2EthContracts.Valset)
} }
func (ethRelayer *EthereumRelayer) ShowOperator() (string, error) { func (ethRelayer *Relayer4Ethereum) ShowOperator() (string, error) {
operator, err := ethtxs.GetOperator(ethRelayer.client, ethRelayer.ethValidator, ethRelayer.bridgeBankAddr) operator, err := ethtxs.GetOperator(ethRelayer.backend.(*ethclient.Client), ethRelayer.ethValidator, ethRelayer.bridgeBankAddr)
if nil != err { if nil != err {
return "", err return "", err
} }
return operator.String(), nil return operator.String(), nil
} }
func (ethRelayer *EthereumRelayer) QueryTxhashRelay2Eth() ebTypes.Txhashes { func (ethRelayer *Relayer4Ethereum) QueryTxhashRelay2Eth() ebTypes.Txhashes {
txhashs := ethRelayer.queryTxhashes([]byte(chain33ToEthTxHashPrefix)) txhashs := ethRelayer.queryTxhashes([]byte(chain33ToEthTxHashPrefix))
return ebTypes.Txhashes{Txhash: txhashs} return ebTypes.Txhashes{Txhash: txhashs}
} }
func (ethRelayer *EthereumRelayer) QueryTxhashRelay2Chain33() *ebTypes.Txhashes { func (ethRelayer *Relayer4Ethereum) QueryTxhashRelay2Chain33() *ebTypes.Txhashes {
txhashs := ethRelayer.queryTxhashes([]byte(eth2chain33TxHashPrefix)) txhashs := ethRelayer.queryTxhashes([]byte(eth2chain33TxHashPrefix))
return &ebTypes.Txhashes{Txhash: txhashs} return &ebTypes.Txhashes{Txhash: txhashs}
} }
// handleLogLockEvent : unpacks a LogLock event, converts it to a ProphecyClaim, and relays a tx to chain33 // handleLogLockEvent : unpacks a LogLock event, converts it to a ProphecyClaim, and relays a tx to chain33
func (ethRelayer *EthereumRelayer) handleLogLockEvent(clientChainID *big.Int, contractABI abi.ABI, eventName string, log types.Log) error { func (ethRelayer *Relayer4Ethereum) handleLogLockEvent(clientChainID *big.Int, contractABI abi.ABI, eventName string, log types.Log) error {
rpcURL := ethRelayer.rpcURL2Chain33 rpcURL := ethRelayer.rpcURL2Chain33
// Unpack the LogLock event using its unique event signature from the contract's ABI // Unpack the LogLock event using its unique event signature from the contract's ABI
...@@ -697,7 +687,7 @@ func (ethRelayer *EthereumRelayer) handleLogLockEvent(clientChainID *big.Int, co ...@@ -697,7 +687,7 @@ func (ethRelayer *EthereumRelayer) handleLogLockEvent(clientChainID *big.Int, co
From: common.HexToAddress(event.Token.String()), From: common.HexToAddress(event.Token.String()),
Context: context.Background(), Context: context.Background(),
} }
bridgeToken, _ := generated.NewBridgeToken(common.HexToAddress(event.Token.String()), ethRelayer.client) bridgeToken, _ := generated.NewBridgeToken(common.HexToAddress(event.Token.String()), ethRelayer.backend)
decimal, err = bridgeToken.Decimals(opts) decimal, err = bridgeToken.Decimals(opts)
if err != nil { if err != nil {
...@@ -735,7 +725,7 @@ func (ethRelayer *EthereumRelayer) handleLogLockEvent(clientChainID *big.Int, co ...@@ -735,7 +725,7 @@ func (ethRelayer *EthereumRelayer) handleLogLockEvent(clientChainID *big.Int, co
} }
// handleLogBurnEvent : unpacks a burn event, converts it to a ProphecyClaim, and relays a tx to chain33 // handleLogBurnEvent : unpacks a burn event, converts it to a ProphecyClaim, and relays a tx to chain33
func (ethRelayer *EthereumRelayer) handleLogBurnEvent(clientChainID *big.Int, contractABI abi.ABI, eventName string, log types.Log) error { func (ethRelayer *Relayer4Ethereum) handleLogBurnEvent(clientChainID *big.Int, contractABI abi.ABI, eventName string, log types.Log) error {
rpcURL := ethRelayer.rpcURL2Chain33 rpcURL := ethRelayer.rpcURL2Chain33
event, err := events.UnpackLogBurn(contractABI, eventName, log.Data) event, err := events.UnpackLogBurn(contractABI, eventName, log.Data)
...@@ -752,7 +742,7 @@ func (ethRelayer *EthereumRelayer) handleLogBurnEvent(clientChainID *big.Int, co ...@@ -752,7 +742,7 @@ func (ethRelayer *EthereumRelayer) handleLogBurnEvent(clientChainID *big.Int, co
From: common.HexToAddress(event.Token.String()), From: common.HexToAddress(event.Token.String()),
Context: context.Background(), Context: context.Background(),
} }
bridgeToken, _ := generated.NewBridgeToken(common.HexToAddress(event.Token.String()), ethRelayer.client) bridgeToken, _ := generated.NewBridgeToken(common.HexToAddress(event.Token.String()), ethRelayer.backend)
decimal, err = bridgeToken.Decimals(opts) decimal, err = bridgeToken.Decimals(opts)
if err != nil { if err != nil {
......
...@@ -26,8 +26,6 @@ var ( ...@@ -26,8 +26,6 @@ var (
ethTxEventPrefix = []byte("ethTxEventPrefix") ethTxEventPrefix = []byte("ethTxEventPrefix")
lastBridgeBankHeightProcPrefix = []byte("lastBridgeBankHeight") lastBridgeBankHeightProcPrefix = []byte("lastBridgeBankHeight")
bridgeBankTxProCnt = []byte("bridgeBankTxProCnt")
) )
func ethTxEventKey4Height(height uint64, index uint32) []byte { func ethTxEventKey4Height(height uint64, index uint32) []byte {
...@@ -42,11 +40,11 @@ func calcRelay2EthTxhash(txindex int64) []byte { ...@@ -42,11 +40,11 @@ func calcRelay2EthTxhash(txindex int64) []byte {
return []byte(fmt.Sprintf("%s-%012d", chain33ToEthTxHashPrefix, txindex)) return []byte(fmt.Sprintf("%s-%012d", chain33ToEthTxHashPrefix, txindex))
} }
func (ethRelayer *EthereumRelayer) setBridgeRegistryAddr(bridgeRegistryAddr string) error { func (ethRelayer *Relayer4Ethereum) setBridgeRegistryAddr(bridgeRegistryAddr string) error {
return ethRelayer.db.Set(bridgeRegistryAddrPrefix, []byte(bridgeRegistryAddr)) return ethRelayer.db.Set(bridgeRegistryAddrPrefix, []byte(bridgeRegistryAddr))
} }
func (ethRelayer *EthereumRelayer) getBridgeRegistryAddr() (string, error) { func (ethRelayer *Relayer4Ethereum) getBridgeRegistryAddr() (string, error) {
addr, err := ethRelayer.db.Get(bridgeRegistryAddrPrefix) addr, err := ethRelayer.db.Get(bridgeRegistryAddrPrefix)
if nil != err { if nil != err {
return "", err return "", err
...@@ -54,7 +52,7 @@ func (ethRelayer *EthereumRelayer) getBridgeRegistryAddr() (string, error) { ...@@ -54,7 +52,7 @@ func (ethRelayer *EthereumRelayer) getBridgeRegistryAddr() (string, error) {
return string(addr), nil return string(addr), nil
} }
func (ethRelayer *EthereumRelayer) updateTotalTxAmount2chain33(total int64) error { func (ethRelayer *Relayer4Ethereum) updateTotalTxAmount2chain33(total int64) error {
totalTx := &chain33Types.Int64{ totalTx := &chain33Types.Int64{
Data: atomic.LoadInt64(&ethRelayer.totalTx4Eth2Chain33), Data: atomic.LoadInt64(&ethRelayer.totalTx4Eth2Chain33),
} }
...@@ -62,12 +60,12 @@ func (ethRelayer *EthereumRelayer) updateTotalTxAmount2chain33(total int64) erro ...@@ -62,12 +60,12 @@ func (ethRelayer *EthereumRelayer) updateTotalTxAmount2chain33(total int64) erro
return ethRelayer.db.Set(eth2chain33TxTotalAmount, chain33Types.Encode(totalTx)) return ethRelayer.db.Set(eth2chain33TxTotalAmount, chain33Types.Encode(totalTx))
} }
func (ethRelayer *EthereumRelayer) setLastestRelay2Chain33Txhash(txhash string, txIndex int64) error { func (ethRelayer *Relayer4Ethereum) setLastestRelay2Chain33Txhash(txhash string, txIndex int64) error {
key := calcRelay2Chain33Txhash(txIndex) key := calcRelay2Chain33Txhash(txIndex)
return ethRelayer.db.Set(key, []byte(txhash)) return ethRelayer.db.Set(key, []byte(txhash))
} }
func (ethRelayer *EthereumRelayer) updateTotalTxAmount2Eth(total int64) error { func (ethRelayer *Relayer4Ethereum) updateTotalTxAmount2Eth(total int64) error {
totalTx := &chain33Types.Int64{ totalTx := &chain33Types.Int64{
Data: atomic.LoadInt64(&ethRelayer.totalTx4Chain33ToEth), Data: atomic.LoadInt64(&ethRelayer.totalTx4Chain33ToEth),
} }
...@@ -75,39 +73,39 @@ func (ethRelayer *EthereumRelayer) updateTotalTxAmount2Eth(total int64) error { ...@@ -75,39 +73,39 @@ func (ethRelayer *EthereumRelayer) updateTotalTxAmount2Eth(total int64) error {
return ethRelayer.db.Set(chain33ToEthTxTotalAmount, chain33Types.Encode(totalTx)) return ethRelayer.db.Set(chain33ToEthTxTotalAmount, chain33Types.Encode(totalTx))
} }
func (ethRelayer *EthereumRelayer) setLastestRelay2EthTxhash(txhash string, txIndex int64) error { func (ethRelayer *Relayer4Ethereum) setLastestRelay2EthTxhash(txhash string, txIndex int64) error {
key := calcRelay2EthTxhash(txIndex) key := calcRelay2EthTxhash(txIndex)
return ethRelayer.db.Set(key, []byte(txhash)) return ethRelayer.db.Set(key, []byte(txhash))
} }
func (ethRelayer *EthereumRelayer) queryTxhashes(prefix []byte) []string { func (ethRelayer *Relayer4Ethereum) queryTxhashes(prefix []byte) []string {
return utils.QueryTxhashes(prefix, ethRelayer.db) return utils.QueryTxhashes(prefix, ethRelayer.db)
} }
func (ethRelayer *EthereumRelayer) setHeight4chain33BridgeLogAt(height uint64) error { func (ethRelayer *Relayer4Ethereum) setHeight4chain33BridgeLogAt(height uint64) error {
return ethRelayer.setLogProcHeight(chain33BridgeLogProcessedAt, height) return ethRelayer.setLogProcHeight(chain33BridgeLogProcessedAt, height)
} }
func (ethRelayer *EthereumRelayer) getHeight4chain33BridgeLogAt() uint64 { func (ethRelayer *Relayer4Ethereum) getHeight4chain33BridgeLogAt() uint64 {
return ethRelayer.getLogProcHeight(chain33BridgeLogProcessedAt) return ethRelayer.getLogProcHeight(chain33BridgeLogProcessedAt)
} }
func (ethRelayer *EthereumRelayer) setHeight4BridgeBankLogAt(height uint64) error { func (ethRelayer *Relayer4Ethereum) setHeight4BridgeBankLogAt(height uint64) error {
return ethRelayer.setLogProcHeight(bridgeBankLogProcessedAt, height) return ethRelayer.setLogProcHeight(bridgeBankLogProcessedAt, height)
} }
func (ethRelayer *EthereumRelayer) getHeight4BridgeBankLogAt() uint64 { func (ethRelayer *Relayer4Ethereum) getHeight4BridgeBankLogAt() uint64 {
return ethRelayer.getLogProcHeight(bridgeBankLogProcessedAt) return ethRelayer.getLogProcHeight(bridgeBankLogProcessedAt)
} }
func (ethRelayer *EthereumRelayer) setLogProcHeight(key []byte, height uint64) error { func (ethRelayer *Relayer4Ethereum) setLogProcHeight(key []byte, height uint64) error {
data := &ebTypes.Uint64{ data := &ebTypes.Uint64{
Data: height, Data: height,
} }
return ethRelayer.db.Set(key, chain33Types.Encode(data)) return ethRelayer.db.Set(key, chain33Types.Encode(data))
} }
func (ethRelayer *EthereumRelayer) getLogProcHeight(key []byte) uint64 { func (ethRelayer *Relayer4Ethereum) getLogProcHeight(key []byte) uint64 {
value, err := ethRelayer.db.Get(key) value, err := ethRelayer.db.Get(key)
if nil != err { if nil != err {
return 0 return 0
...@@ -121,20 +119,17 @@ func (ethRelayer *EthereumRelayer) getLogProcHeight(key []byte) uint64 { ...@@ -121,20 +119,17 @@ func (ethRelayer *EthereumRelayer) getLogProcHeight(key []byte) uint64 {
} }
//保存处理过的交易 //保存处理过的交易
func (ethRelayer *EthereumRelayer) setTxProcessed(txhash []byte) error { func (ethRelayer *Relayer4Ethereum) setTxProcessed(txhash []byte) error {
return ethRelayer.db.Set(txhash, []byte("1")) return ethRelayer.db.Set(txhash, []byte("1"))
} }
//判断是否已经被处理,如果能够在数据库中找到该笔交易,则认为已经被处理 //判断是否已经被处理,如果能够在数据库中找到该笔交易,则认为已经被处理
func (ethRelayer *EthereumRelayer) checkTxProcessed(txhash []byte) bool { func (ethRelayer *Relayer4Ethereum) checkTxProcessed(txhash []byte) bool {
_, err := ethRelayer.db.Get(txhash) _, err := ethRelayer.db.Get(txhash)
if nil != err { return nil == err
return false
}
return true
} }
func (ethRelayer *EthereumRelayer) setEthTxEvent(vLog types.Log) error { func (ethRelayer *Relayer4Ethereum) setEthTxEvent(vLog types.Log) error {
key := ethTxEventKey4Height(vLog.BlockNumber, uint32(vLog.TxIndex)) key := ethTxEventKey4Height(vLog.BlockNumber, uint32(vLog.TxIndex))
value, err := json.Marshal(vLog) value, err := json.Marshal(vLog)
if nil != err { if nil != err {
...@@ -143,7 +138,7 @@ func (ethRelayer *EthereumRelayer) setEthTxEvent(vLog types.Log) error { ...@@ -143,7 +138,7 @@ func (ethRelayer *EthereumRelayer) setEthTxEvent(vLog types.Log) error {
return ethRelayer.db.Set(key, value) return ethRelayer.db.Set(key, value)
} }
func (ethRelayer *EthereumRelayer) getEthTxEvent(blockNumber uint64, txIndex uint32) (*types.Log, error) { func (ethRelayer *Relayer4Ethereum) getEthTxEvent(blockNumber uint64, txIndex uint32) (*types.Log, error) {
key := ethTxEventKey4Height(blockNumber, txIndex) key := ethTxEventKey4Height(blockNumber, txIndex)
data, err := ethRelayer.db.Get(key) data, err := ethRelayer.db.Get(key)
if nil != err { if nil != err {
...@@ -157,7 +152,7 @@ func (ethRelayer *EthereumRelayer) getEthTxEvent(blockNumber uint64, txIndex uin ...@@ -157,7 +152,7 @@ func (ethRelayer *EthereumRelayer) getEthTxEvent(blockNumber uint64, txIndex uin
return &log, nil return &log, nil
} }
func (ethRelayer *EthereumRelayer) getNextValidEthTxEventLogs(height uint64, index uint32, fetchCnt int32) ([]*types.Log, error) { func (ethRelayer *Relayer4Ethereum) getNextValidEthTxEventLogs(height uint64, index uint32, fetchCnt int32) ([]*types.Log, error) {
key := ethTxEventKey4Height(height, index) key := ethTxEventKey4Height(height, index)
helper := dbm.NewListHelper(ethRelayer.db) helper := dbm.NewListHelper(ethRelayer.db)
datas := helper.List(ethTxEventPrefix, key, fetchCnt, dbm.ListASC) datas := helper.List(ethTxEventPrefix, key, fetchCnt, dbm.ListASC)
...@@ -177,14 +172,14 @@ func (ethRelayer *EthereumRelayer) getNextValidEthTxEventLogs(height uint64, ind ...@@ -177,14 +172,14 @@ func (ethRelayer *EthereumRelayer) getNextValidEthTxEventLogs(height uint64, ind
return logs, nil return logs, nil
} }
func (ethRelayer *EthereumRelayer) setBridgeBankProcessedHeight(height uint64, index uint32) { func (ethRelayer *Relayer4Ethereum) setBridgeBankProcessedHeight(height uint64, index uint32) {
bytes := chain33Types.Encode(&ebTypes.EventLogIndex{ bytes := chain33Types.Encode(&ebTypes.EventLogIndex{
Height: height, Height: height,
Index: index}) Index: index})
_ = ethRelayer.db.Set(lastBridgeBankHeightProcPrefix, bytes) _ = ethRelayer.db.Set(lastBridgeBankHeightProcPrefix, bytes)
} }
func (ethRelayer *EthereumRelayer) getLastBridgeBankProcessedHeight() ebTypes.EventLogIndex { func (ethRelayer *Relayer4Ethereum) getLastBridgeBankProcessedHeight() ebTypes.EventLogIndex {
data, err := ethRelayer.db.Get(lastBridgeBankHeightProcPrefix) data, err := ethRelayer.db.Get(lastBridgeBankHeightProcPrefix)
if nil != err { if nil != err {
return ebTypes.EventLogIndex{} return ebTypes.EventLogIndex{}
...@@ -195,7 +190,7 @@ func (ethRelayer *EthereumRelayer) getLastBridgeBankProcessedHeight() ebTypes.Ev ...@@ -195,7 +190,7 @@ func (ethRelayer *EthereumRelayer) getLastBridgeBankProcessedHeight() ebTypes.Ev
} }
//构建一个引导查询使用的bridgeBankTx //构建一个引导查询使用的bridgeBankTx
func (ethRelayer *EthereumRelayer) initBridgeBankTx() { func (ethRelayer *Relayer4Ethereum) initBridgeBankTx() {
log, _ := ethRelayer.getEthTxEvent(0, 0) log, _ := ethRelayer.getEthTxEvent(0, 0)
if nil != log { if nil != log {
return return
......
...@@ -32,9 +32,9 @@ const ( ...@@ -32,9 +32,9 @@ const (
EncryptEnable = int64(1) EncryptEnable = int64(1)
) )
type RelayerManager struct { type Manager struct {
chain33Relayer *chain33.Chain33Relayer chain33Relayer *chain33.Relayer4Chain33
ethRelayer *ethereum.EthereumRelayer ethRelayer *ethereum.Relayer4Ethereum
store *Store store *Store
isLocked int32 isLocked int32
mtx sync.Mutex mtx sync.Mutex
...@@ -47,9 +47,9 @@ type RelayerManager struct { ...@@ -47,9 +47,9 @@ type RelayerManager struct {
//1.验证人的私钥需要通过cli命令行进行导入,且chain33和ethereum两种不同的验证人需要分别导入 //1.验证人的私钥需要通过cli命令行进行导入,且chain33和ethereum两种不同的验证人需要分别导入
//2.显示或者重新替换原有的私钥首先需要通过passpin进行unlock的操作 //2.显示或者重新替换原有的私钥首先需要通过passpin进行unlock的操作
func NewRelayerManager(chain33Relayer *chain33.Chain33Relayer, ethRelayer *ethereum.EthereumRelayer, db dbm.DB) *RelayerManager { func NewRelayerManager(chain33Relayer *chain33.Relayer4Chain33, ethRelayer *ethereum.Relayer4Ethereum, db dbm.DB) *Manager {
l, _ := lru.New(4096) l, _ := lru.New(4096)
manager := &RelayerManager{ manager := &Manager{
chain33Relayer: chain33Relayer, chain33Relayer: chain33Relayer,
ethRelayer: ethRelayer, ethRelayer: ethRelayer,
store: NewStore(db), store: NewStore(db),
...@@ -63,7 +63,7 @@ func NewRelayerManager(chain33Relayer *chain33.Chain33Relayer, ethRelayer *ether ...@@ -63,7 +63,7 @@ func NewRelayerManager(chain33Relayer *chain33.Chain33Relayer, ethRelayer *ether
return manager return manager
} }
func (manager *RelayerManager) SetPassphase(setPasswdReq relayerTypes.ReqSetPasswd, result *interface{}) error { func (manager *Manager) SetPassphase(setPasswdReq relayerTypes.ReqSetPasswd, result *interface{}) error {
manager.mtx.Lock() manager.mtx.Lock()
defer manager.mtx.Unlock() defer manager.mtx.Unlock()
// 新密码合法性校验 // 新密码合法性校验
...@@ -135,7 +135,7 @@ func (manager *RelayerManager) SetPassphase(setPasswdReq relayerTypes.ReqSetPass ...@@ -135,7 +135,7 @@ func (manager *RelayerManager) SetPassphase(setPasswdReq relayerTypes.ReqSetPass
} }
//进行unlok操作 //进行unlok操作
func (manager *RelayerManager) Unlock(passphase string, result *interface{}) error { func (manager *Manager) Unlock(passphase string, result *interface{}) error {
manager.mtx.Lock() manager.mtx.Lock()
defer manager.mtx.Unlock() defer manager.mtx.Unlock()
if EncryptEnable != manager.encryptFlag { if EncryptEnable != manager.encryptFlag {
...@@ -170,7 +170,7 @@ func (manager *RelayerManager) Unlock(passphase string, result *interface{}) err ...@@ -170,7 +170,7 @@ func (manager *RelayerManager) Unlock(passphase string, result *interface{}) err
} }
//锁定操作,该操作一旦执行,就不能替换验证人的私钥,需要重新unlock之后才能修改 //锁定操作,该操作一旦执行,就不能替换验证人的私钥,需要重新unlock之后才能修改
func (manager *RelayerManager) Lock(param interface{}, result *interface{}) error { func (manager *Manager) Lock(param interface{}, result *interface{}) error {
manager.mtx.Lock() manager.mtx.Lock()
defer manager.mtx.Unlock() defer manager.mtx.Unlock()
if err := manager.checkPermission(); nil != err { if err := manager.checkPermission(); nil != err {
...@@ -185,7 +185,7 @@ func (manager *RelayerManager) Lock(param interface{}, result *interface{}) erro ...@@ -185,7 +185,7 @@ func (manager *RelayerManager) Lock(param interface{}, result *interface{}) erro
} }
//导入chain33relayer验证人的私钥,该私钥实际用于向ethereum提交验证交易时签名使用 //导入chain33relayer验证人的私钥,该私钥实际用于向ethereum提交验证交易时签名使用
func (manager *RelayerManager) ImportChain33RelayerPrivateKey(importKeyReq relayerTypes.ImportKeyReq, result *interface{}) error { func (manager *Manager) ImportChain33RelayerPrivateKey(importKeyReq relayerTypes.ImportKeyReq, result *interface{}) error {
manager.mtx.Lock() manager.mtx.Lock()
defer manager.mtx.Unlock() defer manager.mtx.Unlock()
privateKey := importKeyReq.PrivateKey privateKey := importKeyReq.PrivateKey
...@@ -194,7 +194,7 @@ func (manager *RelayerManager) ImportChain33RelayerPrivateKey(importKeyReq relay ...@@ -194,7 +194,7 @@ func (manager *RelayerManager) ImportChain33RelayerPrivateKey(importKeyReq relay
} }
_, err := manager.chain33Relayer.ImportPrivateKey(manager.passphase, privateKey) _, err := manager.chain33Relayer.ImportPrivateKey(manager.passphase, privateKey)
if err != nil { if err != nil {
mlog.Error("ImportChain33ValidatorPrivateKey", "Failed due to casue:", err.Error()) mlog.Error("ImportChain33ValidatorPrivateKey", "Failed due to cause:", err.Error())
return err return err
} }
...@@ -206,7 +206,7 @@ func (manager *RelayerManager) ImportChain33RelayerPrivateKey(importKeyReq relay ...@@ -206,7 +206,7 @@ func (manager *RelayerManager) ImportChain33RelayerPrivateKey(importKeyReq relay
} }
//生成以太坊私钥 //生成以太坊私钥
func (manager *RelayerManager) GenerateEthereumPrivateKey(param interface{}, result *interface{}) error { func (manager *Manager) GenerateEthereumPrivateKey(param interface{}, result *interface{}) error {
manager.mtx.Lock() manager.mtx.Lock()
defer manager.mtx.Unlock() defer manager.mtx.Unlock()
if err := manager.checkPermission(); nil != err { if err := manager.checkPermission(); nil != err {
...@@ -223,7 +223,7 @@ func (manager *RelayerManager) GenerateEthereumPrivateKey(param interface{}, res ...@@ -223,7 +223,7 @@ func (manager *RelayerManager) GenerateEthereumPrivateKey(param interface{}, res
} }
//为ethrelayer导入chain33私钥,为向chain33发送交易时进行签名使用 //为ethrelayer导入chain33私钥,为向chain33发送交易时进行签名使用
func (manager *RelayerManager) ImportChain33PrivateKey4EthRelayer(privateKey string, result *interface{}) error { func (manager *Manager) ImportChain33PrivateKey4EthRelayer(privateKey string, result *interface{}) error {
manager.mtx.Lock() manager.mtx.Lock()
defer manager.mtx.Unlock() defer manager.mtx.Unlock()
if err := manager.checkPermission(); nil != err { if err := manager.checkPermission(); nil != err {
...@@ -240,7 +240,7 @@ func (manager *RelayerManager) ImportChain33PrivateKey4EthRelayer(privateKey str ...@@ -240,7 +240,7 @@ func (manager *RelayerManager) ImportChain33PrivateKey4EthRelayer(privateKey str
} }
//为ethrelayer导入chain33私钥,为向chain33发送交易时进行签名使用 //为ethrelayer导入chain33私钥,为向chain33发送交易时进行签名使用
func (manager *RelayerManager) ImportEthValidatorPrivateKey(privateKey string, result *interface{}) error { func (manager *Manager) ImportEthValidatorPrivateKey(privateKey string, result *interface{}) error {
manager.mtx.Lock() manager.mtx.Lock()
defer manager.mtx.Unlock() defer manager.mtx.Unlock()
if err := manager.checkPermission(); nil != err { if err := manager.checkPermission(); nil != err {
...@@ -257,7 +257,7 @@ func (manager *RelayerManager) ImportEthValidatorPrivateKey(privateKey string, r ...@@ -257,7 +257,7 @@ func (manager *RelayerManager) ImportEthValidatorPrivateKey(privateKey string, r
} }
//显示在chain33中以验证人validator身份进行登录的地址 //显示在chain33中以验证人validator身份进行登录的地址
func (manager *RelayerManager) ShowChain33RelayerValidator(param interface{}, result *interface{}) error { func (manager *Manager) ShowChain33RelayerValidator(param interface{}, result *interface{}) error {
manager.mtx.Lock() manager.mtx.Lock()
defer manager.mtx.Unlock() defer manager.mtx.Unlock()
var err error var err error
...@@ -270,7 +270,7 @@ func (manager *RelayerManager) ShowChain33RelayerValidator(param interface{}, re ...@@ -270,7 +270,7 @@ func (manager *RelayerManager) ShowChain33RelayerValidator(param interface{}, re
} }
//显示在Ethereum中以验证人validator身份进行登录的地址 //显示在Ethereum中以验证人validator身份进行登录的地址
func (manager *RelayerManager) ShowEthRelayerValidator(param interface{}, result *interface{}) error { func (manager *Manager) ShowEthRelayerValidator(param interface{}, result *interface{}) error {
manager.mtx.Lock() manager.mtx.Lock()
defer manager.mtx.Unlock() defer manager.mtx.Unlock()
var err error var err error
...@@ -281,7 +281,7 @@ func (manager *RelayerManager) ShowEthRelayerValidator(param interface{}, result ...@@ -281,7 +281,7 @@ func (manager *RelayerManager) ShowEthRelayerValidator(param interface{}, result
return nil return nil
} }
func (manager *RelayerManager) IsValidatorActive(vallidatorAddr string, result *interface{}) error { func (manager *Manager) IsValidatorActive(vallidatorAddr string, result *interface{}) error {
manager.mtx.Lock() manager.mtx.Lock()
defer manager.mtx.Unlock() defer manager.mtx.Unlock()
active, err := manager.ethRelayer.IsValidatorActive(vallidatorAddr) active, err := manager.ethRelayer.IsValidatorActive(vallidatorAddr)
...@@ -295,7 +295,7 @@ func (manager *RelayerManager) IsValidatorActive(vallidatorAddr string, result * ...@@ -295,7 +295,7 @@ func (manager *RelayerManager) IsValidatorActive(vallidatorAddr string, result *
return nil return nil
} }
func (manager *RelayerManager) ShowOperator(param interface{}, result *interface{}) error { func (manager *Manager) ShowOperator(param interface{}, result *interface{}) error {
manager.mtx.Lock() manager.mtx.Lock()
defer manager.mtx.Unlock() defer manager.mtx.Unlock()
operator, err := manager.ethRelayer.ShowOperator() operator, err := manager.ethRelayer.ShowOperator()
...@@ -306,7 +306,7 @@ func (manager *RelayerManager) ShowOperator(param interface{}, result *interface ...@@ -306,7 +306,7 @@ func (manager *RelayerManager) ShowOperator(param interface{}, result *interface
return nil return nil
} }
func (manager *RelayerManager) DeployContrcts(param interface{}, result *interface{}) error { func (manager *Manager) DeployContrcts(param interface{}, result *interface{}) error {
manager.mtx.Lock() manager.mtx.Lock()
defer manager.mtx.Unlock() defer manager.mtx.Unlock()
if err := manager.checkPermission(); nil != err { if err := manager.checkPermission(); nil != err {
...@@ -323,7 +323,7 @@ func (manager *RelayerManager) DeployContrcts(param interface{}, result *interfa ...@@ -323,7 +323,7 @@ func (manager *RelayerManager) DeployContrcts(param interface{}, result *interfa
return nil return nil
} }
func (manager *RelayerManager) CreateBridgeToken(symbol string, result *interface{}) error { func (manager *Manager) CreateBridgeToken(symbol string, result *interface{}) error {
manager.mtx.Lock() manager.mtx.Lock()
defer manager.mtx.Unlock() defer manager.mtx.Unlock()
if err := manager.checkPermission(); nil != err { if err := manager.checkPermission(); nil != err {
...@@ -335,12 +335,12 @@ func (manager *RelayerManager) CreateBridgeToken(symbol string, result *interfac ...@@ -335,12 +335,12 @@ func (manager *RelayerManager) CreateBridgeToken(symbol string, result *interfac
} }
*result = relayerTypes.ReplyAddr{ *result = relayerTypes.ReplyAddr{
IsOK: true, IsOK: true,
Addr: fmt.Sprintf("%s", tokenAddr), Addr: tokenAddr,
} }
return nil return nil
} }
func (manager *RelayerManager) CreateERC20Token(symbol string, result *interface{}) error { func (manager *Manager) CreateERC20Token(symbol string, result *interface{}) error {
manager.mtx.Lock() manager.mtx.Lock()
defer manager.mtx.Unlock() defer manager.mtx.Unlock()
if err := manager.checkPermission(); nil != err { if err := manager.checkPermission(); nil != err {
...@@ -352,12 +352,12 @@ func (manager *RelayerManager) CreateERC20Token(symbol string, result *interface ...@@ -352,12 +352,12 @@ func (manager *RelayerManager) CreateERC20Token(symbol string, result *interface
} }
*result = relayerTypes.ReplyAddr{ *result = relayerTypes.ReplyAddr{
IsOK: true, IsOK: true,
Addr: fmt.Sprintf("%s", tokenAddr), Addr: tokenAddr,
} }
return nil return nil
} }
func (manager *RelayerManager) MintErc20(mintToken relayerTypes.MintToken, result *interface{}) error { func (manager *Manager) MintErc20(mintToken relayerTypes.MintToken, result *interface{}) error {
manager.mtx.Lock() manager.mtx.Lock()
defer manager.mtx.Unlock() defer manager.mtx.Unlock()
if err := manager.checkPermission(); nil != err { if err := manager.checkPermission(); nil != err {
...@@ -374,7 +374,7 @@ func (manager *RelayerManager) MintErc20(mintToken relayerTypes.MintToken, resul ...@@ -374,7 +374,7 @@ func (manager *RelayerManager) MintErc20(mintToken relayerTypes.MintToken, resul
return nil return nil
} }
func (manager *RelayerManager) ApproveAllowance(approveAllowance relayerTypes.ApproveAllowance, result *interface{}) error { func (manager *Manager) ApproveAllowance(approveAllowance relayerTypes.ApproveAllowance, result *interface{}) error {
manager.mtx.Lock() manager.mtx.Lock()
defer manager.mtx.Unlock() defer manager.mtx.Unlock()
if err := manager.checkPermission(); nil != err { if err := manager.checkPermission(); nil != err {
...@@ -391,7 +391,7 @@ func (manager *RelayerManager) ApproveAllowance(approveAllowance relayerTypes.Ap ...@@ -391,7 +391,7 @@ func (manager *RelayerManager) ApproveAllowance(approveAllowance relayerTypes.Ap
return nil return nil
} }
func (manager *RelayerManager) Burn(burn relayerTypes.Burn, result *interface{}) error { func (manager *Manager) Burn(burn relayerTypes.Burn, result *interface{}) error {
manager.mtx.Lock() manager.mtx.Lock()
defer manager.mtx.Unlock() defer manager.mtx.Unlock()
if err := manager.checkPermission(); nil != err { if err := manager.checkPermission(); nil != err {
...@@ -408,7 +408,7 @@ func (manager *RelayerManager) Burn(burn relayerTypes.Burn, result *interface{}) ...@@ -408,7 +408,7 @@ func (manager *RelayerManager) Burn(burn relayerTypes.Burn, result *interface{})
return nil return nil
} }
func (manager *RelayerManager) BurnAsync(burn relayerTypes.Burn, result *interface{}) error { func (manager *Manager) BurnAsync(burn relayerTypes.Burn, result *interface{}) error {
manager.mtx.Lock() manager.mtx.Lock()
defer manager.mtx.Unlock() defer manager.mtx.Unlock()
if err := manager.checkPermission(); nil != err { if err := manager.checkPermission(); nil != err {
...@@ -425,7 +425,7 @@ func (manager *RelayerManager) BurnAsync(burn relayerTypes.Burn, result *interfa ...@@ -425,7 +425,7 @@ func (manager *RelayerManager) BurnAsync(burn relayerTypes.Burn, result *interfa
return nil return nil
} }
func (manager *RelayerManager) LockEthErc20AssetAsync(lockEthErc20Asset relayerTypes.LockEthErc20, result *interface{}) error { func (manager *Manager) LockEthErc20AssetAsync(lockEthErc20Asset relayerTypes.LockEthErc20, result *interface{}) error {
manager.mtx.Lock() manager.mtx.Lock()
defer manager.mtx.Unlock() defer manager.mtx.Unlock()
if err := manager.checkPermission(); nil != err { if err := manager.checkPermission(); nil != err {
...@@ -442,7 +442,7 @@ func (manager *RelayerManager) LockEthErc20AssetAsync(lockEthErc20Asset relayerT ...@@ -442,7 +442,7 @@ func (manager *RelayerManager) LockEthErc20AssetAsync(lockEthErc20Asset relayerT
return nil return nil
} }
func (manager *RelayerManager) LockEthErc20Asset(lockEthErc20Asset relayerTypes.LockEthErc20, result *interface{}) error { func (manager *Manager) LockEthErc20Asset(lockEthErc20Asset relayerTypes.LockEthErc20, result *interface{}) error {
manager.mtx.Lock() manager.mtx.Lock()
defer manager.mtx.Unlock() defer manager.mtx.Unlock()
if err := manager.checkPermission(); nil != err { if err := manager.checkPermission(); nil != err {
...@@ -459,7 +459,7 @@ func (manager *RelayerManager) LockEthErc20Asset(lockEthErc20Asset relayerTypes. ...@@ -459,7 +459,7 @@ func (manager *RelayerManager) LockEthErc20Asset(lockEthErc20Asset relayerTypes.
return nil return nil
} }
func (manager *RelayerManager) MakeNewProphecyClaim(newProphecyClaim relayerTypes.NewProphecyClaim, result *interface{}) error { func (manager *Manager) MakeNewProphecyClaim(newProphecyClaim relayerTypes.NewProphecyClaim, result *interface{}) error {
manager.mtx.Lock() manager.mtx.Lock()
defer manager.mtx.Unlock() defer manager.mtx.Unlock()
if err := manager.checkPermission(); nil != err { if err := manager.checkPermission(); nil != err {
...@@ -491,7 +491,7 @@ func (manager *RelayerManager) MakeNewProphecyClaim(newProphecyClaim relayerType ...@@ -491,7 +491,7 @@ func (manager *RelayerManager) MakeNewProphecyClaim(newProphecyClaim relayerType
return nil return nil
} }
func (manager *RelayerManager) IsProphecyPending(claimID [32]byte, result *interface{}) error { func (manager *Manager) IsProphecyPending(claimID [32]byte, result *interface{}) error {
manager.mtx.Lock() manager.mtx.Lock()
defer manager.mtx.Unlock() defer manager.mtx.Unlock()
active, err := manager.ethRelayer.IsProphecyPending(claimID) active, err := manager.ethRelayer.IsProphecyPending(claimID)
...@@ -504,7 +504,7 @@ func (manager *RelayerManager) IsProphecyPending(claimID [32]byte, result *inter ...@@ -504,7 +504,7 @@ func (manager *RelayerManager) IsProphecyPending(claimID [32]byte, result *inter
return nil return nil
} }
func (manager *RelayerManager) GetBalance(balanceAddr relayerTypes.BalanceAddr, result *interface{}) error { func (manager *Manager) GetBalance(balanceAddr relayerTypes.BalanceAddr, result *interface{}) error {
manager.mtx.Lock() manager.mtx.Lock()
defer manager.mtx.Unlock() defer manager.mtx.Unlock()
balance, err := manager.ethRelayer.GetBalance(balanceAddr.TokenAddr, balanceAddr.Owner) balance, err := manager.ethRelayer.GetBalance(balanceAddr.TokenAddr, balanceAddr.Owner)
...@@ -529,7 +529,7 @@ func (manager *RelayerManager) GetBalance(balanceAddr relayerTypes.BalanceAddr, ...@@ -529,7 +529,7 @@ func (manager *RelayerManager) GetBalance(balanceAddr relayerTypes.BalanceAddr,
return nil return nil
} }
func (manager *RelayerManager) ShowBridgeBankAddr(para interface{}, result *interface{}) error { func (manager *Manager) ShowBridgeBankAddr(para interface{}, result *interface{}) error {
manager.mtx.Lock() manager.mtx.Lock()
defer manager.mtx.Unlock() defer manager.mtx.Unlock()
addr, err := manager.ethRelayer.ShowBridgeBankAddr() addr, err := manager.ethRelayer.ShowBridgeBankAddr()
...@@ -543,7 +543,7 @@ func (manager *RelayerManager) ShowBridgeBankAddr(para interface{}, result *inte ...@@ -543,7 +543,7 @@ func (manager *RelayerManager) ShowBridgeBankAddr(para interface{}, result *inte
return nil return nil
} }
func (manager *RelayerManager) ShowBridgeRegistryAddr(para interface{}, result *interface{}) error { func (manager *Manager) ShowBridgeRegistryAddr(para interface{}, result *interface{}) error {
manager.mtx.Lock() manager.mtx.Lock()
defer manager.mtx.Unlock() defer manager.mtx.Unlock()
addr, err := manager.ethRelayer.ShowBridgeRegistryAddr() addr, err := manager.ethRelayer.ShowBridgeRegistryAddr()
...@@ -557,7 +557,7 @@ func (manager *RelayerManager) ShowBridgeRegistryAddr(para interface{}, result * ...@@ -557,7 +557,7 @@ func (manager *RelayerManager) ShowBridgeRegistryAddr(para interface{}, result *
return nil return nil
} }
func (manager *RelayerManager) ShowLockStatics(token relayerTypes.TokenStatics, result *interface{}) error { func (manager *Manager) ShowLockStatics(token relayerTypes.TokenStatics, result *interface{}) error {
manager.mtx.Lock() manager.mtx.Lock()
defer manager.mtx.Unlock() defer manager.mtx.Unlock()
balance, err := manager.ethRelayer.ShowLockStatics(token.TokenAddr) balance, err := manager.ethRelayer.ShowLockStatics(token.TokenAddr)
...@@ -579,7 +579,7 @@ func (manager *RelayerManager) ShowLockStatics(token relayerTypes.TokenStatics, ...@@ -579,7 +579,7 @@ func (manager *RelayerManager) ShowLockStatics(token relayerTypes.TokenStatics,
return nil return nil
} }
func (manager *RelayerManager) ShowDepositStatics(token relayerTypes.TokenStatics, result *interface{}) error { func (manager *Manager) ShowDepositStatics(token relayerTypes.TokenStatics, result *interface{}) error {
manager.mtx.Lock() manager.mtx.Lock()
defer manager.mtx.Unlock() defer manager.mtx.Unlock()
supply, err := manager.ethRelayer.ShowDepositStatics(token.TokenAddr) supply, err := manager.ethRelayer.ShowDepositStatics(token.TokenAddr)
...@@ -601,7 +601,7 @@ func (manager *RelayerManager) ShowDepositStatics(token relayerTypes.TokenStatic ...@@ -601,7 +601,7 @@ func (manager *RelayerManager) ShowDepositStatics(token relayerTypes.TokenStatic
return nil return nil
} }
func (manager *RelayerManager) ShowTokenAddrBySymbol(token relayerTypes.TokenStatics, result *interface{}) error { func (manager *Manager) ShowTokenAddrBySymbol(token relayerTypes.TokenStatics, result *interface{}) error {
manager.mtx.Lock() manager.mtx.Lock()
defer manager.mtx.Unlock() defer manager.mtx.Unlock()
addr, err := manager.ethRelayer.ShowTokenAddrBySymbol(token.TokenAddr) addr, err := manager.ethRelayer.ShowTokenAddrBySymbol(token.TokenAddr)
...@@ -616,7 +616,7 @@ func (manager *RelayerManager) ShowTokenAddrBySymbol(token relayerTypes.TokenSta ...@@ -616,7 +616,7 @@ func (manager *RelayerManager) ShowTokenAddrBySymbol(token relayerTypes.TokenSta
return nil return nil
} }
func (manager *RelayerManager) ShowTxReceipt(txhash string, result *interface{}) error { func (manager *Manager) ShowTxReceipt(txhash string, result *interface{}) error {
manager.mtx.Lock() manager.mtx.Lock()
defer manager.mtx.Unlock() defer manager.mtx.Unlock()
receipt, err := manager.ethRelayer.ShowTxReceipt(txhash) receipt, err := manager.ethRelayer.ShowTxReceipt(txhash)
...@@ -627,7 +627,7 @@ func (manager *RelayerManager) ShowTxReceipt(txhash string, result *interface{}) ...@@ -627,7 +627,7 @@ func (manager *RelayerManager) ShowTxReceipt(txhash string, result *interface{})
return nil return nil
} }
func (manager *RelayerManager) checkPermission() error { func (manager *Manager) checkPermission() error {
if EncryptEnable != manager.encryptFlag { if EncryptEnable != manager.encryptFlag {
return errors.New("pls set passphase first") return errors.New("pls set passphase first")
} }
...@@ -637,54 +637,54 @@ func (manager *RelayerManager) checkPermission() error { ...@@ -637,54 +637,54 @@ func (manager *RelayerManager) checkPermission() error {
return nil return nil
} }
func (manager *RelayerManager) ShowEthRelayerStatus(param interface{}, result *interface{}) error { func (manager *Manager) ShowEthRelayerStatus(param interface{}, result *interface{}) error {
manager.mtx.Lock() manager.mtx.Lock()
defer manager.mtx.Unlock() defer manager.mtx.Unlock()
*result = manager.ethRelayer.GetRunningStatus() *result = manager.ethRelayer.GetRunningStatus()
return nil return nil
} }
func (manager *RelayerManager) ShowChain33RelayerStatus(param interface{}, result *interface{}) error { func (manager *Manager) ShowChain33RelayerStatus(param interface{}, result *interface{}) error {
manager.mtx.Lock() manager.mtx.Lock()
defer manager.mtx.Unlock() defer manager.mtx.Unlock()
*result = manager.chain33Relayer.GetRunningStatus() *result = manager.chain33Relayer.GetRunningStatus()
return nil return nil
} }
func (manager *RelayerManager) ShowEthRelayer2EthTxs(param interface{}, result *interface{}) error { func (manager *Manager) ShowEthRelayer2EthTxs(param interface{}, result *interface{}) error {
*result = manager.ethRelayer.QueryTxhashRelay2Eth() *result = manager.ethRelayer.QueryTxhashRelay2Eth()
return nil return nil
} }
func (manager *RelayerManager) ShowEthRelayer2Chain33Txs(param interface{}, result *interface{}) error { func (manager *Manager) ShowEthRelayer2Chain33Txs(param interface{}, result *interface{}) error {
*result = manager.ethRelayer.QueryTxhashRelay2Chain33() *result = manager.ethRelayer.QueryTxhashRelay2Chain33()
return nil return nil
} }
func (manager *RelayerManager) ShowChain33Relayer2EthTxs(param interface{}, result *interface{}) error { func (manager *Manager) ShowChain33Relayer2EthTxs(param interface{}, result *interface{}) error {
*result = manager.chain33Relayer.QueryTxhashRelay2Eth() *result = manager.chain33Relayer.QueryTxhashRelay2Eth()
return nil return nil
} }
func (manager *RelayerManager) ShowTxsEth2chain33TxLock(param interface{}, result *interface{}) error { func (manager *Manager) ShowTxsEth2chain33TxLock(param interface{}, result *interface{}) error {
return nil return nil
} }
func (manager *RelayerManager) ShowTxsEth2chain33TxBurn(param interface{}, result *interface{}) error { func (manager *Manager) ShowTxsEth2chain33TxBurn(param interface{}, result *interface{}) error {
return nil return nil
} }
func (manager *RelayerManager) ShowTxsChain33ToEthTxLock(param interface{}, result *interface{}) error { func (manager *Manager) ShowTxsChain33ToEthTxLock(param interface{}, result *interface{}) error {
return nil return nil
} }
func (manager *RelayerManager) ShowTxsChain33ToEthTxBurn(param interface{}, result *interface{}) error { func (manager *Manager) ShowTxsChain33ToEthTxBurn(param interface{}, result *interface{}) error {
return nil return nil
} }
func (manager *RelayerManager) TransferToken(transfer relayerTypes.TransferToken, result *interface{}) error { func (manager *Manager) TransferToken(transfer relayerTypes.TransferToken, result *interface{}) error {
manager.mtx.Lock() manager.mtx.Lock()
defer manager.mtx.Unlock() defer manager.mtx.Unlock()
txhash, err := manager.ethRelayer.TransferToken(transfer.TokenAddr, transfer.FromKey, transfer.ToAddr, transfer.Amount) txhash, err := manager.ethRelayer.TransferToken(transfer.TokenAddr, transfer.FromKey, transfer.ToAddr, transfer.Amount)
...@@ -698,36 +698,31 @@ func (manager *RelayerManager) TransferToken(transfer relayerTypes.TransferToken ...@@ -698,36 +698,31 @@ func (manager *RelayerManager) TransferToken(transfer relayerTypes.TransferToken
return nil return nil
} }
func (manager *RelayerManager) GetDecimals(tokenAddr string) (int64, error) { func (manager *Manager) GetDecimals(tokenAddr string) (int64, error) {
if d, ok := manager.decimalLru.Get(tokenAddr); ok { if d, ok := manager.decimalLru.Get(tokenAddr); ok {
mlog.Info("GetDecimals", "from cache", d) mlog.Info("GetDecimals", "from cache", d)
return d.(int64), nil return d.(int64), nil
} else { }
if d, err := manager.store.Get(utils.CalAddr2DecimalsPrefix(tokenAddr)); err == nil { if d, err := manager.store.Get(utils.CalAddr2DecimalsPrefix(tokenAddr)); err == nil {
decimal, err := strconv.ParseInt(string(d), 10, 64) decimal, err := strconv.ParseInt(string(d), 10, 64)
if err != nil { if err != nil {
return 0, err return 0, err
} }
manager.decimalLru.Add(tokenAddr, decimal) manager.decimalLru.Add(tokenAddr, decimal)
mlog.Info("GetDecimals", "from DB", d) mlog.Info("GetDecimals", "from DB", d)
return decimal, nil return decimal, nil
}
} else {
d, err := manager.ethRelayer.GetDecimals(tokenAddr) d, err := manager.ethRelayer.GetDecimals(tokenAddr)
if err != nil { if err != nil {
return 0, err return 0, err
} }
_ = manager.store.Set(utils.CalAddr2DecimalsPrefix(tokenAddr), []byte(strconv.FormatInt(int64(d), 10))) _ = manager.store.Set(utils.CalAddr2DecimalsPrefix(tokenAddr), []byte(strconv.FormatInt(int64(d), 10)))
manager.decimalLru.Add(tokenAddr, int64(d)) manager.decimalLru.Add(tokenAddr, int64(d))
mlog.Info("GetDecimals", "from Node", d) mlog.Info("GetDecimals", "from Node", d)
return int64(d), nil return int64(d), nil
}
}
} }
...@@ -17,15 +17,9 @@ var ( ...@@ -17,15 +17,9 @@ var (
) )
const ( const (
keyAccount = "Account"
keyAddr = "Addr"
keyLabel = "Label"
keyTx = "Tx"
keyEncryptionFlag = "Encryption" keyEncryptionFlag = "Encryption"
keyEncryptionCompFlag = "EncryptionFlag" // 中间有一段时间运行了一个错误的密码版本,导致有部分用户信息发生错误,需要兼容下 keyEncryptionCompFlag = "EncryptionFlag" // 中间有一段时间运行了一个错误的密码版本,导致有部分用户信息发生错误,需要兼容下
keyPasswordHash = "PasswordHash" keyPasswordHash = "PasswordHash"
keyWalletSeed = "walletseed"
keyAirDropIndex = "AirDropIndex" //存储通过seed生成的空投地址信息
) )
// CalcEncryptionFlag 加密标志Key // CalcEncryptionFlag 加密标志Key
......
...@@ -84,7 +84,7 @@ func LoadInt64FromDB(key []byte, db dbm.DB) (int64, error) { ...@@ -84,7 +84,7 @@ func LoadInt64FromDB(key []byte, db dbm.DB) (int64, error) {
func QueryTxhashes(prefix []byte, db dbm.DB) []string { func QueryTxhashes(prefix []byte, db dbm.DB) []string {
kvdb := dbm.NewKVDB(db) kvdb := dbm.NewKVDB(db)
hashes, err := kvdb.List([]byte(prefix), nil, 10, 1) hashes, err := kvdb.List(prefix, nil, 10, 1)
if nil != err { if nil != err {
return nil return nil
} }
......
#!/usr/bin/env bash
set -x
CLI="/opt/src/github.com/33cn/plugin/build/chain33-cli"
EBCLI="/opt/src/github.com/33cn/plugin/plugin/dapp/x2Ethereum/build/ebcli_A"
ETHContractAddr="0x0000000000000000000000000000000000000000"
BTYContractAddr="0x40BFE5eD039A9a2Eb42ece2E2CA431bFa7Cf4c42"
Ethsender="0xcbfddc6ae318970ba3feeb0541624f95822e413a"
BtyReceiever="1BqP2vHkYNjSgdnTqm7pGbnphLhtEhuJFi"
BtyTokenContractAddr="0xbAf2646b8DaD8776fc74Bf4C8d59E6fB3720eddf"
Validator1="14KEKbYtKKQm4wMthSK9J4La4nAiidGozt"
Validator2="12qyocayNF7Lv6C9qW4avxs2E7U41fKSfv"
Validator3="1BqP2vHkYNjSgdnTqm7pGbnphLhtEhuJFi"
# 测试流程
#
# bankAddr = 1BqP2vHkYNjSgdnTqm7pGbnphLhtEhuJFi
#
#
# 1.Exec_EthBridgeClaim, 测试chain33这端
#
#
#
block_wait() {
if [[ $# -lt 1 ]]; then
echo "wrong #block_wait parameter"
exit 1
fi
cur_height=$(${CLI} block last_header | jq ".height")
expect=$((cur_height + ${1}))
local count=0
while true; do
new_height=$(${CLI} block last_header | jq ".height")
if [[ ${new_height} -ge ${expect} ]]; then
break
fi
count=$((count + 1))
sleep 1
done
sleep 1
count=$((count + 1))
echo "wait new block $count s, cur height=$expect,old=$cur_height"
}
# check_tx(ty, hash)
# ty:交易执行结果
# 1:交易打包
# 2:交易执行成功
# hash:交易hash
check_tx() {
if [[ $# -lt 2 ]]; then
echo "wrong check_tx parameters"
exit 1
fi
ty=$(${CLI} tx query -s ${2} | jq .receipt.ty)
if [[ ${ty} != ${1} ]]; then
echo "check tx error, hash is ${2}"
exit 1
fi
}
check_Number() {
if [[ $# -lt 2 ]]; then
echo "wrong check_Number parameters"
exit 1
fi
if [[ ${1} != ${2} ]]; then
echo "error Number, expect ${1}, get ${2}"
exit 1
fi
}
# SetConsensusThreshold
hash=$(${CLI} send x2ethereum setconsensus -p 80 -k 12qyocayNF7Lv6C9qW4avxs2E7U41fKSfv)
#block_wait 2
check_tx 2 ${hash}
# query ConsensusThreshold
nowConsensus=$(${CLI} send x2ethereum query consensus -k 12qyocayNF7Lv6C9qW4avxs2E7U41fKSfv | jq .nowConsensusThreshold | sed 's/\"//g')
check_Number 80 ${nowConsensus}
# add a validator
hash=$(${CLI} send x2ethereum add -a ${Validator3} -p 7 -k 12qyocayNF7Lv6C9qW4avxs2E7U41fKSfv)
#block_wait 2
check_tx 2 ${hash}
# query Validators
validators=$(${CLI} send x2ethereum query validators -v ${Validator3} -k 12qyocayNF7Lv6C9qW4avxs2E7U41fKSfv | jq .validators | sed 's/\"//g')
totalPower=$(${CLI} send x2ethereum query validators -v ${Validator3} -k 12qyocayNF7Lv6C9qW4avxs2E7U41fKSfv | jq .totalPower | sed 's/\"//g')
check_Number 7 ${totalPower}
# add a validator again
hash=$(${CLI} send x2ethereum add -a ${Validator2} -p 6 -k 12qyocayNF7Lv6C9qW4avxs2E7U41fKSfv)
#block_wait 2
check_tx 2 ${hash}
# query Validators
validators=$(${CLI} send x2ethereum query validators -k 12qyocayNF7Lv6C9qW4avxs2E7U41fKSfv | jq .validators | sed 's/\"//g')
totalPower=$(${CLI} send x2ethereum query validators -k 12qyocayNF7Lv6C9qW4avxs2E7U41fKSfv | jq .totalPower | sed 's/\"//g')
check_Number 13 ${totalPower}
# remove a validator
hash=$(${CLI} send x2ethereum remove -a ${Validator2} -k 12qyocayNF7Lv6C9qW4avxs2E7U41fKSfv)
#block_wait 2
check_tx 2 ${hash}
# query Validators
validators=$(${CLI} send x2ethereum query validators -k 12qyocayNF7Lv6C9qW4avxs2E7U41fKSfv | jq .validators | sed 's/\"//g')
totalPower=$(${CLI} send x2ethereum query validators -k 12qyocayNF7Lv6C9qW4avxs2E7U41fKSfv | jq .totalPower | sed 's/\"//g')
check_Number 7 ${totalPower}
# add a validator again
hash=$(${CLI} send x2ethereum add -a ${Validator2} -p 6 -k 12qyocayNF7Lv6C9qW4avxs2E7U41fKSfv)
#block_wait 2
check_tx 2 ${hash}
# query Validators
validators=$(${CLI} send x2ethereum query validators -k 12qyocayNF7Lv6C9qW4avxs2E7U41fKSfv | jq .validators | sed 's/\"//g')
totalPower=$(${CLI} send x2ethereum query validators -k 12qyocayNF7Lv6C9qW4avxs2E7U41fKSfv | jq .totalPower | sed 's/\"//g')
check_Number 13 ${totalPower}
# add a validator
hash=$(${CLI} send x2ethereum add -a ${Validator1} -p 87 -k 12qyocayNF7Lv6C9qW4avxs2E7U41fKSfv)
#block_wait 2
check_tx 2 ${hash}
# query Validators
validators=$(${CLI} send x2ethereum query validators -v 12qyocayNF7Lv6C9qW4avxs2E7U41fKSfv -k 12qyocayNF7Lv6C9qW4avxs2E7U41fKSfv | jq .validators | sed 's/\"//g')
totalPower=$(${CLI} send x2ethereum query validators -v 12qyocayNF7Lv6C9qW4avxs2E7U41fKSfv -k 12qyocayNF7Lv6C9qW4avxs2E7U41fKSfv | jq .totalPower | sed 's/\"//g')
check_Number 6 ${totalPower}
totalPower=$(${CLI} send x2ethereum query totalpower -k 12qyocayNF7Lv6C9qW4avxs2E7U41fKSfv | jq .totalPower | sed 's/\"//g')
check_Number 100 ${totalPower}
##############################################################
######################## 测试交易 #############################
##############################################################
# chain33 -> ethereum
# send bty to mavl-x2ethereum-bty-12qyocayNF7Lv6C9qW4avxs2E7U41fKSfv
${CLI} send coins send_exec -e x2ethereum -a 200 -k 12qyocayNF7Lv6C9qW4avxs2E7U41fKSfv
# send a chain33eth tx,在chain33侧lock 5个bty
hash=$(${CLI} send x2ethereum lock --amount 5 -e x2ethereum -t bty -r ${Ethsender} -s 12qyocayNF7Lv6C9qW4avxs2E7U41fKSfv -q ${BtyTokenContractAddr} -k 12qyocayNF7Lv6C9qW4avxs2E7U41fKSfv)
#block_wait 4
check_tx 2 ${hash}
#在以太坊侧burn掉1个bty
hash=$(${EBCLI} relayer ethereum burn -m 1 -t ${BtyTokenContractAddr} -r ${BtyReceiever} -k 772db14fc5ae829b155e1eda09431a0b566833f2de3b50b2d35625542b3ae52f | jq .msg | sed 's/\"//g')
# ethereum -> chain33,在以太坊侧lock 0.1 eth
hash=$(${EBCLI} relayer ethereum lock -m 0.1 -r ${BtyReceiever} -k 772db14fc5ae829b155e1eda09431a0b566833f2de3b50b2d35625542b3ae52f)
#在chain33 burn 0.1eth
hash=$(${CLI} send x2ethereum burn --amount 0.1 -e x2ethereum -t eth -r ${Ethsender} -s ${BtyReceiever} -q ${ETHContractAddr} -k 12qyocayNF7Lv6C9qW4avxs2E7U41fKSfv)
#block_wait 4
check_tx 2 ${hash}
# ethereum -> chain33
hash=$(${EBCLI} relayer ethereum lock -m 0.1 -t ${BtyTokenContractAddr} -r ${BtyReceiever} -k 772db14fc5ae829b155e1eda09431a0b566833f2de3b50b2d35625542b3ae52f)
hash=$(${CLI} send x2ethereum burn --amount 0.1 -t ${BtyTokenContractAddr} -e x2ethereum -t eth -r ${Ethsender} -s ${BtyReceiever} -q ${ETHContractAddr} -k 12qyocayNF7Lv6C9qW4avxs2E7U41fKSfv)
#block_wait 4
check_tx 2 ${hash}
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