/
ethbridgeclaim.go
80 lines (68 loc) · 2.53 KB
/
ethbridgeclaim.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
package types
import (
"encoding/json"
"fmt"
"strconv"
"github.com/cosmos/cosmos-sdk/codec"
sdk "github.com/cosmos/cosmos-sdk/types"
)
type EthBridgeClaim struct {
Nonce int `json:"nonce"`
EthereumSender string `json:"ethereum_sender"`
CosmosReceiver sdk.AccAddress `json:"cosmos_receiver"`
Validator sdk.AccAddress `json:"validator"`
Amount sdk.Coins `json:"amount"`
}
// NewEthBridgeClaim is a constructor function for NewEthBridgeClaim
func NewEthBridgeClaim(nonce int, ethereumSender string, cosmosReceiver sdk.AccAddress, validator sdk.AccAddress, amount sdk.Coins) EthBridgeClaim {
return EthBridgeClaim{
Nonce: nonce,
EthereumSender: ethereumSender,
CosmosReceiver: cosmosReceiver,
Validator: validator,
Amount: amount,
}
}
//OracleClaim is the details of how the claim for each validator will be stored in the oracle
type OracleClaim struct {
CosmosReceiver sdk.AccAddress `json:"cosmos_receiver"`
Amount sdk.Coins `json:"amount"`
}
// NewOracleClaim is a constructor function for OracleClaim
func NewOracleClaim(cosmosReceiver sdk.AccAddress, amount sdk.Coins) OracleClaim {
return OracleClaim{
CosmosReceiver: cosmosReceiver,
Amount: amount,
}
}
func CreateOracleClaimFromEthClaim(cdc *codec.Codec, ethClaim EthBridgeClaim) (string, sdk.ValAddress, string) {
oracleId := strconv.Itoa(ethClaim.Nonce) + ethClaim.EthereumSender
claimContent := NewOracleClaim(ethClaim.CosmosReceiver, ethClaim.Amount)
claimBytes, _ := json.Marshal(claimContent)
claim := string(claimBytes)
validator := sdk.ValAddress(ethClaim.Validator)
return oracleId, validator, claim
}
func CreateEthClaimFromOracleString(nonce int, ethereumSender string, validator sdk.ValAddress, oracleClaimString string) (EthBridgeClaim, sdk.Error) {
oracleClaim, err := CreateOracleClaimFromOracleString(oracleClaimString)
if err != nil {
return EthBridgeClaim{}, err
}
valAccAddress := sdk.AccAddress(validator)
return NewEthBridgeClaim(
nonce,
ethereumSender,
oracleClaim.CosmosReceiver,
valAccAddress,
oracleClaim.Amount,
), nil
}
func CreateOracleClaimFromOracleString(oracleClaimString string) (OracleClaim, sdk.Error) {
var oracleClaim OracleClaim
stringBytes := []byte(oracleClaimString)
errRes := json.Unmarshal(stringBytes, &oracleClaim)
if errRes != nil {
return OracleClaim{}, sdk.ErrInternal(fmt.Sprintf("failed to parse claim: %s", errRes))
}
return oracleClaim, nil
}