Skip to content

Commit df55345

Browse files
committed
merge with main
2 parents 80ac8c6 + d0c6318 commit df55345

12 files changed

+521
-164
lines changed

config/config.go

+14
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ package config
33
import (
44
"encoding/json"
55
"io/ioutil"
6+
7+
"github.com/Gravity-Tech/gravity-node-data-extractor/v2/extractors/susy/bridge"
68
)
79

810
const (
@@ -21,6 +23,18 @@ type MainConfig struct {
2123
Meta map[string]string
2224
}
2325

26+
func (cfg *MainConfig) IntoBridge() bridge.ConfigureCommand {
27+
return bridge.ConfigureCommand {
28+
LUPortAddress: cfg.LUPortAddress,
29+
IBPortAddress: cfg.IBPortAddress,
30+
SourceNodeUrl: cfg.SourceNodeURL,
31+
DestinationNodeUrl: cfg.DestinationNodeURL,
32+
SourceDecimals: cfg.SourceDecimals,
33+
DestinationDecimals: cfg.DestinationDecimals,
34+
Meta: cfg.Meta,
35+
}
36+
}
37+
2438
func ParseMainConfig(confName string) (*MainConfig, error) {
2539
configName := MainConfigFile
2640
if confName != "" {

extractors/susy/bridge/solana.go extractors/susy/bridge/evm_solana.go

+39-51
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,15 @@ import (
1919
solclient "github.com/portto/solana-go-sdk/client"
2020
)
2121

22-
type SolanaExtractionProvider struct{}
22+
// type SolanaExtractionProvider struct{}
23+
type SolanaExtractionProvider int
24+
25+
func (provider SolanaExtractionProvider) Build (isDirect bool) ChainExtractionBridge {
26+
if isDirect {
27+
return &EthereumToSolanaExtractionBridge{}
28+
}
29+
return &SolanaToEVMExtractionBridge{}
30+
}
2331

2432
type EthereumToSolanaExtractionBridge struct {
2533
config ConfigureCommand
@@ -32,7 +40,6 @@ type EthereumToSolanaExtractionBridge struct {
3240

3341
solanaClient *solclient.Client
3442
solanaCtx context.Context
35-
// solanaExecutor *solexecutor.GenericExecutor
3643

3744
IBPortDataAccount string
3845
}
@@ -60,10 +67,6 @@ func (provider *EthereumToSolanaExtractionBridge) Configure(config ConfigureComm
6067

6168
provider.IBPortDataAccount = config.IBPortAddress
6269

63-
// provider.solanaExecutor, err = solcommand.InitGenericExecutor(
64-
65-
// )
66-
6770
return nil
6871
}
6972

@@ -97,10 +100,6 @@ func (provider *EthereumToSolanaExtractionBridge) pickRequestFromQueue(luState *
97100
* on smart contracts (ports) does not have additional
98101
* confirmation tx, we should check just for the existence of the swap with that id
99102
*/
100-
//if ibRequest := ibState.Request(wavesRequestId); ibRequest != nil && Status(ibRequest.Status) == CompletedStatus {
101-
// if ibRequest := ibState.Request(wavesRequestId); ibRequest != nil && Status(ibRequest.Status) != CompletedStatus {
102-
// continue
103-
// }
104103
var requestIdFixed SwapID
105104

106105
// validate target address
@@ -115,29 +114,29 @@ func (provider *EthereumToSolanaExtractionBridge) pickRequestFromQueue(luState *
115114
continue
116115
}
117116

118-
fmt.Printf("lu: %+v \n", luRequest)
117+
// fmt.Printf("lu: %+v \n", luRequest)
119118
copy(requestIdFixed[:], rqIdInt.Bytes()[0:16])
120119

121-
fmt.Printf("requestIdFixed: %v \n", requestIdFixed)
120+
// fmt.Printf("requestIdFixed: %v \n", requestIdFixed)
122121

123122
ibRequestStatus := ibState.SwapStatusDict[requestIdFixed]
124123

125-
fmt.Printf("RQ: %v; IB status: %v \n", requestIdFixed, ibRequestStatus)
124+
// fmt.Printf("RQ: %v; IB status: %v \n", requestIdFixed, ibRequestStatus)
126125

127-
if ibRequestStatus != nil {
128-
fmt.Printf("IB status(unwrapped): %v \n", *ibRequestStatus)
129-
} else {
130-
fmt.Printf("LU request: %+v \n", luRequest)
131-
fmt.Printf("IB status == nil: %v \n", requestIdFixed)
132-
}
126+
// if ibRequestStatus != nil {
127+
// fmt.Printf("IB status(unwrapped): %v \n", *ibRequestStatus)
128+
// } else {
129+
// fmt.Printf("LU request: %+v \n", luRequest)
130+
// fmt.Printf("IB status == nil: %v \n", requestIdFixed)
131+
// }
133132

134133
if ibRequestStatus != nil && *ibRequestStatus == EthereumRequestStatusSuccess {
135134
continue
136135
}
137136

138-
fmt.Printf("Solana Address: %v \n", base58.Encode(luRequest.ForeignAddress[0:32]))
137+
// fmt.Printf("Solana Address: %v \n", base58.Encode(luRequest.ForeignAddress[0:32]))
139138
if !ValidateSolanaAddress(base58.Encode(luRequest.ForeignAddress[0:32])) {
140-
fmt.Printf("swap_id: %v; solana address is invalid \n", requestIdFixed)
139+
// fmt.Printf("swap_id: %v; solana address is invalid \n", requestIdFixed)
141140
continue
142141
}
143142

@@ -147,12 +146,12 @@ func (provider *EthereumToSolanaExtractionBridge) pickRequestFromQueue(luState *
147146
provider.config.Meta,
148147
)
149148
if tokenDataErr != nil || !isTokenDataAccountPassed {
150-
fmt.Printf("swap_id: %v; tokenDataErr: %v \n", requestIdFixed, tokenDataErr)
149+
// fmt.Printf("swap_id: %v; tokenDataErr: %v \n", requestIdFixed, tokenDataErr)
151150
continue
152151
}
153152

154153
if luRequest.Amount.Uint64() == 0 {
155-
fmt.Printf("swap_id: %v; amount is zero \n", requestIdFixed)
154+
// fmt.Printf("swap_id: %v; amount is zero \n", requestIdFixed)
156155
continue
157156
}
158157

@@ -172,22 +171,12 @@ func (provider *EthereumToSolanaExtractionBridge) pickRequestFromQueue(luState *
172171
return swapID, resultRqIdInt, nil
173172
}
174173

175-
func (provider *EthereumToSolanaExtractionBridge) IBPortState() (*IBPortContractState, error) {
176-
ibportStateResult, err := provider.solanaClient.GetAccountInfo(provider.solanaCtx, provider.IBPortDataAccount, solclient.GetAccountInfoConfig{
177-
Encoding: "base64",
178-
})
179-
if err != nil {
180-
return nil, err
181-
}
182-
183-
ibportState := ibportStateResult.Data.([]interface{})[0].(string)
184-
185-
stateDecoded, err := base64.StdEncoding.DecodeString(ibportState)
186-
if err != nil {
187-
return nil, err
188-
}
189-
190-
return DecodeIBPortState(stateDecoded), nil
174+
func (provider *EthereumToSolanaExtractionBridge) IBPortState() (*PortContractState, error) {
175+
return GetSolanaPortContractState(
176+
provider.solanaClient,
177+
provider.solanaCtx,
178+
provider.IBPortDataAccount,
179+
)
191180
}
192181

193182
func (provider *EthereumToSolanaExtractionBridge) requestSerializer(array []byte) string {
@@ -207,7 +196,6 @@ func (provider *EthereumToSolanaExtractionBridge) ExtractDirectTransferRequest(c
207196
if bytes.Equal(luRequestIds.First[:], make([]byte, 32)) {
208197
return nil, extractors.NotFoundErr
209198
}
210-
211199
if err != nil {
212200
return nil, err
213201
}
@@ -233,20 +221,20 @@ func (provider *EthereumToSolanaExtractionBridge) ExtractDirectTransferRequest(c
233221

234222
targetAmountCasted := float64(targetAmount) / float64(solanaDecimals.Uint64())
235223

236-
fmt.Printf("rqId[:]: %v \n", rqId[:])
237-
fmt.Printf("rqId(len): %v \n", len(rqId))
224+
// fmt.Printf("rqId[:]: %v \n", rqId[:])
225+
// fmt.Printf("rqId(len): %v \n", len(rqId))
238226

239-
fmt.Printf("luRequest.ForeignAddress: %v \n", luRequest.ForeignAddress)
240-
fmt.Printf("luRequest.ForeignAddress: %v \n", base58.Encode(luRequest.ForeignAddress[:]))
227+
// fmt.Printf("luRequest.ForeignAddress: %v \n", luRequest.ForeignAddress)
228+
// fmt.Printf("luRequest.ForeignAddress: %v \n", base58.Encode(luRequest.ForeignAddress[:]))
241229

242-
fmt.Printf("targetAmount: %v \n", targetAmount)
243-
fmt.Printf("targetAmountCasted: %v \n", targetAmountCasted)
230+
// fmt.Printf("targetAmount: %v \n", targetAmount)
231+
// fmt.Printf("targetAmountCasted: %v \n", targetAmountCasted)
244232

245233
var resultByteVector [64]byte
246234
copy(resultByteVector[:], solexecutor.BuildCrossChainMintByteVector(rqId[:], luRequest.ForeignAddress, targetAmountCasted))
247235

248236
// fmt.Printf("result byte string: %v \n", provider.requestSerializer(resultByteVector[:]))
249-
fmt.Printf("result byte string(len): %v \n", len(resultByteVector))
237+
// fmt.Printf("result byte string(len): %v \n", len(resultByteVector))
250238

251239
return &extractors.Data{
252240
Type: extractors.Base64,
@@ -261,7 +249,7 @@ func (provider *EthereumToSolanaExtractionBridge) ExtractReverseTransferRequest(
261249
}
262250

263251
var rqSwapID SwapID
264-
var reverseRequest *IBPortContractUnwrapRequest
252+
var reverseRequest *PortContractUnwrapRequest
265253

266254
for swapID, burnRequest := range ibState.RequestsDict {
267255
status := ibState.SwapStatusDict[swapID]
@@ -317,7 +305,7 @@ func (provider *EthereumToSolanaExtractionBridge) ExtractReverseTransferRequest(
317305

318306
amount := MapAmount(int64(reverseRequest.Amount), provider.config.DestinationDecimals, provider.config.SourceDecimals)
319307

320-
fmt.Printf("amount mapped: %v \n", amount)
308+
// fmt.Printf("amount mapped: %v \n", amount)
321309

322310
var rqIDBytes [32]byte
323311
copy(rqIDBytes[:], rqSwapID[:])
@@ -330,8 +318,8 @@ func (provider *EthereumToSolanaExtractionBridge) ExtractReverseTransferRequest(
330318

331319
result := BuildForEVMByteArray('u', rqIDBytes, amountBytes, evmReceiver)
332320

333-
fmt.Printf("result byte string: %v \n", provider.requestSerializer(result[:]))
334-
fmt.Printf("result byte string(len): %v \n", len(result))
321+
// fmt.Printf("result byte string: %v \n", provider.requestSerializer(result[:]))
322+
// fmt.Printf("result byte string(len): %v \n", len(result))
335323

336324
return &extractors.Data{
337325
Type: extractors.Base64,

extractors/susy/bridge/solana_bytes.go

+8-21
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ func unwrapSwapIds(encoded []byte, count int) []SwapID {
5959
return result
6060
}
6161

62-
func decodeUnwrapRequest(encoded []byte) (*IBPortContractUnwrapRequest, int) {
62+
func decodeUnwrapRequest(encoded []byte) (*PortContractUnwrapRequest, int) {
6363
var internalOffset int
6464

6565
destination := encoded[internalOffset:internalOffset + 32]
@@ -72,24 +72,24 @@ func decodeUnwrapRequest(encoded []byte) (*IBPortContractUnwrapRequest, int) {
7272

7373
internalOffset += 8
7474

75-
return &IBPortContractUnwrapRequest{
75+
return &PortContractUnwrapRequest{
7676
OriginAddress: origin,
7777
ForeignAddress: destination,
7878
Amount: amount,
7979
}, internalOffset
8080
}
8181

82-
type IBPortContractUnwrapRequest struct {
82+
type PortContractUnwrapRequest struct {
8383
OriginAddress [32]byte
8484
ForeignAddress []byte
8585
Amount uint64
8686
}
8787

8888
type SwapID [16]byte
8989
type SwapStatusDict map[SwapID]*uint8
90-
type SwapRequestsDict map[SwapID]*IBPortContractUnwrapRequest
90+
type SwapRequestsDict map[SwapID]*PortContractUnwrapRequest
9191

92-
type IBPortContractState struct {
92+
type PortContractState struct {
9393
NebulaAddress solcommon.PublicKey
9494
TokenBinary solcommon.PublicKey
9595
TokenMint solcommon.PublicKey
@@ -112,21 +112,15 @@ func (swap *SwapID) AsBigInt() *big.Int {
112112
return n
113113
}
114114

115-
func DecodeIBPortState(decoded []byte) *IBPortContractState {
116-
// decoded, _ := base64.StdEncoding.DecodeString(encodedIBPortState)
117-
118-
// fmt.Println(decoded)
119-
115+
func DecodePortState(decoded []byte) *PortContractState {
120116
currentOffset := 0
121117
addressLength := 32
122118
swapIdLength := 16
123-
// lengthIndicatorLen := 4
124119

125120
var nebulaAddress [32]byte
126121
copy(nebulaAddress[:], decoded[currentOffset:currentOffset+addressLength])
127122

128123
currentOffset += addressLength
129-
130124

131125
var tokenBinaryAddress [32]byte
132126
copy(tokenBinaryAddress[:], decoded[currentOffset:currentOffset+addressLength])
@@ -135,8 +129,6 @@ func DecodeIBPortState(decoded []byte) *IBPortContractState {
135129
var tokenMint [32]byte
136130
copy(tokenMint[:], decoded[currentOffset:currentOffset+addressLength])
137131
currentOffset += addressLength
138-
139-
// fmt.Printf("tokenAddress: %v \n", base58.Encode(tokenAddress[:]))
140132

141133
var initializerAddress [32]byte
142134
copy(initializerAddress[:], decoded[currentOffset:currentOffset+addressLength])
@@ -164,8 +156,6 @@ func DecodeIBPortState(decoded []byte) *IBPortContractState {
164156
}
165157
}
166158

167-
// fmt.Printf("initializerAddress: %v \n", base58.Encode(initializerAddress[:]))
168-
169159
requestsCountBytes := decoded[currentOffset:currentOffset + 4]
170160
currentOffset += 4
171161
requestsCount := int(binary.LittleEndian.Uint32(requestsCountBytes))
@@ -181,12 +171,9 @@ func DecodeIBPortState(decoded []byte) *IBPortContractState {
181171
var swapId SwapID
182172

183173
copy(swapId[:], decoded[currentOffset + (requestIndex * swapIdLength):currentOffset + swapIdLength + (requestIndex * swapIdLength)])
184-
185-
// fmt.Printf("Swap ID: %v \n", swapId)
186-
174+
187175
status := decoded[swapStatusesOffset + int(requestIndex)]
188176

189-
// fmt.Printf("Status: %v \n", status)
190177
statusInt := uint8(status)
191178
swapsStatusDict[swapId] = &statusInt
192179

@@ -223,7 +210,7 @@ func DecodeIBPortState(decoded []byte) *IBPortContractState {
223210
// fmt.Printf("requestsDict: %v \n", requestsDict)
224211
// fmt.Printf("swapRequestsCount: %v \n", swapRequestsCount)
225212

226-
return &IBPortContractState {
213+
return &PortContractState {
227214
NebulaAddress: nebulaAddress,
228215
TokenBinary: tokenBinaryAddress,
229216
TokenMint: tokenMint,

0 commit comments

Comments
 (0)