1
- using System . Globalization ;
2
- using System . Numerics ;
1
+ using System ;
2
+ using System . Collections . Generic ;
3
+ using System . Threading ;
4
+ using System . Threading . Tasks ;
3
5
using Reddio . Api . V1 . Rest ;
4
6
using Reddio . Crypto ;
5
7
6
- namespace Reddio . Api . V1 ;
7
-
8
- public class ReddioClient : IReddioClient
8
+ namespace Reddio . Api . V1
9
9
{
10
- private IReddioRestClient _restClient ;
11
-
12
- public ReddioClient ( IReddioRestClient restClient )
10
+ public class ReddioClient : IReddioClient
13
11
{
14
- _restClient = restClient ;
15
- }
12
+ private IReddioRestClient _restClient ;
16
13
17
- public async Task < ResponseWrapper < TransferResponse > > Transfer ( string starkKey , string privateKey , string amount ,
18
- string contractAddress , string tokenId , string type ,
19
- string receiver , long expirationTimeStamp = 4194303 )
20
- {
21
- var assetId = await GetAssetId ( contractAddress , tokenId , type ) ;
22
- var ( senderVaultId , receiverVaultId ) = await GetVaultIds ( assetId , starkKey , receiver ) ;
14
+ public ReddioClient ( IReddioRestClient restClient )
15
+ {
16
+ _restClient = restClient ;
17
+ }
23
18
24
- var getNonceResponse = await _restClient . GetNonce ( new GetNonceMessage ( starkKey ) ) ;
25
- var nonce = getNonceResponse . Data . Nonce ;
19
+ public async Task < ResponseWrapper < TransferResponse > > Transfer ( string starkKey , string privateKey , string amount ,
20
+ string contractAddress , string tokenId , string type ,
21
+ string receiver , long expirationTimeStamp = 4194303 )
22
+ {
23
+ var assetId = await GetAssetId ( contractAddress , tokenId , type ) ;
24
+ var ( senderVaultId , receiverVaultId ) = await GetVaultIds ( assetId , starkKey , receiver ) ;
26
25
27
- var signature = SignTransferMessage ( privateKey ,
28
- amount ,
29
- nonce ,
30
- senderVaultId ,
31
- assetId ,
32
- receiverVaultId ,
33
- receiver ,
34
- expirationTimeStamp ) ;
26
+ var getNonceResponse = await _restClient . GetNonce ( new GetNonceMessage ( starkKey ) ) ;
27
+ var nonce = getNonceResponse . Data . Nonce ;
35
28
36
- var transferMessage = new TransferMessage (
37
- assetId ,
38
- starkKey ,
39
- amount ,
40
- nonce ,
41
- senderVaultId ,
42
- receiver ,
43
- receiverVaultId ,
44
- expirationTimeStamp ,
45
- signature
46
- ) ;
47
- return await _restClient . Transfer ( transferMessage ) ;
48
- }
29
+ var signature = SignTransferMessage ( privateKey ,
30
+ amount ,
31
+ nonce ,
32
+ senderVaultId ,
33
+ assetId ,
34
+ receiverVaultId ,
35
+ receiver ,
36
+ expirationTimeStamp ) ;
37
+
38
+ var transferMessage = new TransferMessage (
39
+ assetId ,
40
+ starkKey ,
41
+ amount ,
42
+ nonce ,
43
+ senderVaultId ,
44
+ receiver ,
45
+ receiverVaultId ,
46
+ expirationTimeStamp ,
47
+ signature
48
+ ) ;
49
+ return await _restClient . Transfer ( transferMessage ) ;
50
+ }
49
51
50
- public async Task < ResponseWrapper < GetRecordResponse > > GetRecord ( string starkKey , long sequenceId )
51
- {
52
- return await this . _restClient . GetRecord ( new GetRecordMessage ( starkKey , sequenceId ) ) ;
53
- }
52
+ public async Task < ResponseWrapper < GetRecordResponse > > GetRecord ( string starkKey , long sequenceId )
53
+ {
54
+ return await this . _restClient . GetRecord ( new GetRecordMessage ( starkKey , sequenceId ) ) ;
55
+ }
54
56
55
- public async Task < ResponseWrapper < GetRecordResponse > > WaitingTransferGetApproved ( string starkKey , long sequenceId )
56
- {
57
- var interval = TimeSpan . FromSeconds ( 5 ) ;
58
- var timeout = TimeSpan . FromMinutes ( 1 ) ;
59
- CancellationTokenSource source = new CancellationTokenSource ( timeout ) ;
60
- return await WaitingTransferGetApproved ( starkKey , sequenceId , interval , source . Token ) ;
61
- }
57
+ public async Task < ResponseWrapper < GetRecordResponse > > WaitingTransferGetApproved ( string starkKey ,
58
+ long sequenceId )
59
+ {
60
+ var interval = TimeSpan . FromSeconds ( 5 ) ;
61
+ var timeout = TimeSpan . FromMinutes ( 1 ) ;
62
+ CancellationTokenSource source = new CancellationTokenSource ( timeout ) ;
63
+ return await WaitingTransferGetApproved ( starkKey , sequenceId , interval , source . Token ) ;
64
+ }
62
65
63
- public async Task < ResponseWrapper < GetRecordResponse > > WaitingTransferGetApproved ( string starkKey , long sequenceId ,
64
- TimeSpan interval ,
65
- CancellationToken cancellationToken )
66
- {
67
- var getRecordMessage = new GetRecordMessage ( starkKey , sequenceId ) ;
68
- for ( ; ; )
66
+ public async Task < ResponseWrapper < GetRecordResponse > > WaitingTransferGetApproved ( string starkKey ,
67
+ long sequenceId ,
68
+ TimeSpan interval ,
69
+ CancellationToken cancellationToken )
69
70
{
70
- cancellationToken . ThrowIfCancellationRequested ( ) ;
71
- var response = await _restClient . GetRecord ( getRecordMessage ) ;
72
- if ( SequenceRecord . SequenceStatusAccepted == response . Data [ 0 ] . Status )
71
+ var getRecordMessage = new GetRecordMessage ( starkKey , sequenceId ) ;
72
+ for ( ; ; )
73
73
{
74
- return response ;
74
+ cancellationToken . ThrowIfCancellationRequested ( ) ;
75
+ var response = await _restClient . GetRecord ( getRecordMessage ) ;
76
+ if ( SequenceRecord . SequenceStatusAccepted == response . Data [ 0 ] . Status )
77
+ {
78
+ return response ;
79
+ }
80
+
81
+ await Task . Delay ( interval , cancellationToken ) ;
75
82
}
76
-
77
- await Task . Delay ( interval , cancellationToken ) ;
78
83
}
79
- }
80
84
81
- internal async Task < string > GetAssetId ( string contractAddress , string tokenId , string type )
82
- {
83
- var getAssetIdMessage = new GetAssetIdMessage ( contractAddress , type , tokenId ) ;
84
- var getAssetIdResponse = await _restClient . GetAssetId ( getAssetIdMessage ) ;
85
- var assetId = getAssetIdResponse . Data . AssetId ;
86
- return assetId ;
87
- }
85
+ internal async Task < string > GetAssetId ( string contractAddress , string tokenId , string type )
86
+ {
87
+ var getAssetIdMessage = new GetAssetIdMessage ( contractAddress , type , tokenId ) ;
88
+ var getAssetIdResponse = await _restClient . GetAssetId ( getAssetIdMessage ) ;
89
+ var assetId = getAssetIdResponse . Data . AssetId ;
90
+ return assetId ;
91
+ }
88
92
89
- internal Signature SignTransferMessage (
90
- String privateKey ,
91
- String amount ,
92
- Int64 nonce ,
93
- String senderVaultId ,
94
- String token ,
95
- String receiverVaultId ,
96
- String receiverPublicKey ,
97
- Int64 expirationTimeStamp = 4194303
98
- )
99
- {
100
- var ( r , s ) = CryptoService . Sign (
101
- CryptoService . ParsePositive ( privateKey . ToLower ( ) . Replace ( "0x" , "" ) ) ,
102
- CryptoService . GetTransferMsgHash (
103
- Int64 . Parse ( amount ) ,
104
- nonce ,
105
- Int64 . Parse ( senderVaultId ) ,
106
- CryptoService . ParsePositive ( token . ToLower ( ) . Replace ( "0x" , "" ) ) ,
107
- Int64 . Parse ( receiverVaultId ) ,
108
- CryptoService . ParsePositive ( receiverPublicKey . ToLower ( ) . Replace ( "0x" , "" ) ) ,
109
- expirationTimeStamp ,
93
+ internal Signature SignTransferMessage (
94
+ string privateKey ,
95
+ string amount ,
96
+ Int64 nonce ,
97
+ string senderVaultId ,
98
+ string token ,
99
+ string receiverVaultId ,
100
+ string receiverPublicKey ,
101
+ Int64 expirationTimeStamp = 4194303
102
+ )
103
+ {
104
+ var ( r , s ) = CryptoService . Sign (
105
+ CryptoService . ParsePositive ( privateKey . ToLower ( ) . Replace ( "0x" , "" ) ) ,
106
+ CryptoService . GetTransferMsgHash (
107
+ Int64 . Parse ( amount ) ,
108
+ nonce ,
109
+ Int64 . Parse ( senderVaultId ) ,
110
+ CryptoService . ParsePositive ( token . ToLower ( ) . Replace ( "0x" , "" ) ) ,
111
+ Int64 . Parse ( receiverVaultId ) ,
112
+ CryptoService . ParsePositive ( receiverPublicKey . ToLower ( ) . Replace ( "0x" , "" ) ) ,
113
+ expirationTimeStamp ,
114
+ null
115
+ ) ,
110
116
null
111
- ) ,
112
- null
113
- ) ;
114
- var result = new Signature ( $ "0x{ r . ToString ( "x" ) } ", $ "0x{ s . ToString ( "x" ) } ") ;
115
- return result ;
116
- }
117
+ ) ;
118
+ var result = new Signature ( $ "0x{ r . ToString ( "x" ) } ", $ "0x{ s . ToString ( "x" ) } ") ;
119
+ return result ;
120
+ }
117
121
118
- internal async Task < ( String , String ) > GetVaultIds ( string assetId , string starkKey , string receiver )
119
- {
120
- var getVaultIdResponse =
121
- await _restClient . GetVaultId ( new GetVaultIdMessage ( assetId , new List < string > { starkKey , receiver } ) ) ;
122
- var senderVaultId = getVaultIdResponse . Data . VaultIds [ 0 ] ;
123
- var receiverVaultId = getVaultIdResponse . Data . VaultIds [ 1 ] ;
124
- return ( senderVaultId , receiverVaultId ) ;
125
- }
122
+ internal async Task < ( string , string ) > GetVaultIds ( string assetId , string starkKey , string receiver )
123
+ {
124
+ var getVaultIdResponse =
125
+ await _restClient . GetVaultId ( new GetVaultIdMessage ( assetId , new List < string > { starkKey , receiver } ) ) ;
126
+ var senderVaultId = getVaultIdResponse . Data . VaultIds [ 0 ] ;
127
+ var receiverVaultId = getVaultIdResponse . Data . VaultIds [ 1 ] ;
128
+ return ( senderVaultId , receiverVaultId ) ;
129
+ }
126
130
127
- public static ReddioClient Mainnet ( )
128
- {
129
- return new ReddioClient ( ReddioRestClient . Mainnet ( ) ) ;
130
- }
131
+ public static ReddioClient Mainnet ( )
132
+ {
133
+ return new ReddioClient ( ReddioRestClient . Mainnet ( ) ) ;
134
+ }
131
135
132
- public static ReddioClient Testnet ( )
133
- {
134
- return new ReddioClient ( ReddioRestClient . Testnet ( ) ) ;
136
+ public static ReddioClient Testnet ( )
137
+ {
138
+ return new ReddioClient ( ReddioRestClient . Testnet ( ) ) ;
139
+ }
135
140
}
136
141
}
0 commit comments