github.com/fff-chain/go-fff@v0.0.0-20220726032732-1c84420b8a99/consensus/parlia/token/token_test.go (about)

     1  package token
     2  
     3  import (
     4  	"context"
     5  	"github.com/fff-chain/go-fff/accounts/abi/bind"
     6  	"github.com/fff-chain/go-fff/common"
     7  	"github.com/fff-chain/go-fff/crypto"
     8  	"github.com/fff-chain/go-fff/ethclient"
     9  	"github.com/fff-chain/go-fff/global_config"
    10  	"github.com/fff-chain/go-fff/global_config/wallet"
    11  	"log"
    12  	"math/big"
    13  	"testing"
    14  )
    15  
    16  func TestDeployBEP20USDT(t *testing.T) { //发布代币
    17  
    18  	d, _ := ethclient.Dial("http://87.118.86.2:8488")
    19  
    20  	pri := "20a442166fda1598b32d85d0cf5b30fe5867bf23c943f8584013eab0ad49a88c"
    21  
    22  	priKeyECD, err := crypto.HexToECDSA(pri)
    23  
    24  	ownerAddress := wallet.GetPublicAddressFromKey(pri)
    25  
    26  	if err != nil {
    27  		log.Println("私钥异常")
    28  
    29  	}
    30  	chianId, err := d.ChainID(context.Background())
    31  	if err != nil {
    32  		log.Println("节点chianId异常", err)
    33  
    34  	}
    35  	param, err := bind.NewKeyedTransactorWithChainID(priKeyECD, chianId)
    36  	if err != nil {
    37  		log.Println("节点Transactor异常", err)
    38  
    39  	}
    40  
    41  	addr, _, _, _ := DeployBEP20USDT(param, d," EUR Stable Coin Cryptocurrency","EURco",global_config.EthToWei(100_0000_0000),"http://87.118.86.2:6001/dmc.png")
    42  
    43  	log.Println(addr, ownerAddress)
    44  
    45  }
    46  
    47  func TestErc20Transfer(t *testing.T) { //代币转账
    48  
    49  	d, _ := ethclient.Dial("http://87.118.86.2:8488")
    50  
    51  	pri := "20a442166fda1598b32d85d0cf5b30fe5867bf23c943f8584013eab0ad49a88c"
    52  
    53  	priKeyECD, err := crypto.HexToECDSA(pri)
    54  
    55  	if err != nil {
    56  		log.Println("私钥异常")
    57  
    58  	}
    59  	chianId, err := d.ChainID(context.Background())
    60  	if err != nil {
    61  		log.Println("节点chianId异常", err)
    62  
    63  	}
    64  	param, err := bind.NewKeyedTransactorWithChainID(priKeyECD, chianId)
    65  	if err != nil {
    66  		log.Println("节点Transactor异常", err)
    67  
    68  	}
    69  
    70  
    71  
    72  
    73  
    74  
    75  
    76  	tokenContract := common.HexToAddress("FFF3TKXUqGcZ8wnFi5RGVMXSkrujbWzWAmXnWtvQSQSRnMS9kNpMCx7ig8")
    77  
    78  	tokenTransact, err := NewBEP20USDTTransactor(tokenContract, d)
    79  	if err != nil {
    80  		log.Println("节点Transactor异常", err)
    81  
    82  	}
    83  
    84  	ts, err := tokenTransact.Transfer(param, common.HexToAddress("FFF3rPN3k7M1EASWb6QU1QvJHXmrUGhPF8QS5U7hpDfkoWwGyb6aBoZhD1"), global_config.EthToWei(1))
    85  
    86  	if err != nil {
    87  		log.Println("节点Transactor异常", err)
    88  
    89  	}
    90  
    91  	log.Println(ts.Hash())
    92  
    93  }
    94  func TestGetErc20ContractInfo(t *testing.T) { //获取代币信息
    95  
    96  	d, _ := ethclient.Dial("http://87.118.86.2:8488")
    97  
    98  	ctAddress:=common.HexToAddress("FFF3bU7YUTH4Pn6PqvzxZ5GeVHDWJwKYngkVX4CsCQUBqs9q8SjVgLE473")
    99  
   100  	cl,_:=NewBEP20USDTCaller(ctAddress,d)
   101  
   102  	name,_:=cl.Name(nil)
   103  
   104  	log.Println("代币全民",name)
   105  
   106  	symbol,_:=cl.Symbol(nil)
   107  
   108  	log.Println("代币简称",symbol)
   109  
   110  	Decimals,_:=cl.Decimals(nil)
   111  
   112  	log.Println("代币精度",Decimals)
   113  
   114  	total,_:=cl.TotalSupply(nil)
   115  
   116  	log.Println("代币总流通",total)
   117  
   118  
   119  	bl,_:=cl.BalanceOf(nil,common.HexToAddress("FFF3nx7A1Coqe5shVeQzSbC5TruewaDkWVScqrsES2dB8FsJtfcYDCvJ6c"))
   120  
   121  	log.Println(global_config.WeiToEth(bl))
   122  
   123  
   124  	log.Println(d.PendingBalanceAt(context.Background(),common.HexToAddress("FFF3nx7A1Coqe5shVeQzSbC5TruewaDkWVScqrsES2dB8FsJtfcYDCvJ6c")))
   125  
   126  }
   127  func TestGetErc20Transaction(t *testing.T) { //获取每个交易中包含的代币交易
   128  
   129  	d, _ := ethclient.Dial("http://87.118.86.2:8488")
   130  
   131  	log.Println(getTransactionErc20Transactions(d, "0xa6438cfe68f349743b9d7ed85df14510bea7938f36a7b1b467a124d1a6efbbbf"))
   132  
   133  }
   134  
   135  type Erc20Transaction struct {
   136  	From            common.Address
   137  	To              common.Address
   138  	Value           *big.Int
   139  	ContractAddress common.Address
   140  }
   141  
   142  func getTransactionErc20Transactions(d *ethclient.Client, tsHash string) []Erc20Transaction {
   143  	var erc20Ts []Erc20Transaction
   144  	rc, err := d.TransactionReceipt(context.Background(), common.HexToHash(tsHash))
   145  	if err != nil {
   146  
   147  		log.Println(err)
   148  		return erc20Ts
   149  	}
   150  	logs := rc.Logs
   151  
   152  	var ercTransferHash = common.HexToHash("0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef")
   153  	for k := range logs {
   154  
   155  		topics := logs[k].Topics
   156  
   157  		if len(topics) > 2 && topics[0].Hex() == ercTransferHash.Hex() { //判断是不是ERC20转账
   158  
   159  			newTrans := new(Erc20Transaction)
   160  			newTrans.From = common.BytesToAddress(topics[1].Bytes())
   161  			newTrans.To = common.BytesToAddress(topics[2].Bytes())
   162  			newTrans.Value = new(big.Int).SetBytes(logs[k].Data)
   163  			newTrans.ContractAddress = logs[k].Address
   164  			erc20Ts = append(erc20Ts, *newTrans)
   165  		}
   166  
   167  	}
   168  
   169  	return erc20Ts
   170  
   171  }