Проект

Общее

Профиль

Exampls » История » Версия 4

Mariyam Seidaliyeva, 05.02.2026 12:50

1 1 Mariyam Seidaliyeva
h1. Примеры
2
3 2 Mariyam Seidaliyeva
h3. Python
4 1 Mariyam Seidaliyeva
5 3 Mariyam Seidaliyeva
<pre><code class="python">
6 1 Mariyam Seidaliyeva
from eth_keys import keys
7
import requests
8
msg = b'{}'
9
pk = keys.PrivateKey(b'\x01' * 32)
10
signature = pk.sign_msg(msg)
11
addr = pk.public_key.to_checksum_address()
12
verify = signature.verify_msg(msg, pk.public_key)
13
re_addr = signature.recover_public_key_from_msg(msg).to_checksum_address()
14
print(str(addr) + ' = ' + str(re_addr) + ' = ' + str(verify))
15
16
URL = "https://my.h2k.me/ec/ex"
17
headers = {
18
        'x-app-ec-from': addr,
19
        'x-app-ec-sign-r': hex(signature.r),
20
        'x-app-ec-sign-s': hex(signature.s),
21
        'x-app-ec-sign-v': hex(signature.v),
22
    }
23
print(headers)
24
r = requests.get(url=URL, headers=headers)
25
print(r.content)
26
data = r.json()
27
print(data)
28 3 Mariyam Seidaliyeva
</pre></code>
29 1 Mariyam Seidaliyeva
30 3 Mariyam Seidaliyeva
h3. NodeJS + Express
31 1 Mariyam Seidaliyeva
32 4 Mariyam Seidaliyeva
В задаче #3397 вложен zip-архив с готовыми скриптами для теста API-методов.
33
Ниже показаны примеры POST-запроса создания кошелька и GET-запроса получения списка кошельков.
34
35 3 Mariyam Seidaliyeva
*1. Создание кошелька*
36 1 Mariyam Seidaliyeva
37 3 Mariyam Seidaliyeva
В значения переменных создания аккаунта и первой компоненты подписи _'x-app-ec-from'_ можно использовать тестовые значения:
38 1 Mariyam Seidaliyeva
39 3 Mariyam Seidaliyeva
<pre><code class="javascript">
40
const account = '0xb7d9b51eda54d664366d74c1b1a4ed2ca9e1abed646732bfb83b141f22df3b39'    
41
const rFrom = '0xA285990a1Ce696d770d578Cf4473d80e0228DF95'
42
</code>
43
</pre>
44 1 Mariyam Seidaliyeva
45 3 Mariyam Seidaliyeva
<pre><code class="javascript">
46 1 Mariyam Seidaliyeva
47 3 Mariyam Seidaliyeva
import Web3 from 'web3';
48
import axios from 'axios';
49
50
// 1. Инициализация
51
const web3 = new Web3();
52
53
// 2. Создание аккаунта (можно заменить значением)
54
const account = web3.eth.accounts.create();
55
56
// 3. Тело запроса (ВАЖНО: именно это будет подписано)
57
const body = {
58
    slist: {
59
        min_signs: "2",
60
        "0": { type: "all", email: "e@mail.com" },
61
        "1": { type: "any", email: "e@mail.ru", sms: "+77777777777" },
62
        "2": { type: "all", ecaddress: "0xa75db3c448bb62e208e4babf500925427837e464" }
63 1 Mariyam Seidaliyeva
    },
64 3 Mariyam Seidaliyeva
    network: "5010",
65
    info: "Мой первый кошелёк"
66
};
67
68
// 4. Строка для подписи
69
const message = JSON.stringify(body);
70
71
// 5. Подпись
72
const sign = web3.eth.accounts.sign(message, account.privateKey);
73
74
// 6. Заголовки
75
const headers = {
76
    'Content-Type': 'application/json',
77
    'Accept': 'application/json',
78
79
    // компоненты подписи
80
    'x-app-ec-from': account.address,
81
    'x-app-ec-sign-r': sign.r,
82
    'x-app-ec-sign-s': sign.s,
83
    'x-app-ec-sign-v': sign.v
84
};
85
86
// 7. POST-запрос
87
const url = 'https://my.safina.pro/ece/newWallet';
88
89
(async () => {
90
    try {
91
        const response = await axios.post(url, message, { headers });
92
93
        console.log('API response:', response.data);
94
    } catch (err) {
95
        if (err.response) {
96
            console.error('API error:', err.response.status, err.response.data);
97
        } else {
98
            console.error('Request error:', err.message);
99
        }
100 1 Mariyam Seidaliyeva
    }
101 3 Mariyam Seidaliyeva
})();
102
</pre> </code>
103
104
*2. Получение списка кошельков*
105
106
* В значения переменных создания аккаунта и первой компоненты подписи _'x-app-ec-from'_ можно использовать тестовые значения:
107
<pre><code class="javascript">
108
const account = '0xb7d9b51eda54d664366d74c1b1a4ed2ca9e1abed646732bfb83b141f22df3b39'    
109
const rFrom = '0xA285990a1Ce696d770d578Cf4473d80e0228DF95'
110
</code>
111 1 Mariyam Seidaliyeva
</pre>
112 3 Mariyam Seidaliyeva
113
* GET-запрос подписывается _const message = '{}';_
114
115
<pre><code class="javascript">
116
import Web3 from 'web3';
117
import axios from 'axios';
118
119
// 1. Инициализация
120
const web3 = new Web3();
121
122
// 2. Тестовый аккаунт
123
const account = web3.eth.accounts.create();
124
125
// 3. Текст для подписи
126
const message = '{}';
127
128
// 4. Подпись
129
const sign = web3.eth.accounts.sign(message, account.privateKey);
130
131
// 5. Заголовки
132
const headers = {
133
    'Accept': 'application/json',
134
135
    // компоненты подписи
136
    'x-app-ec-from': account.address,
137
    'x-app-ec-sign-r': sign.r,
138
    'x-app-ec-sign-s': sign.s,
139
    'x-app-ec-sign-v': sign.v
140
};
141
142
// 6. GET-запрос
143
const url = 'https://my.safina.pro/ece/wallets';
144
145
(async () => {
146
    try {
147
        const response = await axios.get(url, { headers });
148
149
        console.log('API response:', response.data);
150
    } catch (err) {
151
        if (err.response) {
152
            console.error('API error:', err.response.status, err.response.data);
153
        } else {
154
            console.error('Request error:', err.message);
155
        }
156
    }
157
})();
158
159
</code></pre>