Commit 5d7a4b17 authored by hezhengjun's avatar hezhengjun

fix linter issue

parent 91f9d67f
......@@ -51,7 +51,7 @@ func importPrivatekey(cmd *cobra.Command, args []string) {
}
var res rpctypes.Reply
ctx := jsonclient.NewRPCCtx(rpcLaddr, "RelayerManager.ImportChain33RelayerPrivateKey", importKeyReq, &res)
ctx := jsonclient.NewRPCCtx(rpcLaddr, "Manager.ImportChain33RelayerPrivateKey", importKeyReq, &res)
ctx.Run()
}
......@@ -67,7 +67,7 @@ func ShowValidatorAddrCmd() *cobra.Command {
func showValidatorAddr(cmd *cobra.Command, args []string) {
rpcLaddr, _ := cmd.Flags().GetString("rpc_laddr")
var res string
ctx := jsonclient.NewRPCCtx(rpcLaddr, "RelayerManager.ShowChain33RelayerValidator", nil, &res)
ctx := jsonclient.NewRPCCtx(rpcLaddr, "Manager.ShowChain33RelayerValidator", nil, &res)
ctx.Run()
}
......@@ -84,7 +84,7 @@ func showChain33Relayer2EthTxs(cmd *cobra.Command, args []string) {
rpcLaddr, _ := cmd.Flags().GetString("rpc_laddr")
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 {
errInfo := err.Error()
fmt.Println("errinfo:" + errInfo)
......@@ -108,6 +108,6 @@ func showChain33RelayerStatus(cmd *cobra.Command, args []string) {
rpcLaddr, _ := cmd.Flags().GetString("rpc_laddr")
var res ebTypes.RelayerRunStatus
ctx := jsonclient.NewRPCCtx(rpcLaddr, "RelayerManager.ShowChain33RelayerStatus", nil, &res)
ctx := jsonclient.NewRPCCtx(rpcLaddr, "Manager.ShowChain33RelayerStatus", nil, &res)
ctx.Run()
}
......@@ -57,7 +57,7 @@ func setPwd(cmd *cobra.Command, args []string) {
NewPassphase: newPwd,
}
var res rpctypes.Reply
ctx := jsonclient.NewRPCCtx(rpcLaddr, "RelayerManager.SetPassphase", params, &res)
ctx := jsonclient.NewRPCCtx(rpcLaddr, "Manager.SetPassphase", params, &res)
ctx.Run()
}
......@@ -74,7 +74,7 @@ func LockCmd() *cobra.Command {
func lock(cmd *cobra.Command, args []string) {
rpcLaddr, _ := cmd.Flags().GetString("rpc_laddr")
var res rpctypes.Reply
ctx := jsonclient.NewRPCCtx(rpcLaddr, "RelayerManager.Lock", nil, &res)
ctx := jsonclient.NewRPCCtx(rpcLaddr, "Manager.Lock", nil, &res)
ctx.Run()
}
......@@ -100,6 +100,6 @@ func unLock(cmd *cobra.Command, args []string) {
params := pwd
var res rpctypes.Reply
ctx := jsonclient.NewRPCCtx(rpcLaddr, "RelayerManager.Unlock", params, &res)
ctx := jsonclient.NewRPCCtx(rpcLaddr, "Manager.Unlock", params, &res)
ctx.Run()
}
......@@ -76,7 +76,7 @@ func importChain33Privatekey(cmd *cobra.Command, args []string) {
params := privateKey
var res rpctypes.Reply
ctx := jsonclient.NewRPCCtx(rpcLaddr, "RelayerManager.ImportChain33PrivateKey4EthRelayer", params, &res)
ctx := jsonclient.NewRPCCtx(rpcLaddr, "Manager.ImportChain33PrivateKey4EthRelayer", params, &res)
ctx.Run()
}
......@@ -96,7 +96,7 @@ func importEthValidtorPrivatekey(cmd *cobra.Command, args []string) {
params := privateKey
var res rpctypes.Reply
ctx := jsonclient.NewRPCCtx(rpcLaddr, "RelayerManager.ImportEthValidatorPrivateKey", params, &res)
ctx := jsonclient.NewRPCCtx(rpcLaddr, "Manager.ImportEthValidatorPrivateKey", params, &res)
ctx.Run()
}
......@@ -113,7 +113,7 @@ func generateEthereumPrivateKey(cmd *cobra.Command, args []string) {
rpcLaddr, _ := cmd.Flags().GetString("rpc_laddr")
var res ebTypes.Account4Show
ctx := jsonclient.NewRPCCtx(rpcLaddr, "RelayerManager.GenerateEthereumPrivateKey", nil, &res)
ctx := jsonclient.NewRPCCtx(rpcLaddr, "Manager.GenerateEthereumPrivateKey", nil, &res)
ctx.Run()
}
......@@ -129,7 +129,7 @@ func ShowValidatorsAddrCmd() *cobra.Command {
func showValidatorsAddr(cmd *cobra.Command, args []string) {
rpcLaddr, _ := cmd.Flags().GetString("rpc_laddr")
var res ebTypes.ValidatorAddr4EthRelayer
ctx := jsonclient.NewRPCCtx(rpcLaddr, "RelayerManager.ShowEthRelayerValidator", nil, &res)
ctx := jsonclient.NewRPCCtx(rpcLaddr, "Manager.ShowEthRelayerValidator", nil, &res)
ctx.Run()
}
......@@ -146,7 +146,7 @@ func showChain33Txs(cmd *cobra.Command, args []string) {
rpcLaddr, _ := cmd.Flags().GetString("rpc_laddr")
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 {
errInfo := err.Error()
fmt.Println("errinfo:" + errInfo)
......@@ -170,7 +170,7 @@ func showEthTxs(cmd *cobra.Command, args []string) {
rpcLaddr, _ := cmd.Flags().GetString("rpc_laddr")
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 {
errInfo := err.Error()
fmt.Println("errinfo:" + errInfo)
......@@ -194,7 +194,7 @@ func showEthRelayerStatus(cmd *cobra.Command, args []string) {
rpcLaddr, _ := cmd.Flags().GetString("rpc_laddr")
var res ebTypes.RelayerRunStatus
ctx := jsonclient.NewRPCCtx(rpcLaddr, "RelayerManager.ShowEthRelayerStatus", nil, &res)
ctx := jsonclient.NewRPCCtx(rpcLaddr, "Manager.ShowEthRelayerStatus", nil, &res)
ctx.Run()
}
......@@ -219,7 +219,7 @@ func IsValidatorActive(cmd *cobra.Command, args []string) {
params := addr
var res rpctypes.Reply
ctx := jsonclient.NewRPCCtx(rpcLaddr, "RelayerManager.IsValidatorActive", params, &res)
ctx := jsonclient.NewRPCCtx(rpcLaddr, "Manager.IsValidatorActive", params, &res)
ctx.Run()
}
......@@ -235,7 +235,7 @@ func ShowOperatorCmd() *cobra.Command {
func ShowOperator(cmd *cobra.Command, args []string) {
rpcLaddr, _ := cmd.Flags().GetString("rpc_laddr")
var res string
ctx := jsonclient.NewRPCCtx(rpcLaddr, "RelayerManager.ShowOperator", nil, &res)
ctx := jsonclient.NewRPCCtx(rpcLaddr, "Manager.ShowOperator", nil, &res)
ctx.Run()
}
......@@ -251,7 +251,7 @@ func DeployContrctsCmd() *cobra.Command {
func DeployContrcts(cmd *cobra.Command, args []string) {
rpcLaddr, _ := cmd.Flags().GetString("rpc_laddr")
var res rpctypes.Reply
ctx := jsonclient.NewRPCCtx(rpcLaddr, "RelayerManager.DeployContrcts", nil, &res)
ctx := jsonclient.NewRPCCtx(rpcLaddr, "Manager.DeployContrcts", nil, &res)
ctx.Run()
}
......@@ -275,7 +275,7 @@ func ShowTxReceipt(cmd *cobra.Command, args []string) {
txhash, _ := cmd.Flags().GetString("hash")
para := txhash
var res ethTypes.Receipt
ctx := jsonclient.NewRPCCtx(rpcLaddr, "RelayerManager.ShowTxReceipt", para, &res)
ctx := jsonclient.NewRPCCtx(rpcLaddr, "Manager.ShowTxReceipt", para, &res)
ctx.Run()
}
......@@ -299,7 +299,7 @@ func CreateBridgeToken(cmd *cobra.Command, args []string) {
token, _ := cmd.Flags().GetString("symbol")
para := token
var res ebTypes.ReplyAddr
ctx := jsonclient.NewRPCCtx(rpcLaddr, "RelayerManager.CreateBridgeToken", para, &res)
ctx := jsonclient.NewRPCCtx(rpcLaddr, "Manager.CreateBridgeToken", para, &res)
ctx.Run()
}
......@@ -323,7 +323,7 @@ func CreateEthereumTokenToken(cmd *cobra.Command, args []string) {
token, _ := cmd.Flags().GetString("symbol")
para := token
var res ebTypes.ReplyAddr
ctx := jsonclient.NewRPCCtx(rpcLaddr, "RelayerManager.CreateERC20Token", para, &res)
ctx := jsonclient.NewRPCCtx(rpcLaddr, "Manager.CreateERC20Token", para, &res)
ctx.Run()
}
......@@ -365,7 +365,7 @@ func MintErc20(cmd *cobra.Command, args []string) {
Amount: realAmount.String(),
}
var res rpctypes.Reply
ctx := jsonclient.NewRPCCtx(rpcLaddr, "RelayerManager.MintErc20", para, &res)
ctx := jsonclient.NewRPCCtx(rpcLaddr, "Manager.MintErc20", para, &res)
ctx.Run()
}
......@@ -408,7 +408,7 @@ func ApproveAllowance(cmd *cobra.Command, args []string) {
Amount: realAmount.String(),
}
var res rpctypes.Reply
ctx := jsonclient.NewRPCCtx(rpcLaddr, "RelayerManager.ApproveAllowance", para, &res)
ctx := jsonclient.NewRPCCtx(rpcLaddr, "Manager.ApproveAllowance", para, &res)
ctx.Run()
}
......@@ -463,7 +463,7 @@ func Burn(cmd *cobra.Command, args []string) {
Chain33Receiver: receiver,
}
var res rpctypes.Reply
ctx := jsonclient.NewRPCCtx(rpcLaddr, "RelayerManager.Burn", para, &res)
ctx := jsonclient.NewRPCCtx(rpcLaddr, "Manager.Burn", para, &res)
ctx.Run()
}
......@@ -487,7 +487,7 @@ func BurnAsync(cmd *cobra.Command, args []string) {
Chain33Receiver: receiver,
}
var res rpctypes.Reply
ctx := jsonclient.NewRPCCtx(rpcLaddr, "RelayerManager.BurnAsync", para, &res)
ctx := jsonclient.NewRPCCtx(rpcLaddr, "Manager.BurnAsync", para, &res)
ctx.Run()
}
......@@ -544,7 +544,7 @@ func LockEthErc20Asset(cmd *cobra.Command, args []string) {
Chain33Receiver: receiver,
}
var res rpctypes.Reply
ctx := jsonclient.NewRPCCtx(rpcLaddr, "RelayerManager.LockEthErc20Asset", para, &res)
ctx := jsonclient.NewRPCCtx(rpcLaddr, "Manager.LockEthErc20Asset", para, &res)
ctx.Run()
}
......@@ -571,7 +571,7 @@ func LockEthErc20AssetAsync(cmd *cobra.Command, args []string) {
Chain33Receiver: receiver,
}
var res rpctypes.Reply
ctx := jsonclient.NewRPCCtx(rpcLaddr, "RelayerManager.LockEthErc20AssetAsync", para, &res)
ctx := jsonclient.NewRPCCtx(rpcLaddr, "Manager.LockEthErc20AssetAsync", para, &res)
ctx.Run()
}
......@@ -587,7 +587,7 @@ func ShowBridgeBankAddrCmd() *cobra.Command {
func ShowBridgeBankAddr(cmd *cobra.Command, args []string) {
rpcLaddr, _ := cmd.Flags().GetString("rpc_laddr")
var res ebTypes.ReplyAddr
ctx := jsonclient.NewRPCCtx(rpcLaddr, "RelayerManager.ShowBridgeBankAddr", nil, &res)
ctx := jsonclient.NewRPCCtx(rpcLaddr, "Manager.ShowBridgeBankAddr", nil, &res)
ctx.Run()
}
......@@ -603,7 +603,7 @@ func ShowBridgeRegistryAddrCmd() *cobra.Command {
func ShowBridgeRegistryAddr(cmd *cobra.Command, args []string) {
rpcLaddr, _ := cmd.Flags().GetString("rpc_laddr")
var res ebTypes.ReplyAddr
ctx := jsonclient.NewRPCCtx(rpcLaddr, "RelayerManager.ShowBridgeRegistryAddr", nil, &res)
ctx := jsonclient.NewRPCCtx(rpcLaddr, "Manager.ShowBridgeRegistryAddr", nil, &res)
ctx.Run()
}
......@@ -667,7 +667,7 @@ func MakeNewProphecyClaim(cmd *cobra.Command, args []string) {
TxHash: txhash,
}
var res rpctypes.Reply
ctx := jsonclient.NewRPCCtx(rpcLaddr, "RelayerManager.MakeNewProphecyClaim", para, &res)
ctx := jsonclient.NewRPCCtx(rpcLaddr, "Manager.MakeNewProphecyClaim", para, &res)
ctx.Run()
}
......@@ -697,7 +697,7 @@ func GetBalance(cmd *cobra.Command, args []string) {
TokenAddr: tokenAddr,
}
var res ebTypes.ReplyBalance
ctx := jsonclient.NewRPCCtx(rpcLaddr, "RelayerManager.GetBalance", para, &res)
ctx := jsonclient.NewRPCCtx(rpcLaddr, "Manager.GetBalance", para, &res)
ctx.Run()
}
......@@ -722,7 +722,7 @@ func IsProphecyPending(cmd *cobra.Command, args []string) {
para := common.HexToHash(id)
var res rpctypes.Reply
ctx := jsonclient.NewRPCCtx(rpcLaddr, "RelayerManager.IsProphecyPending", para, &res)
ctx := jsonclient.NewRPCCtx(rpcLaddr, "Manager.IsProphecyPending", para, &res)
ctx.Run()
}
......@@ -770,7 +770,7 @@ func TransferToken(cmd *cobra.Command, args []string) {
Amount: realAmount.String(),
}
var res rpctypes.Reply
ctx := jsonclient.NewRPCCtx(rpcLaddr, "RelayerManager.TransferToken", para, &res)
ctx := jsonclient.NewRPCCtx(rpcLaddr, "Manager.TransferToken", para, &res)
ctx.Run()
}
......@@ -798,6 +798,6 @@ func GetToken2address(cmd *cobra.Command, args []string) {
TokenAddr: tokenSymbol,
}
var res ebTypes.ReplyAddr
ctx := jsonclient.NewRPCCtx(rpcLaddr, "RelayerManager.ShowTokenAddrBySymbol", para, &res)
ctx := jsonclient.NewRPCCtx(rpcLaddr, "Manager.ShowTokenAddrBySymbol", para, &res)
ctx.Run()
}
......@@ -2,7 +2,6 @@ package main
import (
"github.com/33cn/chain33/rpc/jsonclient"
rpctypes "github.com/33cn/chain33/rpc/types"
ebTypes "github.com/33cn/plugin/plugin/dapp/x2Ethereum/ebrelayer/types"
"github.com/spf13/cobra"
)
......@@ -16,8 +15,6 @@ func StaticsCmd() *cobra.Command {
cmd.AddCommand(
ShowLockStaticsCmd(),
//ShowUnlockStaticsCmd(),
//ShowBurnStaticsCmd(),
ShowDepositStaticsCmd(),
)
......@@ -46,66 +43,7 @@ func ShowLockStatics(cmd *cobra.Command, args []string) {
TokenAddr: tokenAddr,
}
var res ebTypes.StaticsLock
ctx := jsonclient.NewRPCCtx(rpcLaddr, "RelayerManager.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 := jsonclient.NewRPCCtx(rpcLaddr, "Manager.ShowLockStatics", para, &res)
ctx.Run()
}
......@@ -132,6 +70,6 @@ func ShowDepositStatics(cmd *cobra.Command, args []string) {
TokenAddr: tokenAddr,
}
var res ebTypes.StaticsDeposit
ctx := jsonclient.NewRPCCtx(rpcLaddr, "RelayerManager.ShowDepositStatics", para, &res)
ctx := jsonclient.NewRPCCtx(rpcLaddr, "Manager.ShowDepositStatics", para, &res)
ctx.Run()
}
......@@ -245,7 +245,7 @@ func TestBrigeTokenMint(t *testing.T) {
_, err = x2EthContracts.Oracle.NewOracleClaim(
authOracle,
events.CLAIM_TYPE_LOCK,
events.ClaimTypeLock,
chain33Sender,
ethReceiver,
logEvent.Token,
......@@ -501,7 +501,7 @@ func TestBridgeBankUnlock(t *testing.T) {
_, err = x2EthContracts.Oracle.NewOracleClaim(
authOracle,
events.CLAIM_TYPE_BURN,
events.ClaimTypeBurn,
chain33Sender,
ethReceiver,
ethAddr,
......@@ -535,7 +535,7 @@ func TestBridgeBankUnlock(t *testing.T) {
_, err = x2EthContracts.Oracle.NewOracleClaim(
authOracle,
events.CLAIM_TYPE_BURN,
events.ClaimTypeBurn,
chain33Sender,
ethReceiver,
bridgeTokenAddr,
......@@ -666,7 +666,7 @@ func TestBridgeBankSecondUnlockEth(t *testing.T) {
_, err = x2EthContracts.Oracle.NewOracleClaim(
authOracle,
events.CLAIM_TYPE_BURN,
events.ClaimTypeBurn,
chain33Sender,
ethReceiver,
ethAddr,
......@@ -696,7 +696,7 @@ func TestBridgeBankSecondUnlockEth(t *testing.T) {
_, err = x2EthContracts.Oracle.NewOracleClaim(
authOracle,
events.CLAIM_TYPE_BURN,
events.ClaimTypeBurn,
chain33Sender,
ethReceiver,
ethAddr,
......@@ -828,7 +828,7 @@ func TestBridgeBankSedondUnlockErc20(t *testing.T) {
require.Nil(t, err)
_, err = x2EthContracts.Oracle.NewOracleClaim(
authOracle,
events.CLAIM_TYPE_BURN,
events.ClaimTypeBurn,
chain33Sender,
ethReceiver,
bridgeTokenAddr,
......@@ -852,7 +852,7 @@ func TestBridgeBankSedondUnlockErc20(t *testing.T) {
require.Nil(t, err)
_, err = x2EthContracts.Oracle.NewOracleClaim(
authOracle,
events.CLAIM_TYPE_BURN,
events.ClaimTypeBurn,
chain33Sender,
ethReceiver,
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 (
)
func LoadABI(contractName string) abi.ABI {
var abiJson string
var abiJSON string
switch contractName {
case BridgeBankABI:
abiJson = generated.BridgeBankABI
abiJSON = generated.BridgeBankABI
case Chain33BankABI:
abiJson = generated.Chain33BankABI
abiJSON = generated.Chain33BankABI
case Chain33BridgeABI:
abiJson = generated.Chain33BridgeABI
abiJSON = generated.Chain33BridgeABI
case EthereumBankABI:
abiJson = generated.EthereumBankABI
abiJSON = generated.EthereumBankABI
default:
panic("No abi matched")
}
// 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 {
panic(err)
}
......
......@@ -6,6 +6,8 @@ import (
"errors"
"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/events"
"github.com/ethereum/go-ethereum"
......@@ -25,7 +27,7 @@ type NewProphecyClaimPara struct {
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 {
return "", errors.New("No operator private key configured")
}
......@@ -39,6 +41,7 @@ func CreateBridgeToken(symbol string, client *ethclient.Client, para *OperatorIn
// We will check logs for new events
logs := make(chan types.Log)
// Filter by contract and event, write results to logs
client := backend.(*ethclient.Client)
sub, err := client.SubscribeFilterLogs(context.Background(), query, logs)
if nil != err {
txslog.Error("CreateBrigeToken", "failed to SubscribeFilterLogs", err.Error())
......@@ -54,7 +57,7 @@ func CreateBridgeToken(symbol string, client *ethclient.Client, para *OperatorIn
}()
//创建token
auth, err := PrepareAuth(client, para.PrivateKey, para.Address)
auth, err := PrepareAuth(backend, para.PrivateKey, para.Address)
if nil != err {
return "", err
}
......@@ -95,7 +98,7 @@ func CreateBridgeToken(symbol string, client *ethclient.Client, para *OperatorIn
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 {
return "", errors.New("No operator private key configured")
}
......@@ -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 {
return "", err
}
prepareDone = true
tokenAddr, tx, _, err := generated.DeployBridgeToken(auth, client, symbol)
tokenAddr, tx, _, err := generated.DeployBridgeToken(auth, backend, symbol)
if nil != err {
return "", err
}
err = waitEthTxFinished(client, tx.Hash(), "CreateERC20Token")
err = waitEthTxFinished(backend.(*ethclient.Client), tx.Hash(), "CreateERC20Token")
if nil != err {
return "", err
}
......@@ -129,7 +132,7 @@ func CreateERC20Token(symbol string, client *ethclient.Client, para *OperatorInf
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 {
return "", errors.New("No operator private key configured")
}
......@@ -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 {
return "", err
}
prepareDone = true
erc20TokenInstance, err := generated.NewBridgeToken(common.HexToAddress(tokenAddr), client)
erc20TokenInstance, err := generated.NewBridgeToken(common.HexToAddress(tokenAddr), backend)
if nil != err {
return "", err
}
......@@ -159,7 +162,7 @@ func MintERC20Token(tokenAddr, ownerAddr string, amount *big.Int, client *ethcli
return "", err
}
err = waitEthTxFinished(client, tx.Hash(), "MintERC20Token")
err = waitEthTxFinished(backend.(*ethclient.Client), tx.Hash(), "MintERC20Token")
if nil != err {
return "", err
}
......@@ -167,7 +170,7 @@ func MintERC20Token(tokenAddr, ownerAddr string, amount *big.Int, client *ethcli
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))
if nil != err {
return "", err
......@@ -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 {
return "", err
}
prepareDone = true
erc20TokenInstance, err := generated.NewBridgeToken(common.HexToAddress(tokenAddr), client)
erc20TokenInstance, err := generated.NewBridgeToken(common.HexToAddress(tokenAddr), backend)
if nil != err {
return "", err
}
......@@ -199,7 +202,7 @@ func ApproveAllowance(ownerPrivateKeyStr, tokenAddr string, bridgeBank common.Ad
return "", err
}
err = waitEthTxFinished(client, tx.Hash(), "ApproveAllowance")
err = waitEthTxFinished(backend.(*ethclient.Client), tx.Hash(), "ApproveAllowance")
if nil != err {
return "", err
}
......@@ -207,7 +210,7 @@ func ApproveAllowance(ownerPrivateKeyStr, tokenAddr string, bridgeBank common.Ad
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))
if nil != err {
return "", err
......@@ -220,7 +223,7 @@ func Burn(ownerPrivateKeyStr, tokenAddrstr, chain33Receiver string, bridgeBank c
_, _ = revokeNonce(ownerAddr)
}
}()
auth, err := PrepareAuth(client, ownerPrivateKey, ownerAddr)
auth, err := PrepareAuth(backend, ownerPrivateKey, ownerAddr)
if nil != err {
return "", err
}
......@@ -228,7 +231,7 @@ func Burn(ownerPrivateKeyStr, tokenAddrstr, chain33Receiver string, bridgeBank c
prepareDone = true
tokenAddr := common.HexToAddress(tokenAddrstr)
tokenInstance, err := generated.NewBridgeToken(tokenAddr, client)
tokenInstance, err := generated.NewBridgeToken(tokenAddr, backend)
if nil != err {
return "", err
}
......@@ -237,6 +240,7 @@ func Burn(ownerPrivateKeyStr, tokenAddrstr, chain33Receiver string, bridgeBank c
if nil != err {
return "", err
}
client := backend.(*ethclient.Client)
err = waitEthTxFinished(client, tx.Hash(), "Approve")
if nil != err {
return "", err
......@@ -245,7 +249,7 @@ func Burn(ownerPrivateKeyStr, tokenAddrstr, chain33Receiver string, bridgeBank c
prepareDone = false
auth, err = PrepareAuth(client, ownerPrivateKey, ownerAddr)
auth, err = PrepareAuth(backend, ownerPrivateKey, ownerAddr)
if nil != err {
return "", err
}
......@@ -264,7 +268,7 @@ func Burn(ownerPrivateKeyStr, tokenAddrstr, chain33Receiver string, bridgeBank c
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))
if nil != err {
return "", err
......@@ -278,7 +282,7 @@ func BurnAsync(ownerPrivateKeyStr, tokenAddrstr, chain33Receiver string, bridgeB
_, _ = revokeNonce(ownerAddr)
}
}()
auth, err := PrepareAuth(client, ownerPrivateKey, ownerAddr)
auth, err := PrepareAuth(backend, ownerPrivateKey, ownerAddr)
if nil != err {
return "", err
}
......@@ -294,8 +298,8 @@ func BurnAsync(ownerPrivateKeyStr, tokenAddrstr, chain33Receiver string, bridgeB
return tx.Hash().String(), nil
}
func TransferToken(tokenAddr, fromPrivateKeyStr, toAddr string, amount *big.Int, client *ethclient.Client) (string, error) {
tokenInstance, err := generated.NewBridgeToken(common.HexToAddress(tokenAddr), client)
func TransferToken(tokenAddr, fromPrivateKeyStr, toAddr string, amount *big.Int, backend bind.ContractBackend) (string, error) {
tokenInstance, err := generated.NewBridgeToken(common.HexToAddress(tokenAddr), backend)
if nil != err {
return "", err
}
......@@ -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 {
return "", err
}
......@@ -326,14 +330,14 @@ func TransferToken(tokenAddr, fromPrivateKeyStr, toAddr string, amount *big.Int,
return "", err
}
err = waitEthTxFinished(client, tx.Hash(), "TransferFromToken")
err = waitEthTxFinished(backend.(*ethclient.Client), tx.Hash(), "TransferFromToken")
if nil != err {
return "", err
}
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
txslog.Info("LockEthErc20Asset", "ownerPrivateKeyStr", ownerPrivateKeyStr, "tokenAddrStr", tokenAddrStr, "chain33Receiver", chain33Receiver, "amount", amount.String())
ownerPrivateKey, err := crypto.ToECDSA(common.FromHex(ownerPrivateKeyStr))
......@@ -353,11 +357,11 @@ func LockEthErc20Asset(ownerPrivateKeyStr, tokenAddrStr, chain33Receiver string,
if "" != tokenAddrStr {
//如果是eth以外的erc20,则需要先进行approve操作
tokenAddr = common.HexToAddress(tokenAddrStr)
tokenInstance, err := generated.NewBridgeToken(tokenAddr, client)
tokenInstance, err := generated.NewBridgeToken(tokenAddr, backend)
if nil != err {
return "", err
}
auth, err := PrepareAuth(client, ownerPrivateKey, ownerAddr)
auth, err := PrepareAuth(backend, ownerPrivateKey, ownerAddr)
if nil != err {
txslog.Error("LockEthErc20Asset", "PrepareAuth err", err.Error())
return "", err
......@@ -370,7 +374,7 @@ func LockEthErc20Asset(ownerPrivateKeyStr, tokenAddrStr, chain33Receiver string,
if nil != err {
return "", err
}
err = waitEthTxFinished(client, tx.Hash(), "Approve")
err = waitEthTxFinished(backend.(*ethclient.Client), tx.Hash(), "Approve")
if nil != err {
return "", err
}
......@@ -379,7 +383,7 @@ func LockEthErc20Asset(ownerPrivateKeyStr, tokenAddrStr, chain33Receiver string,
prepareDone = false
auth, err := PrepareAuth(client, ownerPrivateKey, ownerAddr)
auth, err := PrepareAuth(backend, ownerPrivateKey, ownerAddr)
if nil != err {
txslog.Error("LockEthErc20Asset", "PrepareAuth err", err.Error())
return "", err
......@@ -396,7 +400,7 @@ func LockEthErc20Asset(ownerPrivateKeyStr, tokenAddrStr, chain33Receiver string,
txslog.Error("LockEthErc20Asset", "lock err", err.Error())
return "", err
}
err = waitEthTxFinished(client, tx.Hash(), "LockEthErc20Asset")
err = waitEthTxFinished(backend.(*ethclient.Client), tx.Hash(), "LockEthErc20Asset")
if nil != err {
txslog.Error("LockEthErc20Asset", "waitEthTxFinished err", err.Error())
return "", err
......@@ -405,7 +409,7 @@ func LockEthErc20Asset(ownerPrivateKeyStr, tokenAddrStr, chain33Receiver string,
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())
ownerPrivateKey, err := crypto.ToECDSA(common.FromHex(ownerPrivateKeyStr))
if nil != err {
......@@ -413,7 +417,7 @@ func LockEthErc20AssetAsync(ownerPrivateKeyStr, tokenAddrStr, chain33Receiver st
}
ownerAddr := crypto.PubkeyToAddress(ownerPrivateKey.PublicKey)
auth, err := PrepareAuth(client, ownerPrivateKey, ownerAddr)
auth, err := PrepareAuth(backend, ownerPrivateKey, ownerAddr)
if nil != err {
txslog.Error("LockEthErc20Asset", "PrepareAuth err", err.Error())
return "", err
......@@ -440,9 +444,9 @@ func LockEthErc20AssetAsync(ownerPrivateKeyStr, tokenAddrStr, chain33Receiver st
}
/////////////////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
authVali, err := PrepareAuth(client, privateKey, transactor)
authVali, err := PrepareAuth(backend, privateKey, transactor)
if nil != err {
return "", err
}
......@@ -471,7 +475,7 @@ func MakeNewProphecyClaim(newProphecyClaimPara *NewProphecyClaimPara, client *et
if nil != err {
return "", err
}
err = waitEthTxFinished(client, tx.Hash(), "MakeNewProphecyClaim")
err = waitEthTxFinished(backend.(*ethclient.Client), tx.Hash(), "MakeNewProphecyClaim")
if nil != err {
return "", err
}
......
......@@ -12,7 +12,6 @@ package ethtxs
import (
"crypto/ecdsa"
"math/big"
"regexp"
"strings"
chain33Types "github.com/33cn/chain33/types"
......@@ -166,30 +165,3 @@ func Chain33MsgToProphecyClaim(event events.Chain33Msg) 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
return balance.String(), nil
}
func GetDepositFunds(client *ethclient.Client, tokenAddrStr string) (string, error) {
func GetDepositFunds(backend bind.ContractBackend, tokenAddrStr string) (string, error) {
if tokenAddrStr == "" {
return "", errors.New("nil token address")
}
tokenAddr := common.HexToAddress(tokenAddrStr)
bridgeToken, err := generated.NewBridgeToken(tokenAddr, client)
bridgeToken, err := generated.NewBridgeToken(tokenAddr, backend)
if nil != err {
return "", err
}
......
......@@ -4,39 +4,39 @@ import (
"errors"
"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/ethclient"
)
func RecoverContractHandler(client *ethclient.Client, sender, registry common.Address) (*X2EthContracts, *X2EthDeployInfo, error) {
bridgeBankAddr, err := GetAddressFromBridgeRegistry(client, sender, registry, BridgeBank)
func RecoverContractHandler(backend bind.ContractBackend, sender, registry common.Address) (*X2EthContracts, *X2EthDeployInfo, error) {
bridgeBankAddr, err := GetAddressFromBridgeRegistry(backend, sender, registry, BridgeBank)
if nil != err {
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 {
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 {
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 {
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 {
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 {
return nil, nil, errors.New("Failed to NewOracle")
}
registryInstance, _ := generated.NewBridgeRegistry(registry, client)
registryInstance, _ := generated.NewBridgeRegistry(registry, backend)
x2EthContracts := &X2EthContracts{
BridgeRegistry: registryInstance,
BridgeBank: bridgeBank,
......@@ -54,12 +54,12 @@ func RecoverContractHandler(client *ethclient.Client, sender, registry common.Ad
return x2EthContracts, x2EthDeployInfo, nil
}
func RecoverOracleInstance(client *ethclient.Client, sender, registry common.Address) (*generated.Oracle, error) {
oracleAddr, err := GetAddressFromBridgeRegistry(client, sender, registry, Oracle)
func RecoverOracleInstance(backend bind.ContractBackend, sender, registry common.Address) (*generated.Oracle, error) {
oracleAddr, err := GetAddressFromBridgeRegistry(backend, sender, registry, Oracle)
if nil != err {
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 {
return nil, errors.New("Failed to NewOracle")
}
......
......@@ -32,8 +32,8 @@ func (d ContractRegistry) String() string {
}
// 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) {
header, err := client.HeaderByNumber(context.Background(), nil)
func GetAddressFromBridgeRegistry(backend bind.ContractBackend, sender, registry common.Address, target ContractRegistry) (address *common.Address, err error) {
header, err := backend.(*ethclient.Client).HeaderByNumber(context.Background(), nil)
if err != nil {
txslog.Error("GetAddressFromBridgeRegistry", "Failed to get HeaderByNumber due to:", err.Error())
return nil, err
......@@ -48,7 +48,7 @@ func GetAddressFromBridgeRegistry(client *ethclient.Client, sender, registry com
}
// Initialize BridgeRegistry instance
registryInstance, err := bridgeRegistry.NewBridgeRegistry(registry, client)
registryInstance, err := bridgeRegistry.NewBridgeRegistry(registry, backend)
if err != nil {
txslog.Error("GetAddressFromBridgeRegistry", "Failed to NewBridgeRegistry to:", err.Error())
return nil, err
......
......@@ -20,7 +20,7 @@ import (
// RelayLockToChain33 : RelayLockToChain33 applies validator's signature to an EthBridgeClaim message
// 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
params := &types.Eth2Chain33{
......@@ -41,7 +41,7 @@ func RelayLockToChain33(privateKey chain33Crypto.PrivKey, claim *ebrelayerTypes.
ActionName: types.NameEth2Chain33Action,
Payload: chain33Types.MustPBToJSON(params),
}
ctx := jsonclient.NewRPCCtx(rpcUrl, "Chain33.CreateTransaction", pm, &res)
ctx := jsonclient.NewRPCCtx(rpcURL, "Chain33.CreateTransaction", pm, &res)
_, _ = ctx.RunResult()
data, err := common.FromHex(res)
......@@ -71,12 +71,12 @@ func RelayLockToChain33(privateKey chain33Crypto.PrivKey, claim *ebrelayerTypes.
}
var txhash string
ctx = jsonclient.NewRPCCtx(rpcUrl, "Chain33.SendTransaction", pms, &txhash)
ctx = jsonclient.NewRPCCtx(rpcURL, "Chain33.SendTransaction", pms, &txhash)
_, err = ctx.RunResult()
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
params := &types.Eth2Chain33{
......@@ -97,7 +97,7 @@ func RelayBurnToChain33(privateKey chain33Crypto.PrivKey, claim *ebrelayerTypes.
ActionName: types.NameWithdrawEthAction,
Payload: chain33Types.MustPBToJSON(params),
}
ctx := jsonclient.NewRPCCtx(rpcUrl, "Chain33.CreateTransaction", pm, &res)
ctx := jsonclient.NewRPCCtx(rpcURL, "Chain33.CreateTransaction", pm, &res)
_, _ = ctx.RunResult()
data, err := common.FromHex(res)
......@@ -127,7 +127,7 @@ func RelayBurnToChain33(privateKey chain33Crypto.PrivKey, claim *ebrelayerTypes.
}
var txhash string
ctx = jsonclient.NewRPCCtx(rpcUrl, "Chain33.SendTransaction", pms, &txhash)
ctx = jsonclient.NewRPCCtx(rpcURL, "Chain33.SendTransaction", pms, &txhash)
_, err = ctx.RunResult()
return txhash, err
}
......@@ -3,12 +3,13 @@ package ethtxs
import (
"crypto/ecdsa"
"github.com/ethereum/go-ethereum/accounts/abi/bind"
"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/events"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/crypto"
"github.com/ethereum/go-ethereum/ethclient"
)
var (
......@@ -22,10 +23,10 @@ const (
)
// 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())
auth, err := PrepareAuth(client, privateKey, sender)
auth, err := PrepareAuth(backend, privateKey, sender)
if nil != err {
txslog.Error("RelayProphecyClaimToEthereum", "PrepareAuth err", err.Error())
return "", err
......
......@@ -8,17 +8,16 @@ import (
"sync"
"time"
ebrelayerTypes "github.com/33cn/plugin/plugin/dapp/x2Ethereum/ebrelayer/types"
"github.com/ethereum/go-ethereum"
"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/hexutil"
"github.com/ethereum/go-ethereum/common/math"
"github.com/ethereum/go-ethereum/crypto"
"github.com/ethereum/go-ethereum/crypto/secp256k1"
"github.com/ethereum/go-ethereum/ethclient"
solsha3 "github.com/miguelmota/go-solidity-sha3"
)
type EthTxStatus int32
......@@ -66,14 +65,6 @@ func prefixMessage(message common.Hash, key *ecdsa.PrivateKey) ([]byte, []byte)
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
func LoadSender(privateKey *ecdsa.PrivateKey) (address common.Address, err error) {
// Parse public key
......@@ -91,7 +82,7 @@ func getNonce(sender common.Address, backend bind.ContractBackend) (*big.Int, er
if nonceMutex, exist := addr2Nonce[sender]; exist {
nonceMutex.rw.Lock()
defer nonceMutex.rw.Unlock()
nonceMutex.nonce += 1
nonceMutex.nonce++
addr2Nonce[sender] = nonceMutex
txslog.Debug("getNonce from cache", "address", sender.String(), "nonce", nonceMutex.nonce)
return big.NewInt(nonceMutex.nonce), nil
......@@ -113,7 +104,7 @@ func revokeNonce(sender common.Address) (*big.Int, error) {
if nonceMutex, exist := addr2Nonce[sender]; exist {
nonceMutex.rw.Lock()
defer nonceMutex.rw.Unlock()
nonceMutex.nonce -= 1
nonceMutex.nonce--
addr2Nonce[sender] = nonceMutex
txslog.Debug("revokeNonce", "address", sender.String(), "nonce", nonceMutex.nonce)
return big.NewInt(nonceMutex.nonce), nil
......@@ -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) {
//var backend bind.ContractBackend = client
//client *ethclient.Client
if nil == privateKey || nil == backend {
txslog.Error("PrepareAuth", "nil input parameter", "backend", backend, "privateKey", privateKey)
return nil, errors.New("nil input parameter")
......
......@@ -25,8 +25,8 @@ const (
)
const (
CLAIM_TYPE_BURN = uint8(1)
CLAIM_TYPE_LOCK = uint8(2)
ClaimTypeBurn = uint8(1)
ClaimTypeLock = uint8(2)
)
// String : returns the event type as a string
......
......@@ -69,13 +69,13 @@ func main() {
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)
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)
relayerManager := relayer.NewRelayerManager(chain33RelayerService, ethRelayerService, db)
log.Info("cfg.JrpcBindAddr = ", cfg.JrpcBindAddr)
startRpcServer(cfg.JrpcBindAddr, relayerManager)
startRPCServer(cfg.JrpcBindAddr, relayerManager)
ch := make(chan os.Signal, 1)
signal.Notify(ch, syscall.SIGTERM)
......@@ -160,16 +160,16 @@ func (r *RPCServer) HandleHTTP(rpcPath, debugPath string) {
http.Handle(rpcPath, r)
}
type HttpConn struct {
type HTTPConn struct {
in io.Reader
out io.Writer
}
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) Close() error { return nil }
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) Close() error { return nil }
func startRpcServer(address string, api interface{}) {
func startRPCServer(address string, api interface{}) {
listener, err := net.Listen("tcp", address)
if err != nil {
fmt.Println("监听失败,端口可能已经被占用")
......@@ -180,7 +180,7 @@ func startRpcServer(address string, api interface{}) {
srv.HandleHTTP(rpc.DefaultRPCPath, rpc.DefaultDebugPath)
var handler http.Handler = http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
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.WriteHeader(200)
err := srv.ServeRequest(serverCodec)
......
......@@ -15,7 +15,7 @@ var (
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)
if nil != err {
return "", "", err
......@@ -29,7 +29,7 @@ func (chain33Relayer *Chain33Relayer) GetAccount(passphrase string) (privateKey,
addr = ethAccount.Addr
return
}
func (chain33Relayer *Chain33Relayer) GetAccountAddr() (addr string, err error) {
func (chain33Relayer *Relayer4Chain33) GetAccountAddr() (addr string, err error) {
accountInfo, err := chain33Relayer.db.Get(chain33AccountKey)
if nil != err {
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)
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)
if nil != err {
return "", err
......@@ -71,7 +71,7 @@ func (chain33Relayer *Chain33Relayer) ImportPrivateKey(passphrase, privateKeyStr
return
}
func (chain33Relayer *Chain33Relayer) StoreAccountWithNewPassphase(newPassphrase, oldPassphrase string) error {
func (chain33Relayer *Relayer4Chain33) StoreAccountWithNewPassphase(newPassphrase, oldPassphrase string) error {
accountInfo, err := chain33Relayer.db.Get(chain33AccountKey)
if nil != err {
relayerLog.Info("StoreAccountWithNewPassphase", "pls check account is created already, err", err)
......@@ -88,10 +88,10 @@ func (chain33Relayer *Chain33Relayer) StoreAccountWithNewPassphase(newPassphrase
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)
if nil != err {
relayerLog.Info("No private key saved for Chain33Relayer")
relayerLog.Info("No private key saved for Relayer4Chain33")
return nil
}
ethAccount := &x2ethTypes.Account4Relayer{}
......@@ -114,7 +114,7 @@ func (chain33Relayer *Chain33Relayer) RestorePrivateKeys(passphrase string) erro
return nil
}
func (chain33Relayer *Chain33Relayer) UpdatePrivateKey(Passphrase, privateKey string) error {
func (chain33Relayer *Relayer4Chain33) UpdatePrivateKey(Passphrase, privateKey string) error {
return nil
}
......@@ -11,6 +11,9 @@ import (
"sync/atomic"
"time"
"github.com/ethereum/go-ethereum/accounts/abi/bind"
"github.com/ethereum/go-ethereum/ethclient"
dbm "github.com/33cn/chain33/common/db"
log "github.com/33cn/chain33/common/log/log15"
"github.com/33cn/chain33/rpc/jsonclient"
......@@ -24,20 +27,16 @@ import (
"github.com/33cn/plugin/plugin/dapp/x2Ethereum/ebrelayer/utils"
"github.com/33cn/plugin/plugin/dapp/x2Ethereum/types"
ethCommon "github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/ethclient"
)
var relayerLog = log.New("module", "chain33_relayer")
type Chain33Relayer struct {
syncTxReceipts *syncTx.SyncTxReceipts
client *ethclient.Client
rpcLaddr string //用户向指定的blockchain节点进行rpc调用
fetchHeightPeriodMs int64
db dbm.DB
syncTxChan <-chan int64
//height int64 //当前区块高度 +++++++++||++++++++++++||++++++++++||
//heightSync2App int64 //已经同步高度 ^ ^ ^
type Relayer4Chain33 struct {
syncTxReceipts *syncTx.TxReceipts
ethBackend bind.ContractBackend
rpcLaddr string //用户向指定的blockchain节点进行rpc调用
fetchHeightPeriodMs int64
db dbm.DB
lastHeight4Tx int64 //等待被处理的具有相应的交易回执的高度
matDegree int32 //成熟度 heightSync2App matDegress height
passphase string
......@@ -48,15 +47,14 @@ type Chain33Relayer struct {
totalTx4Chain33ToEth int64
statusCheckedIndex int64
ctx context.Context
wg sync.WaitGroup
rwLock sync.RWMutex
unlock chan int
status int32
}
// 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 {
relayer := &Chain33Relayer{
func StartChain33Relayer(ctx context.Context, syncTxConfig *ebTypes.SyncTxConfig, registryAddr, provider string, db dbm.DB) *Relayer4Chain33 {
relayer := &Relayer4Chain33{
rpcLaddr: syncTxConfig.Chain33Host,
fetchHeightPeriodMs: syncTxConfig.FetchHeightPeriodMs,
unlock: make(chan int),
......@@ -79,7 +77,7 @@ func StartChain33Relayer(syncTxConfig *ebTypes.SyncTxConfig, registryAddr, provi
if err != nil {
panic(err)
}
relayer.client = client
relayer.ethBackend = client
relayer.totalTx4Chain33ToEth = relayer.getTotalTxAmount2Eth()
relayer.statusCheckedIndex = relayer.getStatusCheckedIndex()
......@@ -87,18 +85,18 @@ func StartChain33Relayer(syncTxConfig *ebTypes.SyncTxConfig, registryAddr, provi
return relayer
}
func (chain33Relayer *Chain33Relayer) SetPassphase(passphase string) {
func (chain33Relayer *Relayer4Chain33) SetPassphase(passphase string) {
chain33Relayer.rwLock.Lock()
chain33Relayer.passphase = passphase
chain33Relayer.rwLock.Unlock()
}
func (chain33Relayer *Chain33Relayer) QueryTxhashRelay2Eth() ebTypes.Txhashes {
func (chain33Relayer *Relayer4Chain33) QueryTxhashRelay2Eth() ebTypes.Txhashes {
txhashs := utils.QueryTxhashes([]byte(chain33ToEthBurnLockTxHashPrefix), chain33Relayer.db)
return ebTypes.Txhashes{Txhash: txhashs}
}
func (chain33Relayer *Chain33Relayer) GetRunningStatus() (relayerRunStatus *ebTypes.RelayerRunStatus) {
func (chain33Relayer *Relayer4Chain33) GetRunningStatus() (relayerRunStatus *ebTypes.RelayerRunStatus) {
relayerRunStatus = &ebTypes.RelayerRunStatus{}
chain33Relayer.rwLock.RLock()
relayerRunStatus.Status = chain33Relayer.status
......@@ -113,7 +111,7 @@ func (chain33Relayer *Chain33Relayer) GetRunningStatus() (relayerRunStatus *ebTy
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")
<-chain33Relayer.unlock
_, _ = fmt.Fprintln(os.Stdout, "Chain33 relayer starts to run...")
......@@ -121,7 +119,7 @@ func (chain33Relayer *Chain33Relayer) syncProc(syncCfg *ebTypes.SyncTxReceiptCon
chain33Relayer.syncTxReceipts = syncTx.StartSyncTxReceipt(syncCfg, chain33Relayer.db)
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 {
panic(err.Error())
}
......@@ -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
ctx := jsonclient.NewRPCCtx(chain33Relayer.rpcLaddr, "Chain33.GetLastHeader", nil, &res)
_, err := ctx.RunResult()
......@@ -152,7 +150,7 @@ func (chain33Relayer *Chain33Relayer) getCurrentHeight() int64 {
return res.Height
}
func (chain33Relayer *Chain33Relayer) onNewHeightProc(currentHeight int64) {
func (chain33Relayer *Relayer4Chain33) onNewHeightProc(currentHeight int64) {
//检查已经提交的交易结果
for chain33Relayer.statusCheckedIndex < chain33Relayer.totalTx4Chain33ToEth {
index := chain33Relayer.statusCheckedIndex + 1
......@@ -161,7 +159,7 @@ func (chain33Relayer *Chain33Relayer) onNewHeightProc(currentHeight int64) {
relayerLog.Error("onNewHeightProc", "getEthTxhash for index ", index, "error", err.Error())
break
}
status := relayerTx.GetEthTxStatus(chain33Relayer.client, txhash)
status := relayerTx.GetEthTxStatus(chain33Relayer.ethBackend.(*ethclient.Client), txhash)
//按照提交交易的先后顺序检查交易,只要出现当前交易还在pending状态,就不再检查后续交易,等到下个区块再从该交易进行检查
//TODO:可能会由于网络和打包挖矿的原因,使得交易执行顺序和提交顺序有差别,后续完善该检查逻辑
if status == relayerTx.EthTxPending.String() {
......@@ -219,9 +217,9 @@ func getOracleClaimType(eventType string) events.Event {
switch eventType {
case events.MsgBurn.String():
claimType = events.Event(events.CLAIM_TYPE_BURN)
claimType = events.Event(events.ClaimTypeBurn)
case events.MsgLock.String():
claimType = events.Event(events.CLAIM_TYPE_LOCK)
claimType = events.Event(events.ClaimTypeLock)
default:
panic(errors.New("eventType invalid"))
}
......@@ -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
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))
// Parse the witnessed event's data into a new Chain33Msg
......@@ -245,7 +243,7 @@ func (chain33Relayer *Chain33Relayer) handleBurnLockMsg(claimEvent events.Event,
prophecyClaim := relayerTx.Chain33MsgToProphecyClaim(*chain33Msg)
// 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 {
return err
}
......
......@@ -21,7 +21,7 @@ func calcRelay2EthTxhash(txindex int64) []byte {
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{
Data: atomic.LoadInt64(&chain33Relayer.totalTx4Chain33ToEth),
}
......@@ -29,12 +29,12 @@ func (chain33Relayer *Chain33Relayer) updateTotalTxAmount2Eth(total int64) error
return chain33Relayer.db.Set(chain33ToEthBurnLockTxTotalAmount, types.Encode(totalTx))
}
func (chain33Relayer *Chain33Relayer) getTotalTxAmount2Eth() int64 {
func (chain33Relayer *Relayer4Chain33) getTotalTxAmount2Eth() int64 {
totalTx, _ := utils.LoadInt64FromDB(chain33ToEthBurnLockTxTotalAmount, chain33Relayer.db)
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)
ethTxStatus := &ebTypes.EthTxStatus{
Status: status,
......@@ -44,7 +44,7 @@ func (chain33Relayer *Chain33Relayer) setLastestRelay2EthTxhash(status, txhash s
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)
ethTxStatus := &ebTypes.EthTxStatus{}
data, err := chain33Relayer.db.Get(key)
......@@ -58,7 +58,7 @@ func (chain33Relayer *Chain33Relayer) getEthTxhash(txIndex int64) (common.Hash,
return common.HexToHash(ethTxStatus.Txhash), nil
}
func (chain33Relayer *Chain33Relayer) setStatusCheckedIndex(txIndex int64) error {
func (chain33Relayer *Relayer4Chain33) setStatusCheckedIndex(txIndex int64) error {
index := &types.Int64{
Data: txIndex,
}
......@@ -66,13 +66,13 @@ func (chain33Relayer *Chain33Relayer) setStatusCheckedIndex(txIndex int64) error
return chain33Relayer.db.Set(EthTxStatusCheckedIndex, data)
}
func (chain33Relayer *Chain33Relayer) getStatusCheckedIndex() int64 {
func (chain33Relayer *Relayer4Chain33) getStatusCheckedIndex() int64 {
index, _ := utils.LoadInt64FromDB(EthTxStatusCheckedIndex, chain33Relayer.db)
return index
}
//获取上次同步到app的高度
func (chain33Relayer *Chain33Relayer) loadLastSyncHeight() int64 {
func (chain33Relayer *Relayer4Chain33) loadLastSyncHeight() int64 {
height, err := utils.LoadInt64FromDB(lastSyncHeightPrefix, chain33Relayer.db)
if nil != err && err != types.ErrHeightNotExist {
relayerLog.Error("loadLastSyncHeight", "err:", err.Error())
......@@ -81,7 +81,7 @@ func (chain33Relayer *Chain33Relayer) loadLastSyncHeight() int64 {
return height
}
func (chain33Relayer *Chain33Relayer) setLastSyncHeight(syncHeight int64) {
func (chain33Relayer *Relayer4Chain33) setLastSyncHeight(syncHeight int64) {
bytes := types.Encode(&types.Int64{Data: syncHeight})
_ = chain33Relayer.db.Set(lastSyncHeightPrefix, bytes)
}
......@@ -21,7 +21,6 @@ var (
syncLastHeight = []byte("syncLastHeight:")
txReceiptPrefix = []byte("txReceiptPrefix:")
lastSequences = []byte("lastSequences:")
lastSyncHeight = []byte("lastSyncHeight:")
seqOperationType = []string{"SeqTypeAdd", "SeqTypeDel"}
)
......@@ -44,15 +43,15 @@ func pushTxReceipts(txReceipts *types.TxReceipts4Subscribe) error {
return err
}
type SyncTxReceipts struct {
type TxReceipts struct {
db dbm.DB
seqNum int64 //当前同步的序列号
height int64 //当前区块高度
quit chan struct{}
}
func NewSyncTxReceipts(db dbm.DB) *SyncTxReceipts {
sync := &SyncTxReceipts{
func NewSyncTxReceipts(db dbm.DB) *TxReceipts {
sync := &TxReceipts{
db: db,
}
sync.seqNum, _ = sync.loadBlockLastSequence()
......@@ -64,7 +63,7 @@ func NewSyncTxReceipts(db dbm.DB) *SyncTxReceipts {
}
//此处添加一个高度为0的空块,只是为了查找下一个比较方便,并不需要使用其信息
func (syncTx *SyncTxReceipts) initSyncReceiptDataBase() {
func (syncTx *TxReceipts) initSyncReceiptDataBase() {
txblock0, _ := syncTx.GetTxReceipts(0)
if nil != txblock0 {
return
......@@ -75,12 +74,12 @@ func (syncTx *SyncTxReceipts) initSyncReceiptDataBase() {
syncTx.setTxReceiptsPerBlock(txsPerBlock)
}
func (syncTx *SyncTxReceipts) Stop() {
func (syncTx *TxReceipts) Stop() {
close(syncTx.quit)
}
// SaveAndSyncTxs2Relayer save block to db
func (syncTx *SyncTxReceipts) SaveAndSyncTxs2Relayer() {
func (syncTx *TxReceipts) SaveAndSyncTxs2Relayer() {
for {
select {
case txReceipts := <-txReceiptCh:
......@@ -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)
if err != nil {
resultCh <- err
......@@ -136,35 +135,34 @@ func (syncTx *SyncTxReceipts) dealTxReceipts(txReceipts *types.TxReceipts4Subscr
//发送回复,确认接收成功
resultCh <- nil
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)
}
func (syncTx *SyncTxReceipts) LoadLastBlockHeight() (int64, error) {
func (syncTx *TxReceipts) LoadLastBlockHeight() (int64, error) {
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})
syncTx.db.Set(lastSequences, Sequencebytes)
//同时更新内存中的seq
syncTx.updateSequence(newSequence)
}
func (syncTx *SyncTxReceipts) setBlockHeight(height int64) {
func (syncTx *TxReceipts) setBlockHeight(height int64) {
bytes := types.Encode(&types.Int64{Data: height})
syncTx.db.Set(syncLastHeight, bytes)
atomic.StoreInt64(&syncTx.height, height)
}
func (syncTx *SyncTxReceipts) updateSequence(newSequence int64) {
func (syncTx *TxReceipts) updateSequence(newSequence int64) {
atomic.StoreInt64(&syncTx.seqNum, newSequence)
}
func (syncTx *SyncTxReceipts) setTxReceiptsPerBlock(txReceipts *types.TxReceipts4SubscribePerBlk) {
func (syncTx *TxReceipts) setTxReceiptsPerBlock(txReceipts *types.TxReceipts4SubscribePerBlk) {
key := txReceiptsKey4Height(txReceipts.Height)
value := types.Encode(txReceipts)
if err := syncTx.db.Set(key, value); nil != err {
......@@ -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)
value, err := syncTx.db.Get(key)
if err != nil {
......@@ -186,7 +184,7 @@ func (syncTx *SyncTxReceipts) GetTxReceipts(height int64) (*types.TxReceipts4Sub
return detail, nil
}
func (syncTx *SyncTxReceipts) GetNextValidTxReceipts(height int64) (*types.TxReceipts4SubscribePerBlk, error) {
func (syncTx *TxReceipts) GetNextValidTxReceipts(height int64) (*types.TxReceipts4SubscribePerBlk, error) {
key := txReceiptsKey4Height(height)
helper := dbm.NewListHelper(syncTx.db)
TxReceipts := helper.List(txReceiptPrefix, key, 1, dbm.ListASC)
......@@ -201,7 +199,7 @@ func (syncTx *SyncTxReceipts) GetNextValidTxReceipts(height int64) (*types.TxRec
return detail, nil
}
func (syncTx *SyncTxReceipts) delTxReceipts(height int64) {
func (syncTx *TxReceipts) delTxReceipts(height int64) {
key := txReceiptsKey4Height(height)
_ = syncTx.db.Set(key, nil)
}
......
......@@ -22,12 +22,12 @@ import (
var (
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("SyncTxReceipts started ")
log.Debug("TxReceipts started ")
bindOrResumePush(cfg)
syncTxReceipts = NewSyncTxReceipts(db)
......
......@@ -29,7 +29,7 @@ var (
)
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
Address common.Address
// we only store privkey as pubkey/address can be derived from it
......@@ -37,7 +37,7 @@ type Key struct {
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
privateKey, privateKeystr, addr, err = newKeyAndStore(ethRelayer.db, crand.Reader, passphrase)
if err != nil {
......@@ -47,7 +47,7 @@ func (ethRelayer *EthereumRelayer) NewAccount(passphrase string) (privateKeystr,
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)
if nil != err {
return "", "", err
......@@ -62,7 +62,7 @@ func (ethRelayer *EthereumRelayer) GetAccount(passphrase string) (privateKey, ad
return
}
func (ethRelayer *EthereumRelayer) GetValidatorAddr() (validators x2ethTypes.ValidatorAddr4EthRelayer, err error) {
func (ethRelayer *Relayer4Ethereum) GetValidatorAddr() (validators x2ethTypes.ValidatorAddr4EthRelayer, err error) {
var ethAccountAddr string
var chain33AccountAddr string
accountInfo, err := ethRelayer.db.Get(ethAccountKey)
......@@ -92,7 +92,7 @@ func (ethRelayer *EthereumRelayer) GetValidatorAddr() (validators x2ethTypes.Val
return
}
func (ethRelayer *EthereumRelayer) RestorePrivateKeys(passPhase string) (err error) {
func (ethRelayer *Relayer4Ethereum) RestorePrivateKeys(passPhase string) (err error) {
accountInfo, err := ethRelayer.db.Get(ethAccountKey)
if nil == err {
ethAccount := &x2ethTypes.Account4Relayer{}
......@@ -135,7 +135,7 @@ func (ethRelayer *EthereumRelayer) RestorePrivateKeys(passPhase string) (err err
return nil
}
func (ethRelayer *EthereumRelayer) StoreAccountWithNewPassphase(newPassphrase, oldPassphrase string) error {
func (ethRelayer *Relayer4Ethereum) StoreAccountWithNewPassphase(newPassphrase, oldPassphrase string) error {
accountInfo, err := ethRelayer.db.Get(ethAccountKey)
if nil != err {
relayerLog.Info("StoreAccountWithNewPassphase", "pls check account is created already, err", err)
......@@ -152,7 +152,7 @@ func (ethRelayer *EthereumRelayer) StoreAccountWithNewPassphase(newPassphrase, o
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
privateKeySli, err := chain33Common.FromHex(privateKeyStr)
if nil != err {
......@@ -181,7 +181,7 @@ func (ethRelayer *EthereumRelayer) ImportChain33PrivateKey(passphrase, privateKe
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)
if nil != err {
return err
......@@ -285,7 +285,7 @@ func newKey(rand io.Reader) (*Key, error) {
func newKeyFromECDSA(privateKeyECDSA *ecdsa.PrivateKey) *Key {
id := uuid.NewRandom()
key := &Key{
Id: id,
ID: id,
Address: crypto.PubkeyToAddress(privateKeyECDSA.PublicKey),
PrivateKey: privateKeyECDSA,
}
......
......@@ -38,40 +38,37 @@ import (
ebTypes "github.com/33cn/plugin/plugin/dapp/x2Ethereum/ebrelayer/types"
)
type EthereumRelayer struct {
type Relayer4Ethereum struct {
provider string
clientChainID *big.Int
bridgeRegistryAddr common.Address
//validatorName string
db dbm.DB
//passphase string
rwLock sync.RWMutex
privateKey4Chain33 chain33Crypto.PrivKey
privateKey4Ethereum *ecdsa.PrivateKey
ethValidator common.Address
totalTx4Eth2Chain33 int64
totalTx4Chain33ToEth int64
rpcURL2Chain33 string
unlockchan chan int
maturityDegree int32
fetchHeightPeriodMs int32
eventLogIndex ebTypes.EventLogIndex
status int32
client *ethclient.Client
bridgeBankAddr common.Address
//chain33BridgeAddr common.Address
rwLock sync.RWMutex
privateKey4Chain33 chain33Crypto.PrivKey
privateKey4Ethereum *ecdsa.PrivateKey
ethValidator common.Address
totalTx4Eth2Chain33 int64
totalTx4Chain33ToEth int64
rpcURL2Chain33 string
unlockchan chan int
maturityDegree int32
fetchHeightPeriodMs int32
eventLogIndex ebTypes.EventLogIndex
status int32
backend bind.ContractBackend
bridgeBankAddr common.Address
bridgeBankSub ethereum.Subscription
bridgeBankLog chan types.Log
bridgeBankEventLockSig string
bridgeBankEventBurnSig string
//chain33BridgeEventSig string
bridgeBankAbi abi.ABI
//chain33BridgeAbi abi.ABI
deployInfo *ebTypes.Deploy
x2EthDeployInfo *ethtxs.X2EthDeployInfo
deployPara *ethtxs.DeployPara
operatorInfo *ethtxs.OperatorInfo
x2EthContracts *ethtxs.X2EthContracts
bridgeBankAbi abi.ABI
deployInfo *ebTypes.Deploy
x2EthDeployInfo *ethtxs.X2EthDeployInfo
deployPara *ethtxs.DeployPara
operatorInfo *ethtxs.OperatorInfo
x2EthContracts *ethtxs.X2EthContracts
}
var (
......@@ -82,11 +79,11 @@ const (
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 {
blockInterval = DefaultBlockPeriod
}
relayer := &EthereumRelayer{
relayer := &Relayer4Ethereum{
provider: provider,
db: db,
unlockchan: make(chan int, 2),
......@@ -115,7 +112,7 @@ func StartEthereumRelayer(rpcURL2Chain33 string, db dbm.DB, provider, registryAd
return relayer
}
func (ethRelayer *EthereumRelayer) SetPrivateKey4Ethereum(privateKey4Ethereum *ecdsa.PrivateKey) {
func (ethRelayer *Relayer4Ethereum) SetPrivateKey4Ethereum(privateKey4Ethereum *ecdsa.PrivateKey) {
ethRelayer.rwLock.Lock()
defer ethRelayer.rwLock.Unlock()
ethRelayer.privateKey4Ethereum = privateKey4Ethereum
......@@ -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{}
ethRelayer.rwLock.RLock()
relayerRunStatus.Status = ethRelayer.status
......@@ -143,7 +140,7 @@ func (ethRelayer *EthereumRelayer) GetRunningStatus() (relayerRunStatus *ebTypes
return
}
func (ethRelayer *EthereumRelayer) recoverDeployPara() (err error) {
func (ethRelayer *Relayer4Ethereum) recoverDeployPara() (err error) {
if nil == ethRelayer.deployInfo {
return nil
}
......@@ -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 = ""
if nil == ethRelayer.deployInfo {
return bridgeRegistry, errors.New("No deploy info configured yet")
......@@ -207,7 +204,7 @@ func (ethRelayer *EthereumRelayer) DeployContrcts() (bridgeRegistry string, err
"power", power.String())
}
x2EthContracts, x2EthDeployInfo, err := ethtxs.DeployAndInit(ethRelayer.client, para)
x2EthContracts, x2EthDeployInfo, err := ethtxs.DeployAndInit(ethRelayer.backend, para)
if err != nil {
return bridgeRegistry, err
}
......@@ -229,11 +226,11 @@ func (ethRelayer *EthereumRelayer) DeployContrcts() (bridgeRegistry string, err
}
//GetBalance:获取某一个币种的余额
func (ethRelayer *EthereumRelayer) GetBalance(tokenAddr, owner string) (string, error) {
return ethtxs.GetBalance(ethRelayer.client, tokenAddr, owner)
func (ethRelayer *Relayer4Ethereum) GetBalance(tokenAddr, owner string) (string, error) {
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 {
return "", errors.New("The relayer is not started yes")
}
......@@ -241,7 +238,7 @@ func (ethRelayer *EthereumRelayer) ShowBridgeBankAddr() (string, error) {
return ethRelayer.x2EthDeployInfo.BridgeBank.Address.String(), nil
}
func (ethRelayer *EthereumRelayer) ShowBridgeRegistryAddr() (string, error) {
func (ethRelayer *Relayer4Ethereum) ShowBridgeRegistryAddr() (string, error) {
if nil == ethRelayer.x2EthDeployInfo {
return "", errors.New("The relayer is not started yes")
}
......@@ -249,100 +246,101 @@ func (ethRelayer *EthereumRelayer) ShowBridgeRegistryAddr() (string, error) {
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)
}
func (ethRelayer *EthereumRelayer) ShowDepositStatics(tokenAddr string) (string, error) {
return ethtxs.GetDepositFunds(ethRelayer.client, tokenAddr)
func (ethRelayer *Relayer4Ethereum) ShowDepositStatics(tokenAddr string) (string, error) {
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)
}
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)
}
func (ethRelayer *EthereumRelayer) MakeNewProphecyClaim(newProphecyClaimPara *ethtxs.NewProphecyClaimPara) (string, error) {
return ethtxs.MakeNewProphecyClaim(newProphecyClaimPara, ethRelayer.client, ethRelayer.privateKey4Ethereum, ethRelayer.ethValidator, ethRelayer.x2EthContracts)
func (ethRelayer *Relayer4Ethereum) MakeNewProphecyClaim(newProphecyClaimPara *ethtxs.NewProphecyClaimPara) (string, error) {
return ethtxs.MakeNewProphecyClaim(newProphecyClaimPara, ethRelayer.backend, ethRelayer.privateKey4Ethereum, ethRelayer.ethValidator, ethRelayer.x2EthContracts)
}
func (ethRelayer *EthereumRelayer) CreateBridgeToken(symbol string) (string, error) {
return ethtxs.CreateBridgeToken(symbol, ethRelayer.client, ethRelayer.operatorInfo, ethRelayer.x2EthDeployInfo, ethRelayer.x2EthContracts)
func (ethRelayer *Relayer4Ethereum) CreateBridgeToken(symbol string) (string, error) {
return ethtxs.CreateBridgeToken(symbol, ethRelayer.backend, ethRelayer.operatorInfo, ethRelayer.x2EthDeployInfo, ethRelayer.x2EthContracts)
}
func (ethRelayer *EthereumRelayer) CreateERC20Token(symbol string) (string, error) {
return ethtxs.CreateERC20Token(symbol, ethRelayer.client, ethRelayer.operatorInfo, ethRelayer.x2EthDeployInfo, ethRelayer.x2EthContracts)
func (ethRelayer *Relayer4Ethereum) CreateERC20Token(symbol string) (string, error) {
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, _ = 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, _ = 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, _ = 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, _ = 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, _ = 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{
Pending: true,
From: common.HexToAddress(tokenAddr),
Context: context.Background(),
}
bridgeToken, _ := generated.NewBridgeToken(common.HexToAddress(tokenAddr), ethRelayer.client)
bridgeToken, _ := generated.NewBridgeToken(common.HexToAddress(tokenAddr), ethRelayer.backend)
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, _ = 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, _ = 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)
return ethRelayer.client.TransactionReceipt(context.Background(), txhash)
client := ethRelayer.backend.(*ethclient.Client)
return client.TransactionReceipt(context.Background(), txhash)
}
func (ethRelayer *EthereumRelayer) proc() {
// Start client with infura ropsten provider
relayerLog.Info("EthereumRelayer proc", "Started Ethereum websocket with provider:", ethRelayer.provider,
func (ethRelayer *Relayer4Ethereum) proc() {
// Start backend with infura ropsten provider
relayerLog.Info("Relayer4Ethereum proc", "Started Ethereum websocket with provider:", ethRelayer.provider,
"rpcURL2Chain33:", ethRelayer.rpcURL2Chain33)
client, err := ethtxs.SetupWebsocketEthClient(ethRelayer.provider)
if err != nil {
panic(err)
}
ethRelayer.client = client
ethRelayer.backend = client
ctx := context.Background()
clientChainID, err := client.NetworkID(ctx)
......@@ -370,25 +368,22 @@ func (ethRelayer *EthereumRelayer) proc() {
var timer *time.Ticker
continueFailCount := int32(0)
for {
select {
case <-ethRelayer.unlockchan:
relayerLog.Info("Received ethRelayer.unlockchan")
if nil != ethRelayer.privateKey4Ethereum && nil != ethRelayer.privateKey4Chain33 && nilAddr != ethRelayer.bridgeRegistryAddr {
ethRelayer.ethValidator, err = ethtxs.LoadSender(ethRelayer.privateKey4Ethereum)
if nil != err {
errinfo := fmt.Sprintf("Failed to load validator for ethereum due to:%s", err.Error())
panic(errinfo)
}
relayerLog.Info("Ethereum relayer starts to run...")
ethRelayer.prePareSubscribeEvent()
//向bridgeBank订阅事件
ethRelayer.subscribeEvent()
ethRelayer.filterLogEvents()
relayerLog.Info("Ethereum relayer starts to process online log event...")
timer = time.NewTicker(time.Duration(ethRelayer.fetchHeightPeriodMs) * time.Millisecond)
goto latter
for range ethRelayer.unlockchan {
relayerLog.Info("Received ethRelayer.unlockchan")
if nil != ethRelayer.privateKey4Ethereum && nil != ethRelayer.privateKey4Chain33 && nilAddr != ethRelayer.bridgeRegistryAddr {
ethRelayer.ethValidator, err = ethtxs.LoadSender(ethRelayer.privateKey4Ethereum)
if nil != err {
errinfo := fmt.Sprintf("Failed to load validator for ethereum due to:%s", err.Error())
panic(errinfo)
}
relayerLog.Info("Ethereum relayer starts to run...")
ethRelayer.prePareSubscribeEvent()
//向bridgeBank订阅事件
ethRelayer.subscribeEvent()
ethRelayer.filterLogEvents()
relayerLog.Info("Ethereum relayer starts to process online log event...")
timer = time.NewTicker(time.Duration(ethRelayer.fetchHeightPeriodMs) * time.Millisecond)
goto latter
}
}
......@@ -396,7 +391,7 @@ latter:
for {
select {
case <-timer.C:
ethRelayer.procNewHeight(&continueFailCount, ctx)
ethRelayer.procNewHeight(ctx, &continueFailCount)
case err := <-ethRelayer.bridgeBankSub.Err():
panic("bridgeBankSub" + err.Error())
case vLog := <-ethRelayer.bridgeBankLog:
......@@ -405,10 +400,10 @@ latter:
}
}
func (ethRelayer *EthereumRelayer) procNewHeight(continueFailCount *int32, ctx context.Context) {
head, err := ethRelayer.client.HeaderByNumber(ctx, nil)
func (ethRelayer *Relayer4Ethereum) procNewHeight(ctx context.Context, continueFailCount *int32) {
head, err := ethRelayer.backend.(*ethclient.Client).HeaderByNumber(ctx, nil)
if nil != err {
*continueFailCount += 1
*continueFailCount++
if *continueFailCount >= (12 * 5) {
panic(err.Error())
}
......@@ -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) 跨链转移
//burn,用于捕捉 (chain33 token----->chain33) 实现chain33资产withdraw操作,之后在chain33上实现unlock操作
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())
if err := ethRelayer.setEthTxEvent(vLog); nil != err {
panic(err.Error())
}
} 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())
if err := ethRelayer.setEthTxEvent(vLog); nil != err {
panic(err.Error())
......@@ -479,11 +474,9 @@ func (ethRelayer *EthereumRelayer) storeBridgeBankLogs(vLog types.Log, setBlockN
panic(err.Error())
}
}
return
}
func (ethRelayer *EthereumRelayer) procBridgeBankLogs(vLog types.Log) {
func (ethRelayer *Relayer4Ethereum) procBridgeBankLogs(vLog types.Log) {
if ethRelayer.checkTxProcessed(vLog.TxHash.Bytes()) {
relayerLog.Info("procBridgeBankLogs", "Tx has been already Processed with hash:", vLog.TxHash.Hex(),
"height", vLog.BlockNumber, "index", vLog.Index)
......@@ -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 {
relayerLog.Error("procBridgeBankLogs", "Failed to get tx receipt with hash", vLog.TxHash.String())
return
......@@ -512,38 +505,37 @@ func (ethRelayer *EthereumRelayer) procBridgeBankLogs(vLog types.Log) {
//lock,用于捕捉 (ETH/ERC20----->chain33) 跨链转移
if vLog.Topics[0].Hex() == ethRelayer.bridgeBankEventLockSig {
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())
err := ethRelayer.handleLogLockEvent(ethRelayer.clientChainID, ethRelayer.bridgeBankAbi, eventName, vLog)
if err != nil {
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)
}
} else if vLog.Topics[0].Hex() == ethRelayer.bridgeBankEventBurnSig {
//burn,用于捕捉 (chain33 token----->chain33) 实现chain33资产withdraw操作,之后在chain33上实现unlock操作
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())
err := ethRelayer.handleLogBurnEvent(ethRelayer.clientChainID, ethRelayer.bridgeBankAbi, eventName, vLog)
if err != nil {
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)
}
}
return
}
func (ethRelayer *EthereumRelayer) filterLogEvents() {
deployHeight, _ := ethtxs.GetDeployHeight(ethRelayer.client, ethRelayer.x2EthDeployInfo.BridgeRegistry.Address, ethRelayer.x2EthDeployInfo.BridgeRegistry.Address)
func (ethRelayer *Relayer4Ethereum) filterLogEvents() {
deployHeight, _ := ethtxs.GetDeployHeight(ethRelayer.backend.(*ethclient.Client), ethRelayer.x2EthDeployInfo.BridgeRegistry.Address, ethRelayer.x2EthDeployInfo.BridgeRegistry.Address)
height4BridgeBankLogAt := int64(ethRelayer.getHeight4BridgeBankLogAt())
if 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 {
errinfo := fmt.Sprintf("Failed to get HeaderByNumbers due to:%s", err.Error())
panic(errinfo)
......@@ -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)
startHeight := heightLogProcAt
......@@ -592,7 +584,7 @@ func (ethRelayer *EthereumRelayer) filterLogEventsProc(logchan chan<- types.Log,
}
// 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 {
errinfo := fmt.Sprintf("Failed to filterLogEvents due to:%s", err.Error())
panic(errinfo)
......@@ -619,7 +611,7 @@ func (ethRelayer *EthereumRelayer) filterLogEventsProc(logchan chan<- types.Log,
}
}
func (ethRelayer *EthereumRelayer) prePareSubscribeEvent() {
func (ethRelayer *Relayer4Ethereum) prePareSubscribeEvent() {
var eventName string
//bridgeBank处理
contactAbi := ethtxs.LoadABI(ethtxs.BridgeBankABI)
......@@ -631,9 +623,8 @@ func (ethRelayer *EthereumRelayer) prePareSubscribeEvent() {
ethRelayer.bridgeBankAddr = ethRelayer.x2EthDeployInfo.BridgeBank.Address
}
func (ethRelayer *EthereumRelayer) subscribeEvent() {
var targetAddress common.Address
targetAddress = ethRelayer.bridgeBankAddr
func (ethRelayer *Relayer4Ethereum) subscribeEvent() {
targetAddress := ethRelayer.bridgeBankAddr
// We need the target address in bytes[] for the query
query := ethereum.FilterQuery{
......@@ -643,7 +634,7 @@ func (ethRelayer *EthereumRelayer) subscribeEvent() {
// We will check logs for new events
logs := make(chan types.Log, 10)
// 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 {
errinfo := fmt.Sprintf("Failed to SubscribeFilterLogs due to:%s", err.Error())
panic(errinfo)
......@@ -651,33 +642,32 @@ func (ethRelayer *EthereumRelayer) subscribeEvent() {
relayerLog.Info("subscribeEvent", "Subscribed to contract at address:", targetAddress.Hex())
ethRelayer.bridgeBankLog = logs
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)
}
func (ethRelayer *EthereumRelayer) ShowOperator() (string, error) {
operator, err := ethtxs.GetOperator(ethRelayer.client, ethRelayer.ethValidator, ethRelayer.bridgeBankAddr)
func (ethRelayer *Relayer4Ethereum) ShowOperator() (string, error) {
operator, err := ethtxs.GetOperator(ethRelayer.backend.(*ethclient.Client), ethRelayer.ethValidator, ethRelayer.bridgeBankAddr)
if nil != err {
return "", err
}
return operator.String(), nil
}
func (ethRelayer *EthereumRelayer) QueryTxhashRelay2Eth() ebTypes.Txhashes {
func (ethRelayer *Relayer4Ethereum) QueryTxhashRelay2Eth() ebTypes.Txhashes {
txhashs := ethRelayer.queryTxhashes([]byte(chain33ToEthTxHashPrefix))
return ebTypes.Txhashes{Txhash: txhashs}
}
func (ethRelayer *EthereumRelayer) QueryTxhashRelay2Chain33() *ebTypes.Txhashes {
func (ethRelayer *Relayer4Ethereum) QueryTxhashRelay2Chain33() *ebTypes.Txhashes {
txhashs := ethRelayer.queryTxhashes([]byte(eth2chain33TxHashPrefix))
return &ebTypes.Txhashes{Txhash: txhashs}
}
// 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
// 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
From: common.HexToAddress(event.Token.String()),
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)
if err != nil {
......@@ -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
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
event, err := events.UnpackLogBurn(contractABI, eventName, log.Data)
......@@ -752,7 +742,7 @@ func (ethRelayer *EthereumRelayer) handleLogBurnEvent(clientChainID *big.Int, co
From: common.HexToAddress(event.Token.String()),
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)
if err != nil {
......
......@@ -26,8 +26,6 @@ var (
ethTxEventPrefix = []byte("ethTxEventPrefix")
lastBridgeBankHeightProcPrefix = []byte("lastBridgeBankHeight")
bridgeBankTxProCnt = []byte("bridgeBankTxProCnt")
)
func ethTxEventKey4Height(height uint64, index uint32) []byte {
......@@ -42,11 +40,11 @@ func calcRelay2EthTxhash(txindex int64) []byte {
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))
}
func (ethRelayer *EthereumRelayer) getBridgeRegistryAddr() (string, error) {
func (ethRelayer *Relayer4Ethereum) getBridgeRegistryAddr() (string, error) {
addr, err := ethRelayer.db.Get(bridgeRegistryAddrPrefix)
if nil != err {
return "", err
......@@ -54,7 +52,7 @@ func (ethRelayer *EthereumRelayer) getBridgeRegistryAddr() (string, error) {
return string(addr), nil
}
func (ethRelayer *EthereumRelayer) updateTotalTxAmount2chain33(total int64) error {
func (ethRelayer *Relayer4Ethereum) updateTotalTxAmount2chain33(total int64) error {
totalTx := &chain33Types.Int64{
Data: atomic.LoadInt64(&ethRelayer.totalTx4Eth2Chain33),
}
......@@ -62,12 +60,12 @@ func (ethRelayer *EthereumRelayer) updateTotalTxAmount2chain33(total int64) erro
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)
return ethRelayer.db.Set(key, []byte(txhash))
}
func (ethRelayer *EthereumRelayer) updateTotalTxAmount2Eth(total int64) error {
func (ethRelayer *Relayer4Ethereum) updateTotalTxAmount2Eth(total int64) error {
totalTx := &chain33Types.Int64{
Data: atomic.LoadInt64(&ethRelayer.totalTx4Chain33ToEth),
}
......@@ -75,39 +73,39 @@ func (ethRelayer *EthereumRelayer) updateTotalTxAmount2Eth(total int64) error {
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)
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)
}
func (ethRelayer *EthereumRelayer) setHeight4chain33BridgeLogAt(height uint64) error {
func (ethRelayer *Relayer4Ethereum) setHeight4chain33BridgeLogAt(height uint64) error {
return ethRelayer.setLogProcHeight(chain33BridgeLogProcessedAt, height)
}
func (ethRelayer *EthereumRelayer) getHeight4chain33BridgeLogAt() uint64 {
func (ethRelayer *Relayer4Ethereum) getHeight4chain33BridgeLogAt() uint64 {
return ethRelayer.getLogProcHeight(chain33BridgeLogProcessedAt)
}
func (ethRelayer *EthereumRelayer) setHeight4BridgeBankLogAt(height uint64) error {
func (ethRelayer *Relayer4Ethereum) setHeight4BridgeBankLogAt(height uint64) error {
return ethRelayer.setLogProcHeight(bridgeBankLogProcessedAt, height)
}
func (ethRelayer *EthereumRelayer) getHeight4BridgeBankLogAt() uint64 {
func (ethRelayer *Relayer4Ethereum) getHeight4BridgeBankLogAt() uint64 {
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: height,
}
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)
if nil != err {
return 0
......@@ -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"))
}
//判断是否已经被处理,如果能够在数据库中找到该笔交易,则认为已经被处理
func (ethRelayer *EthereumRelayer) checkTxProcessed(txhash []byte) bool {
func (ethRelayer *Relayer4Ethereum) checkTxProcessed(txhash []byte) bool {
_, err := ethRelayer.db.Get(txhash)
if nil != err {
return false
}
return true
return nil == err
}
func (ethRelayer *EthereumRelayer) setEthTxEvent(vLog types.Log) error {
func (ethRelayer *Relayer4Ethereum) setEthTxEvent(vLog types.Log) error {
key := ethTxEventKey4Height(vLog.BlockNumber, uint32(vLog.TxIndex))
value, err := json.Marshal(vLog)
if nil != err {
......@@ -143,7 +138,7 @@ func (ethRelayer *EthereumRelayer) setEthTxEvent(vLog types.Log) error {
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)
data, err := ethRelayer.db.Get(key)
if nil != err {
......@@ -157,7 +152,7 @@ func (ethRelayer *EthereumRelayer) getEthTxEvent(blockNumber uint64, txIndex uin
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)
helper := dbm.NewListHelper(ethRelayer.db)
datas := helper.List(ethTxEventPrefix, key, fetchCnt, dbm.ListASC)
......@@ -177,14 +172,14 @@ func (ethRelayer *EthereumRelayer) getNextValidEthTxEventLogs(height uint64, ind
return logs, nil
}
func (ethRelayer *EthereumRelayer) setBridgeBankProcessedHeight(height uint64, index uint32) {
func (ethRelayer *Relayer4Ethereum) setBridgeBankProcessedHeight(height uint64, index uint32) {
bytes := chain33Types.Encode(&ebTypes.EventLogIndex{
Height: height,
Index: index})
_ = ethRelayer.db.Set(lastBridgeBankHeightProcPrefix, bytes)
}
func (ethRelayer *EthereumRelayer) getLastBridgeBankProcessedHeight() ebTypes.EventLogIndex {
func (ethRelayer *Relayer4Ethereum) getLastBridgeBankProcessedHeight() ebTypes.EventLogIndex {
data, err := ethRelayer.db.Get(lastBridgeBankHeightProcPrefix)
if nil != err {
return ebTypes.EventLogIndex{}
......@@ -195,7 +190,7 @@ func (ethRelayer *EthereumRelayer) getLastBridgeBankProcessedHeight() ebTypes.Ev
}
//构建一个引导查询使用的bridgeBankTx
func (ethRelayer *EthereumRelayer) initBridgeBankTx() {
func (ethRelayer *Relayer4Ethereum) initBridgeBankTx() {
log, _ := ethRelayer.getEthTxEvent(0, 0)
if nil != log {
return
......
......@@ -32,9 +32,9 @@ const (
EncryptEnable = int64(1)
)
type RelayerManager struct {
chain33Relayer *chain33.Chain33Relayer
ethRelayer *ethereum.EthereumRelayer
type Manager struct {
chain33Relayer *chain33.Relayer4Chain33
ethRelayer *ethereum.Relayer4Ethereum
store *Store
isLocked int32
mtx sync.Mutex
......@@ -47,9 +47,9 @@ type RelayerManager struct {
//1.验证人的私钥需要通过cli命令行进行导入,且chain33和ethereum两种不同的验证人需要分别导入
//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)
manager := &RelayerManager{
manager := &Manager{
chain33Relayer: chain33Relayer,
ethRelayer: ethRelayer,
store: NewStore(db),
......@@ -63,7 +63,7 @@ func NewRelayerManager(chain33Relayer *chain33.Chain33Relayer, ethRelayer *ether
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()
defer manager.mtx.Unlock()
// 新密码合法性校验
......@@ -135,7 +135,7 @@ func (manager *RelayerManager) SetPassphase(setPasswdReq relayerTypes.ReqSetPass
}
//进行unlok操作
func (manager *RelayerManager) Unlock(passphase string, result *interface{}) error {
func (manager *Manager) Unlock(passphase string, result *interface{}) error {
manager.mtx.Lock()
defer manager.mtx.Unlock()
if EncryptEnable != manager.encryptFlag {
......@@ -170,7 +170,7 @@ func (manager *RelayerManager) Unlock(passphase string, result *interface{}) err
}
//锁定操作,该操作一旦执行,就不能替换验证人的私钥,需要重新unlock之后才能修改
func (manager *RelayerManager) Lock(param interface{}, result *interface{}) error {
func (manager *Manager) Lock(param interface{}, result *interface{}) error {
manager.mtx.Lock()
defer manager.mtx.Unlock()
if err := manager.checkPermission(); nil != err {
......@@ -185,7 +185,7 @@ func (manager *RelayerManager) Lock(param interface{}, result *interface{}) erro
}
//导入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()
defer manager.mtx.Unlock()
privateKey := importKeyReq.PrivateKey
......@@ -194,7 +194,7 @@ func (manager *RelayerManager) ImportChain33RelayerPrivateKey(importKeyReq relay
}
_, err := manager.chain33Relayer.ImportPrivateKey(manager.passphase, privateKey)
if err != nil {
mlog.Error("ImportChain33ValidatorPrivateKey", "Failed due to casue:", err.Error())
mlog.Error("ImportChain33ValidatorPrivateKey", "Failed due to cause:", err.Error())
return err
}
......@@ -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()
defer manager.mtx.Unlock()
if err := manager.checkPermission(); nil != err {
......@@ -223,7 +223,7 @@ func (manager *RelayerManager) GenerateEthereumPrivateKey(param interface{}, res
}
//为ethrelayer导入chain33私钥,为向chain33发送交易时进行签名使用
func (manager *RelayerManager) ImportChain33PrivateKey4EthRelayer(privateKey string, result *interface{}) error {
func (manager *Manager) ImportChain33PrivateKey4EthRelayer(privateKey string, result *interface{}) error {
manager.mtx.Lock()
defer manager.mtx.Unlock()
if err := manager.checkPermission(); nil != err {
......@@ -240,7 +240,7 @@ func (manager *RelayerManager) ImportChain33PrivateKey4EthRelayer(privateKey str
}
//为ethrelayer导入chain33私钥,为向chain33发送交易时进行签名使用
func (manager *RelayerManager) ImportEthValidatorPrivateKey(privateKey string, result *interface{}) error {
func (manager *Manager) ImportEthValidatorPrivateKey(privateKey string, result *interface{}) error {
manager.mtx.Lock()
defer manager.mtx.Unlock()
if err := manager.checkPermission(); nil != err {
......@@ -257,7 +257,7 @@ func (manager *RelayerManager) ImportEthValidatorPrivateKey(privateKey string, r
}
//显示在chain33中以验证人validator身份进行登录的地址
func (manager *RelayerManager) ShowChain33RelayerValidator(param interface{}, result *interface{}) error {
func (manager *Manager) ShowChain33RelayerValidator(param interface{}, result *interface{}) error {
manager.mtx.Lock()
defer manager.mtx.Unlock()
var err error
......@@ -270,7 +270,7 @@ func (manager *RelayerManager) ShowChain33RelayerValidator(param interface{}, re
}
//显示在Ethereum中以验证人validator身份进行登录的地址
func (manager *RelayerManager) ShowEthRelayerValidator(param interface{}, result *interface{}) error {
func (manager *Manager) ShowEthRelayerValidator(param interface{}, result *interface{}) error {
manager.mtx.Lock()
defer manager.mtx.Unlock()
var err error
......@@ -281,7 +281,7 @@ func (manager *RelayerManager) ShowEthRelayerValidator(param interface{}, result
return nil
}
func (manager *RelayerManager) IsValidatorActive(vallidatorAddr string, result *interface{}) error {
func (manager *Manager) IsValidatorActive(vallidatorAddr string, result *interface{}) error {
manager.mtx.Lock()
defer manager.mtx.Unlock()
active, err := manager.ethRelayer.IsValidatorActive(vallidatorAddr)
......@@ -295,7 +295,7 @@ func (manager *RelayerManager) IsValidatorActive(vallidatorAddr string, result *
return nil
}
func (manager *RelayerManager) ShowOperator(param interface{}, result *interface{}) error {
func (manager *Manager) ShowOperator(param interface{}, result *interface{}) error {
manager.mtx.Lock()
defer manager.mtx.Unlock()
operator, err := manager.ethRelayer.ShowOperator()
......@@ -306,7 +306,7 @@ func (manager *RelayerManager) ShowOperator(param interface{}, result *interface
return nil
}
func (manager *RelayerManager) DeployContrcts(param interface{}, result *interface{}) error {
func (manager *Manager) DeployContrcts(param interface{}, result *interface{}) error {
manager.mtx.Lock()
defer manager.mtx.Unlock()
if err := manager.checkPermission(); nil != err {
......@@ -323,7 +323,7 @@ func (manager *RelayerManager) DeployContrcts(param interface{}, result *interfa
return nil
}
func (manager *RelayerManager) CreateBridgeToken(symbol string, result *interface{}) error {
func (manager *Manager) CreateBridgeToken(symbol string, result *interface{}) error {
manager.mtx.Lock()
defer manager.mtx.Unlock()
if err := manager.checkPermission(); nil != err {
......@@ -335,12 +335,12 @@ func (manager *RelayerManager) CreateBridgeToken(symbol string, result *interfac
}
*result = relayerTypes.ReplyAddr{
IsOK: true,
Addr: fmt.Sprintf("%s", tokenAddr),
Addr: tokenAddr,
}
return nil
}
func (manager *RelayerManager) CreateERC20Token(symbol string, result *interface{}) error {
func (manager *Manager) CreateERC20Token(symbol string, result *interface{}) error {
manager.mtx.Lock()
defer manager.mtx.Unlock()
if err := manager.checkPermission(); nil != err {
......@@ -352,12 +352,12 @@ func (manager *RelayerManager) CreateERC20Token(symbol string, result *interface
}
*result = relayerTypes.ReplyAddr{
IsOK: true,
Addr: fmt.Sprintf("%s", tokenAddr),
Addr: tokenAddr,
}
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()
defer manager.mtx.Unlock()
if err := manager.checkPermission(); nil != err {
......@@ -374,7 +374,7 @@ func (manager *RelayerManager) MintErc20(mintToken relayerTypes.MintToken, resul
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()
defer manager.mtx.Unlock()
if err := manager.checkPermission(); nil != err {
......@@ -391,7 +391,7 @@ func (manager *RelayerManager) ApproveAllowance(approveAllowance relayerTypes.Ap
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()
defer manager.mtx.Unlock()
if err := manager.checkPermission(); nil != err {
......@@ -408,7 +408,7 @@ func (manager *RelayerManager) Burn(burn relayerTypes.Burn, result *interface{})
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()
defer manager.mtx.Unlock()
if err := manager.checkPermission(); nil != err {
......@@ -425,7 +425,7 @@ func (manager *RelayerManager) BurnAsync(burn relayerTypes.Burn, result *interfa
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()
defer manager.mtx.Unlock()
if err := manager.checkPermission(); nil != err {
......@@ -442,7 +442,7 @@ func (manager *RelayerManager) LockEthErc20AssetAsync(lockEthErc20Asset relayerT
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()
defer manager.mtx.Unlock()
if err := manager.checkPermission(); nil != err {
......@@ -459,7 +459,7 @@ func (manager *RelayerManager) LockEthErc20Asset(lockEthErc20Asset relayerTypes.
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()
defer manager.mtx.Unlock()
if err := manager.checkPermission(); nil != err {
......@@ -491,7 +491,7 @@ func (manager *RelayerManager) MakeNewProphecyClaim(newProphecyClaim relayerType
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()
defer manager.mtx.Unlock()
active, err := manager.ethRelayer.IsProphecyPending(claimID)
......@@ -504,7 +504,7 @@ func (manager *RelayerManager) IsProphecyPending(claimID [32]byte, result *inter
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()
defer manager.mtx.Unlock()
balance, err := manager.ethRelayer.GetBalance(balanceAddr.TokenAddr, balanceAddr.Owner)
......@@ -529,7 +529,7 @@ func (manager *RelayerManager) GetBalance(balanceAddr relayerTypes.BalanceAddr,
return nil
}
func (manager *RelayerManager) ShowBridgeBankAddr(para interface{}, result *interface{}) error {
func (manager *Manager) ShowBridgeBankAddr(para interface{}, result *interface{}) error {
manager.mtx.Lock()
defer manager.mtx.Unlock()
addr, err := manager.ethRelayer.ShowBridgeBankAddr()
......@@ -543,7 +543,7 @@ func (manager *RelayerManager) ShowBridgeBankAddr(para interface{}, result *inte
return nil
}
func (manager *RelayerManager) ShowBridgeRegistryAddr(para interface{}, result *interface{}) error {
func (manager *Manager) ShowBridgeRegistryAddr(para interface{}, result *interface{}) error {
manager.mtx.Lock()
defer manager.mtx.Unlock()
addr, err := manager.ethRelayer.ShowBridgeRegistryAddr()
......@@ -557,7 +557,7 @@ func (manager *RelayerManager) ShowBridgeRegistryAddr(para interface{}, result *
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()
defer manager.mtx.Unlock()
balance, err := manager.ethRelayer.ShowLockStatics(token.TokenAddr)
......@@ -579,7 +579,7 @@ func (manager *RelayerManager) ShowLockStatics(token relayerTypes.TokenStatics,
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()
defer manager.mtx.Unlock()
supply, err := manager.ethRelayer.ShowDepositStatics(token.TokenAddr)
......@@ -601,7 +601,7 @@ func (manager *RelayerManager) ShowDepositStatics(token relayerTypes.TokenStatic
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()
defer manager.mtx.Unlock()
addr, err := manager.ethRelayer.ShowTokenAddrBySymbol(token.TokenAddr)
......@@ -616,7 +616,7 @@ func (manager *RelayerManager) ShowTokenAddrBySymbol(token relayerTypes.TokenSta
return nil
}
func (manager *RelayerManager) ShowTxReceipt(txhash string, result *interface{}) error {
func (manager *Manager) ShowTxReceipt(txhash string, result *interface{}) error {
manager.mtx.Lock()
defer manager.mtx.Unlock()
receipt, err := manager.ethRelayer.ShowTxReceipt(txhash)
......@@ -627,7 +627,7 @@ func (manager *RelayerManager) ShowTxReceipt(txhash string, result *interface{})
return nil
}
func (manager *RelayerManager) checkPermission() error {
func (manager *Manager) checkPermission() error {
if EncryptEnable != manager.encryptFlag {
return errors.New("pls set passphase first")
}
......@@ -637,54 +637,54 @@ func (manager *RelayerManager) checkPermission() error {
return nil
}
func (manager *RelayerManager) ShowEthRelayerStatus(param interface{}, result *interface{}) error {
func (manager *Manager) ShowEthRelayerStatus(param interface{}, result *interface{}) error {
manager.mtx.Lock()
defer manager.mtx.Unlock()
*result = manager.ethRelayer.GetRunningStatus()
return nil
}
func (manager *RelayerManager) ShowChain33RelayerStatus(param interface{}, result *interface{}) error {
func (manager *Manager) ShowChain33RelayerStatus(param interface{}, result *interface{}) error {
manager.mtx.Lock()
defer manager.mtx.Unlock()
*result = manager.chain33Relayer.GetRunningStatus()
return nil
}
func (manager *RelayerManager) ShowEthRelayer2EthTxs(param interface{}, result *interface{}) error {
func (manager *Manager) ShowEthRelayer2EthTxs(param interface{}, result *interface{}) error {
*result = manager.ethRelayer.QueryTxhashRelay2Eth()
return nil
}
func (manager *RelayerManager) ShowEthRelayer2Chain33Txs(param interface{}, result *interface{}) error {
func (manager *Manager) ShowEthRelayer2Chain33Txs(param interface{}, result *interface{}) error {
*result = manager.ethRelayer.QueryTxhashRelay2Chain33()
return nil
}
func (manager *RelayerManager) ShowChain33Relayer2EthTxs(param interface{}, result *interface{}) error {
func (manager *Manager) ShowChain33Relayer2EthTxs(param interface{}, result *interface{}) error {
*result = manager.chain33Relayer.QueryTxhashRelay2Eth()
return nil
}
func (manager *RelayerManager) ShowTxsEth2chain33TxLock(param interface{}, result *interface{}) error {
func (manager *Manager) ShowTxsEth2chain33TxLock(param interface{}, result *interface{}) error {
return nil
}
func (manager *RelayerManager) ShowTxsEth2chain33TxBurn(param interface{}, result *interface{}) error {
func (manager *Manager) ShowTxsEth2chain33TxBurn(param interface{}, result *interface{}) error {
return nil
}
func (manager *RelayerManager) ShowTxsChain33ToEthTxLock(param interface{}, result *interface{}) error {
func (manager *Manager) ShowTxsChain33ToEthTxLock(param interface{}, result *interface{}) error {
return nil
}
func (manager *RelayerManager) ShowTxsChain33ToEthTxBurn(param interface{}, result *interface{}) error {
func (manager *Manager) ShowTxsChain33ToEthTxBurn(param interface{}, result *interface{}) error {
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()
defer manager.mtx.Unlock()
txhash, err := manager.ethRelayer.TransferToken(transfer.TokenAddr, transfer.FromKey, transfer.ToAddr, transfer.Amount)
......@@ -698,36 +698,31 @@ func (manager *RelayerManager) TransferToken(transfer relayerTypes.TransferToken
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 {
mlog.Info("GetDecimals", "from cache", d)
return d.(int64), nil
} else {
if d, err := manager.store.Get(utils.CalAddr2DecimalsPrefix(tokenAddr)); err == nil {
decimal, err := strconv.ParseInt(string(d), 10, 64)
if err != nil {
return 0, err
}
manager.decimalLru.Add(tokenAddr, decimal)
mlog.Info("GetDecimals", "from DB", d)
return decimal, nil
}
} else {
d, err := manager.ethRelayer.GetDecimals(tokenAddr)
if err != nil {
return 0, err
}
if d, err := manager.store.Get(utils.CalAddr2DecimalsPrefix(tokenAddr)); err == nil {
decimal, err := strconv.ParseInt(string(d), 10, 64)
if err != nil {
return 0, err
}
manager.decimalLru.Add(tokenAddr, decimal)
mlog.Info("GetDecimals", "from DB", d)
_ = manager.store.Set(utils.CalAddr2DecimalsPrefix(tokenAddr), []byte(strconv.FormatInt(int64(d), 10)))
return decimal, nil
}
manager.decimalLru.Add(tokenAddr, int64(d))
d, err := manager.ethRelayer.GetDecimals(tokenAddr)
if err != nil {
return 0, err
}
_ = manager.store.Set(utils.CalAddr2DecimalsPrefix(tokenAddr), []byte(strconv.FormatInt(int64(d), 10)))
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 (
)
const (
keyAccount = "Account"
keyAddr = "Addr"
keyLabel = "Label"
keyTx = "Tx"
keyEncryptionFlag = "Encryption"
keyEncryptionCompFlag = "EncryptionFlag" // 中间有一段时间运行了一个错误的密码版本,导致有部分用户信息发生错误,需要兼容下
keyPasswordHash = "PasswordHash"
keyWalletSeed = "walletseed"
keyAirDropIndex = "AirDropIndex" //存储通过seed生成的空投地址信息
)
// CalcEncryptionFlag 加密标志Key
......
......@@ -84,7 +84,7 @@ func LoadInt64FromDB(key []byte, db dbm.DB) (int64, error) {
func QueryTxhashes(prefix []byte, db dbm.DB) []string {
kvdb := dbm.NewKVDB(db)
hashes, err := kvdb.List([]byte(prefix), nil, 10, 1)
hashes, err := kvdb.List(prefix, nil, 10, 1)
if nil != err {
return nil
}
......
......@@ -170,14 +170,14 @@ func (x *suiteX2Ethereum) Test_4_Eth2Chain33() {
payload := &types2.Eth2Chain33{
EthereumChainID: 0,
BridgeContractAddress: bridgeContractAddress,
Nonce: 0,
IssuerDotSymbol: symbol,
TokenContractAddress: tokenContractAddress,
EthereumSender: ethereumAddr,
Chain33Receiver: chain33Receiver,
ValidatorAddress: addValidator1,
Amount: "10",
ClaimType: int64(types2.LockClaimType),
Nonce: 0,
IssuerDotSymbol: symbol,
TokenContractAddress: tokenContractAddress,
EthereumSender: ethereumAddr,
Chain33Receiver: chain33Receiver,
ValidatorAddress: addValidator1,
Amount: "10",
ClaimType: int64(types2.LockClaimType),
}
receipt, err := x.action.procEth2Chain33_lock(payload)
......
......@@ -92,18 +92,18 @@ func (a *action) procEth2Chain33_lock(ethBridgeClaim *x2eTy.Eth2Chain33) (*types
execlog := &types.ReceiptLog{Ty: x2eTy.TyEth2Chain33Log, Log: types.Encode(&x2eTy.ReceiptEth2Chain33{
EthereumChainID: ethBridgeClaim.EthereumChainID,
BridgeContractAddress: ethBridgeClaim.BridgeContractAddress,
Nonce: ethBridgeClaim.Nonce,
IssuerDotSymbol: ethBridgeClaim.IssuerDotSymbol,
EthereumSender: ethBridgeClaim.EthereumSender,
Chain33Receiver: ethBridgeClaim.Chain33Receiver,
ValidatorAddress: ethBridgeClaim.ValidatorAddress,
Amount: ethBridgeClaim.Amount,
ClaimType: ethBridgeClaim.ClaimType,
XTxHash: a.txhash,
XHeight: uint64(a.height),
ProphecyID: ID,
Decimals: ethBridgeClaim.Decimals,
TokenAddress: ethBridgeClaim.TokenContractAddress,
Nonce: ethBridgeClaim.Nonce,
IssuerDotSymbol: ethBridgeClaim.IssuerDotSymbol,
EthereumSender: ethBridgeClaim.EthereumSender,
Chain33Receiver: ethBridgeClaim.Chain33Receiver,
ValidatorAddress: ethBridgeClaim.ValidatorAddress,
Amount: ethBridgeClaim.Amount,
ClaimType: ethBridgeClaim.ClaimType,
XTxHash: a.txhash,
XHeight: uint64(a.height),
ProphecyID: ID,
Decimals: ethBridgeClaim.Decimals,
TokenAddress: ethBridgeClaim.TokenContractAddress,
})}
receipt.Logs = append(receipt.Logs, execlog)
......@@ -251,18 +251,18 @@ func (a *action) procEth2Chain33_burn(withdrawEth *x2eTy.Eth2Chain33) (*types.Re
execlog := &types.ReceiptLog{Ty: x2eTy.TyWithdrawEthLog, Log: types.Encode(&x2eTy.ReceiptEth2Chain33{
EthereumChainID: withdrawEth.EthereumChainID,
BridgeContractAddress: withdrawEth.BridgeContractAddress,
Nonce: withdrawEth.Nonce,
IssuerDotSymbol: withdrawEth.IssuerDotSymbol,
EthereumSender: withdrawEth.EthereumSender,
Chain33Receiver: withdrawEth.Chain33Receiver,
ValidatorAddress: withdrawEth.ValidatorAddress,
Amount: withdrawEth.Amount,
ClaimType: withdrawEth.ClaimType,
XTxHash: a.txhash,
XHeight: uint64(a.height),
ProphecyID: ID,
Decimals: withdrawEth.Decimals,
TokenAddress: withdrawEth.TokenContractAddress,
Nonce: withdrawEth.Nonce,
IssuerDotSymbol: withdrawEth.IssuerDotSymbol,
EthereumSender: withdrawEth.EthereumSender,
Chain33Receiver: withdrawEth.Chain33Receiver,
ValidatorAddress: withdrawEth.ValidatorAddress,
Amount: withdrawEth.Amount,
ClaimType: withdrawEth.ClaimType,
XTxHash: a.txhash,
XHeight: uint64(a.height),
ProphecyID: ID,
Decimals: withdrawEth.Decimals,
TokenAddress: withdrawEth.TokenContractAddress,
})}
receipt.Logs = append(receipt.Logs, execlog)
......
#!/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