Bitcoin Forum
April 24, 2024, 11:50:13 PM *
News: Latest Bitcoin Core release: 27.0 [Torrent]
 
   Home   Help Search Login Register More  
Pages: [1]
  Print  
Author Topic: Работа с ETH и токенами ERC20  (Read 142 times)
zuart (OP)
Newbie
*
Offline Offline

Activity: 4
Merit: 0


View Profile
July 22, 2018, 12:37:09 PM
 #1

Приветствую сообщество.
Тут решили тотализатор небольшой накатать для токенов ETH/ERC20, уперлись в стенку - тупняк какой-то...
 

Суть задачи:
    вести один основной кошелек со всеми поступающими средствами
    пользователь при регистрации получает персональный адрес для токенов (приватные ключи фиксируются в БД, юзер их не получает)
    все, что юзеры переводят собирается на основном кошельке (балансы фиксируются в БД и все операции с балансом происходят в БД)
    вывод в случае необходимости выполняется с основного адреса


Пытаемся разобраться с принципами работы с нодой ETH через WEB3 и уперлись в пару моментов:
    насколько поняли суть сети, можно сделать перевод с адреса1 на адрес2, но так, чтобы "газ" снимать именно с адреса2
    с токенами ERC20 (не ETH) можно тоже делать так же, но через контракты, которыми токены и создавались
 

И вот тут полный затуп - как это сделать с помощью WEB3JS, крайне нужны работающие примеры кода для ETH и любого ERC20-токена, которые реализуют логику "перевод токенов с адреса-1 на адрес-2 и оплатой транзакции газом с адреса-2".

Будем крайне признательны за подсказку.
The block chain is the main innovation of Bitcoin. It is the first distributed timestamping system.
Advertised sites are not endorsed by the Bitcoin Forum. They may be unsafe, untrustworthy, or illegal in your jurisdiction.
1714002613
Hero Member
*
Offline Offline

Posts: 1714002613

View Profile Personal Message (Offline)

Ignore
1714002613
Reply with quote  #2

1714002613
Report to moderator
Snasey
Jr. Member
*
Offline Offline

Activity: 87
Merit: 1


View Profile
July 23, 2018, 01:32:59 PM
 #2

На мой взгляд это одна из ключевых болей эфира, в связи с которой его не активно юзает реальный бизнес.
Сделать так, что бы комиссию в газе оплатил кошелек2, в то время как отправитель кошелек1 - нельзя. (совсем)

Я делал для заказчика довольно похожий проект, мы решали это костылем: при запросе перевода на сайте, бэкенд дергал web3 и переводил с админского кошелька эфир ровно на одну транзакцию на кошелек1, далее эта транзакция уже совершалась с данного кошелька.
zuart (OP)
Newbie
*
Offline Offline

Activity: 4
Merit: 0


View Profile
July 24, 2018, 08:37:38 AM
 #3

На мой взгляд это одна из ключевых болей эфира, в связи с которой его не активно юзает реальный бизнес.
Сделать так, что бы комиссию в газе оплатил кошелек2, в то время как отправитель кошелек1 - нельзя. (совсем)

Я делал для заказчика довольно похожий проект, мы решали это костылем: при запросе перевода на сайте, бэкенд дергал web3 и переводил с админского кошелька эфир ровно на одну транзакцию на кошелек1, далее эта транзакция уже совершалась с данного кошелька.

Вот как =( видимо, мы не верно поняли возможности сети. Жаль, я бы даже сказал очень, т.к. если для перевода токенов с пользовательского кошелька на основной нужно сначала на это пользовательский кошелек перекидывать eth для оплаты газа - не очень радостная перспектива.

Можете тогда пнуть хотя бы в рабочий пример перевода ETH с одного аккаунта на другой, ибо те, что мы пробовали, ни один не сработал через WEB3 JS
zuart (OP)
Newbie
*
Offline Offline

Activity: 4
Merit: 0


View Profile
July 24, 2018, 01:55:07 PM
 #4

Попытались несколькими способами реализовать перевод ETH - все безуспешно, все способы, которые пробовали, возвращают хеш транзакции, но дальше дело не идет, в сеть транза не выходит, баланс не меняется. Единственный способ, который хоть что-то еще выдает, публикую ниже с подробными вставками данных отладки:

Code:
var desc = '0xed32e0fd016810B7d3606e1Ae163B58266c544B0';
var from = '0x6938298963357122F72592ADD77109767c7d67F0';
var key = '9cb.............2a84';
var val = '0.01';

var tx = {
to: desc,
from: from,
gasLimit: 200000,
nonce: wsp.now(), // микротайм
value: w3.utils.toWei(val, 'ether'),
data: '0x00'
};

// tx Object {
// data "0x00"
// from "0x6938298963357122F72592ADD77109767c7d67F0"
// gasLimit 200000
// gasPrice 2200000000
// nonce 1532438682638
// to "0xed32e0fd016810B7d3606e1Ae163B58266c544B0"
// value "10000000000000000"
// }


w3.eth.getBalance(tx.from).then((balance) => {
logger.log('Balance: ', balance);
});

// balance "79000000000000000"


w3.eth.accounts.signTransaction(tx, key).then((hash) => {

// tx Object {
// chainId "0x1"
// data "0x00"
// from "0x6938298963357122f72592add77109767c7d67f0"
// gas "0x30d40"
// gasLimit 200000
// gasPrice "0xa3e9ab80"
// nonce "0x164cc7fb39b"
// to "0xed32e0fd016810b7d3606e1ae163b58266c544b0"
// value "0x2386f26fc10000"
// }
// hash Object {
// messageHash "0x5d113c4a6...44d8efb8aacb90"
// r "0x97adcecb7...ed3b55b7b0f216"
// rawTransaction "0xf87186016...de14043fc15934"
// s "0x7e501c806...de14043fc15934"
// v "0x26"
// }


return w3.eth.sendSignedTransaction(hash.rawTransaction).then((receipt) => {
return receipt;
}, (error) => {
// Error: Returned error: insufficient funds for gas * price + value

console.log(error);
return error;
});
}, (error) => {
console.log(error);
return error;
});

Абсолютно непонятно, с чего такая ошибка, тут банальная математика:

Code:
10000000000000000 - вывод
  440000000000000 = 200000 * 2200000000 - лимит * прайс
-----------------

79000000000000000 - баланс
10440000000000000 - всего нужно
-----------------

68560000000000000 - остаток
Pages: [1]
  Print  
 
Jump to:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.19 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!