You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Open-IM-Server/internal/rpc/redpacket/chain/parser_test.go

79 lines
2.3 KiB

package chain
import (
"math/big"
"strings"
"testing"
"github.com/ethereum/go-ethereum/accounts/abi"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/core/types"
)
func TestParseEventsFromLogs_ParsesRefundEvent(t *testing.T) {
abiJSON, err := ExtractABIFromEmbeddedArtifact()
if err != nil {
t.Fatalf("ExtractABIFromEmbeddedArtifact() error = %v", err)
}
parsedABI, err := abi.JSON(strings.NewReader(string(abiJSON)))
if err != nil {
t.Fatalf("abi.JSON() error = %v", err)
}
eventDef := parsedABI.Events["PacketRefunded"]
packetID := big.NewInt(101)
operator := common.HexToAddress("0x1111111111111111111111111111111111111111")
refundTo := common.HexToAddress("0x2222222222222222222222222222222222222222")
amount := big.NewInt(8888)
data, err := eventDef.Inputs.NonIndexed().Pack(amount)
if err != nil {
t.Fatalf("Pack() error = %v", err)
}
log := &types.Log{
Address: common.HexToAddress("0x3333333333333333333333333333333333333333"),
Topics: []common.Hash{
eventDef.ID,
common.BigToHash(packetID),
common.BytesToHash(common.LeftPadBytes(operator.Bytes(), 32)),
common.BytesToHash(common.LeftPadBytes(refundTo.Bytes(), 32)),
},
Data: data,
BlockNumber: 77,
TxHash: common.HexToHash("0xabc"),
}
events, err := ParseEventsFromLogs([]*types.Log{log}, parsedABI)
if err != nil {
t.Fatalf("ParseEventsFromLogs() error = %v", err)
}
if len(events) != 1 {
t.Fatalf("expected 1 event, got %d", len(events))
}
event := events[0]
if event.Name != "PacketRefunded" {
t.Fatalf("unexpected event name: %s", event.Name)
}
if got := GetPacketIDFromEvent(event).String(); got != "101" {
t.Fatalf("packet id mismatch: got %s", got)
}
if got := GetAddressFromEvent(event, "operator").Hex(); got != operator.Hex() {
t.Fatalf("operator mismatch: got %s want %s", got, operator.Hex())
}
if got := GetAddressFromEvent(event, "refundTo").Hex(); got != refundTo.Hex() {
t.Fatalf("refundTo mismatch: got %s want %s", got, refundTo.Hex())
}
if got := GetAmountFromEvent(event).String(); got != "8888" {
t.Fatalf("amount mismatch: got %s", got)
}
if event.BlockNumber != 77 {
t.Fatalf("block number mismatch: got %d", event.BlockNumber)
}
if event.TxHash != common.HexToHash("0xabc") {
t.Fatalf("tx hash mismatch: got %s", event.TxHash.Hex())
}
}