@@ -34,35 +34,36 @@ rust::String address_to_hex_string(::std::array<::std::uint8_t, 20> bytes) {
34
34
}
35
35
36
36
// if session already exists, restore session
37
- rust::Box<WalletconnectClient > make_new_client (std::string filename) {
37
+ rust::Box<Walletconnect2Client > make_new_client (std::string filename) {
38
38
39
39
std::ifstream file (filename.c_str ());
40
40
if (file.is_open ()) {
41
41
std::string sessioninfostring ((std::istreambuf_iterator<char >(file)),
42
42
std::istreambuf_iterator<char >());
43
- rust::Box<WalletconnectClient > client =
44
- walletconnect_restore_client (sessioninfostring);
43
+ rust::Box<Walletconnect2Client > client =
44
+ walletconnect2_restore_client (sessioninfostring);
45
45
return client;
46
46
} else {
47
- rust::Box<WalletconnectClient> client = walletconnect_new_client (
48
- " Defi WalletConnect example." , " http://localhost:8080/" ,
49
- rust::Vec<rust::String>(), " Defi WalletConnect Web3 Example" ,
50
- 338 ); // ChainId of Cronos Testnet
47
+ std::string projectid = std::getenv (" NEXT_PUBLIC_PROJECT_ID" )
48
+ ? std::getenv (" NEXT_PUBLIC_PROJECT_ID" )
49
+ : " " ;
50
+ // assert projectid not ""
51
+ assert (projectid != " " );
52
+
53
+ rust::Box<Walletconnect2Client> client = walletconnect2_client_new (
54
+ " wss://relay.walletconnect.org" , projectid,
55
+ " {\" eip155\" :{\" methods\" :[\" eth_sendTransaction\" ,\" eth_"
56
+ " signTransaction\" ,\" eth_sign\" ,\" personal_sign\" ,\" eth_"
57
+ " signTypedData\" ],\" chains\" :[\" eip155:338\" ],\" events\" :["
58
+ " \" chainChanged\" ,\" accountsChanged\" ]}}" ,
59
+ " {\" description\" :\" Defi WalletConnect v2 "
60
+ " example.\" ,\" url\" :\" http://localhost:8080/"
61
+ " \" ,\" icons\" :[],\" name\" :\" Defi WalletConnect Web3 Example\" }" );
51
62
std::cout << " qrcode= " << client->get_connection_string () << std::endl;
52
63
53
64
return client;
54
65
}
55
66
}
56
-
57
- class UserWalletConnectCallback : public WalletConnectCallback {
58
- public:
59
- UserWalletConnectCallback () {}
60
- virtual ~UserWalletConnectCallback () {}
61
- void onConnected (const WalletConnectSessionInfo &sessioninfo) const ;
62
- void onDisconnected (const WalletConnectSessionInfo &sessioninfo) const ;
63
- void onConnecting (const WalletConnectSessionInfo &sessioninfo) const ;
64
- void onUpdated (const WalletConnectSessionInfo &sessioninfo) const ;
65
- };
66
67
void print_session (const WalletConnectSessionInfo &sessioninfo) {
67
68
std::cout << " connected: " << sessioninfo.connected << std::endl;
68
69
std::cout << " chain_id: " << sessioninfo.chain_id << std::endl;
@@ -78,50 +79,21 @@ void print_session(const WalletConnectSessionInfo &sessioninfo) {
78
79
std::cout << " handshake_topic: " << sessioninfo.handshake_topic
79
80
<< std::endl;
80
81
}
81
- void UserWalletConnectCallback::onConnected (
82
- const WalletConnectSessionInfo &sessioninfo) const {
83
- std::cout << " user c++ onConnected" << std::endl;
84
- print_session (sessioninfo);
85
- }
86
- void UserWalletConnectCallback::onDisconnected (
87
- const WalletConnectSessionInfo &sessioninfo) const {
88
- std::cout << " user c++ onDisconnected" << std::endl;
89
- print_session (sessioninfo);
90
- exit (0 );
91
- }
92
- void UserWalletConnectCallback::onConnecting (
93
- const WalletConnectSessionInfo &sessioninfo) const {
94
- std::cout << " user c++ onConnecting" << std::endl;
95
- print_session (sessioninfo);
96
- // !!! Important !!!
97
- // Comment out this line for actual test
98
- exit (0 );
99
- }
100
- void UserWalletConnectCallback::onUpdated (
101
- const WalletConnectSessionInfo &sessioninfo) const {
102
- std::cout << " user c++ onUpdated" << std::endl;
103
- print_session (sessioninfo);
104
- }
105
82
106
83
int main (int argc, char *argv[]) {
107
84
std::string filename = " sessioninfo.json" ;
108
85
try {
109
- rust::Box<WalletconnectClient> client = make_new_client (filename);
110
- WalletConnectCallback *usercallbackraw =
111
- new UserWalletConnectCallback ();
112
- std::unique_ptr<WalletConnectCallback> usercallback (usercallbackraw);
113
- client->setup_callback_blocking (std::move (usercallback));
86
+ rust::Box<Walletconnect2Client> client = make_new_client (filename);
114
87
115
88
// Print the QR code on terminal
116
89
rust::String uri = client->print_uri ();
117
90
118
91
// program is blocked here for waiting connecting
119
- WalletConnectEnsureSessionResult result =
120
- client->ensure_session_blocking ();
92
+ WalletConnect2EnsureSessionResult result =
93
+ client->ensure_session_blocking (60000 );
121
94
122
95
// once connected, program continues
123
- std::cout << " connected chain_id: " << result.chain_id << std::endl;
124
- assert (result.addresses .size () > 0 );
96
+ assert (result.eip155 .accounts .size () > 0 );
125
97
126
98
// get the connected session info as string and save it into a file
127
99
rust::String sessioninfo = client->save_client ();
@@ -138,11 +110,21 @@ int main(int argc, char *argv[]) {
138
110
// sign personal message
139
111
if (test_personal) {
140
112
/* message signing */
141
- rust::Vec<uint8_t > sig1 = client->sign_personal_blocking (
142
- " hello" , result.addresses [0 ].address );
113
+ ::std::uint64_t testchainid = result.eip155 .accounts [0 ].chain_id ;
114
+ ::std::array<::std::uint8_t , 20 > testaddress =
115
+ result.eip155 .accounts [0 ].address .address ;
116
+ std::cout << " chainid=" << testchainid << std::endl;
117
+ std::cout << " address="
118
+ << address_to_hex_string (testaddress).c_str ()
119
+ << std::endl;
120
+ rust::Vec<uint8_t > sig1 =
121
+ client->sign_personal_blocking (" hello" , testaddress);
143
122
std::cout << " signature=" << bytes_to_hex_string (sig1).c_str ()
144
123
<< std::endl;
145
124
std::cout << " signature length=" << sig1.size () << std::endl;
125
+ bool verifyresult =
126
+ client->verify_personal_blocking (" hello" , sig1, testaddress);
127
+ std::cout << " verify result=" << verifyresult << std::endl;
146
128
}
147
129
148
130
// send transaction
@@ -166,12 +148,13 @@ int main(int argc, char *argv[]) {
166
148
// info.to = "0x....";
167
149
info.to = rust::String (
168
150
std::string (" 0x" ) +
169
- address_to_hex_string (result.addresses [0 ].address ).c_str ());
151
+ address_to_hex_string (result.eip155 .accounts [0 ].address .address )
152
+ .c_str ());
170
153
info.value = " 1000000000000000000" ; // 1 TCRO
171
- info.common .chainid = result.chain_id ;
154
+ info.common .chainid = result.eip155 . accounts [ 0 ]. chain_id ;
172
155
rust::Vec<uint8_t > tx_hash =
173
156
client->send_eip155_transaction_blocking (
174
- info, result.addresses [0 ].address );
157
+ info, result.eip155 . accounts [0 ]. address .address );
175
158
176
159
std::cout << " transaction_hash="
177
160
<< bytes_to_hex_string (tx_hash).c_str () << std::endl;
@@ -205,7 +188,8 @@ int main(int argc, char *argv[]) {
205
188
assert (erc20.decimals () == 18 );
206
189
rust::String from_address = rust::String (
207
190
std::string (" 0x" ) +
208
- address_to_hex_string (result.addresses [0 ].address ).c_str ());
191
+ address_to_hex_string (result.eip155 .accounts [0 ].address .address )
192
+ .c_str ());
209
193
U256 erc20_balance = erc20.balance_of (from_address);
210
194
std::cout << " erc20 balance=" << erc20_balance.to_string ()
211
195
<< std::endl;
@@ -222,13 +206,14 @@ int main(int argc, char *argv[]) {
222
206
}
223
207
})" ;
224
208
225
- common.chainid = result.chain_id ;
209
+ common.chainid = result.eip155 . accounts [ 0 ]. chain_id ;
226
210
common.web3api_url =
227
211
" https://evm-dev-t3.cronos.org" ; // TODO unnessary for
228
212
// walletconnect
229
213
230
214
rust::Vec<uint8_t > tx_hash = client->send_contract_transaction (
231
- contract_action, common, result.addresses [0 ].address );
215
+ contract_action, common,
216
+ result.eip155 .accounts [0 ].address .address );
232
217
233
218
std::cout << " transaction_hash="
234
219
<< bytes_to_hex_string (tx_hash).c_str () << std::endl;
0 commit comments