Как я могу получить баланс токена Augur (REP) моей учетной записи через JSON-RPC?

Как проверить баланс контракта, например Augur (REP), на адресе с JSON-RPC? Кажется, не так много документации по этому поводу.

Не дубликат вопросов и ответов выше. Этот вопрос касается баланса токена REP для адреса, а не баланса ETH.
@BokkyPooBah Действительно, я прошу баланс токена REP.

Ответы (1)

Чтобы получить баланс токена REP через JSON-RPC, вам придется использовать eth_callметод. Дополнительные сведения об использовании eth_call.

А из augur-core/src/repContract.se функция balanceOf(...)определяется как:

def balanceOf(address: address):
    return(self.reporting[address]: uint256)

И это соответствует стандарту ERC: Token #20 , где balanceOf(...)функция должна иметь подпись:

function balanceOf(address _owner) constant returns (uint256 balance)

Чтобы найти сигнатуру функции в geth, я запускаю следующую команду:

> web3.sha3('balanceOf(address)').substring(0,10)
"0x70a08231"

Для примера мы будем использовать баланс токена REP для адреса 0xab11204cfeaccffa63c2d23aef2ea9accdb0a0d5 со следующим балансом:

введите описание изображения здесь

Теперь мне нужно использовать приведенную выше сигнатуру функции с заполненным слева нулем представлением адреса, который будет передан balanceOf(...)функции:

0x70a08231000000000000000000000000ab11204cfeaccffa63c2d23aef2ea9accdb0a0d5

Из etherscan.io/token/REP адрес контракта REP — 0x48c80F1f4D53D5951e5D5438B54Cba84f29F32a5.

Я выполнил следующую команду JSON-RPC для своего узла Parity (для параметра gethможно не --headerуказывать):

curl localhost:8545 -X POST --header 'Content-type: application/json' --data '{"jsonrpc":"2.0", "method":"eth_call", "params":[{"to": "0x48c80F1f4D53D5951e5D5438B54Cba84f29F32a5", "data": "0x70a08231000000000000000000000000ab11204cfeaccffa63c2d23aef2ea9accdb0a0d5"}], "id":1}'

Результат команды выше:

{"jsonrpc":"2.0","result":"0x000000000000000000000000000000000000000000010843f6b148a2ec22c604","id":1}

И чтобы подтвердить правильность результатов, я выполнил следующую команду geth:

> new BigNumber("000000000000000000000000000000000000000000010843f6b148a2ec22c604", 16)/1e18
1247958.4593995938

Вам нужно будет преобразовать шестнадцатеричный результат в число в вашем приложении.


Обновление от 18 октября 2016 г.

Как описано в ошибке RPC «недопустимое или отсутствующее значение для параметров» при вызове функций void константы контракта , возможно , вам придется добавить параметр блока в paramsсписок. Ваша команда с параметром блока будет:

curl localhost:8545 -X POST --header 'Content-type: application/json' --data '{"jsonrpc":"2.0", "method":"eth_call", "params":[{"to": "0x48c80F1f4D53D5951e5D5438B54Cba84f29F32a5", "data": "0x70a08231000000000000000000000000ab11204cfeaccffa63c2d23aef2ea9accdb0a0d5"}, "latest"], "id":1}'

Ссылка Параметр блока по умолчанию и eth_call.

eth_callбез блочного параметра работало раньше, но теперь кажется обязательным.

Отличный ответ! Я проверю, работает ли это завтра, и когда это произойдет, я приму ваш ответ.
Как обычно, отличный пост от Bokky. Результат, возвращенный на сегодняшний день, отличается, но я думаю, это потому, что владелец этой учетной записи должен был продать, передать или купить больше токенов.