-
Notifications
You must be signed in to change notification settings - Fork 11
/
utils.go
88 lines (77 loc) · 2.28 KB
/
utils.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
package mainchain
import (
"context"
"encoding/json"
"errors"
"fmt"
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/ethereum/go-ethereum/accounts/abi/bind"
ethtypes "github.com/ethereum/go-ethereum/core/types"
"github.com/ethereum/go-ethereum/crypto"
"github.com/ethereum/go-ethereum/ethclient"
)
var (
ErrPeersNotMatch = errors.New("channel peers not match")
)
func IsBonded(dposCandidateInfo DPoSCandidateInfo) bool {
return dposCandidateInfo.Status.Uint64() == Bonded
}
func ParseStatus(dposCandidateInfo DPoSCandidateInfo) sdk.BondStatus {
switch dposCandidateInfo.Status.Uint64() {
case Bonded:
return sdk.Bonded
case Unbonding:
return sdk.Unbonding
case Unbonded:
return sdk.Unbonded
}
return sdk.Unbonded
}
// GetEventSignature accepts the string of an event signature and return the hex
func GetEventSignature(eventSigStr string) HashType {
return crypto.Keccak256Hash([]byte(eventSigStr))
}
// GetTxSender returns the sender address of the given transaction
func GetTxSender(ec *ethclient.Client, txHashStr string) (string, error) {
tx, _, err := ec.TransactionByHash(context.Background(), Hex2Hash(txHashStr))
if err != nil {
return "", fmt.Errorf("Failed to get tx: %w", err)
}
msg, err := tx.AsMessage(ethtypes.NewEIP155Signer(tx.ChainId()))
if err != nil {
return "", fmt.Errorf("Failed to get msg: %w", err)
}
return Addr2Hex(msg.From()), nil
}
func GetAddressFromKeystore(ksBytes []byte) (string, error) {
type ksStruct struct {
Address string
}
var ks ksStruct
if err := json.Unmarshal(ksBytes, &ks); err != nil {
return "", err
}
return ks.Address, nil
}
// GetSimplexSeqNum get the mainchain simplex seqNum
func GetSimplexSeqNum(
ledger *CelerLedger, cid CidType,
simplexSender, simplexReceiver Addr) (seqNum uint64, err error) {
addrs, seqNums, err := ledger.GetStateSeqNumMap(&bind.CallOpts{}, cid)
if err != nil {
return 0, fmt.Errorf("GetStateSeqNumMap err: %w", err)
}
seqIndex := 0
var match bool
if simplexSender == addrs[0] {
match = (simplexReceiver == addrs[1])
} else if simplexSender == addrs[1] {
match = (simplexReceiver == addrs[0])
seqIndex = 1
}
if !match {
return 0, fmt.Errorf("%w: cid %x, sender %x, receiver %x",
ErrPeersNotMatch, cid, simplexSender, simplexReceiver)
}
return seqNums[seqIndex].Uint64(), nil
}